feat(owen-ext): Owen extension substrate — Owen.Build host + Owen.TypedBuilder (OX-01) - #397
Merged
Merged
Conversation
…8cb8cc) Registers the Owen extension substrate slice before any code: kill-first findings (owen check is already the generic pipeline; explicit generated inputs reach the extractor; incremental generator matches the golden while an MSBuild pre-compile step is absent from design-time builds; a tool package cannot be PackageReference'd, NU1212), the Owen.Build host + Owen.TypedBuilder extension packages, the descriptor contract and its OWENB codes, platforms, isolated-consumer acceptance A-H, mutations M1-M7 and the verdict. The Snipper audit (read-only, PhysShell/snipper@43b395a) records COPY/ADAPT/REJECT per mechanism. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ZFvhLx1fM9Gerg4dKsZcL
Implements docs/notes/owen-extension-alpha-preregistration.md (with its Amendment 1, committed here before any official run): - Owen.Build: the generic build host package. Packs the OwnSharp.Cli publish closure (the owen program, bundled extractor, rust-core/<platform>) minus the Python core, plus build/buildTransitive targets that run 'owen build-check' after every build. - owen build-check: validates extension descriptors (OWENB001-005), writes obj/owen/extensions.json, scans the project plus the declared generators' output, runs the Rust core once with --format msbuild, and turns extractor/core refusals into navigable OWENB010/011 errors. It names no extension. - Owen.TypedBuilder: the Typed Builder as a Roslyn incremental generator over the SAME model/renderer as the CLI (TypedBuilderCore.cs, shared), plus the extension descriptor; output = '#nullable enable' + the golden. - OwenRustCore.props: the one platform inventory, used by Owen.Cli and Owen.Build. - spec/OwenExtension.md + schema; scripts/owen_extension_gate.py (isolated consumer A-H, mutations M1-M7) and the Linux/Windows CI job; a synthetic second extension under tests/owen-extensions. No change under ownlang/, rust/, the extractor, OwnIR spec, T0 or calibration. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ZFvhLx1fM9Gerg4dKsZcL
On windows-latest the checkout is on D: and the temp directory on C:, and os.path.commonpath raises on paths from two drives. Two drives means the consumer is certainly outside the checkout. Gate mechanics only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ZFvhLx1fM9Gerg4dKsZcL
…alpha readiness - owen-diagnostics-model.md (P8): the model already exists (own_bridge::Finding -> render_finding/build_sarif); no new layer. - owen-extension-ide-feasibility.md (P9/P10): E1 generic VSIX host NOT EXECUTED here (no Windows/VS), specified with its two blockers; E2 native Roslyn analyzer REJECT, measured on Linux (shadow copy defeats native resolution; only an explicit path via reflection-reached NativeLibrary works, .NET hosts only; the extractor cannot run inside an analyzer). - experiments/owen-e2-native-analyzer: the E2 spike (outside shipping and CI). - alpha-readiness.md: the PackageReference install path. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ZFvhLx1fM9Gerg4dKsZcL
Official runs (local clean worktree 55/55; server CI Linux and Windows 55/55 each on 48c71e6, the first Windows run failing on a gate path bug fixed in 89bdb86), counts, mutations, kept TB-MVP guarantees, foundation diff, Owen.Cli payload, Snipper/diagnostics/IDE summaries and findings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ZFvhLx1fM9Gerg4dKsZcL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что и зачем
OX-01: Typed Builder превращается из сэмпла в монорепе в extension #1 для Owen Alpha на общем, generic extension substrate.
После одной
PackageReference, без Python, Rust toolchain, глобальногоowenи checkout'а:draft.Approve(...)→CS1061;draft.Submit(now); draft.Submit(now);→…\C8_stale_draft.cs(18): warning|error OWN002: …прямо вdotnet buildи в Error List. По умолчанию это warning, сOwenSeverity=error— error;obj/owen/extensions.jsonперечисляет активные extensions.Что добавлено
Owen.BuildOwen.TypedBuilderOwen.TestExtensionOwen.Buildзапакован из того жеowen(publish-closureOwnSharp.Cli): bundled extractor,rust-core/<platform>/own-cli, без Python-ядра. Плюсbuild/иbuildTransitive/targets.PackageReference(NU1212, проверено), а engine должен быть один на все extensions.owen build-check— новая подкоманда того жеowen:OWENB001–005);--format msbuild;OWENB010иOWENB011.TypedBuilderCore.cs, что и CLI. Вывод =#nullable enable+ golden, байт-в-байт.OwenRustCore.props— единый список платформ дляOwen.CliиOwen.Build.spec/OwenExtension.md+ JSON schema.Доставка генератора: вариант A (incremental generator). Выбран по замеру: вариант B (MSBuild pre-compile) отсутствует в design-time build, на котором работает IntelliSense.
Отчёты и исследования
docs/notes/owen-extension-snipper-salvage.md.own_bridge::Finding):docs/notes/owen-diagnostics-model.md.docs/notes/owen-extension-ide-feasibility.md:experiments/, вне shipping и CI.Preregistration (до кода):
docs/notes/owen-extension-alpha-preregistration.md, включая Amendment 1, закоммиченный до официального прогона. Отчёт и вердикт:docs/notes/owen-extension-alpha-report.md—GO_OWEN_EXTENSION_ALPHA.Фундамент не тронут.
git diff 88cb8cc3..HEAD -- ownlang rust spec/OwnIR.md spec/Bridge.md spec/ownir.schema.json frontend/roslyn/OwnSharp.Extractor docs/evidence/calibration scripts/perf_baseline.pyпуст.Тип изменения
Как проверено
python tests/run_tests.py. Локально падают два stage-1 контроля на owen-поверхности, только когда лаунчер собран; лаунчер с базового88cb8cc3падает так же. Это существующее поведение, на сервере они зелёные.ruff check .,mypy,cargo fmt/clippy/testtyped_builder_gate.py --rust,protocol_gate.py --rust,heap_effects_gate.py— 0 failuresscripts/owen_extension_gate.py— изолированный consumer вне checkout. На PATH толькоdotnetи системный shell;python,cargo,rustc,owenотсутствуют:48c71e6: 36/36.Owen.Cliпротив базы: тот же список файлов, все не-сборочные файлы байт-в-байт.Связанные issue
Refs #391 (TB-MVP-01). Ограничения, которые этот PR не трогает: #392, #393, #394, #395, #396.
Чеклист
feat:,fix:,docs:…)🤖 Generated with Claude Code
https://claude.ai/code/session_011ZFvhLx1fM9Gerg4dKsZcL
Generated by Claude Code