Repository documentation
Active work
This is the durable, human-readable resumption queue. Detailed designs remain in their
linked roadmap documents. Follow
skills/agent/record-user-directed-work/SKILL.md before implementing substantive user
direction. Check an item only when its evidence is
recorded; Git preserves prior states.
Current development release: 1.4.0. The latest published release is 1.3.0;
1.3.1 is a separately governed patch program with explicit goals in
release-goals.json. RELEASE-INTEGRATION-004
and the 1.3 integration plan are retained as 1.3.0 history.
Existing unchecked acceptance remains open; evidence from an older release does not
establish readiness for either the patch line or 1.4.0.
Maintainer approvals, 2026-09-13: ADR 0011 is accepted for 1.1, including
opt-in literate-markdown@2 domain metadata and typed acceptance while preserving
@1. The Rust regression boundary in the reviewed
_build/rs-dev/_build/rust-proof/REVIEW.md is accepted for promotion: one public
checked_sum(i64, i64) -> Option<i64>, None on signed overflow, no I/O/state,
and all Cargo targets required. Live release gates for 0.8.4 and remaining 1.1
qualification are authorized with the configured coding CLI/model, including
generation, compilation and execution in test workspaces, installed-project tests,
sample rebuilds and live receipts. These approvals do not authorize new services
or accounts, establish passing qualification, or acknowledge source retirement.
Historical release context
Break-glass (2026-08-28, not durable SemVer advice): 0.8.0 is still a
minor number because no 1.0.0 has shipped and the work has lived on minors
and patches. For this cut only, treat every remaining open [ ] and [~]
queue item on main as 0.8.0 in-scope including breaking changes, as if
this were the first major. Per-item historical Release target: lines that
name 0.3.1, 0.4.1, after 0.8.0, or not 0.8.0 product are superseded
until v0.8.0 is tagged. Do not copy this into release-project or
docs/architecture/project-releases.md. RELEASE-013
stays a 0.7.3 patch on release/0.7.x; do not merge that line into main.
Obsolete land-as-is artifacts (TEST-CACHE-001 WIP c0439340, older-line
backport worktrees) stay obsolete. There is no framework rule against IDEs or
complete applications; IDE-001
withdrew that prohibition.
0.10.0 headline: operator adoption. See
ADOPTION-001
and the operator adoption program. v0.9.0 is
tagged. STATUS-001, ONBOARD-001, GOLDEN-PATH-001, and BROWNFIELD-STATE-001
are eligible on this line. QUEUE-HYGIENE-001
is closed.
Post-0.9.0 operator adoption
[x] ADOPTION-001 — Make operator adoption the post-0.9.0 product headline
- Priority: P0 (0.10.0 headline)
- Release target: 0.10.0
- Owner: root onboarding, CLI operator surface, and convert authority metadata
- Detailed roadmap: Operator adoption program
- Direction: After 0.9.0 is tagged, spend the next numbered line on being used: status, onboard create/adopt, a tested first hour from a wheel, visible convert stages, and a readable queue.
- Conclusion: Record a version-free operator-adoption program.
STATUS/ONBOARD/GOLDEN/BROWNFIELD wait on published
v0.9.0. QUEUE-HYGIENE may proceed in parallel. Do not absorb this program into RELEASE-0.9-CUT-001. No second planner, daemon, or IDE. - Depends on: none
- Next action: Complete. Preserve the installed-wheel create/adopt journey as a release gate and continue the release closure loop in RELEASE-CLOSURE-001.
- Implementation:
- Author docs/roadmap/operator-adoption.md with ordered delivery and an explicit out-of-0.9.0 gate
- Point PROJECT.md current work and docs/README.md at the program
- Keep child implementation of STATUS/ONBOARD/GOLDEN/BROWNFIELD gated on
published v0.9.0;
v0.9.0is tagged - Close this item only when every child item is closed with its evidence
- Evidence:
- Program file has the required lifecycle header and links this item
- PROJECT.md names operator adoption as current post-0.9.0 work
- Child IDs STATUS-001, ONBOARD-001, GOLDEN-PATH-001, BROWNFIELD-STATE-001, and QUEUE-HYGIENE-001 exist
- 0.9.0 release evidence does not depend on this program landing; children name RELEASE-0.9-CUT-001 as a prerequisite
- STATUS-001, BROWNFIELD-STATE-001, ONBOARD-001, GOLDEN-PATH-001, and QUEUE-HYGIENE-001 are closed; the exact clean 0.10.0 wheel proves both operator entry paths without importing the checkout
[x] QUEUE-HYGIENE-001 — Archive completed queue items and reconcile the open tracker
- Priority: P1 (maturity; closed)
- Release target: 0.10.0; did not block
v0.9.0 - Owner: docs/roadmap/active-work.md, PROJECT.md completeness, and GitHub tracker
- Detailed roadmap: Operator adoption program
- Direction: The resumption queue and PROJECT.md completeness lag the catalog, so agents cannot see current work. Open GitHub issues also lack matching queue items.
- Conclusion: Archive substantial closed programs to
docs/history/roadmap/, refresh PROJECT.md completeness against the current Flavor/Component inventory, and file a queue item for each open GitHub issue that has none. Do not delete Git history. This sweep is the planning-pass remainder from 2026-09-04. - Depends on: none
- Next action: Done. Completed programs are under
docs/history/roadmap/. PROJECT.md completeness matches HEAD. Open GitHub issues now cite queue items. Do not mass-delete checked items from this file. - Implementation:
- Move substantial completed programs out of
docs/roadmap/intodocs/history/roadmap/with historical lifecycle headers (release-branching, coverage-gap, 0.7.0 evidence, SCXML/DMN designs, LOW-DBC examples, SCXML trace spike) - Refresh PROJECT.md completeness so language/build/OS/package counts and current work match HEAD (8 language, 5 build, 3 OS, 8 package, 7 inheritable Components)
- Reconcile open GitHub issues without queue items, including #309, #308, #307, #306, #305, #301, #296, #295, #286, #283, #280, and #279
- Move substantial completed programs out of
- Evidence:
- PROJECT.md completeness lists the current inheritable Flavor/Component catalog rather than the stale v0.3.0 counts
- Every open GitHub issue cites a queue item: #309 STANDARD-REBIND-001, #308 UPSTREAM-ISSUE-FIRST-001, #307 APP-SETTINGS-001, #306 UPDATE-LOCAL-ROUTING-001, #305 CONVERT-PARITY-001, #301 INIT-CONVERT-FORCE-001, #295/#296 OBSERVE-HTML-001, #286 WORKER-GIT-CRED-001, #283 CONVERSION-UPDATE-VARIANT-001, #280 LIBRARY-ARTIFACT-001, #279 SUBMODULE-ORCH-001; #251 remains RELEASE-017/GOLDEN-PATH-001; #83–#86 remain CI-SHARD-001/CI-IMPACT-001
- Active-work front matter names the 0.10.0 operator-adoption headline
[x] STATUS-001 — Expose operator status and doctor as the repeat-use front door
- Priority: P0 (0.10.0 operator front door)
- Release target: 0.10.0
- Owner: litai CLI operator surface over existing init, convert, lock, receipt, and host-path services
- Detailed roadmap: Operator adoption program
- Direction: Repeat operators need one screen for host tools, coding-CLI auth, project versus convert state, stale locks, last receipt, and the next verb.
- Conclusion: Add
litai statuswith doctor as the host-preflight view of the same typed contract. TTY and--jsonshare one envelope. Reuse existing services. Do not add a new authority store. Convert stage comes from BROWNFIELD-STATE-001 once that field exists. - Depends on: RELEASE-0.9-CUT-001, ADOPTION-001
- Next action: Complete. Keep the composed contract and coding-CLI inspection model-free as host integrations evolve.
- Implementation:
- Define a versioned operator-status contract over existing init, convert-plan, lock, receipt, and host-path services
- Add litai status and a doctor host-preflight view with TTY prose and
--json - Report next verb and fail closed on missing project or ambiguous Git tracker state already owned by existing commands
- Evidence:
- Focused public-API tests cover JSON envelopes, TTY rendering, missing-project, and unauthenticated coding-CLI cases
- No new planner or durable store is introduced; mutators remain init, convert, lock, and receipt commands
[x] BROWNFIELD-STATE-001 — Make convert authority stages first-class project state
- Priority: P0 (0.10.0 load-bearing adopt-path slice)
- Release target: 0.10.0
- GitHub issue: #266 (Gitlink block already landed), #279 (submodule monorepos remain related)
- Owner: project metadata, convert harness, and source-to-specification qualification
- Detailed roadmap: Operator adoption program
- Direction: Adopted trees need a visible authority stage so onboard and status cannot imply that wrapping a repo made the spec release authority.
- Conclusion: Record fail-closed stages wrapped, retained, drafted, and qualified. Original source stays release authority until regenerative qualification passes. Status and onboard consume the field rather than re-inferring it only from directories.
- Depends on: RELEASE-0.9-CUT-001, ADOPTION-001, STATUS-001
- Next action: Complete. Original source remains effective release authority until the current qualified projection evidence validates.
- Implementation:
- Add versioned convert-stage metadata with fail-closed transitions and no silent promotion
- Project status JSON includes the stage; onboard adopt plan names the landing stage before apply
- Keep original source as release authority until qualification evidence exists; cite #279 submodule and #266 Gitlink blockers as stage-preserving failures
- Evidence:
- Contract tests reject illegal stage skips and refuse rebuild-as-authority while wrapped or retained
- Status and onboard JSON include the stage without a second source of truth
[x] ONBOARD-001 — Guide create and adopt through one plan-then-apply onboard verb
- Priority: P0 (0.10.0 operator front door)
- Release target: 0.10.0
- GitHub issue: #301
is related re-init
--forcescope, not this verb - Owner: litai CLI over init, init --convert --plan, and litai design
- Detailed roadmap: Operator adoption program
- Direction: New users need two starting paths, creating a project or adopting an existing tree, without learning the full verb catalog first.
- Conclusion: Add
litai onboardas a state machine over existing mutators. Create may offer design refine. Adopt always plans first and shows quarantine, Flavors, retained runners, and Gitlink blockers. TTY is a presenter;--jsonis the contract. Agents must not need a TUI. - Depends on: RELEASE-0.9-CUT-001, STATUS-001, BROWNFIELD-STATE-001
- Next action: Complete. Maintain one content-identified plan/apply service over the existing initialization mutator.
- Implementation:
- Add litai onboard create/adopt that calls init and init --convert --plan rather than writing project files directly
- Create path: host preflight, host-derived Flavor defaults, optional design refine, typed plan, apply, next three commands
- Adopt path: plan first, show quarantine/Flavors/retained runners/Gitlink blockers and landing stage, apply only after acknowledgement
- Keep TTY optional and
--jsonmandatory; do not add a daemon or a second planner
- Evidence:
- Public-API tests cover create and adopt plan-then-apply, JSON envelopes, and refusal to apply without acknowledgement
- Adopt never writes spec-release authority; create does not skip design questions when refinement is selected
[x] GOLDEN-PATH-001 — Prove a stranger first hour from a published wheel
- Priority: P0 (0.10.0 stranger first hour)
- Release target: 0.10.0
- GitHub issue: #251 is the adjacent 0.8.4-to-0.9.0 upgrade smoke, not this stranger path
- Owner: docs/user/getting-started.md, installed-wheel e2e, and onboard/status contracts
- Detailed roadmap: Operator adoption program
- Direction: Getting-started currently teaches this checkout's
make bootstrap. Strangers need a first hour from a published wheel that reaches hello or a retained receipt. - Conclusion: A golden-path test and user-guide lead install a published
wheel, not
PYTHONPATH=src, then complete onboard create or adopt. Maintainer bootstrap stays separate. - Depends on: RELEASE-0.9-CUT-001, ONBOARD-001, STATUS-001
- Next action: Complete for the 0.10.0 release candidate. Publication remains owned by RELEASE-CLOSURE-001.
- Implementation:
- Lead getting-started with pip/wheel install plus onboard, keeping make bootstrap as maintainer setup
- Add an installed-wheel golden-path test for create and a convert fixture for adopt-to-retained-receipt
- Run documentation proofs so README and getting-started do not claim the maintainer path as the stranger path
- Evidence:
- Golden-path test uses a published or release-candidate wheel, not this checkout's src tree
- Create reaches a validated hello project; adopt reaches an explicit retained stage without claiming spec authority
-
make wheel-checkon clean commit2f4a34a1installed the 0.10.0 wheel into isolated environments, validated create, and advanced an inherited-catalog brownfield fixture through a current retained receipt with original-source release authority
Tracker reconciliation (2026-09-04)
Open GitHub issues that lacked a dedicated queue item. These stay out of the closed 0.9.0 cut unless a later 0.10.0 item promotes them. #83–#86 are closed on GitHub; they remain cited on completed CI-SHARD-001 / CI-IMPACT-001. #251 remains RELEASE-017 / GOLDEN-PATH-001.
[ ] INIT-CONVERT-FORCE-001 — Add an explicit re-init escape hatch for already-initialized projects
- Priority: P2 (not onboard; not 0.9.0 product)
- Release target: 1.1.0
- Previous release target: after published v0.9.0 unless RELEASE-0.9-CUT-001 promotes it
- GitHub issue: #301
- Owner: litai init --convert collision handling
- Direction: Already-initialized projects cannot re-run init --convert; update is the only path, and operators need a reviewed reset when incremental update is stuck.
- Conclusion: Add a fail-closed --force (or equivalent) that re-runs convert against an initialized tree only with explicit acknowledgement. Do not fold this into onboard.
- Depends on: RELEASE-0.9-CUT-001
- Next action: After v0.9.0, specify the acknowledged re-init flag. Do not implement it inside onboard.
- Implementation:
- Add an explicit re-init flag that refuses to run without acknowledgement
- Preserve Gitlink and nonempty-tree blockers unless the flag names them
- Keep onboard pointing at this item rather than absorbing the flag
- Evidence:
- Public-API tests cover refusal without the flag and acknowledged re-init
- ONBOARD-001 still cites this as related re-init scope, not the onboard verb
[ ] OBSERVE-HTML-001 — Generate single-file HTML5 visual observability artifacts
- Priority: P2
- Release target: Reconcile the remaining original acceptance obligations in the full 1.2 program; implemented views already landed before this checkpoint.
- GitHub issue: Historical #295 and #296, both closed on 2026-09-17. Their closure does not prove every original phase complete. No replacement HTML umbrella issue was identified in the current public repository audit.
- Owner: HTML source adapters, rendering/publication, dashboard and acceptance harness
- Direction: Audit and reconcile the umbrella against the original phased scope, implementation and evidence; do not equate stale unchecked prose with missing code.
- Conclusion: The graph and health views are implemented with recorded historical installed/browser/hosted proof. Timing and workflow/routing views and an offline multi-project shell are implemented. Durable build/test-run history and shell-level cross-project controls are not implemented, and later-view installed/browser proof is not established by the existing harness. Keep this umbrella partial for those concrete obligations. Open-ended multimedia is not a fixed release requirement.
- Detailed plan: Current scope and evidence audit. The Phase 0/1 plan and prior queue narrative are historical evidence, not current instructions.
- Next action: Bind a build/test-history view to existing durable run/step evidence, including active, passed, failed, interrupted and unavailable states; preserve exact source identities and staleness instead of treating timing spans as test receipts.
- Implementation:
- Artifact/schema contract, interactive repository graph, safe publication, staleness verification, and rendering skill are implemented.
- Version/verification/lock health, performance history and workflow/routing views, plus the offline multi-project shell, are implemented.
- Render durable active/historical build and test outcomes, separate from diagnostic timing observations.
- Add project/surface selection controls to the offline composition shell, retaining provenance, keyboard access and readable no-script panes.
- Evidence:
- Reconcile original phase scope, implemented producers and archived tracker state; preserve recorded Phase 0/1 and health-view qualification without claiming a new artifact rehash or current release attestation.
- Qualify timing, workflow/routing and multi-project composition through a real installed wheel and desktop/mobile browsers; include refusal/staleness cases.
- Qualify the remaining history/control behavior and run the full exact-revision release/platform gates before checking off this umbrella.
[ ] WORKER-GIT-CRED-001 — Broker short-lived Git source credentials for dynamic workers
- Priority: P2 (1.0 worker fleet; not 0.9.0 product)
- Release target: 1.1.0
- Previous release target: 1.0; after published v0.9.0
- GitHub issue: #286
- Owner: worker source materialization and forge credential brokerage
- Direction: Workers must fetch an exact Git revision, but the contract assumes the worker can already authenticate to the forge. Ephemeral fleets cannot share a long-lived PAT or a permanent SSH key per host.
- Conclusion: Add a provider-neutral short-lived Git credential contract for worker-to-forge fetch, submodules, and Git LFS. Keep credentials out of project authority and the persistent worker catalog. Distinct from controller-to-worker SSH.
- Depends on: RELEASE-0.9-CUT-001
- Next action:
literate_ai.security.worker_forge_credentialslands the contract, the GitHub App and GitLab CI adapters, and theGIT_ASKPASS-based fetch/submodule/LFS wiring. Still open: an external OIDC/workload-identity broker adapter, a generic command-provider adapter, and wiring this module into the live worker dispatch pipeline (execution_dispatch.py) so a real dynamic worker invokes it instead ofsource_materialization.py's already-authenticated-worker assumption. - Implementation:
- Define a short-lived worker-to-forge credential contract and lifetime
- Support at least GitHub App installation tokens and GitLab CI job tokens
- Refuse to persist credentials in project authority or worker catalog files
- Add the external OIDC/workload-identity broker and generic command-provider adapters
- Wire the contract into the live worker dispatch/fetch pipeline
- Evidence:
- Focused tests cover acquisition, use during fetch, and expiry without catalog writes
(
tests/critical/test_worker_forge_credentials.py) - Controller-to-worker SSH stays a separate credential class
- Focused tests cover acquisition, use during fetch, and expiry without catalog writes
(
[ ] LIBRARY-ARTIFACT-001 — Admit an importable library-artifact Component
- Priority: P1 (authority transfer; not portable-application subprocess)
- Release target: 1.1.0 (current tracker milestone; design accepted)
- Design review: ADR 0039, Accepted by explicit maintainer approval.
- GitHub issue: #280
- Follow-up issue: #371 reports reviewed library kinds being lost during source-to-spec promotion.
- Follow-up issue: #373 requires successful library CLI results and receipt/result agreement.
- GitHub issue: #377
requires the library-specific verifier-owned oracle during
spec qualify. - Decision: ADR 0038
- Owner: Standard lifecycle Component kinds and in-process library artifacts
- Direction: Pure in-process library logic can be specified and accepted as portable-application, but consumers cannot import the qualified artifact; they must shell out to a CLI oracle.
- Conclusion: Admit a first-class importable library-artifact Component so qualified pure-logic boundaries can transfer authority in-process. Do not replace portable-application. samples/generated-library remains a demo until this kind exists.
- Depends on: none (the former post-v0.9 release dependency is satisfied)
- Next action: Complete the repeated clean model-backed Rust library qualification tracked by #379, retaining native Cargo target and failure evidence. Continue retained-workspace integration under ADR 0040 and the broader release qualification requirements.
- Completion: Implemented under accepted ADR 0038 with typed contracts,
language-native projections, sealed-package acceptance, and exact consumer
bindings. Issue #373 closed the CLI result-projection defect. PR #375 landed
the PR #378 follow-up at
66fd355e: canonical case comparison preserves nested JSON boolean/integer distinctions, and publicspec qualifyregressions reject type drift before lifecycle execution or admission. All 15 hosted checks passed, and #377 is closed. This commit is an ancestor of current mainf8a19740. Those regressions inject accepted qualification runs; they do not replace the live generation proof still required by #379. - Implementation:
- Separate retained importer gate policy from repository-dependency build plans under ADR 0040. A reviewed policy belongs to the importing project and pins ordered commands and measured tools. Capture mutable consumer source separately for each execution: edits invalidate consumer evidence without requalifying the provider. Verify strict policy parsing, project ownership, command/tool identity changes and fresh source snapshots. This contract does not prove full gate coverage or grant admission. The current-authority, consumer-file custody, execution and public CLI suites passed 51 tests, including foreign-project refusal, policy identity changes and source edits with unchanged provider materialization. Full integrated release qualification remains pending.
- Define package identity, import surface, consumer binding, and independent acceptance contracts without changing executable Component identities
- Project immutable package-shaped exports for Python, JavaScript, and Rust
- Run attributable generated tests and verifier-owned capability acceptance against sealed artifact custody
- Materialize exact library dependency edges through each language's normal in-process consumer mechanism
- Keep portable-application as the subprocess-shaped executable kind
- Qualify Python, JavaScript, and Rust in-process boundaries end to end without a CLI oracle at the consumer
- Preserve reviewed Component kind through promotion and planning (#371). Consolidated promotion, command projection, library acceptance, local lifecycle, peer-work, and roadmap suites ran 109 tests successfully (2 explicit platform skips); full combined CI remains a separate gate.
- Verify the combined 1.1 library/promotion and retained-source integration through the complete local suite and exact consolidated hosted matrix.
- Return a successful typed CLI result after library acceptance without constructing an executable command contract
- Extend
litai buildandlitai testartifact retention to typed library products and givelitai runan explicit library refusal. The initial build consumer forwarded an empty execution command torecord_artifact_export, which rejected it asartifact_export.command_missing; its response also always suggestedrun. Preserve import authority and copied artifact custody without a fake command. Both public handlers reproduced the refusal with an injected accepted rebuild; their disposable runtime was removed without retaining the package. Execute in order: type the existing library result envelope without changing its bytes; validate and retain its exact package/import authority locally; carry that discriminator through worker CAS, dispatch and evidence/control projections; reject local and workerrunbefore process execution. Keep executable serialization unchanged. Contract round-trips and negative cases, public build/test/run regressions, copied-byte tamper tests and worker transport coverage precede complete combined qualification. The diagnostic invokes real handlers/export validation but injects accepted lifecycle output; it is not generation or independent library acceptance evidence. The typedLibraryArtifactProductprojection is implemented first: its closed existing envelope preserves valid rebuild bytes, binds all export and import fields, and rejects executable/untyped products. Rebuild also rejects another Component's export before constructing the response. Contract/rebuild tests pass (33), including real public CLI result/receipt projection; version-authority and wire-contract tests pass (29). Ruff and documentation rendering pass on this isolated checkout. These 62 focused tests are not a full combined qualification. Local package retention and complete remote transport remain unchecked. Local retention is now implemented: shared Standard directory encoding verifies the original and copied package against the accepted blob, separate copy custody plus atomic record replacement preserves prior exports on failure, and library metadata is paired with a custody identity. Public build/test fixtures retain the package after runtime removal and publicrunrefuses before dispatch. The expanded library, export, CLI, Standard-command, materialization, version and preflight sets run 101 tests successfully (99 pass, 2 platform skips); these include deterministic accepted-result injection, not live generation. Next: carry this same product through worker CAS, dispatch and verified control/evidence transport before claiming the complete build/test fix. The next implementation slice is worker CAS custody: bind package bytes, typed import/export metadata and observed toolchains in a library-specific locator, validate original and retained blobs, and refuse workerrunbefore selecting a command. Keep this separate from executable manifests. Transport must subsequently preserve the exact sealed package (including its canonical ZIP mode metadata), not just the current evidence bundle's executable-bit projection; bind import metadata to verified evidence before connecting remote build/test responses. CAS-only tests cannot close that gate. Worker CAS custody is implemented and focused-qualified: a library-specific locator binds the exact export/import projection and observed toolchains; retained package verification includes non-executable permission bits. Existing custody survives publication failure, concurrent valid publication is revalidated, linked custody and metadata/byte tamper fail closed, and workerrunrefuses before process dispatch or rebuilding. The expanded local/remote export, dispatch, SSH, wire/version and project-index suites pass all 136 tests on macOS. Ruff lint/format, layout, and documentation checks (9 parser tests, 121 diagrams, 530 Markdown files) pass. The producer is intentionally not connected to remote build/test until verified transport carries the complete product; this is not full combined release qualification. Transport implementation now follows: add an optional typed product to the dispatch result and verified evidence manifest, retain the exact canonical package ZIP as evidence, and verify its blob plus file correspondence on import. Reconstruct product metadata from the verified manifest when binding the bounded control result, rather than trusting a second control-channel projection. Only then connect worker build/test, remote export records and public CLI responses. Existing executable wire bytes remain unchanged. This transport is now connected and verified: worker build/test return typed products, command/SSH public CLI build/test retain them without a run hint, and operator/worker run refusal is explicit. The coordinator verifies the exact ZIP blob and its correspondence with artifact-file evidence, including transported executable bits on hosts with different mode semantics. Product metadata and toolchains must match the worker CAS locator; control binding reconstructs metadata from the verified manifest. Tampered or dropped product metadata, a rehashed ZIP/file mismatch, and failed remote record publication are rejected. All 146 focused export, transport, dispatch, SSH, wire/version and preflight tests pass; Ruff checks, layout, and documentation rendering (9 parser tests, 121 diagrams, 530 Markdown files) pass. These tests inject an accepted lifecycle and prove custody after its actual runtime cleanup; they do not claim live generation, worker authentication beyond existing trust, PR #378 qualification correctness, or full combined release attestation. - Project pinned qualification cases into the oracle type selected by the
locked root kind (#377). Preserve exact capability/import-surface and
verifier-harness bindings; add adapter and public library
spec qualifyregressions without changing executable acceptance behavior. - Construct a
LibraryAcceptanceoracle for library qualification runs while retaining the existing executable oracle for executable Components - Fix forward the case-binding defect from merged PR #378: compare canonical
case projections, preserve JSON types (including nested booleans/integers),
and exercise library oracle selection and mismatch refusal through public
litai spec qualifybefore any lifecycle execution. The existing receipt and capability/import-surface authority must remain unchanged. Canonical byte comparison now distinguishes nested booleans and integers. All 37 qualification adapter, public CLI, lifecycle-runner and operational tests pass. The new public CLI fixture loads the real project-contained oracle and hash-bound harness, composes the real qualification adapter, and rejects type drift or harness changes before invoking qualification or admission. Its positive case injects accepted runs and authority preparation/admission; it is result-routing evidence, not a live-generation or final-admission proof. Restoring Python equality in a mutation control makes both public negative subcases fail. Issue #377 was reopened after PR #378 merged without this review fix, then closed after the combined qualification and main landing through PR #375 described in the release integration evidence below. After integrating main, the combined focused suite passes all 183 tests; documentation rendering, layout, Ruff lint/format and reviewed driver pins are current. On exact revision66fd355e, wheel and install checks plus forced offline installed E2E pass. The retained qualified wheel SHA-256 is2c6e9129129990a642c0c0dca9da2a9fe63bf21c6bae8451368ce349916704e0(2,435,633 bytes); its portable manifest and embedded origin bind that revision, independently verified after smoke runtime cleanup. Full-PR admission passes all six non-model checks for 19 changed skills. Fresh full Python qualification was still active at that checkpoint. The later PR #375 integration entry below records its completed local and hosted qualification; neither checkpoint claims live model acceptance.
- Evidence:
- Positive fixtures prove package build, exact per-case test attribution, non-exempt acceptance, and in-process consumption for all three languages
- Tamper, stale-interface/oracle, ambient shadow, missing/extra case, dependency substitution, and target/toolchain mismatch fixtures fail closed
- Verifier custody contains only the sealed artifact graph and verifier-owned harness, never copied ambient generated source
- portable-application behavior remains unchanged
- Full local validation and exact-head Linux, macOS, and Windows CI pass
- Public CLI regression proves successful result/committed-receipt agreement for an importable library and preserves executable/multi-entrypoint results. The deterministic accepted-lifecycle fixture invokes the real public command, Standard adapter, finalizer and atomic receipt commit; the tracked receipt and external finalized candidate are byte-identical and match the result's identities. Provider/runtime execution and receipt projection are fixtures, not live generation or library-acceptance proof. Restoring an unconditional execution-command request makes the library regression fail. All 44 CLI, Standard rebuild, artifact-export and command-worker lifecycle tests pass; the new regression plus 12 version-authority tests also pass.
- PR #378 predecessor evidence: ten qualification adapter tests and its
3,656-test suite (30 skips) passed at
58631a1b; a downstream public CLI success was reported. This evidence does not cover boolean/integer drift or the combined library transport revision and is not its release attestation.
[ ] SUBMODULE-ORCH-001 — Orchestrate Git-submodule virtual monorepos without flattening Gitlinks
- Priority: P1 (brownfield; distinct from the Gitlink block)
- Release target: 1.1.0 (current tracker milestone; design accepted)
- Design review: ADR 0039, Accepted by explicit maintainer approval.
- GitHub issue: #279
- Owner: init convert orchestration and Gitlink preservation
- Direction: Convert correctly blocks nested submodules, but a virtual monorepo that should keep independently owned Gitlinks has no supported orchestration path.
- Conclusion: Add a supported orchestration path that preserves child Gitlinks and does not flatten them at convert time. Distinct from CONVERSION-GITLINK-001 (block) and BROWNFIELD-STATE-001 (authority stages). Root authority owns exact repository pins and explicitly declared cross-project relationships, not copies of child Components or a replacement for each child's independent release authority. Issue #279's seven acceptance criteria and Accepted ADR 0039 remain the full scope; a read-only inventory or successful scaffold alone cannot close it.
- Depends on: RELEASE-0.9-CUT-001, CONVERSION-GITLINK-001
- Lifecycle delivery: A root must delegate build, package and container operations to independent children through an explicit command contract. Metadata validation alone does not deliver this. Implement an inventory-complete, target-specific dependency plan and acknowledged executor with logs, failure propagation and artifact-verified recovery. Keep Git refresh on the existing transactional path; never disguise a shell Git update as coherent authority refresh. Work is tracked by #279; native SDK admission and Component worker transport remain owned by #407 and #403 respectively, and are not prerequisites for delegating retained child build commands on one supported worker. Child receipts must accumulate elapsed time across the command sequence, including failures and interruptions. Keep LFS test pointers canonical LF on every host; platform newline translation must not weaken the verifier. - [ ] Qualify a real independent-child dependency chain through the public CLI. - [ ] Refuse missing children, unsupported operations, stale pins and cycles before execution. - [ ] Preserve diagnostics and terminate descendants on failure or cancellation. - [ ] Verify exact artifact bytes before resuming successful child operations. - [x] Recognize hydrated indexed LFS assets during refresh cleanliness checks without executing content filters; refuse corrupt bytes, mode changes and staged work. This is input preflight, not the still-missing apply step.
- Next action: Implement reviewed refresh in the sequence below. Corrected
33630a4fa92de3720cb27def2747787af13ed87apassed all 15 jobs in hosted run 34664827991 and landed through #386 ascf71a4fc, retaining #387's complete history. The merge tree equals that qualified candidate; both older failed hosted heads remain failed historical evidence. Publiconboard orchestrate initializerequires a distinct project-bound plan and explicit acknowledgement. Ordinary conversion still uses its separate path/state detector and pending policy reconciliation. Do not reuse flat conversion's quarantine/whole-tree rollback for this profile. Decision conflict found: merged PR #366 intentionally removed the default refusal in975e47c16, qualified atb47059ea, and was explicitly included in 1.0.1. ADR 0039 and this queue still say ordinary conversion refuses Gitlinks. Neither silently reverting that accepted capability nor silently changing the ADR resolves the conflict. Maintainer choice is requested: retain ordinary relocation with an explicit path-preserving orchestration profile, or restore default refusal. Leave current conversion behavior unchanged pending that choice; read-only orchestration inventory and single-history multi-root work may proceed. A proposed refusal/recheck patch passes 139 adoption/initialization tests, including real initialized/uninitialized Gitlink snapshots and addition during preflight, but is parked outside the landing candidate. Those tests qualify the proposed behavior, not authorization to reverse #366. The initial requirement-based regression had six failures before that proposed patch. - Implementation:
- Reconcile ADR 0039's default-refusal clause with merged PR #366 before changing ordinary conversion behavior; record the maintainer's choice and update contradictory documentation and acceptance cases together.
- Public plan/check design: Add
onboard orchestrate plan|checkwith a required, bounded JSON declaration (literate-ai/orchestration@1) containing explicit consumer/provider Gitlink-path relationships, including an explicit empty list when there are no dependencies. Bind exact declaration bytes and all direct-child inventory observations into the plan identity.checkrecomputes it against a required reviewed identity and refuses drift. Relationships express declared dependencies, not inherited child catalogs, execution order, proven compatibility or acceptance. Reject unknown children, duplicate/self edges and unknown fields. Inventory-only plans do not apply; suppress implicit updater, user configuration, telemetry and journaling for these read-only commands and refuse mutating/discovery options. - Inventory design: Use a bounded, network-free Git adapter and
immutable internal observations. Require a clean stage-zero Gitlink index
and byte agreement between indexed and working
.gitmodules; parse the indexed configuration with Git itself, with includes disabled. Preserve configured URL spelling and branch (including relative URLs and branch.), but refuse credential-bearing or ambiguous configuration. Report the pinned commit separately from initialized child HEAD. Reobserve before returning; do not equate local object resolution with publication or acceptance. This slice does not expose apply, fetch, child execution or conversion mutations; public plan/check and relationship binding follow after inventory tests. - Define exact root-owned repository inventory: Gitlink path, configured URL,
exact mode-160000 commit, configured branch and initialized/uninitialized
state; distinguish a pin from the currently checked-out child revision.
Validate agreement with
.gitmodulesand reject ambiguous index state. Implemented byadapters/repository_orchestration.py; immutable internal observations have deterministic identities, 128-child/256-KiB configuration limits, bounded Git subprocesses, exact SHA-1/SHA-256 pins, direct-file descriptor checks and repeat observations. No implicit URL resolution, Git clean/smudge filters, child execution, fetch or publication claim. Working.gitmodulesmust exactly match its indexed bytes; filtered or unstaged differences refuse rather than invoking a repository's filters. - Expose an explicit orchestration profile with read-only plan/check, binding
the reviewed inventory and explicitly declared cross-project relationships.
orchestration_planning.pyrecomputes reviewed identity rather than trusting saved plan JSON; declaration/child drift refuses. The CLI suppresses implicit updater, configuration, telemetry, discovery and journal writes. Ordinary conversion's default remains governed by the unresolved policy gate above; no child Component authority is inferred. - Initialize root orchestration authority transactionally without moving,
quarantining, absorbing or rewriting
.gitmodules, Gitlinks, child paths, child working trees or Git metadata. Roll back only this operation's owned additions and preserve pre-existing or concurrently replaced user files. Immediate prerequisite (implemented and locally checked): Add a typed optionalrepository_orchestrationbinding to the modern canonical project manifest. Persist exact configured names/paths/URLs/branches, Gitlink commits and.gitmodulesidentity plus declared consumer/provider relationships, not initialized state or local child HEAD. The latter remain observations in the reviewed initialization plan, so clean clones retain identical root authority. Reject catalog roots overlapping child boundaries; preserve default manifests and legacy schema bytes. The root initializer must consume this binding, not create an unrecognized sidecar or silently coerce children into Components. The binding and public plan projection are implemented. Fifteen new contract tests and the inventory/plan/staleness/schema batch pass 101 tests, including actual manifest-store round trips, canonical ordering, immutable typed bounds, child/root overlap rejection and legacy/default identity preservation. Cyclic declarations remain dependencies, not an inferred execution order. Public CLI assertions require exact configured pins and the binding's recomputed identity; the final 101-test batch passes in 34.060 seconds. Lint/format (912 files), layout, both OpenSpec checks, documentation rendering (121 diagrams / 533 Markdown files), audit and nine fence tests also pass. Driver and documentation authority reviews are refreshed. This is local contract qualification, not a full-suite or hosted claim for the new binding; transactional root initialization is still the next implementation action.litai verifypasses authority with the same three undeclared/disabled skips and existing stale-receipt failure; no receipt was rewritten. Initialization implementation (in progress): Prepare a deterministic root-only file set from an explicit project ID/version and the reviewed repository binding. Use canonical project/lineage serializers, rootSKILL.md/PROJECT.md, and a dedicated.literate/orchestrationskill/docs namespace. The root explicitly inherits no child catalogs or parent release authority; do not seed generated Components or manufacture test receipts. First prove this file set passes the real project validator. Bind every planned path and byte identity into the initialization plan; require an explicit acknowledgement and exact current plan before mutation. Refuse existing target files or indirect ancestors, preserve ordinary root files and Git metadata, publish the manifest last, and roll back only unchanged owned additions. Landing requires transaction and real-Git failure/preservation tests; a scaffold fixture is not that proof. The internal scaffold builder now prepares seven exact root-owned files using shipped resources and canonical project/lineage/review serializers. Seven scaffold tests cover no-write preparation, exact paths, every output's identity, input rejection, LF/CRLF equivalence and real canonical validation in two locations with deliberately invalid child metadata left unread. The final 124-test scaffold/contracts/planning/skill-catalog/initialization/ schema batch passes in 84.335 seconds. Lint/format (914 files), layout, OpenSpec, documentation (121 diagrams / 537 Markdown files), audit and nine fence tests pass. The package-data entry includes the four resources; this is not yet installed-wheel qualification. Root/template catalog skill admission passes all six non-model checks.litai verifypasses authority, skips three undeclared/disabled gates and retains the stale-receipt failure. No initializer is exposed by this internal file-set preparation. Transaction design: An initialization plan adds explicit project ID and version to the existing read-only Gitlink/declaration inspection, binding the exact scaffold identity and file list. Existing.literate, root onboarding, requirements or project manifest targets refuse, including portable aliases; existing valid agent shims are preserved and reobserved. An exclusively created.literatenamespace contains a staging tree that passes canonical validation before any root manifest exists. Publish complete files with no-clobber links and the project manifest last; reobserve inputs before and after publication. Rollback removes only matching owned file identities and bytes and empty owned directories, reporting preserved concurrent changes. Same-user filesystem races are detected, not an isolation boundary. No Git metadata writes, child updates, source movement or implicit execution. Optional provider shims must also respect child boundaries: a shim-shaped path inside an explicitly bound child is child authority, not a root file to inspect or reject. Share this ownership decision with canonical project validation, while retaining normal root-shim validation outside children. Direct admission of the actual generated skills additionally found and corrected author metadata missing the canonical maintainer email; generic root/template catalog admission alone did not inspect these new views. After that correction, both exact generated skills pass all six direct non-model checks; the final scaffold/plan/contract batch passes 38 tests in 11.158 seconds. The broader 124-test result above predates only the author-metadata correction, not a change to initialization behavior. Transaction implementation: The new public initializer binds the exact scaffold, explicit ID/version and preserved shim bytes to a reviewed plan; no acknowledgement means no inspection or writes. Exclusive metadata staging, real canonical validation, manifest-last no-clobber publication and repeated directory/input observations preserve independent children and existing files. Rollback checks owned identity and bytes, including partial writes; replaced roots/directories and changed additions are retained rather than removed. Public tests caught and corrected a swallowed typed missing-project error. The command reference and first-use walkthrough now explain plan identity, acknowledgement, root-only scope and incomplete-cleanup handling. Automatic admission, full-suite and hosted qualification remain required before landing. Local transaction qualification passes 122 focused tests in 74.279 seconds: initialization, public planning/help, project validation, scaffold, typed binding, real-Git inventory and schema compatibility. This includes clean shallow-clone plan reuse, unchanged child/Git metadata, explicit acknowledgement, partial-write rollback, manifest-last publication and concurrent root/directory replacement preservation. Lint and formatting pass for 916 files, repository layout and both OpenSpec checks pass, and documentation renders 121 diagrams across 537 Markdown files with zero dependency-audit findings and nine passing fence tests. Driver and documentation review pins are refreshed.litai verifypasses authority, retains three undeclared/disabled skips and still fails the existing stale test receipt; no receipt was rewritten. The adjacent ordinary-initialization, template-catalog and project-CLI suite also passes all 117 tests in 200.176 seconds. Changed root-skill admission passes all six non-model checks; it does not satisfy the separate generated orchestration-view admission item below. This is 239 focused/regression tests, not a full-suite or installed-wheel qualification claim. - Admit the generated orchestration onboarding views automatically when their
resource templates change, using the same six non-model skill checks rather
than counting an unchanged generic catalog owner's pass as their evidence.
Use the real scaffold renderer with explicitly selected
checkout templates, materialize its canonical skill catalog in a disposable
admission fixture, and evaluate both exact generated views through the existing
non-model evaluator. Trigger on template, renderer and gate changes, including
deletions, and expose a nonempty read-only discovery result to CI. Missing or
malformed resources and evaluator failures must fail closed. The fixture's
synthetic child pin is admission input only, never child or release evidence.
Implemented in
scripts/evaluate_changed_skills.py, including read-only CI discovery and deleted-template detection. Both exact generated views pass schema, PII, license, quality, Unicode and lint checks with models disabled; the root and generic template catalogs pass separately. Ninety related gate/scaffold/initializer/contract/planning/catalog/help tests pass in 55.201 seconds. A final 19-test gate/scaffold run additionally covers explicit CRLF input and missing templates under--all, passing in 2.815 seconds. Lint, formatting (916 files), layout, OpenSpec, documentation (121 diagrams / 537 Markdown files), audit and nine fence tests pass. The macOS temporary-path alias found by the first run is resolved before catalog-relative reporting. Generated agent guidance now routes the acknowledged initializer explicitly. Full consolidated and hosted qualification still belong to the parent item. - Qualify the orchestration document reader against Windows pathname/descriptor
ctime differences before consolidation. The HTML hosted repair exposed the
same cross-API comparison in
_read_document; compare common fields across APIs and retain full before/after observations independently. Require stable distinct clocks to pass and either clock's drift to refuse, without weakening Gitlink/declaration identity, bounded reads or child preservation. Three new direct-reader regressions pass, including exact CRLF bytes and independent pathname/descriptor drift refusals. The full focused inventory, planning and initialization batch passes 68 tests in 63.938 seconds. Fast lint/format, layout, OpenSpec and documentation gates pass, and review pins are refreshed. This qualifies the local invariant; actual Windows/installed confirmation remains a consolidated hosted gate, not a claim from simulation. - Integrate exact child repository identities and declared relationships into
root lock, plan and graph surfaces without flattening the child catalogs.
Children with and without their own Literate AI project remain independent.
Graph implementation (locally qualified in a separate development checkout):
While the prior consolidated candidate runs its full qualification unchanged,
project committed orchestration authority into the existing authority DAG.
Give the root binding and each exact child pin distinct node kinds; retain
configured path/name/URL/branch, commit and content identities as properties.
Represent each declared relationship as an authority node with explicit
consumer/provider role edges. This preserves cyclic dependency declarations
without falsely making them an executable DAG or weakening the existing
graph's cycle checks. Use
gitlink_path, not the source-excerptpathfield, so graph/HTML projection never reads a child's files. Mark pins as declared, not live-verified, and keep normal projects' graph identities unchanged. Follow with root lock/plan integration and reviewed refresh; graph projection alone does not satisfy this parent checkbox or issue #279. Seven new tests cover exact binding/pin identities, cyclic declaration roles, identity invalidation, child-file and process noninterference, clone-location independence, all five graph exports and the ordinary-project shape. The expanded graph/HTML/schema/Component-lock/generation-planning batch passes 126 tests with one Windows-junction-only skip on macOS (127 run in 16.363 seconds). The unbound framework graph retained its exact pre-change identity before review-pin updates. Formatting (918 files), lint, layout and both OpenSpec checks pass; documentation renders 121 diagrams across 537 Markdown files, with zero dependency-audit findings and nine passing fence tests. Driver and documentation review pins are refreshed.litai verifypasses authority, skips undeclared locks/HTML and disabled source intelligence, and still fails the existing stale test receipt; no receipt was rewritten. Full-suite, hosted and installed-wheel qualification for this graph slice remain open. Next: root lock/plan integration, without fabricating a Component or treating dependency declarations as authorization to execute child code. Root lock/plan integration design: Existinglockenumerates Components and rejects this Component-free root; existingplanresolves a coding-provider generation plan. Introduce a separate portable repository lock binding validated root authority, its pre-lock graph and exact declared child pins/relationships. Keep child HEAD/initialized state in a distinct planning observation, not in the portable lock. Reobserve root authority and Git inventory before returning a candidate, and refuse manifest/index pin or configuration disagreement without silently refreshing either. Then add bounded canonical lock custody and route exact orchestration roots throughlock, read-onlyplanand lock verification; retain ordinary Component behavior and reject generation-only selectors on the repository path. No child catalogs, model selection, fetching, child execution or publication claim belongs in this root lock. Qualify construction and drift refusal before adding persistence, then prove public CLI/current-stale/clone behavior before checking the parent integration item. Candidate preparation qualified locally:RepositoryLockand its indexed v2 JSON schema bind the exact root project/review/pre-lock-graph identities and the existing typed child authority. The preparation adapter requires an exact explicitly bound root, validates its own authority without source-index synchronization, compares indexed Git pins/configuration to the manifest and reobserves root custody, manifest bytes, graph, review and child observations. It writes no lock or manifest and cannot silently refresh pins. Fifteen new tests cover strict contract/schema roundtrips, bounded identities, real-Git preservation, shallow-clone reconstruction, independent child catalogs, local HEAD/initialization changes, pin/configuration drift, cyclic declarations, stale root review, exact-byte reobservation, replaced roots and symlink refusal. All 104 focused candidate/graph/manifest/planning/initialization/schema tests pass in 66.634 seconds. Formatting (921 files), lint, layout, both OpenSpec checks, documentation (121 diagrams / 537 Markdown files), dependency audit (zero findings) and nine fence tests pass. This is not persisted-lock, public CLI or full-suite qualification. Next: bounded canonical lock-file custody, then exact-rootlock/plan/verification routing with public regression tests. Preserve root-owned Components as separate authority when composing those surfaces; do not skip their committed locks or adopt independent child catalogs. Driver and documentation review pins are refreshed.litai verifypasses authority, retains three undeclared/disabled skips and rejects the existing stale test receipt. No receipt was rewritten and no release claim is made. Lock custody design: Store canonical derived bytes at.literate/repository.lock.json, outside every independent child path. Read/check never creates files or acquires a writing mutex. Bound reads, reject malformed/noncanonical/indirect files and portable aliases, and bind the root and metadata directories by identity. Mutating updates use an exclusively created, fail-fast writer marker, bounded staging, revalidation before replacement, no-clobber first publication and atomic replacement of an unchanged prior snapshot. Recheck exact published bytes and root inputs. A post-publication failure retains the derived lock with an explicit unqualified-result error; it does not restore old bytes over a concurrent edit. Cleanup removes only matching owned staging/marker files; leftovers refuse later writes until inspected. No child or manifest writes, model work, remote publication checks or implicit refresh are part of lock custody. Lock custody qualified locally: Root-only create/check/no-op/stale-update, strict canonical input, size limits, symlink/alias refusal, stale preparation, exclusive-writer contention, partial writes, changed staging/markers, replaced roots, same-byte destination replacement, no-clobber collision and explicit post-publication failure are covered by 23 store tests. The existing bounded document reader now accepts a positive caller-selected byte bound; Gitlink and declaration reads retain their prior limit and independent clock checks. The 104-test store/preparation/inventory/initialization/planning batch passes in 108.439 seconds, two final contention/read-only tests pass in 2.404 seconds, and all 23 store tests pass after descriptor-close hardening in 28.033 seconds. Formatting (923 files), lint, layout, OpenSpec (two checks), documentation (121 diagrams / 537 Markdown files), audit (zero findings) and nine fence tests pass. Review pins are refreshed;verifypasses authority, retains three undeclared/disabled skips and rejects the existing stale receipt. Public rootlock/plan/verification integration follows below; neither these local tests nor this storage API completes issue #279. Public integration implemented locally: Route only an exact, explicitly bound orchestration root through repository commands. Rootlockcomposes its repository lock with the existing root-owned Component lock machinery; rootplanrequires current locks and exposes normalized independent Component identities plus declared child pins, not child execution order. Root verification checks repository currency and any committed root Component locks. Keep child catalogs out, retain normal Component dispatch, reject model/recipe/large-review options on repository roots, and reject meaningless Flavor/target selectors when the root owns no Components. Matrix-cell storage overrides belong to Component invocations, not this root authority operation. Defer host self-update until the parsed root is classified and suppress implicit host/configuration/performance/journal/MCP side effects for scoped repository commands. Reject explicit discovery/debug-file options there. Existing Component check/diff acquires a writing mutex despite being read-only; use its reobservation checks without that mutex for these read-only operations and require a fresh-tree noninterference regression before integration. Clone defect found during public integration: A normal initialized project can declare an emptycomponents/catalog; Git omits it on clone, causingproject.layout_incompletebefore root planning. Extend the existing empty-catalog sentinel policy to this root and require the real mixed-root initialization/lock/commit/shallow-clone journey to preserve plan identity. Do not create missing directories during read-only planning to hide the defect. Local integration evidence: The real CLI covers Component-free and mixed roots, update/current/stale/missing locks, malformed committed Component locks, index-pin drift, independent invalid child catalogs, declared-catalog scope, shallow-clone reconstruction with identical plans, normalized Component identities, exact-pin human output and generation/host-side-effect refusal. Root lock/check/plan reports have an indexed schema with positive CLI output validation and negative unknown-field/identity/execution-claim cases. A fresh standalone Component check/diff preserves the tree without acquiring a writing mutex; mixed-root inspection proves the same boundary. The clone fixture stages root files without deleting intentionally uninitialized Gitlink index entries. The broader CLI/schema/inventory/graph/lock/initialization/help/updater batch passes 248 tests in 260.939 seconds; ordinary generation/debug/performance/human rendering and additional schema regressions pass 50 tests in 6.485 seconds. After the final routing refinement, all 29 root/Component lock and verification tests pass in 95.871 seconds. Fast gates pass: formatting (925 files), lint, layout, OpenSpec (2 items), documentation (121 diagrams / 537 Markdown files), audit (zero findings) and nine Mermaid-fence tests. Driver/documentation review markers are current;verifypasses authority, skips three undeclared/disabled gates and still rejects the existing stale test receipt. No receipt was rewritten. Multi-artifact root updates do not promise repository-wide rollback, child acceptance, publication or refresh. Full-suite, installed-wheel and hosted qualification of this follow-up stack remain required; #279 stays open. Earlier consolidated batch qualification: Clean02193a8apasses freshmake python-check: 4,136 run, 4,112 passed and 24 skipped in 2,242.149 seconds. Its checkpoint was absent at launch and removed on success. Retained evidence is_build/evidence/20260911T212153Z-4b996f/index.json, outer noden0001passed. This qualifies initialization/admission and the portable-input repairs, not the separate graph/repository-lock follow-ups; hosted confirmation of that exact candidate remains required before merging PR #386. Hosted fixture repair: Run34652113474, macOS/Python 3.14 job103436482105, stopped after 2,245 tests with one failure and 24 skips. The public initialization noninterference assertion reports that a preexisting.git/objects/maintenance.lockdisappeared between snapshots. Fixture Git commands currently allow automatic background maintenance; this is consistent with a setup-time writer outliving its command, not evidence that root inspection should ignore Git metadata. Disable automatic maintenance/GC only for fixture Git processes, test the effective override against contrary local settings, and retain the complete byte/mtime snapshot assertion. Requalify the exact consolidated revision before another push; cancelled sibling jobs are not passes. The fixture-only repair passes all 120 inventory/planning/initialization/ lock-storage/public-root tests in 159.788 seconds. The effective command-local policy overrides contrary repository settings without rewriting them. Lint, formatting (925 files), layout, OpenSpec (2), documentation rendering (121 diagrams / 537 files), audit (zero), fence tests (9), driver review and documentation review pass. All-gate verification still reports the existing stale receipt; no full-suite or hosted pass is claimed for the repair yet. Additional hosted Windows fixture failures: The same run's job103436482190finished with 1,644 passes, 25 skips and two failures in 2,268.93 seconds. The shallow-clone inventory fixture inherits host Git CRLF conversion, changing.gitmodulesbytes; the HTML provenance-mutation fixture writes emitted Unicode through the default code page. Extend fixture Git's command-local policy to preserve LF checkout bytes, and explicitly use UTF-8 for HTML fixture text. Add contrary-host-policy and legacy-code-page regressions; do not normalize production custody observations or suppress metadata, Unicode, provenance, or staleness assertions. Repair these in the clean secondary checkout while021f60e2qualification remains frozen. The first 28 affected tests pass in 6.157 seconds; the broader inventory/planning/initialization/root-CLI/HTML batch passes all 148 tests in 148.961 seconds. Lint, formatting (925 files), layout, both OpenSpec checks, documentation (121 diagrams / 537 files), audit (zero findings), nine fence tests and both review markers pass. After confirming the additional hosted failures require a corrected candidate, the agent intentionally interrupted the unfinished021f60e2full run and retained its checkpoint as interrupted evidence, not a pass or a reusable fresh-release assertion. The final hosted result for02193a8ais 10 successful jobs, two failed jobs and three cancelled jobs; the cancelled platforms still require qualification. The Windows log also reports a socket-server thread warning during config migration. Its relationship to fixture shutdown is unproven; retain it for separate triage rather than claim warning-free platform coverage. Installed baseline evidence (021f60e2, not the subsequent fixture repair): The non-editable wheel passes the existing wheel gate, retains 2,508,144 bytes at SHA-256a7bf5f848ac91cdd5408711caa7de70d7a7bb5a2b2faf0294c21e6e757334db7, and binds qualified-files manifestsha256:bfde46a666fcd7ff576fe0f48b312f8302e5db2b50f452d0f7628a16e209c4ad. Generic installed create/adopt, graph/HTML update, lock/plan and Standard binding checks pass. A separate isolated-wheel manual journey binds that same wheel through its installeddirect_urldigest, invokes the real CLI for a Component-free root and a mixed root with one Component, preserves initialization inputs and read-only byte/mtime snapshots, reconstructs identical shallow-clone plans and refuses silent pin drift. The proof script issha256:176e2fbd82ae95c8aee4de1ceaa9e5fc51a1055b2d2de184d91ae8d8219597b5; its first attempt failed on a harness-relative wheel path before CLI execution, then a fresh attempt passed after that harness-only correction. No runtime source was patched for the proof. Separately rebuilt isolated-prefix and forced offline command-worker E2E checks pass on021f60e2; the latter binds 790 CLI files tosha256:c530a1306bb9fb79514e2e063f2d9e42bf5242915eb0b328c4e7f4222f56db51. These are not live-model generation, child acceptance/publication, browser acceptance or qualification of a later candidate. Portable candidate evidence (cbad31bb): Fresh wheel, isolated-prefix install and forced offline installed-E2E gates pass. The retained wheel is 2,508,143 bytes atsha256:5fdb924db811a028b1527884504828d88935735fd61604a80f4bfd85770b4249, with qualified-files manifestsha256:9e681471b2bfa575e4aa895283b6faac4609ef8f0008f67563cde75123f52350. The fresh full Python run subsequently passed 4,198 tests with 24 skips in 2,512.286 seconds; the separate exact-wheel root journey also passed. This baseline does not include the subsequent health-probe fixture cleanup. Current consolidated candidate (873426f2): Fresh full Python qualification passes 4,201 tests with 30 skips in 2,542.889 seconds, exit zero, without checkpoint reuse. Retained run20260911T231358Z-08b70chas terminal stderrsha256:88bdcade2f0a5cbfb4e1884e16020dee519b3b8f8ae9d940d4dc2815d4dc83d1. Fast gates and both review markers pass. Wheel, isolated-prefix installation, forced offline installed E2E and the separate exact-wheel root journey pass. The retained wheel is 2,508,145 bytes atsha256:0b91660e90e34542d29af1e9004b3117c7af418dad959b5fc22f4ac84cfcf23b, with qualified-files manifestsha256:fb3875c7c060cc7f9329904631dd50fa3816185eb7955aa3010518b0952a0516. The integration branch was fast-forwarded to that exact tested commit and its fast gates passed again before push. PR #386's complete hosted matrix remains required. No child publication, live generation, new-head browser acceptance, successful current receipt or release qualification is claimed. Current hosted refusal: In run34659942702, Windows/Python 3.12 test shard 1 (103460164194) finishes with 1,672 passes, 25 skips, four collection warnings and one failure in 2,190.76 seconds. The newly added CRLF-host regression expects LF source bytes, but the shared fixture writes its initialsource.txtthrough Python's ambient newline translation. On Windows that commits CRLF bytes; the explicit no-conversion Git policy correctly preserves them. Pin fixture creation to LF and add a locally executable CRLF-default regression before requalifying. Do not relax the byte assertion or production custody checks. Both PR heads share this fixture and remain unqualified for landing. The socket-thread warning does not recur in this failed job's warning summary; that is not a successful whole-platform result. Local repair evidence: The strengthened fixture-policy regression forces Windows text defaults on every host and first fails with CRLF bytes against the unchanged helper (one test, one failure). Explicit LF creation then passes both fixture-policy tests and the full affected eight-module batch: 155 tests, no failures, in 166.711 seconds. The test checks working-file, committed-blob and shallow-clone bytes while retaining the contrary global Git policy and its preservation assertion. No production code changed. Lint/format (925 files), layout, OpenSpec (two), documentation (121 diagrams / 538 files), audit (zero), nine fence tests and both existing review markers pass. The current receipt still fails; no pin or receipt was rewritten. Requalify the corrected combined revision from a fresh full checkpoint and installed artifacts before pushing; old-head or partial hosted results do not qualify that revision. - Add reviewed plan/acknowledged refresh and re-pin with exact old/new authority
identities. Reject stale plans and dirty, missing, unreachable or unpublished
child commits; local object availability alone is not publication evidence.
Refresh implementation order: First prepare a pure, immutable authority
delta from explicit path/exact-commit targets. Preserve all configured names,
paths, URLs, branches, relationships and
.gitmodulesidentity; reject unknown or aliased targets and bind both old/new authority to the request. This preparation is not a public refresh command or publication proof. Next capture exact root manifest/index/lock and clean child custody, then verify publication against advertised remote references with bounded transport and commit reachability (including older published commits, not just ref tips). No child catalog or acceptance is inferred from publication. Apply must revalidate the reviewed plan and explicit acknowledgement, own the affected root/index/child transaction surfaces, and preserve concurrent foreign changes during recovery. Finally expose the separate refresh front door and qualify real-Git rollback, shallow/nested worktrees, clean clones, installed commands and the complete hosted matrix. Ordinary conversion's unresolved policy choice is not changed by this dedicated profile. Local authority-delta evidence: The immutable request selects 1..128 exact paths and nonzero SHA-1/SHA-256 commit IDs. Preparation derives the replacement from existing authority rather than accepting caller-supplied metadata; no-op intent remains identity-bound. All 87 refresh, persistent authority, planning, lock-planning, graph and schema tests pass in 24.363 seconds, including 14 refresh tests. A deliberate no-op implementation mutation causes both selected-pin update tests to fail; the restored implementation passes. Tests also prove metadata preservation, old/new identity binding, immutable values, strict input rejection and no file or process access. Lint/format (927 files), layout, OpenSpec (two), documentation (121 diagrams / 538 files), dependency audit (zero findings), nine fence tests and both review markers pass. All-gate verification passes authority, retains three named skips and rejects the existing stale receipt; no receipt was rewritten. This internal layer has no public command, publication proof or apply support. Full-suite, installed and hosted qualification remain required before landing the refresh batch. Boundary: Pure authority preparation does not replace exact root/child custody, bounded publication proof or the acknowledged transaction. Keep the parent refresh obligation open through those stages. Implemented locally: refresh input custody. Reuse root lock preparation, bind exact manifest, repository-lock and full Git-index bytes with local node identities, and observe each independent child's HEAD and clean state twice. Refuse dirty/uninitialized children, active writer markers, indirect input paths, and drift before returning preparation or accepting revalidation. Git status must not run child-defined clean/process filters; explicitly refuse configured external filters while this nonexecuting inspection is selected. Reject assume-unchanged/skip-worktree entries which can conceal changed source, and override submodule/untracked ignore settings. Prove byte/mtime preservation on both success and rejection with real Git, including linked/absorbed Git directories, and exercise concurrent input changes. This is observation, not transaction ownership or publication proof. Read-only defect found: The real split-index fixture fails revalidation because Git refreshes shared-index timestamps even with optional locks off (Git read-cache implementation). Detect the split-index extension from bounded raw bytes before invoking index-reading Git commands; retain an explicit nonwriting refusal rather than silently weakening byte/mtime preservation. This also protects the existing inventory reader, which refresh preparation reuses. Local custody evidence: All 126 refresh-input, index-observation, inventory, pure-refresh, repository-lock planning/storage and public orchestration-planning tests pass in 197.725 seconds. This includes a real child clean-filter fixture that cannot execute, ongoing Git-operation refusal, split-index refusal without timestamp writes, SHA-1/SHA-256 index widths and versions 2–4, nested child state despite ignore settings, absorbed/linked Git directories and exact-byte/same-byte-node drift. Fast gates pass: lint/format (930 files), layout, both OpenSpec checks, documentation (121 diagrams / 538 files), zero dependency audit findings, nine fence tests and both refreshed review markers. Verification passes authority, skips undeclared locks/HTML and disabled source intelligence, and rejects the existing stale receipt without rewriting it. All 58 additional public root CLI/initialization, graph and persistent-authority compatibility tests pass in 127.055 seconds (184 tests across both batches). Full-suite, installed and hosted qualification of this stack remains open. Next implementation action: implement reviewed acknowledged transaction ownership/recovery over the prepared root/child custody and root-bound publication proofs. Preserve ignored foreign files during later checkout; a Git-clean observation alone is not overwrite permission. Do not treat current observations as a cross-repository transaction lock or live authenticated-transport qualification. Publication transport proof (implemented locally): Add the real-Git transport verifier for one explicit resolved endpoint and exact commit. Fetch advertised refs into fresh disposable bare storage, never the root or a child; prove ancestry from an advertised commit or peeled tag and reject target-only/local object availability. Bind the advertisement and witness to endpoint/commit identities, compare refs before and after fetch, and bound the entire operation plus inactivity and diagnostic streams. Preserve root/child bytes and metadata; refuse credential-bearing or unresolved relative endpoints and suppress inherited Git controls/hooks. Real fixtures must cover older commits, tags, unpublished/dangling objects, shallow children, SHA-256, remote drift and safe transport failures. Then bind endpoint resolution (including relative submodule URLs) to the prepared root authority, revalidate custody around the proofs, and finish the acknowledged transaction/public CLI. A transport observation alone is neither a refresh plan nor authenticated live-remote acceptance. Transport boundary: The verifier follows advertised-ref listing and explicit fetch refspecs, using a fresh bare object database and a private ref namespace without child checkout, recursive submodule fetch, inherited Git configuration, hooks, automatic maintenance, or direct target-object fetching. A shared total deadline spans listing, fetch and ancestry traversal, with inactivity and diagnostic-stream bounds; this is not a transferred-pack disk quota. SSH uses noninteractive, strict host-key checking without user SSH config; configured credential-helper and SSH-config integration still requires explicit operator transport authority and authenticated acceptance. Local filesystem remotes prove the algorithm, not those live integrations. Mutation evidence: Replacing the ancestry result with unconditional success causes the extra-fetched-unpublished-object regression to fail (one expected failure). Restoring the real result rejects that object even though it is present in proof storage. No source mutation was persisted. Local transport evidence: The final publication, refresh-custody, authority-delta and index-observation batch passes all 60 tests in 108.935 seconds, including 19 publication tests. Fixtures cover older published ancestors, annotated and non-commit tags, empty/dangling/unpublished histories, shallow checkouts, SHA-256, advertisement/fetched-ref drift, injected Git controls, byte/mtime preservation, shared total deadlines, sanitized timeout/output failures, temporary-storage cleanup and invalid input refusal before process launch. Lint/format (932 files), layout, OpenSpec (two), documentation (121 diagrams / 538 files), dependency audit (zero), nine fence tests and both authority reviews pass. Verification passes authority, retains three named undeclared/disabled skips and fails the existing stale receipt without rewriting it. Full consolidated, installed-wheel and hosted qualification remain required before landing; root-bound publication integration and the parent refresh obligation stay open. Root-bound publication integration (implemented locally): Resolve every explicit target from the prepared root's declared Gitlink URL. For relative URLs, select the superproject branch's default remote (origin for detached or unconfigured branches; the root itself when no default remote exists). Delegate Git's relative-URL semantics tosubmodule initin disposable clone-free storage; never initialize or synchronize the real children. Reject ambiguous/credential-bearing remote configuration, disregard child origin overrides and URL rewrite helpers, and forbid proof storage inside protected root/child/Git metadata directories. Revalidate exact custody and endpoint selection before and after each proof. Bind the ordered target coverage, root authority and proof identities; renew remote observations before admitting a retained result, including no-op targets. Prove real local-remote success, relative URL parity, clean-byte preservation, stale plans/remote drift, mismatched proof results and child-origin non-authority. This remains an internal preparation stage, not transaction ownership, authenticated helper integration, a public apply command or child acceptance. Resolve Git's default-remote and relative-URL rules with nativesubmodule initin a fresh synthetic root containing only the selected URL and Gitlink. No real child initialization, synchronization or source execution occurs. Root/child checkout and Git common directories are excluded from proof storage, including a redirected temporary root. Reject requested object-format changes before transport. Each endpoint's proof retains its own bounded fetch policy; remote observations are sequential, not an atomic snapshot across independent repositories. A changed remote advertisement invalidates retained preparation even if the target remains reachable; a failed transport still rechecks custody. Refuse drive-relative endpoint spellings before transport rather than resolving them against the scratch directory or interpreting a foreign host's drive path as an scp host. Absolute native paths remain supported. Preserve exact branch names during default-remote selection: remove Git's terminating newline only, not legal Unicode whitespace in a ref name. Local integration evidence: The 75-test root-publication, transport, refresh-custody, authority-delta and index batch passes in 455.410 seconds. Its initial 13-case trial exposed a fixture-only non-fast-forward push: the bare child remote retained the cloned superproject branch rather than the child's published baseline. Setting that fixture's explicit baseline fixes the trial; both changed-pin and two-child journeys pass together in 66.467 seconds. Final review then reproduces the Unicode ref-name selection defect with one failing real-Git test. After exact newline-only handling and the drive-relative endpoint guard, all 22 final transport/ default-remote checks pass in 55.566 seconds. The strengthened child-origin regression also passes independently and prohibits unintended endpoints before any network attempt. No Git change to a real checkout was required. Final lint/format (934 files) and both refreshed authority reviews pass; layout, both OpenSpec checks, documentation (121 diagrams / 538 files), zero dependency audit findings and nine fence tests pass. Verification passes authority, retains three undeclared/disabled skips and rejects the unchanged stale receipt. Scope remains 134 targeted items / 113 open / 326 unchecked obligations. Full consolidated, installed and hosted qualification, authenticated transport integration and transactional apply remain open; these local checks do not close #279 or qualify a release. Write-ownership prerequisite (implemented locally): Add acknowledged, exact-custody-bound reservations for the root repository-lock writer and the root/observed children's Git index, HEAD and resolved symbolic-ref writers. Capture the resolved ref in custody, including same-commit branch changes. Acquire a deduplicated, fixed-order set with exclusive creation; validate live descriptor, node and token ownership before admitting only those markers during reobservation. Preserve pre-existing, replaced or modified markers and foreign directory entries on failure; remove only still-owned reservations and newly created empty parent directories. Prove actual Git writer contention, partial acquisition cleanup, owner replacement, packed refs, shared Git common directories and stale/absent acknowledgement refusal. Crashed reservations remain explicit blockers, not PID-based auto-deletion candidates. This prerequisite does not mutate project/source/pin files. Manifest advisory and project-lifecycle locking, publication renewal under ownership, staged file/index application and rollback remain required before a complete refresh transaction can apply. Framework-lock integration (implemented locally): Integrate the existing manifest advisory lock and project lifecycle lock with deterministic multi-root ownership. Account for their persistent metadata without weakening clean-child custody or deleting another owner's files; renew publication proofs while the complete ownership set is held before implementing prospective writes and rollback. Use the existing OS advisory-lock protocol at every observed root's manifest and lifecycle lock path, with fail-fast acquisition in the same fixed-order reservation set. Preserve pre-existing nonempty lock files byte-for-byte; refuse unsafe or empty retained files instead of altering them implicitly. Create missing files with exact ownership and clean only owned additions. Child cleanliness may admit only exact untracked files owned by the live reservation, never a metadata-directory exclusion. Prove ordinary framework writer exclusion, release after failure, pre-existing-file preservation, foreign sibling refusal and Windows byte-range interoperability. Publication renewal and prospective apply/rollback remain subsequent obligations. Local framework-lock evidence: A fresh 100-test reservation, framework-interoperability, refresh-custody, authority-delta, index, lifecycle-lock and manifest-store batch passes in 311.803 seconds on macOS. The real manifest-writer subprocess reaches the OS lock, cannot enter while refresh owns it, and enters after release. Native lifecycle writers are excluded at all observed roots; an existing holder prevents acquisition. Exact snapshots preserve existing idle files and all project/source bytes; late failure removes only owned additions, and a foreign metadata sibling remains visible and preserved. Tests also cover empty retained files, abandoned refresh tokens, changed bytes and loss of advisory acquisition. All fast gates pass: lint/format (939 files), layout, OpenSpec (2), rendered documentation (121 diagrams/538 files), dependency audit (0 vulnerabilities), fence tests (9), and driver/documentation reviews. Verification passes authority, reports three undeclared/disabled skips, and fails the unchanged stale receipt. Native Windows byte-range interoperability, fresh full-suite, installed-wheel and hosted qualification remain required; no release or complete-transaction claim follows from these local tests. Publication renewal under ownership (implemented locally): Renew the reviewed remote-publication proofs with the complete writer set held, preserving exact input custody and remote endpoint binding. Then stage prospective source/index/pin writes and failure-safe rollback; do not expose a public apply command before those transaction invariants are qualified. Bind acknowledgement to both exact local custody and the reviewed endpoint, deadline-policy and publication-proof identities. Thread live reservation ownership through endpoint resolution and every before/after transport custody check, without relaxing default readers. Acquire all Git and framework reservations before renewing every requested proof; yield only a live, non-reconstructible observation handle after equality is verified. Recheck local inputs at context exit and reject use after ownership ends. Prove stale/absent acknowledgement, remote/local drift, transport failure, lost markers, body failure and post-release use with real Git and exact preservation checks. This pre-apply context neither changes source/pins nor makes independent remote observations atomic or claims child acceptance. Local owned-publication evidence: The ten initial ownership tests pass in 343.745 seconds; the additional real two-child canonical-order renewal test passes in 54.498 seconds. The existing root-publication and transport batch passes 35 tests in 389.572 seconds, for 46 passing focused tests across three batches on the same production-source revision. Real transport runs while native Git/lifecycle writers are excluded; acknowledgement binds local nodes, endpoints, policy and proofs. Drift, transport failure, changed markers, body failure and use after release refuse without deleting foreign data. Exact snapshots preserve untouched source/index/pin/metadata bytes and mtimes. Lint/format (941 files), layout, OpenSpec (2), documentation rendering (121 diagrams/538 files), dependency audit (0 vulnerabilities), fence tests (9), and driver/documentation reviews pass. Verification passes authority, skips three undeclared/disabled gates and still fails the stale receipt. Full-suite, installed-wheel, authenticated transport and hosted qualification remain open; these local batches neither close #279 nor qualify 1.1. Prospective-tree preparation (raw capture/delta implemented locally): Prepare an exact prospective write set from verified child objects without invoking child hooks or filters. Define staged file/index/pin ownership, acknowledgement-bound application, manifest-last commitment and phase-specific recovery that preserves concurrent foreign changes. The current pre-apply context deliberately requires unchanged inputs on exit; transition to prospective-state validation must be explicit, not a bypass of that guard. Public refresh remains unavailable until apply, rollback, installed commands and the full matrix are qualified. First retain bounded immutable commit/tree/blob records from the publication verifier's fresh object store, before its disposal. Recompute Git commit, tree and blob hashes, include executable modes, raw symlink payloads and independent Gitlinks, and refuse portable path aliases or Git metadata paths. Read objects directly without checkout, hooks, filters, archive attributes or recursive child acquisition; recheck remote advertisements after capture. Bound entry count, metadata, per-blob and aggregate captured bytes. Derive deterministic add/remove/change records from complete old/new trees without claiming an executable filesystem transaction. Root-bound capture and aggregate multi-child limits are integrated below; ignored-file collision preflight, staged indexes/pins and rollback remain subsequent obligations. Root-bound tree capture (implemented locally): Bind the captured prospective trees to reviewed root endpoints/proofs under live ownership, with aggregate multi-child resource bounds. Raw symlink payloads and Gitlinks are data records, not permission to follow links or initialize independent children. The live owner must capture every selected endpoint/commit with the reviewed deadline policy, compare each fresh publication proof to the reviewed proof, and guard local custody before/after capture. Debit entry, blob and conservative metadata-byte bounds across the whole selection; return no partial result on failure. Reject post-release capture and preserve foreign changes on any error. These limits bound captured records, not fetched-pack disk consumption or Python heap overhead. Symlink/Gitlink records still require transaction preflight; no materialization, hook/filter execution or child acceptance is inferred. Physical custody/collision preflight (implemented locally): Capture physical before-file custody (including line-ending differences) and reject ignored/untracked foreign-file or transaction-metadata collisions before staging any writes. Then implement phase-specific source/index/pin apply and conservative rollback before exposing the public refresh command. Retain bounded physical file bytes, modes, clocks and node identities rather than reconstructing rollback data from normalized Git blobs. Observe links without following them; reject hardlinked/special/reparse nodes and unsafe ancestors. Inventory affected directories, including ignored entries, before admitting additions or directory replacement/removal; preserve unrelated foreign siblings. Bind current local object trees to the already observed child HEAD and derive changes against freshly captured published targets. Reserve transaction-metadata paths and keep independent nested Gitlink transitions behind separate recursive ownership/planning. Revalidate the physical plan through a live owner; no saved record authorizes replay. Bound physical and old-object capture across the selection. Case-alias and undeclared nested-ownership transitions must refuse before writes; their transaction handling remains part of the still-open apply/rollback work. Transaction staging (implemented locally): Stage prospective files and indexes using exact owned no-clobber paths, then implement phase-specific source/index/pin apply and conservative rollback. Retain actual physical before bytes and directory identities; never restore normalized Git blobs over foreign edits. Replace the pre-apply unchanged-input exit guard only with explicit, validated transaction states. Keep case-alias and nested Gitlink transitions refused until their separately owned transaction paths are qualified. Public refresh, full-suite/installed-wheel/hosted evidence and #279 remain open. Stage under an exclusively created root Git-metadata directory, never in a child worktree. Retain physical before bytes, original indexes/HEAD and root authority/lock bytes alongside prospective blobs and index records. Keep link payloads inert. Bind a bounded staged inventory to the live physical/publication owner; no saved directory grants replay authority. Validate Git index checksums and versions; retain unrelated entries and recovery metadata while invalidating only understood derived caches. Refuse unsupported mandatory/ambiguous extensions and hidden target flags. Test native Git interpretation, SHA-1/SHA-256, index versions 2–4, stale ownership, write failure, collisions and conservative cleanup. A crash-left or foreign staging directory must block another attempt, not be adopted. Verified object installation (implemented locally): Install verified Git objects. Exact ref, manifest and repository-lock transitions still need staging before phase-specific apply and conservative rollback. Prospective indexes alone do not make referenced objects available in a child. Keep publication proofs and before-file/node custody bound through this transition; preserve symbolic reference topology, unrelated root-index entries and concurrent changes. The live owner currently requires unchanged source/index/pin inputs on exit. Do not bypass that guard or expose public refresh before explicit transaction-state validation and complete recovery tests replace it. Current-tree snapshots alone do not preserve commit ancestry. Export a self-contained pack for the exact proven target from fresh publication storage, rejecting shallow prerequisites or filtered/incomplete closures. Validate pack/index hashes and native Git object connectivity before admission; bound captured pack/index bytes and object count under the reviewed transport deadline. Bind complete multi-child exports to current physical custody and the original publication proofs. Install only exact content-addressed pack/index files under direct child object directories, without overwriting existing data or advancing refs/indexes/pins. Immutable object-cache additions may remain after failure or rollback because other writers may already reference them; never delete them as transaction undo. Ref/manifest/lock transitions and phase-specific apply remain subsequent work, not a consequence of successful object installation. Metadata preparation (implemented and locally checked): Capture and stage exact ref, manifest and repository-lock transitions. Bind every symbolic-ref hop and exact loose/packed backing bytes, reserve all involved reference writers, and reject same-commit topology drift. Prepare inert selected-ref updates and root manifest bytes with only the reviewed commit delta; preserve exact no-op bytes and explicitly represent repository-lock invalidation without minting new acceptance. Reject conflicting shared-ref transitions. Keep original reference bytes/absence and proposed transitions in owned staging. The files-backend observer also handles per-worktree ref placement and absent loose parent directories without creating them. Reftable storage, unsafe/hardlinked ref nodes, excessive chains and oversized packed-ref captures refuse. Intermediate ref markers andpacked-refs.lockjoin the live reservation set. Optional metadata staging retains before/prospective bytes and explicit create/replace/remove/retain records; packed files and symbolic hops remain unchanged. A no-op preserves even existing stale lock bytes rather than claiming requalification. Missing locks stay absent. Registered-worktree guard (implemented and locally checked): Before logical apply, bind or refuse affected registered worktrees outside the observed selection. Capture bounded, NUL-delimited Git worktree records and exact registration/HEAD metadata per shared Git directory; reject changes after review. Refuse selected shared-ref updates that affect an unobserved checkout, unavailable/prunable registration or active foreign Git operation. Preserve unrelated idle worktrees and bare object-store owners without fetching, checking their source, locking their files, repairing registrations or changing branches. Test same-branch aliases, detached/bare/unborn registrations, shared selected refs, additions/removals, malformed/oversized observations and no-write preservation. This is repeated custody, not an atomic freeze against forced concurrent same-user Git operations. Local registered-worktree evidence: Metadata/reservation compatibility initially passes 19 tests in 118.946 seconds. The corrected registry, input-custody and reservation batch passes 49 tests in 284.789 seconds; the final protocol/metadata batch passes 22 tests in 14.266 seconds. The installation/staging/publication-owner integration batch passes 19 tests in 418.998 seconds, retaining exact original file bytes/mtimes except the explicitly additive verified object-cache files. Cases cover related and unrelated dirty worktrees, branch aliases, detached/unborn/bare registrations, missing locked checkouts, active foreign operations, corrupted HEADs, registration addition/removal and same-byte HEAD replacement. New registration invalidates prior approval; existing foreign data is not removed or repaired. The initial malformed registration test expected the wrong exception family; it now asserts the adapter's unsafe-path refusal explicitly. These are focused local batches, not full-suite, installed-wheel or hosted evidence. Architecture boundaries pass (11), as do lint/format (968 files), layout, OpenSpec (2), documentation rendering (121 diagrams/538 files), dependency audit (0 vulnerabilities), fence tests (9) and driver/documentation reviews. Verification passes authority, skips three undeclared/disabled gates and still fails the unchanged stale receipt. The scope projection retains 134 items, 113 open parents and 326 unchecked obligations, all open work targeted to 1.1.0; contribution readiness is false with no unclassified entries. The end survey finds no collectable branches/worktrees. Other checkouts, stashes, protected branches and retained lifecycle markers remain untouched. Metadata parents and reflogs (implemented and locally checked): Capture affected metadata-parent custody and define/stage reflog handling. Bind existing directory nodes and absent parents before approval; normalize only directories proved newly created by live reservations, checking their node identities through use and cleanup. Capture bounded before-log bytes for changed child HEADs and every symbolic-ref hop, with Git-resolved common/per-worktree paths and current logging policy. Reserve applicable log writers, preserve no-op or disabled/missing logs, and stage append-only prospective records using a validated root-repository committer identity and one captured timestamp across the selection, so shared branch logs have one consistent update. Include all original log bytes and directory custody in recovery staging; never modify live logs, refs or source in this preparation step. Qualify native Git log behavior, shared-ref deduplication, inode/ancestor drift, missing parents, bounds, foreign writers and conservative cleanup. The focused directory, reflog and reservation batch passes 42 tests in 17.180 seconds. Native Git comparisons cover symbolic chains, detached HEADs, true/false/always/unset logging, existing and absent logs, private and shared linked-worktree storage, bare-backed worktrees and SHA-256. Additional cases cover shared-log conflicts, invalid committer bytes, byte/count/depth bounds, foreign writers and same-byte replacement. Moving the same marker inode into a substituted owner-created directory now refuses live use and retains that directory and marker during cleanup. This is focused local evidence, not full-suite or release qualification. The input/reservation/metadata compatibility batch passes 86 tests in 338.633 seconds. Missing enabled-log parents normalize only under the live owner and are removed on release; disabled missing logs create no writers or parents. The strengthened native staging test passes in 131.139 seconds, checking exact before-log staging, prospective append bytes and directory custody while preserving every original file byte and timestamp. Its initial assertion used the wrong staging-role name; the corrected assertion names the existingmetadata-before-reflogrecord explicitly. The original staging/object-installation/publication-owner/architecture batch completes 40 tests in 783.076 seconds: its only failure is that corrected staging assertion; the other 39 pass. The separately successful native rerun is the corrected staging evidence, not a claimed green rerun of the whole original batch. Fresh consolidated qualification is recorded under RELEASE-INTEGRATION-001. Fast gates pass: lint/format (972 files), layout, OpenSpec (2), documentation rendering (121 diagrams/538 files), dependency audit (0 vulnerabilities), fence tests (9) and driver/documentation reviews. Verification passes authority, skips three undeclared/disabled gates and still fails the unchanged stale receipt. The scope projection retains 134 items, 113 open parents and 326 unchecked obligations, all open work targeted to 1.1.0; contribution readiness remains false with no unclassified entries. The end survey finds no collectable branches/worktrees; other checkouts remain clean and preserved. Application recovery retention (implemented and locally checked): Before enabling live mutation, add a live-stage operation that records applying state and retains all before-state on normal exit, body failure, short journal writes or failed synchronization. It must refuse expired custody and repeated arming, preserve staging limits, and never let a saved journal recreate live ownership. Fifteen focused staging checks pass, including six new arming/partial-write/sync-failure/expiry/bounds checks. The unchanged7cea43a5baseline completed 5,035 Python tests with 30 skips before this slice; that full run is not claimed for the new source. Terminal commit/rollback validation and actual source/index/ref/manifest application remain unfinished. Twenty native staging/object-installation/architecture tests also pass in 311.830 seconds. Lint, formatting and OpenSpec pass; the changed staging adapter is the sole lifecycle-driver TCB change and has been reviewed. Live application implemented locally: A complete live-only transaction authority now requires matching physical custody, verified object packs and staged metadata before reportingapply_supported. The earlier pure authority delta remains explicitly non-applicable. Application writes and synchronizes anapplyingjournal before mutation, installs exact staged packs additively, then applies staged child source/index/ref/reflog bytes, root index and lock, with the manifest last. Successful commit and rollback write explicit terminal journals before owned staging cleanup. Terminal commit validates prospective bytes/type/mode under the live reservation; rollback restores only paths still equal to before or prospective state, preserves foreign edits, and retains applying recovery staging when any path refuses. Object packs are never deleted by rollback. The publication owner's former unconditional old-input exit assertion is now a strict pre-apply check or explicit terminal-state check; preparation checks are unchanged. Exact no-ops perform no live file or redundant pack write. Review hardening now carries POSIX directory modes through add/remove and type-transition rollback, uses a no-clobber rename/link publication protocol tied to exact observed nodes, and validates complete prospective worktree membership plus unchanged member identities both immediately before the manifest and at terminal proof. Foreign tracked edits/additions remain untouched and prevent commit. Terminal journals precede committed-directory ownership transfer. Installed pack/index verification is bounded and no-follow under live keep ownership through terminal journal recording. Windows plans and exact application preflight reject changed selections with current or prospective symlinks. Local live-application evidence: Eight real-Git application tests pass in 471.302 seconds, covering the earlier commit/rollback/no-op cases plus unrelated tracked edit and foreign-addition refusal, terminal object symlink substitution, committed-journal failure with a new ref parent, and mocked Windows symlink refusal. Three transition/race tests pass in 0.012 seconds, covering directory add/remove modes, file/directory/symlink transitions and deterministic replacement-race preservation. The expanded ten-test object installation batch passes in 99.638 seconds, including no-follow symlink and FIFO terminal substitutions. The complete three-test file-custody batch passes in 76.884 seconds and all 16 staging compatibility tests pass in 46.849 seconds. These are focused macOS checks, not a fresh full suite, installed-wheel, native cross-platform, hosted or release qualification. Second-audit hardening treats initialized nested Gitlinks as opaque worktree members while revalidating their independent child custody and retaining the existing uninitialized-child refusal. Exact admitted hydrated-LFS node and payload-hash observations override pointer bytes only for unchanged paths. Replaced nodes remain named with descriptor-backed custody through terminal tree proof and are revalidated immediately before discard. Required same-filesystem hardlinks are proven before the first logical mutation. Object and directory-transfer validation now precedes committed journal publication; only the prevalidated in-memory ownership transfer follows it. Any ambiguous failure after committed publication suppresses rollback and retains the terminal journal/staging evidence, and normal cleanup removes that journal only after the other staged records. Second-audit local evidence: Eleven real-Git application tests pass in 662.674 seconds, including exact hydrated LFS preservation, hardlink preflight refusal without live-state change, pre-journal rollback and post-committed-journal evidence retention. Five transition/custody tests pass in 0.014 seconds, including opaque initialized/missing Gitlinks and a deterministic descriptor-held inode mutation. All 26 refresh-input/LFS compatibility tests pass in 71.556 seconds, ten object-install tests in 108.000 seconds, 16 staging tests in 47.637 seconds, three physical-custody tests in 55.374 seconds, three planning tests in 60.254 seconds, three real-Git CLI tests in 168.039 seconds, three CLI-surface tests in 0.048 seconds, 14 refresh-contract tests in 0.010 seconds and 11 architecture checks in 2.306 seconds. These are focused macOS source-tree results, not a fresh full suite, installed-command, native cross-platform, hosted or release qualification. Third-audit hardening now freezes terminal staging until its owner marker and every outer refresh reservation have released. Only then does exact cleanup begin; a bounded sibling copy of the committed journal remains until all staged records and the stage directory are gone. Marker, reservation or final-cleanup failure therefore returnscommitted-with-cleanup-retainedwith evidence rather than an ambiguous post-commit error. Retained terminal material remains non-replay evidence. Windows planning and application preflight now also reject directory add/remove/type transitions before acknowledgement or mutation while retaining ordinary file-only applicability. Hydrated LFS admission now requires a typed observation, so failed descriptor identity can no longer pass through the previous non-Nonecheck. Third-audit local evidence: Fourteen real-Git application tests pass in 922.581 seconds, including successful exact deferred cleanup, injected stage-marker and outer-reservation release failures returning committed cleanup retention, and mocked Windows directory-transition refusal. All 27 refresh-input/LFS tests pass in 60.295 seconds, four planning tests in 59.561 seconds, three real-Git CLI tests in 192.098 seconds, four CLI surface/result tests in 0.043 seconds, 16 staging tests in 64.038 seconds, ten object-install tests in 115.893 seconds, three physical-custody tests in 66.604 seconds, 15 reservation tests in 59.297 seconds, 16 publication tests in 158.555 seconds, five transition tests in 0.018 seconds and 11 architecture checks in 2.377 seconds. Fourteen refresh-contract tests pass in 0.013 seconds. These are focused macOS source-tree results, not a fresh full suite, installed-command, native cross-platform, hosted or release qualification. Medium-review follow-up limits committed cleanup conversion to the exact reservation-cleanup orchestration failure. Stage-marker and outer reservation artifacts receive distinct result labels; interrupts, resource exhaustion and programming exceptions propagate after terminal evidence retention. Apply results now exposeauthority_changedseparately fromfilesystem_writes: a clean exact no-op remains write-free, while a no-op retaining staging or lock artifacts truthfully reports persistent writes and no authority review. Medium-review local evidence: All 16 real-Git application tests pass in 958.229 seconds, including recognized stage/outer release retention and unexpectedRuntimeError/KeyboardInterruptpropagation with committed evidence. Five CLI result/render tests pass in 0.045 seconds, four planning tests in 55.668 seconds, 16 staging tests in 51.266 seconds, 16 publication ownership tests in 170.701 seconds and 15 reservation tests in 64.046 seconds. Format and lint pass. These are focused macOS source-tree batches, not a fresh full suite, installed-command, native cross-platform, hosted or release qualification. Final medium-review evidence: Body and release failures now propagate as one body-first exception group while terminal evidence remains retained. All 18 application tests pass in 971.493 seconds, including an ordinaryExceptionGroup, aBaseExceptionGroupcontainingKeyboardInterrupt, and the pre-existing post-commit transfer dual failure. All 16 staging tests pass in 43.595 seconds and 11 publication-ownership tests in 206.092 seconds; format and lint pass. These remain focused macOS source-tree batches. Wheel smoke now carries a pending installed-wheel refresh qualification: it initializes empty-relationship Gitlink authority, reviews and applies an exact published child commit, records documentation review and repository lock, pushes the root, then validates, lock-checks and plans a clean recursive clone at that exact pin. Fixturefile://permission is scoped to each harness Git command; production Git policy is unchanged. The focused source refresh CLI batch passes all three tests in 163.539 seconds, and format/lint pass. The installed-wheel journey is not claimed as passing until the maintainer runsmake wheel-check. Follow-up diagnosis reused the retained failed wheel workspace: direct installed-adapter planning and the same installed CLI both produce the valid initialization plan, including with the originalwheel-refreshproject ID. The fixture nevertheless had two deterministic defects: it read empty relationships from the wrong result layer, and the livegit submodule addcheckout was a linked Git directory that refresh custody correctly rejects as unregistered. The corrected live fixture uses an independent clone plus an explicit indexed Gitlink; only the final clean clone uses recursive submodule checkout. That narrow retained-wheel journey now passes end to end in 60.760 seconds. All 24 focused orchestration initialization tests pass in 17.646 seconds; format and lint pass. The final non-editablemake wheel-checkpasses in 744.945 seconds. After merging the latestmain, the exact candidate rerun passes in 802.619 seconds. Its installed refresh journey initializes root authority, applies the reviewed child pin, records review and lock authority, publishes the root, and validates a recursive clean clone with the exact child, index and manifest commit. Real-monorepo LFS compatibility now admits only the canonical Git LFS clean/process commands while binding their actual observed configuration bytes. Cleanliness status supplies empty command-local clean/process values and clears the required bit, so Git compares raw bytes and invokes neithergit-lfsnor a PATH-selected projection helper. Filter section and terminal variable names retain Git's case-insensitive semantics, while the exact lowercaselfssubsection remains mandatory. Pointer worktrees stay clean, and hydrated worktrees remain admissible only through exact indexed pointer size/hash and physical-node custody. Adversarialgit-lfs/catexecutable, malformed-pointer, wrong-hash, wrong-size, missing, type-change and unrelated-change regressions remain fail closed. Focused local evidence: 32 refresh-input/LFS tests pass in 71.825 seconds, 18 application tests in 945.719 seconds, 19 lifecycle/LFS compatibility tests in 18.817 seconds, ten refresh configuration/reference tests in 2.044 seconds and 14 refresh contract tests in 0.010 seconds. Format and lint pass. These are focused macOS source-tree batches, not fresh full-suite, installed-wheel, native cross-platform, hosted or release qualification. Publication re-proof now uses one shared bounded transient retry wrapper for verification, tree capture and object-pack capture. Up to three attempts use fresh disposable proof storage without sleep; only typed Git, transport, total-timeout and no-progress-timeout failures retry. One original monotonic deadline spans all attempts, with connect/no-progress/total subprocess bounds clipped to the remaining valid policy contract. Unpublished, changed-ref and malformed-proof failures remain single-attempt refusals. Returned publication evidence retains the original reviewed policy identity rather than a derived retry policy identity. Temporary proof-storage cleanup now preserves a simultaneous primary typed publication failure as the outer exception and retains the sanitized cleanup transport failure as its explicit cause. Semantic primaries therefore remain non-retryable; transient primaries retain their retry classification. Cleanup after an otherwise successful proof still refuses that attempt as transport failure, so no uncleaned attempt can directly return evidence. Transient-retry local evidence: All 28 direct publication tests pass in 7.884 seconds. The broader publication/ownership batch passes 100 tests in 309.312 seconds; 14 published tree/pack tests pass in 7.760 seconds, four refresh-planning tests in 59.360 seconds, eight refresh CLI tests in 155.710 seconds and all 21 real-Git refresh-application tests in 1001.712 seconds. These are focused macOS source-tree batches, not fresh full-suite, installed-wheel, native cross-platform, hosted or release qualification. Exact advertised branch tips now take a fail-closed narrow proof path: stable bounded advertisements select the lexically first directrefs/heads/*witness, then a fresh empty bare repository fetches only that fully qualified ref into its exact private destination with depth one and no tags. The fetched destination, resolved commit and commit tree must remain exact. Tags, pseudo-refs, hidden namespaces and ancestors cannot select this path; they retain the complete advertised-ref ancestry proof. Tree-only capture remains shallow. Source-transition pack capture unshallows only the same exact ref, then the existing empty-store self-contained-and-connected validation rejects missing prerequisites. A plain Git failure from shallow negotiation now consumes one of the same three attempts, cleans that temporary store and disables the optimization before a fresh full-history attempt. The original absolute deadline and clipped remaining process bounds continue unchanged. Timeout/no-progress errors retain their typed bounded shallow retries; semantic failures after successful fetch never invoke fallback. Canonical witness selection is now independent of that strategy: the first exact branch tip remains preferred on full fallback even whenrefs/changes/*sorts earlier, and its fetched ref/resolved commit plus the second advertisement are rechecked before proof. A real competing-ref planning fixture proves direct and forced-fallback proof and plan identities match. Exact-tip local evidence: All 36 direct publication tests pass in 12.059 seconds, including deterministic depth-unsupported fallback, fresh-storage, remaining-budget and timeout/no-progress cap checks. Sixteen refresh-publication tests pass in 197.418 seconds, six planning tests in 124.775 seconds, three physical-file custody tests in 55.248 seconds, four refresh object-capture tests in 2.016 seconds and six independent published pack tests in 4.248 seconds. Format and lint pass. These are focused macOS source-tree checks, not fresh installed-wheel, full-suite, cross-platform or hosted qualification. Exact-head root-only refresh now classifies each changed target asroot-pin-onlyonly when the clean independent child HEAD and reviewed publication proof both equal the requested commit. That mode omits local and remote full-tree capture, physical source planning, object export/install and child-byte staging/application. Mixed selections retain completesource-transitioncustody only for differing child HEADs. Target modes, empty/nonempty packs, physical custody and aggregate source writes are bound into plan/application identities. Exact child Git/worktree custody, root Git and prospective Gitlink URL/branch binding, and every exact-head remote proof are renewed before terminal manifest commit; drift rolls back still-owned root changes. Root-only local evidence: 28 publication transport tests pass in 7.993 seconds, 16 refresh-publication tests in 224.488 seconds, five mixed tree-capture tests in 202.533 seconds, four object-capture tests in 1.844 seconds, three physical-file tests in 73.573 seconds, 16 staging tests in 70.175 seconds, five reviewed-planning tests in 81.622 seconds, four public CLI tests in 311.590 seconds, 18 metadata/reflog tests in 4.944 seconds and five low-level application-transition tests in 0.016 seconds. All 32 exact refresh-input custody tests pass in 78.863 seconds, and all 27 live application/rollback tests pass in 1553.113 seconds. Format and lint pass. The installed-wheel fixture now selects and reportsroot-pin-onlyand proves the recursive clean-clone pin when wheel smoke is next run; this change did not rerun full wheel or cross-platform qualification. Committed terminal proof now rechecks live application inputs after the post-publication coherent check and while terminal state is validated before journal publication. A deterministic final-window race changes an exact-head child's HEAD, index and worktree together: commit refuses, root index/manifest roll back, rollback publishes its own terminal state without demanding prospective inputs, and every foreign child byte remains exact. The existing source-transition commit fixture traverses the same seam. Final-window local evidence: All 28 application/rollback tests pass in 1508.207 seconds, five planning tests in 97.475 seconds and four public CLI tests in 247.742 seconds. Format and lint pass. These remain focused macOS source-tree checks, not fresh installed-wheel or cross-platform qualification. Root-pin-only terminal custody now walks every observed initialized child at or beneath the selected top-level path usingPurePosixPath.is_relative_to; similarly prefixed siblings remain outside that boundary. Nested retained metadata is excluded from root-only staging as well. A real nested-Gitlink final-window race changes nested HEAD, index and worktree bytes after coherent validation; commit refuses, root authority rolls back, rollback does not demand prospective inputs and all foreign nested bytes remain exact. Nested-custody local evidence: All 29 application/rollback tests pass in 1502.846 seconds, 12 publication-ownership tests in 153.328 seconds, five planning tests in 75.305 seconds and 18 metadata/reflog tests in 4.963 seconds. Format and lint pass. These are focused macOS source-tree checks. Public reviewed front door implemented locally:litai onboard orchestrate refresh plan|check|applynow accepts one exact canonical typed request. Plan and check bind old/new authority, exact changes, current root/child custody, root-declared publication proof and the shared bounded fetch-deadline policy without root or child writes. Apply fully recomputes that plan, refuses a stale identity or missing acknowledgement before mutation, acquires the exact reviewed publication custody and invokes the complete live transaction. Public results distinguish committed changes from exact no-op, name the expected post-change root documentation review, preserve independent child authority and explicitly leave child acceptance and crash replay unqualified. The complete-commit fixture reconstructs root and child worktrees from a clean clone and bare remotes. Local public-front-door evidence: Three real-Git planning/refusal tests pass in 48.769 seconds, including mocked Windows applicability; three real-Git CLI tests pass in 234.370 seconds; three parser/help/canonical-request/rendering tests pass in 0.043 seconds. The 22-test shared repository deadline compatibility batch passes in 15.043 seconds, and the existing 16-test onboarding orchestration compatibility batch passes in 5.613 seconds. Eleven architecture checks pass in 2.471 seconds; lint and formatting pass. Documentation checks render 121 diagrams from 541 Markdown files, pass nine fence tests and report no high-severity dependency vulnerability. Saved recovery staging remains evidence only and has no replay admission API. Fresh full-suite evidence: The first complete run exposed one no-op noninterference regression after 3,512 tests: complete directory custody was collected even when the authority delta had no changes. The corrected branch retains full changed-tree custody while the no-op path performs no directory observation; its 20-test custody module passes. A subsequent freshmake python-checkpasses all 5,101 tests with 33 expected skips in 5,542.890 seconds. After merging the latestmain, the exact candidate passes all 5,597 tests with 30 expected skips in 13,272.672 seconds. Next implementation: Run native cross-platform and hosted checks; do not claim crash replay. Local metadata evidence: The initial custody/reservation batch passes 33 tests in 268.754 seconds; ten new native reference tests pass in 6.465 seconds. The corrected metadata/staging/reference/reservation batch passes 29 tests in 136.529 seconds, including no-op bytes, lock invalidation, same-terminal symbolic-chain drift, loose/packed transitions, SHA-256, private worktree refs, shared-ref conflict refusal and exact live-input preservation. The first staging run exposed a tuple-versus-JSON-list wire mismatch; the corrected wire representation passes the rerun. A separate minimal native reproduction showsgit fsckreporting a live branch-lock token asbadRefContent, then passing after release. The combined install fixture therefore requires object readability under ownership and full integrity checking after all reservation markers are released, without disabling reference validation. The corrected combined installation, object-capture and index batch passes 16 tests in 221.387 seconds: packed branch staging leaves the proposed loose ref absent and all original file bytes/mtimes intact, apart from the two additive pack/index cache files. The framework-lock/publication-owner/tree-capture/reservation compatibility batch passes all 42 tests in 768.300 seconds, including live ownership, remote drift and conservative cleanup. These are separate focused batches, not one fresh full-suite run. Architecture boundary tests pass (11). Lint/format (966 files), layout, OpenSpec (2), documentation rendering (121 diagrams/538 files), dependency audit (0 vulnerabilities), fence tests (9) and driver/documentation reviews pass. Verification passes authority, skips three undeclared/disabled gates and retains the stale-receipt failure. The scope projection retains 134 items, 113 open parents and 326 unchecked obligations, all open work targeted to 1.1.0. Contribution readiness stays false with no unclassified entries; the end survey finds no collectable branches/worktrees. Other checkouts and protected release history are untouched. Full-suite, installed-wheel, hosted and release evidence remain open. Local object evidence: The first five pack tests pass in 6.663 seconds. The expanded capture/installation-file/staging/physical/tree/publication compatibility batch passes 79 tests in 31.077 seconds. Native Git validates SHA-1/SHA-256 history in an empty store, including parent commits; corrupt pack/index bytes, prerequisites, remote drift and pack/index/object-count bounds refuse. Aggregate multi-child limits and exact proof equality are checked. Existing hardlinked cache files remain read-only; concurrent winners and changed temporaries are preserved, while owned partial writes are cleaned. The live-installation/pack/file batch passes 13 tests in 218.859 seconds: a remote-only commit is initially absent from the child, becomes readable with a passing native Git integrity check, and leaves original source, HEAD, indexes, pins and metadata bytes/mtimes unchanged except the two intentionally retained pack/index cache files. Keep markers are owned during installation, removed on clean exit, and stale handles refuse. The final 16-test pack/root-boundary/file batch passes in 9.601 seconds, additionally proving unavailable independent Gitlink objects are neither required nor acquired. These are separate focused batches, not one full run. All eight staging tests also pass in 1.346 seconds after strengthening the foreign-entry test to require refusal before cleanup, not just at exit. Lint/format (962 files), layout, OpenSpec (2), documentation rendering (121 diagrams/538 files), dependency audit (0 vulnerabilities), fence tests (9) and driver/documentation reviews pass. Verification passes authority, skips three undeclared/disabled gates and fails the unchanged stale receipt. The final scope sweep retains 134 items, 113 open parents and 326 unchecked obligations, all open work targeted to 1.1.0. Contribution readiness is still false, with no unclassified entries or open reviews. Other worktrees, protected branches, stashes and retained lifecycle markers remain untouched. These are focused tests, not full-suite, hosted or installed-release evidence. Local staging evidence: The initial staging/index/native-Git batch passes 11 tests in 115.615 seconds. The expanded index/staging/physical/tree batch passes 41 tests in 2.995 seconds, including a separate-process abrupt exit that retains staging and prevents a new owner from adopting it. Native Git reads SHA-1/SHA-256 indexes and root versions 2–4 while original source/index/pin bytes and mtimes remain unchanged. Coverage includes inert links, exact CRLF backups, per-file/aggregate bounds, partial-write cleanup, foreign-entry and same-byte inode replacement retention, expired handles, checksum/extension rejection and preserved unrelated root flags. The final combined index/staging/physical/tree/local-object/publication/ live-owner run passes all 57 tests in 257.161 seconds on macOS. The final scope sweep retains 134 items, 113 open parents and 326 unchecked obligations; every open item remains targeted to 1.1.0. The contribution sweep remains not ready with no unclassified contributions or open reviews. Protected branches, other worktrees and retained lifecycle markers were not changed. Lint/format (956 files), layout, OpenSpec (2), documentation rendering (121 diagrams/538 files), dependency audit (0 vulnerabilities), fence tests (9) and driver/documentation reviews pass. Verification passes authority, skips three undeclared/disabled gates and still fails the stale receipt. These are focused local checks, not full-suite, installed-wheel, native cross-platform or release qualification; #279 remains open. Local physical-custody evidence: The 40-test physical/local-object/tree batch passes in 10.230 seconds. Two real-Git live-owner tests pass in 126.060 seconds, and the five-case aggregate-boundary test passes separately. Coverage includes actual CRLF bytes, observed HEAD distinct from the root pin, ignored-file preservation, file/link/directory transitions, hardlinks, special nodes, path aliases, metadata protection, same-byte replacement, clock/mode drift, stale handles and raw blobs larger than 8 MiB. The initial 19-test batch failed because its CRLF fixture had not established clean index stat custody; correcting fixture setup preserved the runtime guard. The final combined physical/local-object/tree/live-owner/budget run passes all 43 tests in 136.383 seconds on macOS. Verification passes authority, skips three undeclared/disabled gates and fails the unchanged stale receipt. The contribution sweep has no unclassified entries or open reviews, but remains not ready; the scope sweep retains 134 items, 113 open parents and 326 unchecked obligations, with every open item targeted to 1.1.0. Lint/format (952 files), layout, OpenSpec (2), dependency audit (0 vulnerabilities), fence tests (9) and current review pins pass. The first documentation-render run timed out in Chromium on the unchanged money-calculation diagram; that failed run is not passing evidence. The unchanged retry passes all 121 diagrams across 538 Markdown files, followed by passing driver/documentation review gates. These focused batches are not full-suite or native cross-platform proof. Local tree-capture evidence: The initial four root-capture tests pass in 260.505 seconds. The final expanded aggregate-limit test plus tree contracts, raw capture and transport passes 40 tests in 126.205 seconds. Existing root-publication/owned-renewal compatibility passes 26 tests in 717.628 seconds; these are separate focused batches, not a fresh full-suite checkpoint. Native Git covers SHA-1/SHA-256, complete directory hashes (including empty directories), executable/binary/symlink records, unavailable independent Gitlinks, attributes without checkout/filter execution, corruption, object option rejection, remote drift and exact byte/mtime preservation. Multi-child capture enforces aggregate entry/blob/metadata bounds and retains foreign source changes on failure. An initial 17-test batch exposed timeout errors being remapped as tree errors; that defect was fixed and the final tests preserve the shared deadline diagnostic. Lint/format (946 files), layout, OpenSpec (2), documentation rendering (121 diagrams/538 files), dependency audit (0 vulnerabilities), fence tests (9), and driver/documentation reviews pass. Verification passes authority, skips three undeclared/disabled gates, and fails the unchanged stale receipt. Full-suite, installed-wheel, native cross-platform hosted and complete transaction qualification remain open; no child acceptance, issue closure or 1.1 release readiness is claimed. Local reservation evidence: The final fresh reservation, refresh-input, authority-delta and index-observation batch passes 65 tests in 237.263 seconds on macOS. It covers real Git writer refusal, shared-common-dir deduplication, packed references, same-commit symbolic-chain drift, separate-process contention, crash-retained blockers, partial-write cleanup and foreign-path preservation. An earlier 19-test run failed on a test wrapper missingdir_fdforwarding (corrected); another invocation passed its 60 loaded tests but failed on a misspelled extra module name. Neither failed run is qualification. Lint/format (938 files), layout, OpenSpec (2), documentation rendering (121 diagrams/538 files), dependency audit (0 vulnerabilities), fence tests (9), and current driver/documentation reviews pass. Verification passes authority, skips three undeclared gates and still fails the stale receipt. Full-suite, installed-wheel and hosted qualification remain open; this internal prerequisite does not close #279 or establish release readiness. - Qualify genuinely nonmutating split-index observation before claiming that refresh supports this index mode; retain explicit refusal until then. Git's shared-index timestamp refresh is a write, not observational evidence.
- Reuse BROWNFIELD-STATE-001 for applicable conversion-stage metadata, preserving each child's authority and release history rather than advancing it implicitly.
- Evidence:
- Internal inventory fixtures: 26 real-Git/boundary tests pass, covering
exact pin versus child HEAD, initialized/deinitialized/missing children,
absorbed and linked-worktree Git directories, nested child ownership,
shallow clean-clone reconstruction, mixed URL forms and configured branches,
SHA-256 object format, index conflicts, configuration drift/duplicates/includes,
portable path aliases, indirect files, descriptor replacement, bounded-process
failures and ambient Git-selector isolation. Byte/mtime snapshots remain
identical around successful and rejected inspection. Public profile and
authenticated remote publication acceptance remain unchecked below.
The 77 existing conversion/monorepo/operator tests and 59 initialization
tests also pass (162 focused tests total). Repository lint, formatting
(907 files), layout, both OpenSpec checks, documentation rendering
(121 diagrams / 533 Markdown files), dependency audit and nine fence tests
pass.
litai verifypasses authority and reports three undeclared/disabled skips; the existing current-receipt gate remains stale and fails. No receipt was rewritten and no full-suite, hosted or release claim is made for this slice. - Real Git fixtures prove exact path/URL/commit/branch/state projection and
read-only plan/check, including index/worktree disagreement and malformed or
inconsistent
.gitmodules; no command execution, fetch or mutation is relabeled as read-only inspection. Fifteen public-plan tests plus inventory/adoption/HTML-verify regressions pass as a 93-test batch. They cover exact expected identities, clone-location independence, declaration/child initialization/pin drift, child-authority non-loading, indirect/invalid/oversized/unknown declarations and dependencies, reobservation races, TTY boundaries and rejection of apply/discovery/debug-file options before any implicit host/config/telemetry/journal/mutator calls. All ten CLI-help tests also pass after adding both commands to the complete reference inventory; the final public/help batch passes 25 tests. Lint/format (910 files), layout, both OpenSpec checks, documentation rendering (121 diagrams / 533 Markdown files), dependency audit and all nine fence tests pass. Fresh full-suite and hosted qualification remain required on this slice's eventual landing revision. The unchangedb861cad3plan/check candidate subsequently passes the fresh full Python gate: 4,071 tests run, 4,041 passed, 30 expected skips, zero failures in 2,243.128 seconds. Its custom checkpoint was absent at launch and removed on success. This evidence predatesac2c3557's persistent manifest binding and the internal scaffold; it does not qualify those additions or claim hosted integration. - An existing superproject initializes through the public orchestration path
with byte-identical Gitlinks,
.gitmodules, child source and Git metadata; its original root files and independent child project authority remain intact. Default conversion still refuses nested submodules before any mutation. - Public root lock/plan/graph outputs bind all admitted exact child identities and cross-project relationships; changed pins invalidate affected authority rather than retaining a stale graph or treating child catalogs as root copies.
- Reviewed refresh/re-pin succeeds for a clean published child revision and refuses dirty, missing, unreachable, unpublished or concurrently changed inputs. Failure/partial publication preserves original and foreign files.
- Cover initialized and uninitialized children, shallow history, absorbed Git directories, nested submodules and nested worktrees, mixed GitHub/GitLab URL forms, rollback, and equivalent reconstruction from a clean clone. Local fixtures do not qualify authenticated remote publication checks by themselves.
- Fresh full Python and the complete hosted platform matrix pass on the landing revision; retain the public first-change journey before annotated issue closure.
- Triage the Windows socket-server thread warning reported during config migration
in job
103436482190; verify shutdown/join ownership or document intentional fixture behavior with evidence before claiming warning-free platform coverage. Locally repaired; hosted confirmation pending: The health-probe fixture registered socket closure after shutdown, so unittest's LIFO cleanups closed the socket first; it never joined the serving thread. A read-only probe confirmed that order. The isolated repair registers cleanup before starting, shuts down and joins a started thread before socket closure, and covers normal teardown, test-body failure and thread-start failure. The original traceback does not identify the creator, so this is a confirmed fixture defect, not proof of the historical warning's exact source. The separately running consolidated candidate remains unchanged; hosted Windows confirmation is still required. The repair passes seven focused tests, the eleven-test health/config-migration batch, and all 27 health/config-migration/durable-service conformance tests in 19.685 seconds. Lint, formatting (925 files), layout, both OpenSpec checks, documentation (121 diagrams / 537 Markdown files), dependency audit (zero), nine fence tests and the lifecycle-driver review pass. Regression evidence asserts shutdown then join before closure, closes on start failure without deadlocking, and proves a real server thread/socket are gone after an intentional test-body exception. The enclosing work item and warning-free hosted acceptance remain open. Documentation review is current. All-gateverifypasses authority, reports three undeclared/disabled skips, and still fails the pre-existing stale receipt; no receipt was rewritten.
- Internal inventory fixtures: 26 real-Git/boundary tests pass, covering
exact pin versus child HEAD, initialized/deinitialized/missing children,
absorbed and linked-worktree Git directories, nested child ownership,
shallow clean-clone reconstruction, mixed URL forms and configured branches,
SHA-256 object format, index conflicts, configuration drift/duplicates/includes,
portable path aliases, indirect files, descriptor replacement, bounded-process
failures and ambient Git-selector isolation. Byte/mtime snapshots remain
identical around successful and rejected inspection. Public profile and
authenticated remote publication acceptance remain unchecked below.
The 77 existing conversion/monorepo/operator tests and 59 initialization
tests also pass (162 focused tests total). Repository lint, formatting
(907 files), layout, both OpenSpec checks, documentation rendering
(121 diagrams / 533 Markdown files), dependency audit and nine fence tests
pass.
[x] SOURCE-GENERATION-PROGRESS-001 — Bound coding-agent progress by workload
- Priority: P0 (two exact native Windows portfolio runs killed an otherwise materialized Component before source admission)
- Release target: 0.9.0
- GitHub issue: #304
- Observed behavior: Runs
20260904T063515Z-31e57aaband20260904T073937Z-07157307both fail the same collector Component ascoding_cli.output_limitafter Codex writes a complete-looking source tree. The bounded process adapter kills either stream at 1 MiB and therefore never reaches generated-tree validation. - Expected behavior: Normal source-generation progress remains bounded but may use a workload-sized budget; small JSON tasks and stdout retain their tighter bound. A true stream overflow still kills the complete process tree and fails closed.
- Conclusion: JSON-task responses and source-generation progress accidentally share
one 1 MiB stderr default. Codex documents
execprogress on stderr, and a relaxed live replay measured 745,534 stderr bytes versus 498 stdout bytes for one ordinary source call before passing the complete portfolio. A subsequent empty-cache replay measured one ordinary source call at 1,091,852 stderr bytes versus 610 stdout bytes, directly crossing only the old stderr bound. Source-generation stderr should use the existing 16 MiB generated-tree budget while JSON-task stderr and all stdout remain at 1 MiB. - Competing hypotheses: A runaway agent is contradicted by the relaxed replay completing normally. Stdout overflow is contradicted by the measured asymmetry and Codex's documented stream contract. Retry is not the underlying fix because two consecutive exact runs failed and output-limit remains a deterministic safety boundary rather than a transient source-shape error.
- Falsification: The theory is wrong if an empty-cache replay exceeds the old bound on stdout rather than stderr, grows beyond the new finite source-progress budget, or still fails at this boundary with the larger stderr allowance.
- Implementation:
- Give
CodingCliSourceGeneratora 16 MiB stderr default tied to the existing generated-source byte budget; retain the 1 MiB stdout and JSON-task defaults. - Preserve concurrent draining, timeout, exact stream-overflow classification, process-tree termination, and secret-free public error/report boundaries.
- Give
- Evidence:
- The bounded-reader regression accepts stderr one byte above the task limit under the source-generation budget, while existing stdout/stderr overflow cases still fail closed.
- Invocation contracts prove source generation selects the larger stderr bound and JSON tasks retain both 1 MiB bounds.
- The empty-cache NVIDIA Windows portfolio records preflight at 1 stdout / 3,057 stderr bytes and its six generation subprocesses at 512 / 664,381, 1,152 / 538,448, 581 / 834,640, 733 / 490,824, 854 / 836,566, and 610 / 1,091,852 stdout / stderr bytes. With the finite source allowance it passes 28 generated tests, four verifier cases, all nine assertions, all five SBOM members, and the independent cross-process flow.
- Focused source/default/task-bound regressions pass, followed by the stable uninterrupted Python gate: 3,377 tests pass with 28 expected skips in 1,358.088 seconds.
- Exact commit
5cf7100b1022a52127410e0da8797284be133217passes all 15 hosted Linux, macOS, and Windows jobs in run33858381265.
[~] SAMPLE-TOOLCHAIN-DEMAND-001 — Discover compilers only for selected variants
- Priority: P0 (a selected non-C++ native-worker portfolio fails before generation
when the host correctly omits the unselected
lang-cpptoolchain) - Release target: 1.1.0
- Previous release target: 0.9.0
- GitHub issue: #303
- Observed behavior: Exact NVIDIA Windows run
20260904T055433Z-b46b04b8materializes the clean candidate and then fails inrun_all()at unconditionaldiscover_cpp_toolchain(), beforedurable-split-servicereachesrun_sample(). The CPU worker masks this boundary violation because it already has a compiler. - Expected behavior: Sample execution discovers only toolchains demanded by the
selected Component/Flavor variants; a Python/JavaScript portfolio does not require
lang-cppor a compiler fromos-base. - Conclusion: The top-level eager discovery is a second, obsolete universal- toolchain authority. Remove it and retain discovery in the existing C++ execution branch, where missing C++ remains a hard failure for an actually selected C++ variant.
- Competing hypotheses: A worker misconfiguration cannot explain why an unselected
compiler is queried. Adding C++ to
os-basecontradicts ADR 0033 and would mask the invalid dependency edge. The durable Standard branch does not consume the optional host-E2E C++ toolchain. - Falsification: The theory is wrong if forbidding C++ discovery still prevents the
selected durable sample from entering execution, or the repaired native run later
reaches a legitimate durable operation that selects
lang-cpp. - Implementation:
- Remove top-level C++ discovery and pass no shared compiler into selected sample execution; the C++ host-E2E variant retains its local discovery fallback.
- Add a regression that forbids C++ discovery across an aggregate containing the durable portfolio while preserving the normal report contract.
- Evidence:
- Focused regression and complete sample-ladder module pass: 89 tests with 6 capability skips.
- Uninterrupted Python gate from test one: 3,372 tests pass with 30 capability skips in 1,378.358 seconds.
- The exact NVIDIA Windows durable portfolio passes on the compiler-free host.
[~] HOST-CODEX-PACKAGE-001 — Install the complete Codex runtime closure
- Priority: P0 (the managed Windows Codex executable exits successfully but cannot write files because its required code-mode host was not installed)
- Release target: 1.1.0
- Previous release target: 0.9.0
- GitHub issue: #302
- Observed behavior: The NVIDIA Windows fan-out selected the exact managed Codex
executable installed from the declared standalone archive. Live model preflight
then returned zero without a response file and diagnosed a missing adjacent
codex-code-mode-host.exe. The same account, model, task, and host succeeded with the system Codex package, which includes that companion executable. - Expected behavior: Managed coding-agent artifacts provide and verify their entire
required runtime closure while exposing only their declared executable directory
on
PATH. - Conclusion: The official standalone Codex asset is not a complete installation for
file-writing code-mode tasks. Every supported host tuple must consume the official
codex-package-*asset, declare its runtime companions, preserve their directory topology, and invalidate an installation when a required companion disappears. The generic artifact contract—not Codex-specific installer code—owns these rules. - Competing hypotheses: Authentication, model availability, SSH transport, and the task itself are contradicted by the system package succeeding on the same worker. An unreported nonzero process failure is contradicted by the captured zero exit and explicit missing-host diagnostic.
- Falsification: The theory is wrong if the official package is installed with every declared companion intact and the same exact live preflight still reports the host missing or fails before producing its response file.
- Implementation:
- Extend managed-artifact SBOM parsing with safe, duplicate-free required runtime paths and verify those paths whenever an installed manifest is reused.
- Normalize the primary executable within the first declared
PATHdirectory so package-relative companion lookup remains intact. - Pin the official package URL and digest for all five supported OS/CPU tuples in both framework and project-template SBOMs.
- Evidence:
- Package fixture coverage proves the primary executable and adjacent host remain
in
bin, and deleting the host invalidates the managed installation. - Strict CycloneDX parsing and tuple-level regressions require all five Codex realizations to select package assets and declare their code-mode host.
- The uninterrupted final-code local Python gate passes all 3,372 tests with 30 expected skips after lifecycle-driver and documentation authority review.
- The exact NVIDIA Windows worker installs the new package and completes live model preflight plus the durable split-service portfolio.
- The exact hosted release gates pass.
- Package fixture coverage proves the primary executable and adjacent host remain
in
[x] CONVERSION-WORKSPACE-LINKS-001 — Reproduce declared sibling topology in disposable baselines
- Priority: P0 (the conversion gate changes the source root depth and can make a valid host-heavy repository fail before its own build starts)
- Release target: 1.1.0
- Previous release target: 0.9.0
- GitHub issue: #299
- Observed behavior: A reported Kit workspace resolves a dependency from a source
file through
../../../omniverse-kit/kit/_build/.... A controlled equivalent succeeds from the live checkout, then the identical recorded command fails after conversion resolves it beneath.literate-ai-convert-baseline-*/omniverse-kit. The exact public Kit App Template revision used for the first positive native conversion does not contain that particular reference; the isolated reproduction establishes the framework mechanism without claiming that public file does. - Expected behavior: An operator can explicitly bind each required external sibling into both disposable conversion workspaces. The binding is validated, finite, collision-free, auditable in baseline/parity evidence, and excluded from retained source identity. Portable destination topology is harness authority; operator-local source locators and linked contents are not project authority.
- Conclusion: Quarantine, direct baseline, both wrapper-parity passes, lift-and-shift,
and retained-receipt execution all change the source root's depth. The harness
copied retained source but had no input for external sibling topology. A single
typed Python/OS adapter must validate explicit
DESTINATION=SOURCEbindings and project them beside each disposablelegacy/implementationroot. Recording only sorted destinations keeps committed evidence portable; an opaque locator identity binds each runtime request without publishing a host path. - Competing hypotheses: A package-manager environment override and a missing prerequisite artifact are falsified by the live and disposable runs sharing the same command/environment while the external sentinel exists. A different path-relative interpretation is falsified by resolving the dependency from the exact declaring file in both roots. #290 remains distinct: the workspaces still live below the project for container visibility.
- Falsification: The theory is wrong if the supplied binding does not restore the exact source-file-relative target, or the reported real repository still fails on the same absent sibling after its required destinations are mapped.
- Implementation:
- Add repeated
--harness-workspace-link DESTINATION=SOURCEinputs to conversion and retained-receipt execution; conversion planning validates without writing. - Centralize safe path resolution, overlap/collision limits, POSIX symlinks, Windows directory-link fallback, post-run identity checks, and cleanup in one host adapter.
- Use the same binding set for direct baseline, pre-lift parity, post-lift parity, and later retained-receipt execution; reject missing or extra destinations.
- Keep source locators out of committed evidence and bind their opaque identity into each retained lifecycle request. A raw generated Make invocation fails with an actionable projection diagnostic instead of silently using bad topology.
- Add repeated
- Evidence:
- The controlled live checkout succeeds, the unmapped conversion fails and rolls back exactly, and mapped conversion passes baseline plus both parity phases.
- Resolver/materializer regressions cover sorting, path secrecy, missing/unsafe/ overlapping/duplicate sources, collision, tamper detection, and cleanup.
- Retained receipt execution rejects an omitted map, succeeds with the qualified destination, records an opaque runtime identity, and emits no host locator.
- The complete 135-test conversion, receipt, CLI, link, and manifest-lock slice passes locally.
- The uninterrupted final-code Python gate passes all 3,370 tests with 30 expected skips after both authority review markers are current.
- Exact Windows CI and native CPU fan-out prove the directory-link realization; the latter passes the complete durable split-service portfolio.
- The reported native source-linked workspace resolves its real mapped sibling
and advances until a distinct historical
repo_manartifact is unavailable.
- Closure reconciliation: Implementation
c23f141fand qualified descendantd03c73f1e1ccbc0b3b6418ea13dadcbedad41a0care ancestors of the current integration candidate. Hosted run 33851431385 is a terminal 15/15 pass on that exact descendant; issue #299's terminal evidence records resolution of the real missing-sibling mechanism. The unrelated unavailable artifact does not reopen that boundary or satisfy other native conversion acceptance. Five workspace-link tests and the derived-release-skill fixture pass as a six-test confirmation at33630a4f(2.994 seconds). - Next action: Complete; preserve the historical qualification above. Native nested linbuild work remains on CONVERT-NESTED-GIT-001.
[x] PROJECT-MANIFEST-LOCK-002 — Retry a vanished just-opened POSIX lock inode
- Priority: P0 (a nondeterministic macOS full-suite failure prevents an exact green 0.9.0 release gate)
- Release target: 0.9.0
- GitHub issue: #300
- Observed behavior: Exact-candidate macOS/Python 3.14 CI returned
project.manifest_lockfor one of two concurrent exact-snapshot writers. The same failure reproduced locally on Python 3.13; its chained cause was an immediateFileNotFoundErrorfrom the pre-acquisition lock-pathlstat, not a lock timeout. - Conclusion: POSIX idle cleanup can unlink the lock inode after another process has opened it but before that process inspects the path. Close that unheld orphaned descriptor and retry the complete open/identity/acquire sequence. Continue to reject an extant different inode, a symlink, or any post-acquisition replacement.
- Competing hypotheses: A Python 3.14-only
flockregression, the test's join/queue deadline, and the Windows 30-second acquisition deadline are contradicted by the Python 3.13 reproduction, clean child exit, exact chained exception, and immediate failure. A malicious replacement is contradicted by the vanished path in a private temporary directory, while the extant-replacement regression remains fail-closed. - Evidence:
- A deterministic regression unlinks the path between
os.openandlstat, then proves acquisition succeeds through a fresh inode and idle cleanup removes it. - Existing symlink and post-acquisition replacement regressions remain green.
- The real two-process compare-and-swap test passes 500 consecutive fresh-process iterations; the unfixed implementation failed at iterations 19 and 28 in two independent runs.
- Exact run
33836023512passes macOS/Python 3.14 and every other hosted cell.
- A deterministic regression unlinks the path between
[x] RELEASE-0.9-READINESS-001 — Remove hosted-runner timing from browser readiness
- Priority: P0 (a nondeterministic macOS full-suite failure prevents a trustworthy 0.9.0 release gate)
- Release target: 0.9.0
- GitHub issue: #237
- Conclusion: The production browser-frontend readiness loop retains its bounded contract deadline and HTTP probe. The unit fixture must control readiness state directly instead of asking a heavily loaded hosted runner to schedule a real child HTTP server before that deadline.
- Evidence:
- The observed macOS Python 3.14 failure occurred after 2,926 otherwise passing tests at the readiness deadline; the same lifecycle passed the complete local suite and other platform jobs, supporting scheduling-sensitive fixture setup rather than a deterministic lifecycle failure.
- The regression returns two not-ready observations before readiness, proves both browser viewports run, and asserts process-tree stop/release on success.
- A controlled monotonic deadline with readiness held false produces the exact bounded timeout and still asserts process-tree stop/release.
[x] RELEASE-0.9-DEFECTS-001 — Resolve the pre-release integration defect cluster
- Priority: P0/P1 (release-blocking correctness and operability found while exercising the already-landed 0.9.0 architecture)
- Release target: 0.9.0
- GitHub issues: #219, #220, #221, #222, #223, #224, #225, #226, #227, and #228
- Conclusion: Fix the violated boundary contracts rather than masking their symptoms. Atomic update rollback restores directory shape and preserves the validation diagnostic; conversion derives repository policy from Git or fails closed; package catalogs remain whitespace-clean; Git transfer policy is shared, progress-aware, provenance-recorded, and large-repository-safe; worker checkout is shallow by default with explicit bounded/full-history modes; wheelhouse export owns a disposable resolver rather than assuming the CLI environment contains pip; installed-distribution identity excludes bounded installer bookkeeping; editable metadata drift is explicit; Standard source failures retain bounded, redacted coding-CLI diagnostics outside derivation identities.
- Evidence:
- Rollback tests prove upstream-added directory skeletons disappear and the original validation code/message survives after restored bytes.
- Real-Git conversion tests derive a non-
mainremote HEAD and reject an ambiguous remote unless--default-branchis explicit. - Catalog parity tests reject blank lines at EOF in both framework and template package Flavor specifications.
- Injected-clock Git tests allow active work beyond five minutes, terminate quiet work at the inactivity bound, and carry per-field policy provenance through lineage and parent checkout.
- Worker command and functional Git tests cover depth-one branch, tag, and exact reachable-SHA materialization plus bounded-depth and full-history opt-ins.
- Unit and wheel-smoke integration cover uv-tool wheelhouse export, pip bootstrap of that exact wheel, installer-invariant identity, and payload/metadata drift.
- Version-authority tests distinguish stale editable metadata from strict non-editable wheel mismatch.
- Standard lifecycle regression preserves
coding_cli.generated_metadata_invalidwhile bounding and redacting its detail; uncoded exceptions retain the generic runner-failure code.
[x] RELEASE-0.9-DEFECTS-002 — Resolve defects found by installed lifecycle qualification
- Priority: P0 (the installed distribution, focused service test, and host install/uninstall cycle each exposed a deterministic release-gate defect)
- Release target: 0.9.0
- GitHub issues: #231, #232, and #233, #241, and #242, and #248
- Conclusion: Repair each violated contract independently. Keep compatibility
allowlists synchronized with the shipped catalogs; make service test doubles
implement the production entrypoint-aware call shape; force a same-version host
install to replace stale console scripts; isolate the private Python closure from
repository bytecode and interpreter startup policy; remove only
manifest-named install assets while preserving independently owned siblings; and
keep installer fixtures native to their host while treating environment names
case-insensitively on Windows. Atomically claim shared Windows Job Object
ownership before termination so concurrent bounded-output readers cannot
double-close or dereference a cleared handle. Treat uv's recorded
uv_build.jsonas installer bookkeeping, just likeuv_cache.json, so pip and uv reconstruct one logical framework payload from the same wheel; then re-pin the lifecycle driver only after the implementation set is final. - Implementation:
- Add both multi-entrypoint evidence schemas to the v2 compatibility allowlist
and exercise the packaged catalog (#231,
8fb36224). - Update packaged-service doubles to accept and assert the optional third
package_entrypointargument so their assertions execute (#232). - Route capability probes through the shared SSH helper so the configured transport and POSIX/Windows command boundary are honored.
- Force same-version pip replacement and make uninstall preserve sibling tools, caches, worker data, configuration, and state not named by its manifest.
- Run the private-runtime pip install with ambient
PYTHON*startup policy removed, so Make's repositoryPYTHONPYCACHEPREFIXcannot place recorded bytecode outside the installed environment; preserve operator package-index and proxy policy for this online host installer. - Canonically order multiple verifier-command results during source-only admission and reject duplicate command authority before execution.
- Select the verified native worker-bootstrap launcher before legacy user or
ambient
litaicommands, using the same selection for lifecycle execution and evidence acknowledgement. - Make the installer regression construct the current host's native venv and launcher shape, and assert preserved pip/index/proxy policy by case-insensitive environment-variable name (#241).
- Give
ProcessTreeOwnershipone synchronized Job Object claim operation and route concurrent termination/release through it (#242). - Exclude uv's recorded
uv_build.jsoninstaller detail from both independent installed-distribution observers without excluding framework-owned metadata (#248). - Review the final declared TCB diff, record the lifecycle-driver identity, and retain clean gate evidence (#233).
- Add both multi-entrypoint evidence schemas to the v2 compatibility allowlist
and exercise the packaged catalog (#231,
- Evidence:
- The focused catalog, packaged-service, SSH transport/probe, installer, and uninstaller regressions pass.
- The failing exact install contained 401 recorded bytecode paths under the repository object cache; the same clean source installed outside Make had no payload paths outside its private runtime, falsifying wheel/source corruption and identifying inherited Make policy as the cause.
- Live macOS and Linux installs exposed identical non-canonical-origin identities; reinstalling with the exact recorded origin converged both platforms on the project-pinned distribution identity.
- A source-patched coordinator reached the exact installed Ubuntu receiver after an executable but broken legacy launcher had intercepted the first attempt; the receiver then returned authenticated typed evidence for the independent accepted-source authority rejection.
- Focused installer tests pass on POSIX and Windows, and exact-commit hosted sample composition passes its native install/uninstall/reinstall cycle on Windows (#241).
- A deterministic concurrent-termination regression proves a shared Windows Job Object is terminated and closed at most once, with no reader-thread exception and unchanged fallbacks (84 focused tests and 10 subtests pass, #242).
- Clean installs of one exact wheel through pip and modern uv produce the same
framework distribution identity in both the in-process observer and the
stdlib-only worker bootstrap: 29 focused contracts pass, and real macOS/pip
and Linux/uv installs of
44cdbfc4both resolvesha256:0b317a5ef7f4e1adf89c17e2833c670eea98bfecf0266f9a74ae38315f425bbcafter excluding onlyuv_build.json(#248). - The final macOS Python gate passes 3,304 tests with 31 expected skips after
recording lifecycle-driver identity
sha256:af55e1a98c04fbce2bfc46c66821c4d38da68854fefa55784ad0e2eb204296c2and sample-runner identitysha256:a690835d6bfe53115c9eedebd4e7655b9e2edf4f2bd8365dab2abe6d45cfa81e. - The repaired install/uninstall/install cycle passes in exact-commit hosted sample-composition jobs on macOS, Linux, and Windows.
[x] RELEASE-0.9-DEFECTS-003 — Resolve late cross-layer release blockers
- Priority: P0/P1 (newly reported update correctness plus deterministic defects exposed by the live durable-split qualification)
- Release target: 0.9.0
- GitHub issues: #243, #244, #245, and #246, and #249, and #250, and #252, and #253, #254, and #255, and #256, #257, and #258
- Conclusion: Preserve each existing authority boundary while repairing the exact
cross-layer mismatch. Locked generation must replay a Component-scoped Flavor
selector only against its named node; project update must validate one complete
prospective add/update/remove transaction rather than invalid intermediate
subsets; public-interface edges order lifecycle work without injecting runtime
artifacts; and empirically transient malformed generated trees retain strict
source rejection while receiving the existing bounded fresh-workspace retry.
Release checking for a legacy policy may admit only the sole authority-marker
document identified by project validation; the release gate must still prove
that its post-prepare marker is current. Tracker CI guidance must bind GitHub's
commit filter to the inspected checkout revision rather than the literal token
HEAD, which this GitHub CLI does not resolve and therefore reports as no runs. Portfolio verification must apply canonical-evidence rules at the evidence boundary without imposing them on valid product JSON, and must aggregate each nested Standard lifecycle root rather than treating the portfolio as legacy. Make must run framework-importing gate scripts through the managed runtime that their target already prepares. Provisional fan-out checkpoints must bind exact source and live-selection authority, and an explicit one-shot coding-CLI/model selection must retain CLI-flag provenance through the nested remote worker. POSIX interpreter discovery must remain one shell command so its internal semicolons cannot escape the outer fail-fast chain. Git LFSfiles: nulldenotes an empty current-tree manifest, while every other malformed shape stays invalid. A zero-exit Codex task that omits its response must retain any captured workspace-isolation failure instead of being mislabeled as model unavailability. - Implementation:
- Share the planner's scoped-selector grammar and apply each selector to only its named locked Component (#243).
- Materialize and validate the complete project-update transaction once,
retaining conflicts/local ownership and atomic rollback; add repeatable,
conflict-only
--take-upstream PATHdecisions so dependency-closed selected catalog changes can commit without hand-copying between transactions, plus removal-only--keep-local PATHfor retired compatibility inputs still used by local Component authority (#244). - Restrict Standard build providers to exact
ARTIFACT_EXPORTedges and package providers to exactPACKAGEedges; keepPUBLIC_INTERFACEin ordering and generation context only (#245). - Add only
coding_cli.unexpected_outputandcoding_cli.non_utf8_sourceto the existing bounded transient retry set; do not ignore, delete selectively, or admit those outputs (#246). - Let
release checkdiscover the sole validated documentation-authority marker document when a legacy release policy predates the explicit declaration, without broadening prepare or admitting unrelated scope (#249). - Resolve and validate the checkout's exact commit in the filesystem tracker boundary, then project that immutable revision through tracker and release guidance without making pure forge classification depend on Git (#250).
- Accept one strict product JSON object independent of key order, project finite product numbers into tagged-decimal evidence, and aggregate both nested Standard root reports with their exact test and SBOM members (#252).
- Invoke the changed-skill evaluator script through
RUN_PYTHON_COMMAND, leaving bootstrap-Python discovery and the external evaluator command distinct (#253). - Version and bind fan-out checkpoints to every worker's source identity/revision and the admitted coding CLI/model after source capture (#254).
- Carry the controller-admitted coding CLI/model as explicit remote-worker
arguments and forward them to
run_samples.py; environment export remains for subprocess authentication/configuration, not provenance (#255). - Group POSIX Python discovery in the current shell, retaining its selected
interpreter for later phases while making the complete fragment one operand in
the remote command's
&&chain (#256). - Normalize Git LFS's version-3.8 null files manifest to an empty list before exact current-tree hydration verification, retaining invalid-shape rejection (#257).
- Reproduce #244 from Horde's exact pre-migration commit: the unreviewed
dependent-skill adoption fails validation and leaves a byte-clean tree; prove
canonical Flavor-name migration plus explicit reviewed catalog decisions
complete the atomic update. Dependency-identity and retired-input regressions
cover fail/rollback, invalid selection, success, apply evidence, and closure.
Exact
ffc22b9b->9d020023evidence records 87 adopted files, 37 ordinary safe changes, fourtaken_upstreamskill conflicts, onekept_localretired workflow, preserved remaining local/conflict authority, and a successful post-transaction validation with authority-review enforcement intentionally disabled because any update makes that marker stale by contract. - Share Codex workspace-write failure classification between source generation and JSON tasks so preflight preserves a captured bubblewrap failure even when Codex exits zero without writing the requested response (#258).
- Evidence:
- Focused lock/selector tests prepare every node across both durable-split locks with its exact Component-scoped Flavor selection (#243).
- A composite update regression proves parent updates and framework additions are
both present at the sole final-validation boundary; focused removal, staging,
failure-injection, and rollback tests prove baseline-identical catalog
retirement and exact restoration of files, directories, provenance, and
lineage (#244). An isolated export of the reported derived project reproduced
the old intermediate
generate.duplicate_flavor_aliasfailure before the fix. - A public-interface-only lifecycle graph completes with dependency ordering and no provider artifacts in any build plan (#245).
- Focused generation tests prove root-level and non-UTF-8 derived contamination are removed by a fresh bounded retry, while persistent contamination still fails at the exact bound (#246).
- A real-Git release regression reproduces the two-commit prepare-then-review sequence from #249; the reviewed marker is admitted, while explicit policy authority and unrelated scope-creep regressions remain green.
- Exact tracker and release-guidance regressions prove the emitted GitHub command
selects the inspected commit. Live
bac49cdbevidence currently falsifies the literal-HEADcommand: it returns[], while the exact SHA returns run33679167748(#250). - The repaired live durable-split portfolio passes generated build, test,
independent flow, lock, SBOM, and browser-contract verification: 15 generated
tests, 4 independent lifecycle cases, 9 portfolio assertions, and all five
Component SBOM members pass with
gpt-5.6-solon macOS (#252). -
make skills-checkpasses with Literate AI absent from the bootstrap interpreter and present only in the target's managed runtime (#253). - Fifty-two remote-fan-out tests pass, including source/revision/CLI/model checkpoint separation, prior-format invalidation, POSIX/PowerShell selection propagation, incomplete-selection rejection, and an injected prefix failure that cannot resume after Python-discovery semicolons (#254, #255, #256).
- The canonical clean
make python-checkpass completes all 3,311 tests with 29 expected skips after the checkpoint repair run is discarded. - A fresh source-identity-bound Ubuntu 24.04 NVIDIA run resumes zero workers,
preserves the explicit
codex/gpt-5.6-solselection through the nested worker, and passes the durable split-service portfolio: 15 generated tests, 4 independent lifecycle cases, 9 portfolio assertions, all 5 Component SBOM members, and the cross-process flow. The successful workspace is removed. - Exact-commit Ubuntu 24.04 CPU qualification reproduced the fail-fast defect:
stale Git setup was followed by a masked
git showerror; after directly fetching the exact object, the same command continued with unsetrun_rootand attempted/remote_source_guard.py. The grouped-fragment regression prevents that suffix execution while retaining successful discovery (#256). - Git LFS 3.8.0 on macOS reproduces the exact empty-tree
{"files": null}response; focused checkout-skill tests accept null, reject a non-array object, and retain shallow/submodule/hydration behavior (#257). - Exact-source Ubuntu 24.04 CPU qualification reproduced Codex exiting zero with
no response after
bwrap: loopback: Failed RTM_NEWADDR; danger-full-access with the same authenticated CLI/model succeeds, and a solo workspace-write run reproduces the failure. Focused task and generation tests now report the shared isolation error while retaining generic response-missing behavior (#258). - An authenticated Ubuntu 24.04 RTX Pro 4500 run transfers and verifies the exact clean source identity, resumes no checkpoint, and passes 15 generated tests, 4 independent lifecycle cases, 9 portfolio assertions, all 5 Component SBOM members, and the cross-process flow; its successful workspace is removed.
- Exact-revision Linux and native Windows fan-out passes after the repair; the
final exact commit also passes all 15 hosted Linux, macOS, and Windows jobs in
run
33858381265.
[x] RELEASE-0.9-DEFECTS-004 — Close candidate-receipt and conversion late breakers
- Priority: P0 (the complete candidate-receipt run and newly converted projects exposed deterministic authority mismatches after the prior release gates passed)
- Release target: 0.9.0
- GitHub issues: #260, #261, #262, #263, #264, #265, #266, #267, #268, #269, #270, and #271, and #272
- Conclusion: Preserve strict authority at each boundary while making the complete release flow use one consistent shape. Structured samples retain their public application contracts; Standard generation retains locked asset custody; dependency admission remains fail-closed with bounded whole-candidate repair; conversion executes only repository-evidenced commands over authored authority and can issue an explicitly retained receipt; production configuration remains user-owned; Git submodule limitations fail before mutation. The release planner and executor must resolve the same exact coding CLI/model, and the durable portfolio must expand into both Standard roots for planning, lock accounting, receipt projection, and lifecycle validation.
- Implementation:
- Complete the causal repairs and focused contracts tracked by #260-#269.
- Resolve the live selection before non-executing derivation planning without invoking preflight or the coding model (#270).
- Plan and receipt all five durable portfolio nodes across both exact root locks through one validated Standard-report expansion contract (#271).
- Include the dynamically imported durable portfolio authority in the explicit reviewed sample-runner source closure before re-pinning (#272).
- Evidence:
- Every individual repair through #269 passes its focused and adjacent contracts; the clean Python gate passes 3,335 tests with 31 intentional skips.
- A forced fresh complete run passes all 22 sample lifecycles, proving the functional repairs, then deterministically fails only while binding the final receipt because planning omitted the execution model.
- Same-model experiments make ordinary planned/executed keys identical. Exact durable inspection finds five unique Standard node keys and two root locks, while the retained manifest contains neither lock; a minimal nested receipt projection reproduces the masked failed-run diagnostic.
- The focused 99-test sample/portfolio suite and the uninterrupted 3,340-test
Python gate pass with 31 intentional skips; a real non-executing plan contains
31 unique recipes, both durable root locks, and only
gpt-5.6-solselectors. - The next forced complete run crosses those corrected plan/durable boundaries
and passes 21 samples, then exposes the same #269 import/BOM mismatch in the
retained
self-hostingrepair policy; its exact bounded parity repair and a forced freshself-hostingrun now pass. - Exact-commit CI passes all 15 jobs in run
33858381265; a fresh complete candidate finalizes identitysha256:c09196c076e8d7e161f0e6f57d399a3ca82d4200e68d4f876ee725baf50e303fand promotes receiptsha256:85bae95edfd9261059c5b4b593063fecf24b994ccd12a174966eb55f13d31618, covering 233 tests, 110 generated tests, 54 verifier tests, and 69 assertions with zero failures or skips.
[x] RELEASE-0.9-DEFECTS-005 — Repair exact-Windows qualification boundaries
- Priority: P0 (two consecutive hosted Windows group-one runs cannot complete the release gate, and the retained predecessor log exposes nine deterministic failures rather than an infrastructure-only delay)
- Release target: 0.9.0
- GitHub issues: #273, #274, and #275; this also supplies the outstanding exact-Windows evidence for #242.
- Conclusion: Preserve the production contracts and repair the boundaries that
prevent Windows from testing them. A mocked
Popenmust use mocked process-tree ownership rather than passingMagicMock.pidinto realkernel32; PATH-level coding-CLI doubles must use Windows.cmdlaunchers; and cache safety plus legacy migration must consume the centralized platform-native user-profile resolver instead of retaining directPath.home()exceptions. - Implementation:
- Isolate both mocked SSH timeout paths from the real host ownership primitive while preserving bounded termination, direct-child kill, and release checks (#273).
- Emit controlled Python scripts behind
.cmdlaunchers on Windows while retaining executable shebang stubs on POSIX (#274). - Resolve POSIX
HOME, WindowsUSERPROFILE, and the Windows Profile Known Folder inuser_paths.py; route host policy and 0.8.x migration through that surface and remove their policy-scanner exceptions (#275).
- Evidence:
- The cancelled predecessor Windows run records the precise stack overflow at
_processes.py:WindowsProcessTreeJob.assign, followed by four unavailable-CLI failures and fourPath.home()failures; 1,222 other tests passed before the run was superseded. - One hundred two focused process, SSH, coding-CLI quota, user-path, migration, cache-safety, and policy tests pass locally with four intentional platform skips and 29 subtests.
- The exact repair commit's Windows group-one shard terminates normally, and all
three Windows test shards plus Windows lint/OpenSpec/wheel and native sample
composition pass on run
33770470806. - The complete 15-job hosted matrix passes on exact commit
5cf7100b1022a52127410e0da8797284be133217in run33858381265.
- The cancelled predecessor Windows run records the precise stack overflow at
[x] RELEASE-0.9-QUALIFICATION-ISOLATION-001 — Close recursive-Make config leakage
- Priority: P1 (not a product release blocker, but a supported external
OBJ_DIRmust be usable for independent clean qualification) - Release target: 0.9.0
- GitHub issue: #276
- Conclusion: Preserve strict evidence-root attachment and isolate the test's
nested Make invocation from every configuration-precedence channel it claims to
control. Clearing only
OBJ_DIRis insufficient because a command-line Make variable is also propagated throughMAKEFLAGSandMAKEOVERRIDES. - Evidence:
- The exact test passes normally, fails when a synthetic
MAKEFLAGScarries an externalOBJ_DIR, and the full external-root run reproduces the same empty fixture ledger after 3,135 otherwise passing tests. - The fixture now clears both recursive-Make metadata variables alongside the direct environment binding without weakening evidence custody validation.
- The one-test falsification case passes with a synthetic inherited
OBJ_DIR, and a fresh external-root gate passes all 3,343 tests from test one with 31 intentional platform skips.
- The exact test passes normally, fails when a synthetic
[x] RELEASE-0.9-DEFECTS-006 — Bind installed proof to the tested source tree
- Priority: P0 (the installed-E2E sentinel can otherwise claim success for CLI bytes that the gate never installed or executed)
- Release target: 0.9.0
- GitHub issue: #277
- Observed behavior: A dirty-checkout gate exported and successfully proved
322b1a06, whose CLI surface wassha256:02f4540b..., then wrote the distinct uncommitted working-tree identitysha256:f492d479...into its success sentinel. Committing those bytes unchanged made the sentinel appear current and would have skipped the exact installed proof. - Conclusion: Preserve the intentional clean-
HEADexport, but persist the exported surface identity and file count that the smoke test actually consumed. The dirty working tree must remain stale until a later gate proves its commit, and reject every version-one sentinel because it may carry the invalid binding. - Evidence:
- Direct identity reconstruction proves the emitted sentinel matches the dirty
tree and differs from the exported
HEADtree. - A focused flow regression with distinct working/export identities proves that only the exported identity becomes current; a second regression proves that a pre-fix version-one sentinel is never reusable.
- The exact repair commit
84bc8f6brejects the version-one sentinel, builds and installs its clean exportedHEAD, passes the command-worker and canonical project smoke flows, and records version-two success for the proved 610-file CLI surface.
- Direct identity reconstruction proves the emitted sentinel matches the dirty
tree and differs from the exported
[x] RELEASE-0.9-DEFECTS-007 — Bind debug instrumentation into source custody
- Priority: P0 (the advertised debug path invalidates an otherwise valid Standard candidate after its source identity is sealed)
- Release target: 0.9.0
- GitHub issue: #281
- Observed behavior: A debug-enabled durable split lifecycle completes model
generation, then reports the root node as
runner-failed. The retained candidate bindssha256:1cfa9fca..., while the workspace presented to the strict local registry issha256:cad66bda...; the only extra files are the framework-owned spec-map sidecar and Python runtime helper. - Conclusion: The registry is correctly enforcing immutable custody. Inject framework debug files before generated-file collection so metadata validation, optional source indexing, CAS records, and Standard registration all bind one complete tree. Do not exempt diagnostic files from source identity.
- Competing hypotheses: A model race or malformed generated cache implementation is contradicted by the exact framework-owned file delta and by a no-debug durable run passing all 28 lifecycle tests and four independent verifier cases.
- Evidence:
- Exact retained-tree comparison identifies only
source/.literate/spec-map.jsonandsource/litai_debug.pyoutside the sealed seven-file candidate. - A deterministic coding-CLI regression proves returned files and the physical workspace have one identity with both debug artifacts present.
- Focused coding-CLI, spec-map, cached-source, and Standard lifecycle tests pass, followed by a fresh debug-enabled durable split lifecycle.
- Exact retained-tree comparison identifies only
[x] RELEASE-0.9-DEFECTS-008 — Make the durable cache schema an exact public contract
- Priority: P0 (fresh generation can accept two locally valid but mutually incompatible implementations, making the release candidate nondeterministic)
- Release target: 0.9.0
- GitHub issue: #282
- Observed behavior: A fresh debug-enabled portfolio passes Standard generation,
custody, build, test, and acceptance, then its first real collection returns
failed. The cache generatedsnapshot_id TEXT; the collector generatedINTEGER PRIMARY KEY AUTOINCREMENT, omitted the key, and hit anIntegrityErroron its first metric foreign key. - Conclusion: The projected write capability names columns but leaves their types and DDL owner implicit. Make the cache provider the sole migration owner, define exact SQLite affinities/nullability/keys/references, and verify the migrated schema in deterministic Python before executing generated peers.
- Competing hypotheses: Debug-helper interference, corrupt fixture data, and a SQLite race are contradicted by a single-thread exact-candidate reproduction. An earlier text-key collector generated from the same recipe publishes successfully against the same cache and fixture.
- Evidence:
- The retained database records
IntegrityError, one collecting row with a null key, zero metrics, failed retry state, and no current snapshot. - Swapping only the incompatible collector in a minimal reproduction changes
failedtopublishedwith two metrics. - Fresh generation chose the exact schema in both Standard roots and passed
initial publication, rollback/retry exhaustion, and single-winner concurrency.
The next failure isolated an old verifier fixture's undeclared
selectedstate; substituting only the public activerunningstate reclaimed the exact expired lease and published two metrics with one upstream request. - Schema-verifier and adjacent portfolio contracts pass. Fresh generated and accepted cache, collector, API, and frontend artifacts then pass the complete independent flow after correcting only the verifier's stale state literal: initial publication, two failed attempts and retry exhaustion, one-winner concurrency, expired-lease recovery, idempotent repeat, and restarted readers.
- The retained database records
[x] RELEASE-0.9-DEFECTS-009 — Preserve native Windows fan-out command dispatch
- Priority: P0 (both private Windows release workers fail before exact source checkout or generation)
- Release target: 0.9.0
- GitHub issue: #284
- Owner: remote sample fan-out SSH transport boundary
- Observed behavior: Exact Git-backed
durable-split-servicefan-out reaches both Windows 11 workers, but PowerShell reports thatbashis not recognized. The controller has already constructed an encoded PowerShell receiver and then wraps it inbash -licthrough its local_ssh_arguments()shim. - Conclusion: Windows workers are not required to install Bash. The shared SSH
adapter has carried an explicit
login_shell=Falsenative-Windows contract since25bc2666, and hardware probing applies it successfully. Fan-out predates that parameter and drops both the platform shell choice and the worker's configured SSH-compatible transport. Route every fan-out SSH operation through the worker's platform and transport while retainingbash -licfor POSIX PATH discovery. - Competing hypotheses: Authentication and DNS are contradicted by current typed
probes and successful raw native PowerShell on both hosts. An invalid encoded
payload is contradicted because the wrapper fails while resolving
bash, before PowerShell receives it. Installing Git Bash would mask the violated Windows contract and add an undeclared prerequisite. - Falsification: If the unchanged encoded receiver fails when sent directly through
the same SSH endpoint, or if fan-out still emits
bash -licafter platform-aware argument projection, this theory is wrong. - Implementation:
- Carry the complete Worker into fan-out SSH argument projection, use its declared transport, and disable login-shell wrapping only for Windows.
- Apply the same projection to Git-source execution, working-tree staging and execution, and post-run workspace probing.
- Evidence:
- Both independent Windows endpoints return
LITAI_NATIVE_OKfor a raw noninteractive PowerShell command sent without Bash. - Focused contracts pass and content-addressed working-tree runs on both Windows workers advance beyond remote shell dispatch and bootstrap. Git-mode source checkout is independently blocked by the deferred credential lifecycle in #286, not by Windows command projection.
- Both independent Windows endpoints return
[x] RELEASE-0.9-DEFECTS-010 — Make coding agents part of the universal OS toolchain
- Priority: P0 (a reachable worker can pass bootstrap and fail only when the explicitly selected coding agent is invoked)
- Release target: 0.9.0
- GitHub issue: #285
- Owner:
os-baseandos-*Flavor authority, host installer, and remote-worker bootstrap - Owning ADR: ADR 0033
- Observed behavior: Native
make installSBOMs declare Python, Git, and Git LFS, whiledetect-before-installseparately hardcodes Node, build tools, and a one-of coding-agent probe. The Windows NVIDIA worker therefore completed native PowerShell dispatch and framework setup, then failed because the controller's explicitcodexselection was absent. - Conclusion: Coding agents are toolchains. Make
os-baseown universal logical capabilities and their provider alternatives; make each concrete OS Flavor own only native package names, manager commands, and exact OS/architecture artifact realizations. Both installation entrypoints compose those same documents. ExplicitCODING_CLIselection must be exact; when none is explicit, any installed supported provider satisfies the group and the declared default is installed only if the group is empty. Authentication remains separate state. - Competing hypotheses: A worker-only Codex install would clear this one symptom but leaves the same failure for Claude, Cursor Agent, or OpenCode. Treating all providers as mandatory would waste host state and contradict the existing provider-selection contract; the invariant is one exact selected realization, not simultaneous authentication to every service.
- Falsification: If both install paths already consume one declarative capability source, or a worker with an explicit absent provider is rejected or provisioned before generation, the duplicate-authority theory is wrong.
- Implementation:
- Add the
os-baseFlavor and logical CycloneDX toolchain SBOM; keep language, build, accelerator, and authentication requirements outside it. - Move tuple realization SBOMs beneath their owning
os-*Flavors and compose base capability semantics with exact OS/CPU/GPU package or artifact details. - Make
make installanddetect-before-installuse the same parser, probes, consent boundary, selected-provider install, and unsupported-tuple inventory. - Pass the controller's exact coding-agent selection into remote bootstrap and retain executable/path evidence before generation.
- Add the
- Evidence:
- Contract tests cover base/OS closure, all four providers, explicit selection, default selection, decline, install/re-probe, archive integrity and traversal, unsupported tuples, and no credential mutation.
- macOS, Debian Linux, native Windows CPU, and native Windows NVIDIA runs prove preflight selects or provisions the requested provider before generation. Both Windows hosts now pass base plus selected JavaScript/Make bootstrap and reach live model resolution; after host authentication was repaired, the native Windows NVIDIA worker provisioned the managed Codex runtime and passed the complete durable portfolio.
- The CPU build exposed a final platform-path edge: generated Make recipes used
an unquoted
$(LITAI_LANGUAGE_TOOL), splitting the manager-provenC:\\Program Files\\nodejs\\node.exepath. A direct GnuWin32 Make/Git Bash experiment proves"$(LITAI_LANGUAGE_TOOL)"succeeds. Skill version 1.6.2 now requires that exact form, and deterministic Python admission rejects the unquoted form before spending a builder repair cycle.
[x] RELEASE-0.9-DEFECTS-011 — Close temporary SQLite fixtures on Windows
- Priority: P0 (the exact Windows CI shard fails after 1,255 passing tests)
- Release target: 0.9.0
- GitHub issue: #287
- Observed behavior: Four durable schema contract tests finish their assertions,
then Windows rejects
TemporaryDirectorycleanup with sharing violation 32 for each fixture's uniquecache.sqlite3file. - Conclusion:
sqlite3.Connection.__exit__commits or rolls back the transaction; it does not close the connection. The test-local reference therefore remains live during directory cleanup. POSIX unlink semantics mask the leak. Close every fixture connection explicitly while retaining transaction boundaries; do not add sleeps, retries, or ignored cleanup errors. - Evidence:
- Exact CI run
33804871632records four identical Windows sharing violations and no assertion failures; 1,255 adjacent tests pass. - A minimal native Windows control reproduces the locked file immediately after
connection context exit, while explicit
close()releases it. - All 16 durable portfolio contracts and Ruff checks pass after deterministic
closure; production schema inspection already closes in
finally. The uninterrupted local gate then passes 3,341 tests with 30 expected skips. - Exact run
33836023512passes all three native Windows test shards.
- Exact CI run
[x] CONVERSION-BASELINE-001 — Make repo_man baselines explicit under CI
- Priority: P1 (blocks Phase 1b qualification for the reported repo_man projects, but does not invalidate the native 0.9.0 release flow)
- Release target: 0.9.0
- GitHub issue: #288
- Observed behavior: Conversion discovers
./repo.sh build, then retained baseline execution addsCI=true; currentrepo_buildrejects CI execution unless a configuration such as release or debug is explicit. - Conclusion: The discovered command is the single authority reused by direct
baseline, generated wrapper, and parity replay, and every execution injects
CI=true. Select--releaseat repo_man discovery so all three phases retain one explicit deterministic configuration. Do not special-case the executor or mutate the command between receipts. - Implementation:
- Record root and nested repo_man stages as
build --release; generated wrapper targets consume those exact inventory commands.
- Record root and nested repo_man stages as
- Evidence:
- An executable repo_man-shaped fixture reproduces the detected-command/environment mismatch and falsifies unrelated dependency/bootstrap explanations.
- The same fixture proves the inspected command, direct baseline, and retained
receipt use
./repo.sh build --release; all 38 harness-inventory conversion, baseline, parity, nested-wrapper, and rollback contracts pass. - The final exact-commit matrix passes all 15 hosted jobs in run
33858381265.
[x] DURABLE-COLLECTOR-RESULT-001 — Define one owner meaning for every result
- Priority: P0 (fresh conforming-looking generation can fail the single-winner portfolio contract nondeterministically)
- Release target: 0.9.0
- GitHub issue: #289
- Observed behavior: Windows run
20260903T205331Z-3bc26192crossed native bootstrap, generation, build, test, migration, initial publication, restart, and partial-failure recovery, then rejected the concurrent loser. Its generatedlease-heldresult returned the live holder inowner; the verifier expects the requesting owner. - Conclusion: Both normative collector documents name
ownerwithout defining which actor it represents forlease-held. Keep one stable result schema:ownerechoes the invocation owner for every status and does not reveal or substitute the current holder. Clarify authority instead of accepting both meanings. - Falsification: The winner is held inside the upstream fixture before the loser
starts and is released only after it returns, excluding completion ordering. A
direct replay of the retained candidate against a copied live-lease database
returns
owner: holderforowner: requester; finding existing normative text that requires the requester would disprove the ambiguity theory. - Implementation:
- State the invariant in the Component and its public collector interface.
- Keep the behavioral verifier strict and emit a bounded owner-specific diagnostic without logging request or lease identities.
- Add a deterministic rejection regression for the exact ambiguous result.
- Evidence:
- All 16 durable portfolio contracts plus Ruff pass, including the exact lease-held owner rejection. The uninterrupted local gate then passes 3,341 tests with 30 expected skips.
- Forced-fresh native Windows CPU run
20260904T043948Z-834d24eapasses single-winner concurrency and the complete durable portfolio flow.
[x] CONVERSION-BASELINE-002 — Keep disposable repo_man runs visible to nested builders
- Priority: P1 (blocks Phase 1b qualification for container-mediated repo_man projects, without changing the native package publication contract)
- Release target: 0.9.0
- GitHub issue: #290
- Observed behavior: GitLab exposes its
/builds/...workspace to the Docker service, but not the job container's private/tmp. Direct baseline and wrapper parity each copied repo_man source into a defaultTemporaryDirectory; linbuild therefore asked the nested daemon to execute a source path it could not see. InheritedCI_PROJECT_DIRalso continued to name the original converted root. - Conclusion: Both disposable execution phases must remain transactional while
living beneath the shared project root. When GitLab supplies
CI_PROJECT_DIR, project it to the exact disposable source being observed: the direct baseline root or the parity root, not merely the wrapper's launch directory. - Competing hypotheses: Adding
--releasefixes #288's configuration rejection but cannot make a private/tmppath mountable. Rewriting onlyCI_PROJECT_DIRlikewise leaves the physical source invisible, and moving only the direct baseline defers the same failure to parity replay. - Falsification: If a command that requires
CI_PROJECT_DIR == PWDand requires that path beneath the original shared project succeeds in both direct baseline and wrapper parity while either phase still resides outside that root, this theory is wrong. - Implementation:
- Create both hidden disposable roots beneath the resolved project workspace and retain context-managed cleanup on success and failure.
- Project inherited
CI_PROJECT_DIRto the observed source root, including the parity source reached through the generated wrapper.
- Evidence:
- An executable nested-builder-shaped regression requires the exact shared-root and environment invariants in both phases, proves their distinct receipts, and proves neither disposable directory remains afterward.
- All 40 harness-inventory conversion, baseline, parity, isolation, and rollback contracts pass with Ruff and formatting checks.
- A native Linux x86_64 Animation Authoring run places the disposable source
beneath the shared project root and reaches the nested Docker build. It fails
later only because the CentOS 7 builder lacks the newer
GLIBCXXsymbols required by the pinned Kit SDK, while retaining bounded diagnostics and a byte-clean rollback. The public Kit App Template completes direct baseline, wrapper parity, conversion, and project validation; the exact hosted matrix passes all 15 jobs in run33858381265.
[x] RELEASE-0.9-CUT-001 — Qualify and publish 0.9.0
- Priority: P0 (the release is the current user-directed outcome)
- Release target: 0.9.0
- Direction: Finish the exact-commit gates, cut the release line, publish 0.9.0, and verify the public tag/release before returning to compatibility work. Direct compatibility with 0.8.x is desirable but explicitly non-blocking for this cut. After 0.9.0 is published, create a 0.8.4 compatibility patch by cherry-picking the critical bounded fixes that make the documented forward migration easier; track its installed-wheel migration proof under RELEASE-017 / #251.
- Implementation:
- Enter authorized
main_state: pre-releasefor target0.9and record the resulting documentation-authority identity. - Commit and push the final remote-qualification repairs, then bind every gate to that exact immutable commit.
- Require green exact-commit hosted CI and the reachable private-worker qualification, including native install/uninstall/reinstall evidence.
- Run
release plan,prepare, review/commit, andrelease checkon the generatedrelease/0.9.xline. - Publish with explicit external-write authorization and run the independent
verify-publishedcheck before advancingmain.
- Enter authorized
- Evidence:
-
litai release statereports pre-release target0.9; an explicit 0.9.0 dry-run plan now succeeds and identifies the missingrelease/0.9.xline. -
litai project documentation-review . --recordrecords the post-transition authority identity and project validation accepts it. - Final authority commit
60ecf57dpasses all 15 jobs in hosted run33867454424; the completed native-worker evidence is recorded under the owning 0.9.0 work items above. Prepared commitfedda1a7passes the exact local release gate (3,377 Python tests with 30 expected skips, all 22 samples, and 233/233 conformance tests) and yields prepared identitysha256:cc2708538223a4d5c0ec5664e404d957a8b0c9cfe2a580249af4775ae06ea2e2. Publication receiptsha256:11104a5da1dcd02dfd8744ec05ebf2b49cb63a6e64535787d4dd87d4cf04a930and independent verificationsha256:131b817a2058b2b00e6ed1e2c5664a04b5a4eabdc15aff422e6e169dee7a5ad5prove the annotated tag, release line, and public GitHub release selectfedda1a7. The downloaded wheel reports 0.9.0, has no broken requirements, and matches published SHA-256cf0a8dffbe85bec6f6ff08072f457adebdff72c2ea06fa0ebee4ec3d0e43946a.
-
[x] AUTHORITY-FACTORING-001 — Make cross-layer authority executable for 0.9.0
- Priority: P0 (current HEAD has two deterministic gate failures; taxonomy and host-path policies drift because several consumers reconstruct them)
- Release target: 0.9.0
- Owner: framework core, agent-skill catalog and init template, host adapters, CLI/MCP connector surface
- Owning ADR: ADR 0030
- Detailed roadmap: 0.9.0 executable-authority program
- Direction: Record and implement the repository-wide investigation: preserve the directory hierarchy as the skill taxonomy, put deterministic mechanics behind Python services, centralize native Linux/macOS/Windows host paths without conflating logical or target paths, and make standard verification hermetic.
- Conclusion: Reuse one executable owner per policy. Restore the red gate first; then converge catalog consumers, host paths, and connector operations in stages. Preserve current safe logical paths, filesystem containment, project cache custody, package-resource loading, and explicit live qualification.
- Depends on: MODEL-PREFLIGHT-001 and BROWSER-ACCEPT-001 establish the production behaviors whose test/dependency boundaries are repaired; the first two repairs otherwise proceed independently.
- Completion: The Windows worker identity is accepted; native CPU/GPU Windows and
Linux/macOS workers exercise the applicable platform boundaries, and exact
commit
5cf7100b1022a52127410e0da8797284be133217passes the 15-job hosted matrix in run33858381265. - Implementation:
- Make the standard Python gate hermetic while retaining explicit live model qualification. The CLI/model override conformance test injects and asserts the verifier seam; the ordinary suite reaches no live child process.
- Document the public
litai worker verify-modelcommand in the command reference and top-level operator help. - Carry source-imported, exactly pinned optional dependency groups into self-host SOURCE admission without installing them in the core environment. Optional BOM declarations remain distinct from the exact installed core closure.
- Add a deterministic review/record command for the sample test-runner closure; the investigation found its pin had remained stale after an earlier runner change because only the lifecycle-driver closure has a recorder.
- Introduce one
AgentSkillCatalogand use its ownership/inheritance/impact semantics in evaluation, validation, initialization, authority graphs, and authoring tools. - Make the initialized skill catalog declarative and reject every dangling route.
- Add injectable native host-path policy and migrate config/data/cache/state/tool/ install/staging and duplicated project-cache consumers with legacy handling. Durable user configuration and its 0.8.x migration are owned first by USER-CONFIG-MIGRATION-001.
- Add static enforcement for catalog and host-path ownership, retaining documented
target-adapter and standalone-bootstrap exceptions. The final audit separates
home/config policy from
HostSystemPathsforos-release, AppArmor,ldconfig, and sandbox roots, and rejects absolutePath(...)literals outside that owner. - Add deterministic work-record, operator-MCP, channel-ingest, stack-resolution, and document-verification application services with CLI/MCP adapters. Each deterministic transformation has typed fail-closed tests and an MCP adapter.
- Expose skill/document/static-resource lookup as MCP resources and thin the corresponding agent skills to routing and judgment. MCP list/read now projects inherited skills, owned resources, documentation, and packaged static assets; conversion, roadmap, operator-MCP, channel-ingest, NVIDIA, and document skills route their deterministic mechanics to Python.
- Evidence:
- Focused hermetic-preflight, CLI-help, optional-dependency, and complete self-host source-drift regression contracts pass locally on macOS. After reviewed lifecycle-driver, test-runner, and documentation re-pins, the clean uninterrupted Python gate passes 3,204 tests with 30 skips.
- Taxonomy impact/projection and initialized-reference closure tests pass. The full initialization adapter suite also passes with pre-write subset validation.
- Linux/macOS/Windows table-driven path and migration tests pass on any host, including complete 0.8.x worker/test/MCP/event consumer resolution and user-independent system-path policy.
- Connector CLI/MCP parity tests prove deterministic work performs no LLM call. Work lifecycle, operator-MCP, channel admission, NVIDIA compatibility, document verification, and MCP resource contracts pass with in-process fixtures.
-
make python-check, all-skill NVIDIA SkillEvaluator admission, project validation, lint, formatting, repository-layout, and documentation gates pass locally. Standalone managed-Python bootstrap is covered for the layout and skill gates. - The exact release commit's Ubuntu/macOS/Windows CI matrix passes.
- The declared user
workers.jsonCPU/GPU Linux and Windows workers pass capability probing and the applicable platform-focused contract/gate shards; credentials and private routing remain outside committed evidence.- 2026-09-02: macOS ARM64, Ubuntu 24.04 CPU, Ubuntu 24.04 NVIDIA, and Ubuntu 26.04 CPU probes pass and are durably recorded. Both Windows hosts are reachable with trusted host keys and now accept unattended qualification; native Windows installed-wheel and NVIDIA durable-portfolio proofs pass.
[x] USER-CONFIG-MIGRATION-001 — Move 0.8.x private assets to user configuration home
- Priority: P0 (private durable configuration currently lives inside ignored project paths and can be lost, duplicated, or encountered by repository tooling)
- Release target: 0.9.0
- Owner: host-path policy, user configuration/state adapters, worker/live-test/ release consumers, init template, CLI migration command
- Owning ADR: ADR 0031
- Direction: Move every durable user configuration asset out of the checkout.
Linux and macOS use
$HOME/.config/literate-ai(honoring an absoluteXDG_CONFIG_HOME); Windows uses its per-user Roaming AppData Known Folder. Provide a 0.8.x migration that detects and safely moves legacy private files. - Conclusion:
workers.jsonandmcps.jsonare global user config;projects/<project-id>/test.jsonis project-scoped user config; worker observations and channel journals are user state. Explicit paths retain precedence. New default lookup fails with a migration-required diagnostic when only a legacy asset exists; migration is dry-run-first, validated, atomic, idempotent for identical bytes, and conflict-preserving. - Depends on: ADR 0030's narrow injectable host-path policy; this item is the first concrete consumer and therefore lands before broader path migration.
- Completion: The migrated catalog remains private beneath
$HOME/.config/literate-ai; all configured host families, including both native Windows workers, are reachable through the production resolver. - Implementation:
- Add central user config/state path resolution with injected platform, environment, home, Windows Known Folder, and project ID.
- Route live-test, worker, worker-observation, release-fleet, MCP, and event paths through the shared resolver while preserving explicit flag/environment precedence and rejecting relative overrides.
- Add
litai config pathspluslitai config migratedry-run/apply for validated 0.8.x project-root and legacy~/.config/litaiassets with atomic, private, no-overwrite semantics. - Update init output, examples, skills, user docs, architecture tables, and old ADR references without deleting the 0.9.x legacy ignore safety net.
- Evidence:
- Table-driven Linux/macOS/Windows roots, overrides, project isolation, and relative/missing-home/Known-Folder failures pass without host-dependent skips.
- Migration dry-run writes nothing; apply, identical retry, conflicting destination, symlink, partial-failure, permissions, and secret-redaction cases pass.
- A simulated 0.8.x project migrates and every CLI consumer resolves the new location; an unmigrated project returns the typed recovery diagnostic.
- The supplied worker catalog is migrated only through the explicit command and
remains usable for Linux/Windows CPU/GPU qualification without exposing its
contents.
- 2026-09-01: dry-run found one conflict-free six-worker catalog; apply moved it to
$HOME/.config/literate-ai/workers.jsonwith0700/0600custody. Production parsing succeeds. macOS, Ubuntu 26.04 CPU, and Ubuntu 24.04 NVIDIA probes succeed and private state is0700/0600; Ubuntu 24.04 CPU and both Windows workers were initially blocked by absent SSH known-host entries, not catalog/schema failure. The Linux entry was then trusted and now passes; both Windows hosts are trusted and reachable but reject the locally available noninteractive keys. - 2026-09-01: focused migration/path/consumer contracts and the clean 3,204-test Python gate pass; the repeat dry-run detects no remaining legacy asset.
- 2026-09-02: the production migration dry-run detected one remaining 0.8.x event
beneath legacy
$HOME/.config/litai; apply moved it with mode0600to the resolved$HOME/.local/state/literate-ai/eventsroot and removed the empty legacy application directory. Durable configuration remains solely beneath$HOME/.config/literate-ai.
- 2026-09-01: dry-run found one conflict-free six-worker catalog; apply moved it to
[x] HOST-INSTALL-SBOM-001 — Make native CLI installation SBOM-driven
- Priority: P0 (the 0.9.0 CLI installer has no executable native-package or cross-platform consent contract)
- Release target: 0.9.0
- Owner: stage-zero installer, host-platform adapter, native package prerequisite SBOMs, and cross-platform CI
- Owning ADR: ADR 0032
- Direction: Make
make installprove all core native prerequisites through the host's conventional package manager. Ask before installing missing packages, support explicit noninteractive consent, keep Python distribution dependencies in their package/lock authority, and store native dependency policy in separate CycloneDX SBOMs by OS, CPU architecture, and accelerator coordinate. - Conclusion: GNU Make and a compatible executing Python are the irreducible stage zero. A dependency-free stage-zero tuple/SBOM parser plus one native-package adapter owns the remaining deterministic work. Unsupported tuples fail with the supported inventory and the directory to copy for a port; no platform fallback or automatic package-manager bootstrap is allowed.
- Depends on: ADR 0030
HostPathsfor host-native install and OS-metadata paths; ADR 0002 for the isolated pinned Python distribution closure. - Next action: Require the exact repair commit's Ubuntu/macOS/Windows CI install/uninstall/reinstall evidence, then repeat on reachable private workers.
- Implementation:
- Add strict CycloneDX 1.7 host-prerequisite SBOMs for Debian Linux x86-64/ARM64,
macOS x86-64/ARM64, and Windows x86-64; every core tuple uses accelerator
coordinate
noneand declares its package manager and command templates. - Add deterministic tuple detection, schema/graph/version validation, native package queries, executable probes, one-shot consent, declarative install, and post-install re-probe. Reject unsupported tuples, absent managers, malformed templates, and symlinked SBOMs with actionable diagnostics.
- Integrate the preflight into
make install, preserve explicitPREFIX, use the centralized host-native default otherwise, and force installed-E2E invalidation when installer SBOMs change. - Add the exact noninteractive
make install→make uninstall→make installoperation at one isolated prefix to the existing Ubuntu/macOS/Windows CI matrix.
- Add strict CycloneDX 1.7 host-prerequisite SBOMs for Debian Linux x86-64/ARM64,
macOS x86-64/ARM64, and Windows x86-64; every core tuple uses accelerator
coordinate
- Evidence:
- Five committed SBOMs pass the official CycloneDX 1.7 schema and the local tuple/manager/package/dependency-graph contract. Simulated tests cover all target families, aliases, decline, explicit consent/install/re-probe, missing manager, unsupported tuple guidance, version failure, and symlink rejection.
- The local macOS ARM64 dependency-only preflight proves Homebrew Python 3.13 and Git package provenance plus the executing Python/Git version contracts without changing the host.
- A clean-checkout macOS ARM64
make installsucceeds into a fresh disposable prefix, the installed launcher renders help on a TTY, and help creates no user configuration. - Live macOS ARM64, Ubuntu 24.04 NVIDIA, and Ubuntu 26.04 CPU installs from the exact pushed source archive reach the host installer. The exercise exposed and now covers same-version console-script replacement; Ubuntu 24.04 CPU correctly declined its one missing native dependency when noninteractive consent was no.
- The exact pushed commit's Ubuntu/macOS/Windows installation jobs pass in hosted
run
33858381265.
[x] HOST-UNINSTALL-001 — Remove only Literate AI-owned host installation state
- Priority: P0 (a cross-platform native installer needs an equally explicit, safe removal contract before 0.9.0 ships)
- Release target: 0.9.0
- Owner:
make uninstall, host install-path adapter, uninstall script, user docs, and Ubuntu/macOS/Windows installation matrix - Direction: Add
make uninstallwith the same centralized host-prefix policy asmake install. Remove only the Literate AI launcher and private runtime installed beneath that prefix, prune Literate AI-created empty parent directories, and leave Homebrew/APT/WinGet packages and durable user configuration/state intact. ExplicitPREFIXkeeps precedence. Symlinks, path escape, foreign content, and an unsupported install layout fail closed without broad recursive deletion. - Depends on: HOST-INSTALL-SBOM-001 and ADR 0030 host path ownership.
- Next action: Require the exact repair commit's three-OS CI cycle, then exercise the same corrected cycle on the reachable macOS/Linux private workers.
- Implementation:
- Add a deterministic uninstall planner and CLI script using only centralized install-root resolution and OS-aware launcher naming.
- Wire
make uninstallwith optionalPREFIX; do not run native package-manager removal commands. - Document which durable config/state paths are deliberately retained and how an operator may remove them separately.
- Evidence:
- Installed launcher/runtime disappear, a second uninstall is idempotent, and unrelated prefix files survive.
- Symlink/path-escape and manifest-mismatch fixtures fail closed; independently owned sibling tools/cache/state survive exact manifest-bound removal.
- Ubuntu, macOS, and Windows install/uninstall/install cycles pass in hosted run
33858381265.
[x] SLICE-080-PLUGIN-PKG — Isolated 0.8.0 plugin, packaging, Flavor, and catalog slice
- Priority: P0 (0.8.0 break-glass)
- Owner: plugin bundle, Homebrew formula, package lifecycle, Flavor catalog, workflow composition, catalog provenance, source-index ignore rules
- Direction: On branch
slice/0.8.0-plugin-package-flavor(worktree/private/tmp/litai-080-plugin-pkg), land the assigned 0.8.0 items without mergingrelease/0.7.x, taggingv0.8.0, orgit mvof existing Flavor directories (FLAVOR-005 / WebMCP own those moves). New Flavors use axis-qualified directory names. - Conclusion: Inspect-first items that already exist on disk stay catalog/evidence
work: Make smart defaults (FLAVOR-001),
deploy-docker(FLAVOR-CONTAINER-001),litai catalog copy|graphDAG (COMPOSE-001), nested workflow directories (WORKFLOW-CATALOG-001), and CodeGraph ignore of dependency caches only (INDEX-001). CODEGRAPH-PROJECT-001 must remain opt-in under ADR 0016/0019 (provider_id: nonedefault); do not force CodeGraph as a product dependency. Landed on this branch: PLUGIN-001 bundle +litai-mcp, PACKAGE-002 formula (sha256 still zeros), PACKAGE-001 native metadata ZIPs plus Conan wildcard when two language Flavors are selected, FLAVOR-006litai flavor add, FLAVOR-003lang-typescript, FLAVOR-CONTAINER-001 docker skill stamp, FLAVOR-ZIG-001 catalog (lang-zig+toolchain-zig-cc; no host discovery or cross-compile sample), WORKFLOW-CATALOG-001 parse-timeextends, COMPOSE-001workflow:/routing:copy kinds, INDEX-001 non-gitsource/build/inventory test. CODEGRAPH-PROJECT-001 stays opt-in. - Depends on: none beyond current
mainat0a10a6a3 - Next action: Done. Slice merged as
01881122. Remaining named gates stay on their owning children (make samples, livebrew install, Zig host discovery, git catalog sources, nested-workflow lock/plan, Claude session e2e). Do not retargetsamples/hello-component. Do not retagv0.8.0. - Implementation:
- PLUGIN-001 skills plugin + MCP adapter from checked-in skills
- PACKAGE-002 Homebrew formula (no CodeGraph dependency)
- PACKAGE-001 remaining native provider adapters (apt/brew/winget/chocolatey)
- FLAVOR-006
litai flavor add - FLAVOR-003
flavors/lang-typescript/ - FLAVOR-CONTAINER-001 stamp docker Flavor/skill into
_TEMPLATE_FILES - FLAVOR-ZIG-001
lang-zig+toolchain-zig-cccatalog (no cross-compile sample) - WORKFLOW-CATALOG-001 parse-time
extendscomposition (nested-catalog lock/plan ondevremains the intended proof; staging/production stay framework-only) - COMPOSE-001 remaining: workflow/routing copy kinds; git sources stay open
- INDEX-001 non-git
source/build/inventory test on the current adapter - CODEGRAPH-PROJECT-001: record opt-in-only; do not require CodeGraph at init
- Evidence:
- Focused unit tests for each landed item pass under
LITAI_SESSION_ID=dev - Branch merged to
mainas01881122. Remaining named gates (make samples, livebrew install, Zig host discovery) stay on their owning items. Do not retagv0.8.0.
- Focused unit tests for each landed item pass under
[x] SAMPLE-PIN-001 — Re-pin sample harness identities after 0.8.0 catalog merges
- Priority: P0 (blocks
make python-check) - Owner:
samples/_harness/*/sample.json - Direction:
NeutralSampleLadderTests.test_all_host_recipes_compose_from_specs_and_real_flavorsfails closed withsample metadata has a stale component.md identity. Concurrent 0.8.0 merges updatedcomponent.md(nested app-stack skills, new peer samples) without refreshing the verifier pins. - Conclusion: Compute identities through the same
_load_sampleparser the ladder uses. Update only driftedcomponent_authoring_identity,specification_identity, andexecution_interface_identityfields. Do not invent digests. PR #197 is closed without merge (CONVERT-FW-009 prerequisite closure already onmain; its branch predates FLAVOR-005). - Depends on: landed 0.8.0 catalog merges on
main(390cc7ec) - Implementation:
- Diagnose every
samples/_harness/*/sample.jsonwhose authoring, specification, or execution pin disagrees with currentcomponent.md. Drift waspython-service-exampleandreact-dashboard-example(nested app-stack skill URIs after06e48b87). - Rewrite only the drifted identity URIs; keep oracle pins and JSON key order.
- Pass the admitted framework skill catalog into sample
GenerationRecipeconstruction so Flavor parent skills close the same way live generation does. - Re-pin sample-test-runner and lifecycle-driver identities after the
runner change; run
make LITAI_SESSION_ID=dev python-check. Resume leftovers: MCP catalog isolation, stdio process-tree bind, v1 project projection dropsinstitutional_channels, runtime oracles forpython-service-exampleandreact-dashboard-example.
- Diagnose every
- Evidence:
-
_load_samplesucceeds for every host-discovered sample. -
make PYTHON_ENV="_build/python-envs/make-267" python-checkis green (2883 tests, 20 skipped, 2026-08-29).
-
[ ] RELEASE-016 — Prepare the 0.8.0-RC1 cut from main
Release target: 1.1.0
Priority: P0 (0.8.0 break-glass)
Owner: default-branch landing queue,
src/literate_ai/cli/diagnostics, release gates,litai release plan/prepareDirection: User-directed: prepare a
0.8.0-RC1release. The work happens onmain, butmainis explicitly not release-ready: the local installedlitailauncher fails to import (ImportError: cannot import name 'debug_diagnostics' from 'literate_ai.diagnostics') becausecli/source_to_specification.pyimports a symbol main'sdiagnostics.pydoes not define. All open roadmap items and branches must be landed in the correct order before planning the cut.Conclusion: Branch reconciliation (2026-08-30) found exactly one unmerged branch head:
feat/cli-sdlc-debug(34 commits ahead ofmain, 0 behind) which already contains the three identical worktree branchesfeat/cache-005-007-leftovers,feat/skill-dep-workflow-leftovers, andfeat/spec-refinement-001-pi-service(all atd41c9f5b) and repairs thedebug_diagnosticsinconsistency.pr-197is stale: SAMPLE-PIN-001 records it closed without merge and its unique commit78989809is already contained infeat/cli-sdlc-debug. Mergefeat/cli-sdlc-debugintomain(merge-tree is conflict-free), delete the contained branches and their worktrees, reinstall the local launcher from source, then close remaining gates beforelitai release plan.Depends on: landed 0.8.0 catalog merges on
main(390cc7ec); RELEASE-017 is explicitly deferred from the 0.9.0 gateImplementation:
- Record this item; merge
feat/cli-sdlc-debugintomain. - Remove worktrees and delete contained branches
(
feat/cache-005-007-leftovers,feat/skill-dep-workflow-leftovers,feat/spec-refinement-001-pi-service,pr-197). - Reinstall the local
litailauncher from the merged source and verifylitai verify/litai project tracker inspectrun clean.litai version checkandlitai project validateboth green.litai verifypasses authority; receipt remains stale until the release gate produces one. - Fix CLI inconsistencies discovered during gate run:
command-reference missing
litai project guidanceandlitai release merge-pr; doc-toolchain.venvfallback whenOBJ_DIRis explicit; v1 wire-contract test missingrepository_policyv2-only field drop. - Close remaining repository gates (
python-check, lint, format) on the mergedmain.make python-checkpasses 3041 tests with 21 skips (2026-08-30, sessionrc1-prep).make lintandmake format-checkpass. - Run the optional RELEASE-017 upgrade smoke when that compatibility work is scheduled.
-
litai release plan --version 0.8.0rc1and review the plan.
- Record this item; merge
Evidence:
- Merge commit on
maincontaining the full 34-commit stack (3130bf48). -
litai version checkandlitai project validategreen from the installed launcher on the prepared tree (0d75a25e). -
make python-checkpasses 3041 tests;make lintandmake format-checkpass;make skills-checkpasses. - Release plan produced and reviewed.
- Merge commit on
[ ] RELEASE-017 — Optional upgrade path between consecutive minor releases
Release target: 1.1.0
Priority: P2 (explicitly deferred from the 0.9.0 release gate)
GitHub issue: #251
Owner: release policy (
docs/architecture/project-releases.md),skills/agent/release-project/catalog and init-template copies, release gatesDirection: Prefer compatibility between consecutive minor releases. A user on the latest patch of the previous minor (e.g.
0.8.4) should have a clean upgrade path to the next minor (e.g.0.9.0) when that proof is scheduled. If a user is several minors behind, they may need to step through each intermediate minor tip in sequence — there is no obligation to preserve compatibility across arbitrary spans. Major releases may break compatibility at the developers' discretion. This is a standing rule going forward.Conclusion: Codify in
docs/architecture/project-releases.mdand therelease-projectskill (catalog and init-template copies stay byte-identical): a project may make consecutive-minor compatibility a gate, while a human release owner may explicitly defer it without claiming the path. For 0.9.0 that proof is explicitly non-blocking. The real 0.8.3 → 0.9.0 environment upgrade succeeds, but the initialized project requires framework update, lifecycle-driver re-binding, documentation review, and conflict policy. Retain that migration work for the post-0.9.0 0.8.4 compatibility release, where selected critical fixes can ease the forward path.0.8.4 prerequisite preparation: Preserve the scheduled
0.8.4→0.9.0baseline. The current 0.8 maintenance line is58a4c3ba(published 0.8.3). Select landed trunk commit957866011aa0a6759066e434dddad2b589965072for bounded release reliability:release-check-resetmust bootstrap and use its managed interpreter on a clean checkout. The defective recipe is still present on 0.8.3, and the change includes a regression test. This introduces no public protocol, catalog or generated-code feature change. Use the release backport CLI, resolve any maintenance divergence deliberately, and qualify the maintenance candidate before release planning/publication. The installed-identity change1c4675669is not selected alone: it assumes the worker'suv_cache.jsonexclusion from the broader 0.9 defect cluster, while both 0.8.3 observers currently omit that exclusion. Do not transplant that broad feature/schema cluster into a patch. No maintenance release or historical migration result is claimed by this preparation decision.Depends on: merged 0.8.0 work on
main(3130bf48)Implementation:
- Record the preference and explicit human deferral rule in
docs/architecture/project-releases.mdand bothrelease-projectskill copies; keep the copies byte-identical. - Add an installed-wheel upgrade-smoke gate: install the previous
minor's latest published patch, initialize a project, then upgrade in
place to the candidate wheel;
litai version check, projectverify, andupdatemust pass, or the failure becomes a documented migration step inCHANGELOG.md. - Design and run the retained upgrade smoke against
0.8.4→0.9.0after the post-0.9.0 compatibility release exists; record every required migration step without delaying the 0.9.0 cut. The prerequisite is now published: v0.8.4 at3fe1877828e9d714fa258271b8913a6a74ec6196, after all 14 fresh local release gates and all 15 hosted CI jobs passed. The release CLI verified the annotated remote tag, branch, and GitHub release against prepared identity4664416b2afae7331cce5b0bb360a4a7e3587e37f0c7bce0ee4b755fc7f43445. The downloaded public wheel is 2,095,333 bytes with SHA-256317305ab424eb6c7e816e28baf2980d289695e3dcba9d7dbdab601a1d56d2db3. Next: run the exact published 0.8.4-to-0.9.0 installed migration; publication alone does not prove that upgrade. The CLI reported a skipped Jira notification (MCP stdout closed); no fallback notification was sent. Installed diagnostic: the exact published 0.8.4 wheel initialized an isolated starter fromv0.8.4, completed a live rebuild (three tests passed, none failed or skipped), committed its receipt, and passed both receipt-current and full project verification. The 243 baseline project files were preserved before installing the published 0.9.0 wheel in the same environment. That target wheel is 2,284,424 bytes, SHA-256cf0a8dffbe85bec6f6ff08072f457adebdff72c2ea06fa0ebee4ec3d0e43946a. The target rejects update withproject.update_origin_changed: its embedded SSH repository URL differs textually from 0.8.4's HTTPS URL for the same repository. Version checking also reportsstandard_binding.distribution_mismatch; 0.9.0 has no publicproject lifecyclerebind command. No provenance or Standard pin was hand-edited. A supported transition for these two historical boundaries remains required before the target rebuild and migration can pass. - Qualify the current 1.0.1 → 1.1 installed upgrade through a passing receipt.
An isolated macOS diagnostic at
4dc7e620upgraded the published 1.0.1 wheel in place, explicitly rebound Standard authority, followed the new parent revision, re-locked the starter and reviewed documentation. Version binding, authority, lock and plan pass; verify still rejects the missing receipt because no generation/rebuild ran. This is structural evidence, not live upgrade acceptance or a replacement for #251. Fresh published baseline: The downloaded 1.0.1 wheel (2,388,078 bytes, SHA-256b1b45616a6df3417bd7ca6b8f5f04344ed2ea6e606852c9c5cfeb36688fbc8c2) initialized a separate project fromv1.0.1. Its configured OpenCode live rebuild passed three tests with none failed or skipped and committed receiptsha256:4552ac21e6a7ff9a7c353ce74755fa4f6f51c42118941c5d3301b4747db9a063. Receipt currency and full project verification both passed. All 271 baseline project files were preserved before installing the qualifieda98277dd1.1 wheel. Update followed exact parenta98277ddwithout conflicts or refusals. The reviewed Standard rebind changed only lifecycle and derived receipt authority; the unchanged policy and old receipt's stale rejection were verified. Lock, documentation review, version and authority checks passed, followed by a fresh live candidate rebuild: three tests passed, none failed or skipped. Receiptsha256:8a120d2979bca1426ff5a4950c7ff65996ad073c55cd09f161de954955550acfwas committed and passed currency and full project verification. Its canonical identity, six retained artifacts and the 272-file migrated project archive were verified. This qualifies the installed macOS Python starter ata98277dd; final gates must still qualify the eventual release candidate. The separate historical 0.8.4 → 0.9.0 migration remains open. - Review repeated-update semantics before claiming byte-idempotent migration.
After committing that migrated fixture, a second unchanged update apply
reported no upstream deltas/conflicts but changed only
copied_atvalues in.literate/imports.json. Determine whether that observation refresh is intended and document or repair the narrow owning behavior accordingly. Locally repaired:_updated_importsregenerated timestamps even for identical import source/file records. Identical records now retain their timestamp and an identical imports file is not replaced. Changed origin or file closure still establishes fresh provenance. Final validation, conflict handling, explicit adoption and lineage checks remain active. The corrected regressions fail against the untouched adapter (four assertions across three tests), then pass in the 50-test update/catalog/apply batch in 39.948 seconds. They cover unchanged apply, origin-only and content changes, repeated apply, and failed final validation without rewriting unchanged import metadata. The first harness draft incorrectly compared an unresolved macOS temporary path and appended Markdown to a JSON contribution; those fixture errors were corrected before the discriminating baseline and passing batch. Architecture guidance limits the guarantee to unchanged import provenance, not an entirely write-free update or a passing live migration receipt. Lint/format (925 files), layout, OpenSpec (two checks), documentation (121 diagrams / 538 Markdown files), audit (zero), nine fence tests and refreshed driver/documentation reviews pass. All-gate verification passes authority and reports three undeclared/disabled skips; the existing stale receipt still fails and was not rewritten. Qualified follow-up (46668380, PR #387): The fresh full Python gate passes 4,204 tests with 30 skips in 2,434.481 seconds, exit zero, with no checkpoint reuse. Retained run20260911T234647Z-cbd908has terminal stderrsha256:94de6249f9e6d6a55b2ce289939d97308990741fac504e01553f4ab0dfeaacab. Wheel, isolated-prefix installation, forced offline installed E2E and the separate exact-wheel root journey pass. The retained wheel is 2,508,314 bytes atsha256:830f1e52bd3eea9830493b82a74608283d4b000e37bfc701e9ebb29a9e408fc6, with qualified-files manifestsha256:560c10518cbb70bcf6c4266ca383690695c554178a2036a2cece653bde6223ca. A clone of the retained migrated fixture atde0ff95c, explicitly rebound to this installed wheel, passes two unchanged public CLI update/apply cycles with byte-identical imports and unchanged nanosecond mtime. The original dirty diagnostic fixture remains untouched. Probe script identity:sha256:fc2a2ebf2eef613343460c672b3c0c95198ae7caca70113cc281a62940e99b30. This is not a fresh full 1.0.1-to-1.1 upgrade or a passing live receipt. PR #387 depends on #386 and requires its own complete hosted matrix before merge. The historical upgrade and broader release evidence stay open.
- Record the preference and explicit human deferral rule in
Evidence:
- Upgrade smoke passes from the selected 0.8.4 compatibility patch to the published 0.9.0 wheel.
- Changelog migration notes reviewed; rule present and byte-identical in the catalog and init-template skill copies.
[x] MODEL-PREFLIGHT-001 — Validate the live-qualification model resolves before trusting it
- Priority: P1 (a wrong/nonexistent model id in
literate.test.json— which the user is free to set — was accepted unvalidated and only failed deep inside a generation run, masked as a generic server error) - Release target: 0.9.0
- Owner:
src/literate_ai/adapters/live_test_selection.py(verify_live_model_resolves),src/literate_ai/adapters/models/coding_cli.py(_coding_cli_commandopencode logging),tests/conformance/support/sample_runner.py - Direction:
resolve_live_test_selectionvalidated that a coding CLI + model were present and the CLI supported, but never that the model id actually resolves for that CLI. Any string passed — e.g. the un-prefixedrouter/example-model(the resolvable id iscustom-provider/router/example-model) — and the mistake only surfaced mid-generation ascoding_cli.generation_failedwith empty diagnostics. Two compounding defects: (a) the opencode invocation omitted--print-logs, so opencode's realProviderModelNotFoundErrorwent only to its server log and the framework saw a generic "Unexpected server error"; (b) nothing preflighted the model. - Conclusion (landed 2026-09-01):
_coding_cli_commandnow launches opencode with--print-logs --log-level ERROR, so the real coding-CLI error reaches the captured failure output and_coding_cli_failure_detailexcerpts it.- New
verify_live_model_resolves(selection)runs one minimal bounded non-source-writing task through the selected CLI + model; a model that does not resolve raises typedcoding_cli.model_unavailablenaming the model and the underlying CLI cause, with guidance (opencode models). The sample runner calls it once before any generation (skippable viaLITAI_SKIP_MODEL_PREFLIGHTfor a deliberate dry run). - New
litai worker verify-modelcommand (--coding-cli/--modeloverrides) resolves the live-test selection and runs the same preflight, so an operator can validate aliterate.test.jsonbefore trusting it — returns{resolves: true}on success, fails closed withcoding_cli.model_unavailableotherwise. Theconfigure-test-workersskill now directs the operator to run it after setting/changingcoding_cli/model(both skill copies updated, byte-identical, no digest cascade). It is a preflight gate —resolve_live_test_selectionstays a pure, network-free string resolution; the user may set any model (including an inexpensive one they know), but a wrong one now fails in ~seconds with a clear message instead of minutes into generation.
- Depends on: none
- Evidence:
- A wrong/mis-qualified model id fails fast at preflight with
coding_cli.model_unavailablenaming the model + real cause (verified end-to-end:router/example-modelfails in ~2.7s with the surfacedProviderModelNotFoundError; the fully-qualifiedcustom-provider/router/example-modelpasses andhello-componentgenerates green). - Unit tests cover pass / wrong-model-fails-closed / reachable-but-unusable
/ environment-overlay (
test_live_test_selection.pyVerifyLiveModelResolvesTests); opencode argv logging asserted intest_coding_cli_generation.py. -
litai worker verify-modelvalidates a config before trusting it, verified end-to-end (correctedliterate.test.json→{ok: true, resolves: true}; wrong--modeloverride →coding_cli.model_unavailablein ~2.9s with the surfacedProviderModelNotFoundError);test_cli_worker_verify_model.pycovers help / ok / fail-closed.configure-test-workersskill directs operators to run it.
- A wrong/mis-qualified model id fails fast at preflight with
[x] SAMPLE-DIAG-001 — Sample runner swallows the coding-CLI failure detail
- Priority: P2 (diagnosability; not a correctness bug, but it blocks operators from triaging a failed live generation without reproducing the exact CLI argv by hand)
- Release target: 1.1.0
- Previous release target: 0.9.0 or a following minor
- Owner:
tests/conformance/support/sample_runner.py(execute_standard_sample_variant~6901,failure_diagnostics),src/literate_ai/adapters/models/coding_cli.py(_coding_cli_failure_detail,coding_cli.task_failed~1994 already captures bounded stderr) - Direction: When a live sample generation fails,
run_samples.pyreportsStandard sample <name> lifecycle failed: {<digest>: 'coding_cli.<code>'}; diagnostics={}— the bounded coding-CLI stderr thatcoding_cli.pyalready captures forcoding_cli.task_failedis dropped at the sample-runner boundary, so the operator sees an emptydiagnostics={}and cannot see the model's actual error. Observed 2026-09-01 triaging the deferred live samples:coding_cli.generation_failed(arouter/provider server outage) andcoding_cli.generated_metadata_invalid(an off-pin model) both surfaced withdiagnostics={}; the real cause was only visible by reproducing the exactopencode --pure run --agent build --model <m> <prompt>argv by hand. - Conclusion: Thread the bounded coding-CLI failure detail (already computed by
_coding_cli_failure_detail, secret-free and byte-bounded) into the sample runner'sfailure_diagnosticsso a failed live generation reports the model's actual error class/text instead ofdiagnostics={}. Keep it bounded and secret-free; do not make transient stderr part of any derivation key (the runner already excludes transient diagnostics from the derivation key). - Depends on: none
- Evidence:
-
tests.conformance.test_sample_ladder.NeutralSampleLadderTests.test_standard_sample_reports_bounded_redacted_generation_failureexecutes the Standard sample lifecycle with controlled nonzero provider-process results. Both failure texts reportcoding_cli.generation_failed, exit status and provider detail instead of empty diagnostics. No live provider outage is required or claimed by this regression. - The same test supplies a 24 KB diagnostic with a forwarded test credential; the public error stays below 9 KB, excludes the credential and temporary path, and retains the useful diagnostic tail. Two distinct provider error texts produce identical planned source derivation keys.
-
- Validation: The frozen sample/generation batch passes 220 tests (8 live or platform-dependent skips); all 63 project-CLI/quota tests and 16 roadmap/skill contract tests pass. Documentation renders 121 diagrams from 545 Markdown files; formatting checks 1,172 files. Runner and lifecycle TCB reviews are current. These are local change-verification results, not release or live-model attestation.
[ ] IPC-SURFACE-001 — Unified IPC-surface contract with MCP/REST/gRPC adapters
- Priority: P1 (toolbox gap: MCP is taught but its peers REST and gRPC are not; the ADR-0027 frontend→API boundary has no described, versioned, conformance-tested contract)
- Release target: 1.1.0
- Previous release target: 0.9.0 (feature; lands on
main) - Reopened during 1.1 reconciliation: unchecked acceptance remains below.
- Owning ADR: ADR 0029 (Accepted 2026-09-01 after planning-cycle review; scheduled for 0.9.0)
- Direction: Introduce one protocol-neutral "IPC surface" notion — a declared
schema (schema-validated input, typed output, structured errors), a served
self-description at a discoverable path, a verifier-owned conformance
acceptance oracle (built on the ADR-0028 acceptance shape + the shipped
--litai-servelaunch), and a semantic-version compatibility promise reusing ADR-0005's machinery. Makemcp-applicationthe first adapter and addrest-application(OpenAPI/JSON-Schema) andgrpc-application(.proto+ reflection) adapters under a shared parent. The served self-description is the always-current, conformance-checked API documentation. GraphQL and a schema-source Flavor are anticipated follow-ons, out of the first pass. - Depends on: ADR 0005 (public interface + compatibility promise),
ADR 0026 (deployment unit that exposes a surface), ADR 0028 (verifier-owned
acceptance pattern), the shipped
--litai-servelaunch (#214). - Progress (2026-09-01): landed. Core (37498f9a):
IpcSurfaceConformanceAcceptance(ipc-surface-conformance-acceptance@1) — protocol-neutral oracle (openprotocoltag,description_probe,declared_schema_identity, response-validatingrequest_cases,surface_version+ reusedCompatibilityPromise); engine-freedecide_ipc_surface_conformancesplit from anIpcSurfaceProbeport;resolve_component_acceptance_oracleloads the IPC oracle when a persistent-service verifier document declares the IPC schema (else the plain service probe);_accept_ipc_surface_conformancelaunches via--litai-serve, fetches the served description, decides, binds evidence. Adapters (ee6af0bd):rest-application(OpenAPI/JSON-Schema,/openapi.json, protocolrest),grpc-application(.proto+ reflection, protocolgrpc), andmcp-applicationre-framed as the first adapter (with the full digest cascade re-pinned). - Evidence:
- ADR 0029 accepted through a planning cycle before implementation (accepted 2026-09-01; targeted at 0.9.0).
- A conformance oracle fails a surface whose served description does not
match its declared schema, or whose response does not validate
(
decide_ipc_surface_conformance;test_ipc_surface_acceptance.pydescription_mismatch/response_invalid/description_missing). -
rest-applicationandgrpc-applicationadapters ship under the shared parent;mcp-applicationis re-framed as the first adapter. - Live confirmation that a generated REST/gRPC surface serves a matching self-description and passes the oracle end-to-end (needs live generation; the offline tests prove the decision/loader/dispatch, not a generated surface).
[x] CHECKPOINT-STANDARD-001 — Checkpointed unittest runner crashes for Standard-bound projects
- Priority: P1 (regression against 0.8.0/0.8.1; blocks any Standard-bound derived project's test dispatch)
- Release target: 0.8.2 (patch on
release/0.8.x) - GitHub issue: #215
- Owner:
src/literate_ai/test_checkpointing.py(_try_framework_pins),src/literate_ai/adapters/project_lifecycle_driver.py(lifecycle_driver_implementation_identity) - Direction: In a derived project whose
lifecycle_driver.bindingisstandard,scripts/run_checkpointed_unittests.pycrashes before test discovery:_try_framework_pinspasses aStandardProjectLifecycleDrivertolifecycle_driver_implementation_identity, which unconditionally iteratesdriver.implementation_paths— a field the Standard driver (onlyframework_distribution_identity+policy_identity) does not have, raisingAttributeError. - Conclusion: A Standard-bound driver has no
implementation_paths; its implementation identity is itsframework_distribution_identity. Makelifecycle_driver_implementation_identity(or its caller) handle the Standard driver kind — derive the pin from the distribution/policy identities rather than a path list — and fall back to full-suite dispatch (no crash) when a pin cannot be computed. Add a regression exercising checkpointed unit/gate dispatch in a Standard-bound project. - Depends on: none
- Shipped: v0.8.2 (2acab831 on main; backported to release/0.8.x as 6deb3a87).
lifecycle_driver_implementation_identitynow returns the framework distribution identity for a Standard-bound driver instead of iterating the nonexistentimplementation_paths. - Evidence:
-
run_checkpointed_unittests.pyruns (does not crash) in a Standard-bound derived project; a regression (test_standard_driver_implementation_identity_uses_distribution) covers checkpointed dispatch for the Standard driver kind.
-
[ ] ACCEPTANCE-SERVICE-002 — Persistent-service EXECUTE launches one-shot, not a listening server
- Priority: P1 (follow-on to #213; the service oracle runs but can never pass)
- Release target: 1.1.0
- Previous release target: 0.8.2 or next minor (needs a service-launch command mode)
- Reopened during 1.1 reconciliation: unchecked acceptance remains below.
- GitHub issue: #214
- Owner:
src/literate_ai/adapters/standard_project.py(_runtime_command),src/literate_ai/adapters/lifecycle/standard_local.py(_accept_persistent_servicecommand build ~2494) - Direction: With ACCEPTANCE-SERVICE-001 (#213) fixed, a
persistent-serviceComponent now dispatches to_accept_persistent_service, which starts the artifact and polls{base_url}/health. But it always failspersistent-service exited before acceptance completed: the EXECUTE argv comes from_runtime_command(..., phase=EXECUTE)which is one-shot--litai-smokemode for every entrypoint kind, so the artifact handles one invocation, prints one JSON response, and exits rc=0 instead of binding a port and serving. - Conclusion: The persistent-service acceptance must launch the artifact in a
server mode, not the one-shot smoke mode. Add a service-launch command
variant (e.g. a
--litai-servemode in the runtime driver, or a service-kind branch in_runtime_command) that the persistent-service oracle uses, and keep the one-shot smoke mode for portable-application execution. Fail closed if a service artifact does not bind/serve. - Depends on: ACCEPTANCE-SERVICE-001 (#213, the routing fix — landed)
- Root cause & fix (2026-09-01): the only defect was the launch mode.
_accept_persistent_servicealready launches the artifact as a detached, pollablesubprocess.Popen; it just launched_packaged_argv(EXECUTE)which ends in--litai-smoke(one-shot). Added a--litai-servemode: framework-owned mode-flag constants (LITAI_TEST/SMOKE/SERVE_MODE_FLAGincontracts/components.py), a_packaged_service_argvthat swaps the trailing--litai-smokefor--litai-serve(fails closed if the EXECUTE argv does not end in the smoke sentinel), and_accept_persistent_servicenow launches that. The Node/native runtime drivers switched from blocking capture (spawnSync/subprocess.run(capture_output=True)) to streaming inherited stdio so a served process stays attached and pollable while the parent polls/healthand then terminates it; one-shot smoke/test output semantics are preserved. Thepython-service-applicationandrust-service-applicationskills (catalog + init-template copies, byte-identical) now mandate the artifact recognize--litai-serve(bind host/port, serve, stay alive, exposeGET /health). Fails closed when a service does not bind/serve. - Evidence:
- The persistent-service launch command uses
--litai-serve, not--litai-smoke; portable-application EXECUTE stays one-shot smoke.tests/unit/test_service_package_entrypoint.py(RuntimeCommandModeTests,PackagedServiceArgvTests) and the end-to-endtest_persistent_service_acceptance_runs_http_and_sse_and_stops(forced live on darwin) pass — full launch→readiness→requests→shutdown. 104 focused tests pass;make skills-checkpasses both service skills. - Live confirmation that a generated persistent-service artifact honors
--litai-serverequires a live coding-CLI generation (downstream gate); the unit/e2e stubs prove the launch/oracle plumbing, not the generated artifact's--litai-serveimplementation.
- The persistent-service launch command uses
[x] BROWSER-ACCEPT-001 — Verifier-owned browser interaction acceptance for generated frontends
- Priority: P0 (generated frontends pass generated tests and text-only service acceptance while shipping observable browser failures — a silent false-pass in the acceptance oracle, not just a generation-quality gap)
- Release target: 0.9.0 (feature; lands on
main, ships in the minor — not a patch onrelease/0.8.x). Prioritized as an early-0.9.0 headline rather than deferred, given the P0 false-pass. - GitHub issue: #218
(extends #64 and
#134; follows the
operator-side FRONTEND-002
verify-frontend-browserskill) - Owning ADR: ADR 0028 (Accepted and implemented 2026-09-01)
- Owner: independent-acceptance path for
web-application/persistent-servicefrontends — a new verifier-owned browser acceptance contract distinct from generated tests, plus a browser-tool-neutral adapter (Playwright as the initial adapter) and an evidence receipt. - Direction: Independent acceptance currently checks HTTP text, so a frontend
that omits required sections, renders
NaN, throws on init, has an inline script syntax/undefined-constant error, binds no working scroll handler, ships no-op export/column controls, or overflows on mobile still passes. Add a verifier-owned browser acceptance contract that can declare: service startup + desktop/mobile viewports; accessible role/name assertions and required landmarks; rejection on browser console errors, page errors, failed/HTTP-error requests; document-overflow checks; interaction steps (click/select/fill/scroll/keyboard); observable postconditions (text/state/ARIA/row identity/count/download); request-count assertions for local-only interactions; screenshot + accessibility-snapshot diagnostics; deterministic fixture/stub transport (never live credentials or private oracle values in generation prompts). - Conclusion: Ship a browser-tool-neutral acceptance contract + adapter whose evidence receipt binds viewport, interaction contract, browser/tool identity, screenshots, console failures, and outcome. Keep existing persistent-service text probes supported for non-browser services. Fail closed on any console/page-error/failed-request/overflow/postcondition violation.
- Depends on: ACCEPTANCE-SERVICE-002 (#214, the
--litai-servelaunch mode — shipped in 0.8.2) provides the served-frontend launch the browser oracle drives. - Evidence:
- A fixture that only contains expected HTML text but throws during
initialization fails (
test_throwing_init_surfaces_a_console_error_and_fails). - A virtual-grid fixture with an unbound scroll handler fails after a
scroll/postcondition step (
test_unbound_scroll_handler_fails_its_postcondition). - A no-op Export button fails a download assertion
(
test_noop_export_button_fails_a_download_assertion). - A page wider than a 390px viewport fails overflow acceptance
(
test_page_wider_than_mobile_viewport_fails_overflow). - A local sort/toggle that fetches unexpectedly fails a request-count
assertion (
test_local_toggle_that_fetches_fails_request_count). - The evidence receipt binds viewport, interaction contract, browser/tool
identity, screenshots, console failures, and outcome
(
test_evidence_receipt_binds_the_full_interaction_context). - Existing persistent-service text probes remain supported for non-browser services by the standard lifecycle integration tests.
- A fixture that only contains expected HTML text but throws during
initialization fails (
[~] SPLIT-SERVICE-001 — First-class split web/API/collector/cache application pattern
- Priority: P1 (repeated real-world failure: generated single-service dashboards collect expensive upstream data in request handlers, lose all state on restart, and couple frontend deployment to credentials)
- Release target: 1.1.0
- Previous release target: 0.9.0 (feature; lands on
main, ships in the minor) - GitHub issue: #216 (concrete reusable application pattern; related to #33, #114, #115 but not just a generic multi-entrypoint mechanism or Component-kind taxonomy). Cross-layer lock-authority repair: #243.
- Owning ADR: ADR 0027 (Accepted 2026-09-01 after planning-cycle review; implementation scheduled)
- Owner: a portfolio sample + inheritable reference Component set (or exact specification-to-source guidance) for a four-boundary durable service, composed through public capability contracts.
- Direction: Two independent derived services (
portfolio-dashboard,telemetry-dashboard) converged on the same provider-neutral architecture — browser frontend, read-only HTTP API, single-writer scheduled collector, and a durable embedded snapshot cache — that must be independently generated, deployed, restarted, and evidenced. Projects can model this manually today with multiple Components andprovides/requires, but the reusable contracts are not cataloged, so generation repeatedly produces a single service that recollects upstream data in request handlers and loses availability on restart/failure. Catalog: (1) a browser frontend that consumes only a same-origin/read-only API; (2) a read-only API that consumes only a durable local snapshot store; (3) a single-writer collector/worker that alone may call upstream providers; (4) an embedded SQL snapshot cache (initially SQLite: WAL, busy timeout, migrations, read-only connections); plus capability contracts connecting the four without exposing private transitive specifications, independent entrypoints / deployment units, coherent current-snapshot publication after all required writes validate, and shared progress/freshness metadata. Keep provider commands, product schemas, credentials, and application vocabulary out of the framework template. - Depends on: MULTI-ENTRYPOINT-001 (#33) — the multi-entrypoint / independent deployment-unit composition this pattern is built on (landed c02c2497).
- Completed repair: Centralize the planner-supported
component://…::+selectorgrammar and replay each scoped selector only against its named lock node. The locked-generation verifier now preserves the planner's successful heterogeneous lock through source generation (#243). - Progress (2026-09-02): framework parts landed. New leaf skill
backend-application/durable-split-service(both copies byte-identical, pins the parent digest with no cascade) catalogs the four-boundary composition through public capabilities and referencesfrontend-application+scheduler-lease-worker(#217) for those boundaries. Referencetests/support/snapshot_cache_reference.pyproves the coherent-snapshot contract offline. The operator has now explicitly authorized live generation/build/execution and confirmed the local Cursor CLI is authenticated (--yolofor unattended execution). The live four-Component portfolio now passes generation, independent execution, browser, persistence, retry, lease, lock, and SBOM verification on macOS. Do not collapse the four authority boundaries into one multi-entrypoint Component: ADR 0026 supplies truthful deployment-unit evidence, while ADR 0027 deliberately keeps credentials and private source authority in separate Components. - Evidence:
- A live-generated portfolio composes four Components through public capabilities and two independent Standard lifecycle roots.
- The collector is the only Component whose generated code can invoke the upstream fixture; API/frontend restart and failure paths make no upstream request.
- Restarting API and frontend serves a previously persisted snapshot
without invoking the collector
(
test_restart_reader_serves_persisted_snapshot_without_collector). - A failed partial write leaves readers on the prior complete snapshot
(
test_aborted_partial_write_leaves_prior_snapshot,test_publish_missing_required_write_fails_and_keeps_prior). - Component locks and CycloneDX evidence preserve the exact four-boundary composition across five nested lifecycle nodes.
- Generated and independent tests run on macOS, Linux, and Windows where SQLite is available (reference tests are portable; the generated matrix needs the live sample).
- Reader restart, partial-write failure, concurrent collector lease, expired-lease recovery, bounded retry, freshness/progress, and collector-only upstream access pass as externally meaningful flows in the generated portfolio.
[x] KNOWN-FAILURE-CHECKPOINT-001 — Retain known failures without hiding test debt
- Priority: P1 (long repair suites repeatedly spend worker time on an explicitly classified failure, while ordinary skip/xfail accounting can falsely look clean)
- Release target: 0.9.0
- GitHub issue: #230
- Owner: shared pinned-test/checkpoint contracts, atomic checkpoint store, checkpointed Python adapter, external-runner result import, CLI/API operations, evidence ledger, and project-test receipt accounting
- Direction: Add operator-authored known-failure annotations bound to the exact
content pin, test key, environment observation (or explicit universal authority),
retained failure evidence/fingerprint, credential-free reason, and expiry or
revalidation policy. Matching repair runs synthesize a visible
known-failure, continue later tests, count it separately and as non-passing, and never issue an all-passing receipt. Release evidence always executes from the beginning. - Conclusion: Extend the existing checkpoint ledger; do not create a parallel skip store and never classify failures automatically. Stale, malformed, secret-shaped, ambiguous, or context-mismatched annotations fail closed and execute the test.
- Depends on: existing checkpointed Python-test and project-test receipt authority; no dependency on MULTI-ENTRYPOINT-001 or SPLIT-SERVICE-001.
- Next action: Land the reviewed implementation and use its external-event importer for the classified Kit repair checkpoint; no framework implementation work remains.
- Implementation:
- Add a typed known-failure annotation and atomic store update bound to one exact pin, key, context, original failure evidence, reason, policy, and optional public tracker.
- Add explicit CLI/API annotate, inspect, revalidate, and clear operations.
- Teach checkpointed Python tests and the external-runner adapter to synthesize and import attributable known-failure outcomes, continue, and invalidate stale annotations.
- Extend totals and receipts with passed/failed/known-failed/skipped/executed; known failures remain repair-incomplete and cannot authorize release evidence.
- Evidence:
- Same pin/context suppresses only the exact annotated test, continues later tests, counts known-failed, exits non-passing, and emits no passing receipt.
- Changed source, context, expiry, or fingerprint executes normally; explicit revalidation success or clear removes the annotation.
- Universal authority is explicit and visible; malformed/stale/secret-bearing records suppress nothing.
- A deterministic authentication-required external-runner fixture proves import without private endpoints or credentials.
- The Python adapter's default pin folds exact discovered test-source bytes; a changed test cannot reuse an old annotation. Clean runs in another context retain the original context's debt, and successful Python or external-runner revalidation clears only the exact annotation.
- The clean full Python check and exact non-editable wheel version check pass on the final branch revision; lint, format, schema, documentation, and lifecycle authority checks are current.
[x] SCHEDULER-LEASE-001 — Persisted daily jitter scheduler and single-writer lease guidance
- Priority: P1 (reimplementing schedule/restart/concurrency independently risks clock, restart, and duplicate-work bugs; the collector in SPLIT-SERVICE-001 needs exactly this behavior)
- Release target: 0.9.0 (feature; lands on
main, ships in the minor) - GitHub issue: #217
- Owning ADR: ADR 0027 (Accepted and implemented 2026-09-01 — the scheduler-lease authority is decided with the split-service pattern)
- Owner: a reusable worker/scheduler generation skill (or Component template) — generation guidance/reference authority for an application's own worker, NOT a framework scheduler daemon.
- Direction: Derived services that poll expensive shared systems need predictable average cadence without synchronized fleet spikes or duplicate work after restart. Specify: configurable nominal UTC run time + symmetric bounded jitter; injectable random/clock sources for deterministic tests; persisted schedule window, selected jittered instant, last completed window, and retry state; a database-backed lease (owner, acquisition time, expiry) so multiple workers cannot execute one window; restart semantics (before target: preserve selection; after completed target: do not rerun; after expired running lease: recover safely); bounded retry/backoff tracked separately from the next daily schedule; append-only run and per-source outcome records; progress/failure output without logging secrets; graceful cancellation and next-run status.
- Depends on: SPLIT-SERVICE-001 (#216) — this is the collector's scheduler in that pattern; co-design so the lease/state store shares the embedded cache boundary.
- Evidence (deterministic tests):
- Negative and positive jitter bounds around nominal time.
- UTC date rollover and clock movement.
- Restart before target, during a leased run, after success, after failure.
- Concurrent scheduler instances with exactly one winner.
- Expired lease recovery.
- Long-running work crossing the next nominal boundary.
- Retry behavior that does not create a second daily run.
- Next-run/progress state readable by a separate API process.
All cases above are executable in
tests/unit/test_scheduler_lease_reference.py.
[ ] ACCEPTANCE-SERVICE-001 — Persistent-service acceptance oracle never runs (silent false-pass)
- Priority: P0 (silent false-pass on a service's behavioral/auth acceptance)
- Release target: 1.1.0
- Previous release target: 0.8.0 — release blocker. Not a CI blocker, but shipping 0.8.0 with a silent false-pass on service acceptance is unacceptable; the cut waits on this fix.
- GitHub issue: #213
- Owner:
src/literate_ai/adapters/lifecycle/standard_local.py(project package plan entrypoint-kind), independent-acceptance routing - Direction: A Component declaring a
persistent-serviceentrypoint plus aliterate-ai/persistent-service-acceptance@1oracle builds and reportspassed: true, but the oracle never runs — the package plan hard-codes the entrypoint kind toapplication, so acceptance falls through to theindependent-acceptance-exempt@1path. A generated artifact that is not even an HTTP server passes.litai rebuildreports a passing receipt for a service whose readiness/auth contract was never evaluated. - Conclusion: The package plan must carry the Component's real entrypoint
kind so
persistent-serviceroutes to the persistent-service acceptance oracle (reserve port, start artifact, poll/health, assert requests) instead of the exempt path. Do not weaken acceptance; fail closed when a declared service oracle cannot run. Needs a fix + regression proving a non-listening artifact fails the service oracle. - Depends on: ENTRYPOINT-001 / ACCEPTANCE-001 (entrypoint-kind acceptance scoping) — this is the service-kind counterpart that was left hard-coded.
- Next action: Trace
standard_local.py's package-plan entrypoint-kind assignment; thread the real kind through; route persistent-service to its oracle; add a regression where a request-handler-only artifact (no listener) fails the service oracle instead of silently passing. - Root cause & fix (2026-08-31):
LocalStandardLifecyclePorts.create_project_packagehard-codedPackageEntrypoint("application", "application", ...), discarding the Component's declared kind.accept_project_independentlyandexecute_packaged_projectalready routepersistent-servicecorrectly — the only defect was the hard-coded kind at package creation. Added_root_package_entrypoint(component_lock)which reads the root node'sdefinition.entrypoints[0](name, kind)and threads the real kind into the package plan. A Component with no/synthetic entrypoint keepsapplication. - Evidence:
-
_root_package_entrypointcarriespersistent-servicethrough and preservesportable-application; falls back toapplicationfor no-entrypoint / missing-root.tests/unit/test_service_package_entrypoint.py(4 tests). - Full lifecycle regression: a persistent-service Component whose artifact
does not listen fails its acceptance oracle (no more
independent-acceptance-exemptfall-through) — covered by the routing that now receives the real kind; live end-to-end confirmation tracked with the sample portfolio. - A correct listening service still passes.
-
[ ] CI-FAILFAST-001 — Make pipeline fail-fast cancellation a first-class citizen
Clean-run repair (2026-09-16 UTC): Probe-free run 35055235524 passed two cells, then macOS sample composition failed because the nested model-routing Component change retained its previous harness authoring pin. Refreshed the reviewed sample authoring and specification identities; the execution-interface and independent oracle identities remain current. The exact hosted composition command now passes all 47 tests locally in 51.450 seconds. Fresh hosted qualification is still required. The cancelled cells are not passes; this item remains open.
Implemented cancellation scope: Consolidate the existing fifteen skill, documentation, composition, Linux/macOS conformance and Windows gate/test cells into one native
fail-fast: truematrix. Preserve each published check name, platform/Python selection, command, action pin, artifact and status-aware cleanup step; retain run concurrency cancellation and read-only permissions. Compare each selected cell with its original execution plan, validate Actions syntax and retain real hosted cancellation evidence before closing this item.Release target: 1.1.0
Priority: P1 (runner-resource waste)
Owner:
.github/workflows/ci.yml, release-gate CI orchestrationDirection: User-directed: CI wastes a large amount of GitHub runner time because every matrix job declared
fail-fast: false, so all OS/Python combinations run to completion even after one host has already failed. A change that fails on one host is going to fail the run regardless; we should stop the rest immediately.Conclusion: Two levels of cancellation:
- Within each matrix — flipped
fail-fast: false→fail-fast: trueon all four matrix jobs (documentation, sample-composition, the Python matrix, and the Windows job) so a failing cell cancels its siblings. Done in this item. - Across independent top-level jobs — GitHub Actions does not natively
fail-fast across separate jobs. Design a cross-job cancellation mechanism:
a fast "gate" job (lint/format/quick unit subset) that the heavy jobs
needs:, or a reusable-workflow/step-level cancellation so a failure in any platform cancels the others in the same run. This preserves the ability to see a single authoritative failure while not paying for the full matrix on a known-bad change.
- Within each matrix — flipped
Depends on: none
Implementation:
- Flip
fail-fast: false→trueon every matrix inci.yml. - Put all fifteen required checks in one native fail-fast matrix so a failure in any platform or task cancels unfinished siblings across the previous top-level job boundaries. Job-level continuation is false; no token-write permission or cancellation service is needed.
- Keep
concurrency.cancel-in-progress: true(already set) so a new push cancels the previous run.
- Flip
Evidence:
- A push whose change fails on one platform cancels the remaining matrix
cells instead of running the full matrix to completion: hosted run
35055053274
at
40fa0bf75c5a7975cd3f63341c2dfdce84f551fedeliberately failed only Ubuntu documentation and cancelled all fourteen other cells across Linux, macOS and Windows. All fifteen cells reached terminal states before any subsequent push; no manual workflow cancellation was used. - The probe-free final head passes the complete hosted matrix before landing.
- A push whose change fails on one platform cancels the remaining matrix
cells instead of running the full matrix to completion: hosted run
35055053274
at
Local validation: All 30 CI action-pin, impact and planning tests pass. A parsed before/after comparison proves every original step and parameter in all fifteen selected cells is preserved, including status-aware evidence uploads and failure explanations. Actionlint 1.7.12 validates the resulting workflow (external shellcheck/Pyflakes disabled); original command bodies are byte-preserved. Retained records:
_build/ci-projection-evidence.json,_build/ci-failfast-tests.logand_build/ci-actionlint.log.Hosted evidence: Draft PR #441 is stacked on #438. The first head could not start CI because review pins conflicted with five newer retained-worker commits; those were merged and reviewed, with all 23 retained-worker/version-authority tests passing. The resulting controlled run proves cancellation above. Its retained API receipt is
_build/ci-cancellation-probe-final.json; the actual failing step is the explicitly named probe, and the other fourteen conclusions arecancelled. The probe is now removed. All thirty CI regressions pass again in 13.198 seconds; lint/format, OpenSpec, documentation, layout and current driver review pass on the combined source. This is not a green full-suite receipt.Next action (in progress): Finish clean hosted qualification of the probe-free head, then land through the integration owner. Preserve #438's ongoing run and the intentional failed run as cancellation evidence, not release evidence.
[x] RELEASE-018-IDEMPOTENT — Wheel asset upload must tolerate an already-uploaded asset
- Priority: P2
- Release target: 0.8.1
- Owner:
src/literate_ai/project_releases.py(_upload_wheel_asset) - Direction: During the 0.8.0 publish,
_upload_wheel_assetsucceeded on the firstgh release upload(the wheel is attached to the v0.8.0 release), but a subsequent idempotency-retrygh release uploadof the same asset failed because the asset already existed, surfacingrelease.wheel_upload_failedeven though publication was complete and correct (verify-publishedok). - Conclusion:
_upload_wheel_assetnow usesgh release upload --clobberso a retried or resumed publish overwrites an identical already-attached asset instead of reporting a falserelease.wheel_upload_failed. The upload is not weakened; it is idempotent. - Evidence:
-
_upload_wheel_assetpasses--clobber; 66 release tests pass. Re-running publish with the wheel already attached returns success.
-
[x] WINDOWS-LOCK-001 — Windows manifest/append write-lock never worked (blocked CI and the 0.8.0 cut)
- Priority: P0
- Release target: 0.8.1 — the active 0.8.1 headline. 0.8.0 shipped on the green POSIX matrix with Windows documented as a known issue.
- 2026-08-31 Windows CI update (run 33427732750,
90472857): the write-before-lock fix (4002b5e8) did NOT fix Windows. TheLITAI_LOCK_DIAGdiagnostic still reportsPermissionError errno=13 (EACCES) winerror=Nonefrommsvcrt.locking(LK_NBLCK, 1)— now with the placeholder byte already written, so the empty-file hypothesis was wrong.EACCESfrom non-blockingmsvcrt.lockingmeans the byte-0 region is already locked by another handle; the 30s retry loop then times out. Most likely a same-process double-lock: a prior_lock/_remove_idle_lockhandle (or a second open of the same lock file) still holds the region on Windows, wheremsvcrtlocks conflict across handles within one process. Next: add diagnostics identifying the operation/handle/PID, or restructure so only one handle ever locks the file per operation. This is the 0.8.1 work. - Owner:
src/literate_ai/projects.py(ProjectConfigurationStore._lock),src/literate_ai/adapters/authority.py(_append_lock) - Direction: The hardened compare-and-swap config store added in
3b68f5ae("Preparing for 0.8.0-RC1") shipped a POSIX-first byte-range lock that fails on Windows: everylitai initand project-config write on Windows CI raisedProjectError: manifest lock failedfrommsvcrt.locking(fd, LK_LOCK, 1). Windows/Python 3.12 CI has been red the entire release cycle. - Conclusion: Two Windows-only defects, both already solved once in the
sibling
src/literate_ai/_cache_lock.py(commits0da7387band4c756e9a, CPython issue #76): (1) the placeholder byte was written before the lock was held — Windows mandatory byte-range locking makes that collide — and the blockingLK_LOCKretries ~10s then raises a bareOSError; (2)(st_dev, st_ino)/samestatidentity is unreliable on Windows whereos.fstatreportsst_ino == 0. Reuse_cache_lock's proven helpers: take the lock first (non-blockingLK_NBLCKon a bounded retry loop), write the placeholder under the lock, and fall back toGetFileInformationByHandleidentity only whenst_ino == 0. POSIX path is byte-for-byte unchanged. Fixed the identical pattern inauthority.py. - Depends on: none;
_cache_lock.pyalready ships the proven primitives - Implementation:
-
ProjectConfigurationStore: lock-then-write ordering,LK_NBLCKretry loop,st_ino == 0Windows identity fallback in_lockand_remove_idle_lock; POSIX unchanged. -
FileAuthorityProjectionStore._append_lock: same fix reusing the same_cache_lockhelpers. - Cross-platform regression tests: POSIX uses
(st_dev, st_ino)and never calls Win32;st_ino == 0routes to_windows_identity_matches; a symlinked lock file is rejected; the lock serializes two concurrent writers (real exclusive lock, not a no-op).
-
- Evidence:
-
test_project_configuration.py,test_component_authority.py,test_locked_source_promotion.py,test_repository_updates.py,test_project_cli.pypass on POSIX (108 tests). - Windows/Python 3.12 CI goes green on
initand repository-update tests. ACHIEVED (2026-08-31, run33442231618). The real root cause was NOT the lock: the enrichedLITAI_LOCK_DIAGdiagnostic showed themsvcrt.lockingacquire succeeded (attempts=None). The blockingPermissionError(errno=13)came from_replacecallingos.fsyncon a directory handle (projects.py:625), which Windows rejects (FlushFileBuffersis invalid on a directory) — and it ran inside the_lockblock, so_lock'sOSErrorhandler mislabeled it "manifest lock failed". Fixes that landed the green: (1) guard the directoryfsyncto POSIX in_replace(8e3cd95d, matching the existing_fsync_directoryhelpers); (2) converge the lock acquire on the proven_cache_lockprimitive — write placeholder byte beforemsvcrt.locking, nofsync/O_CLOEXECbeforeLockFile(4484deb6); (3) retry the Windows delete-pendingEACCESon concurrent lock-file open in both_cache_lockand_open_and_acquire(5865db06); (4)DOC-IDENTITYadvisory path separators via.as_posix()(2ddbe752).LITAI_LOCK_DIAGdiagnostic and its CI env var removed once green. All Windows jobs (lint/OpenSpec/wheel, tests 2/3, 3/3) pass; the long tests-1/3 full-suite shard runs clean. Backported torelease/0.8.xfor the 0.8.1 patch.
-
[x] CLI-DEBUG-002 — --debug injects unplanned debug-spec-map authority and aborts generation
- Priority: P0 (0.8.0 break-glass)
- GitHub issue: #212
- Owner:
src/literate_ai/adapters/generation_preparation.py - Direction:
--debuginjectsdebug-spec-mapinto coding-agent authority segments asLOCAL_SKILL, but the plan doesn't select diagnostic skills. The context validator rejects it asauthority_unselected. - Conclusion: Debug instrumentation is framework-owned. The debug skill is
already added through the coding-CLI skill closure
(
coding_cli.py:1419) where it enters the prompt as part of the framework envelope. Removed the authority-segment injection in_node_authority_segments. Commit8eba2156. - Evidence:
- 46 focused tests pass (spec_map, cli_debug, application_generation).
[ ] RELEASE-018 — Publish pip wheels as GitHub Release assets
Release target: 1.1.0
Reopened during 1.1 reconciliation: unchecked acceptance remains below.
Priority: P0 (0.8.0 break-glass)
Owner: release engineering,
litai release rc/litai release publish, GitHub Actions CI workflowDirection: User-directed: the installed
litailauncher is a pip console script. A source-only Git tag leaves every downstream user withModuleNotFoundError: No module named 'literate_ai'until they manually build and install a wheel from source. Releases must publish a pip wheel as a GitHub Release asset so that the install/upgrade path (pip install literate-ai) can fetch it directly. This applies to every future release including RC prereleases.Conclusion: The
litai release publish(andlitai release rc) flow must build the distribution wheel from the exact tagged revision and attach it to the GitHub Release. The CI workflow should also produce the wheel as a build artifact for verification before publication. The existingmake wheel-checktarget builds and smoke-tests the wheel; the missing piece is attaching it to the GitHub Release.Current 1.1 action: Retain the exact CI-smoked wheel and an independently checkable revision/version/size/SHA-256 manifest after successful qualification. The current smoke workspace is pruned on success and the CI upload contains only the evidence ledger. Reuse the existing release-file custody validator; do not rebuild an allegedly equivalent wheel for upload or treat CI artifacts as publication approval. Historical published-wheel proof remains separate. Local custody and existing wheel-smoke unit suites pass (17 tests), including changed input/copy refusals, independent repeat custody and linked output refusal. Fresh installed-wheel and hosted upload evidence remain outstanding.
Depends on: none beyond current
mainImplementation:
- Retain successful smoke-tested wheel bytes with the existing qualified-file manifest and upload them from each Linux/macOS/Windows wheel CI job.
- Build the distribution wheel from the exact tagged revision during
litai release publish/litai release rcand attach it to the GitHub Release as an asset. - Verify the published wheel installs cleanly and
litai version checkreports the tagged version. - Update the install documentation to reference the GitHub Release wheel.
Evidence:
- Regression tests reject changed wheel bytes and linked output custody; a fresh installed-wheel smoke retains a verifiable artifact, followed by exact-head hosted artifact-upload evidence on all three platforms.
- The GitHub Release for
v0.8.0rc1(orv0.8.0) includes aliterate_ai-*.whlasset that installs cleanly. - A downstream user can
pip installthe wheel and runlitai.
[x] VERIFY-001 — litai verify cannot validate mixed-language projects with per-Component Flavor overrides
- Priority: P0 (0.8.0 break-glass)
- GitHub issue: #211
- Owner:
src/literate_ai/cli/verify.py,literate.project.jsonschema,contracts/projects.py - Direction:
litai verifyrecomputes every lock using only projectdefault_flavor_selectorswith an empty--flavorlist.default_flavor_selectorsrejects coordinate-scoped selectors. A mixed-language project whose JavaScript Component was locked with explicit--flavor=-lang-python --flavor=+lang-javascriptoverrides always reports that lock as stale. - Conclusion: The project needs an authored way to persist per-Component
Flavor selections.
component_flavor_selectorsis the explicit per-Component map; its configured selectors precede one invocation's explicit CLI selectors so callers can deliberately override persisted preferences. Lock, plan, generate, rebuild, test, and verify consume the same merged selector sequence. - Depends on: none beyond current
main - Implementation:
- Design and add
component_flavor_selectorstoliterate.project.jsonas an optional field mapping Component paths to their override selector lists. - Resolve persisted selectors in the shared project adapter and consume them from lock, plan/generate, Standard/external rebuild, worker dispatch, build/test, and verify paths.
- Reject escaping Component paths and preserve explicit CLI selectors after persisted selectors.
- Validate that a lock produced with per-Component overrides passes direct lock, plan, and project verification gates.
- Design and add
- Evidence:
- A mixed-language downstream project with per-Component Flavor overrides
passes
litai verifywhen the overrides are persisted in project configuration. - The same downstream JavaScript Component passes direct
litai lock --checkandlitai planwithout repeating selectors on the CLI. - 66 focused CLI/project tests and 20 subtests pass; focused Ruff check and format check pass.
- A mixed-language downstream project with per-Component Flavor overrides
passes
[x] DOC-IDENTITY-001 — Downstream projects must establish their own identity, not bleed through to the parent
- Priority: P0 (0.8.0 break-glass)
- Owner: init template (
project_initialization.pyseeded docs), documentation-authoring skill,litai updatedoc-inheritance boundary, release acceptance - Direction: User-directed: a downstream project's
docs/user/getting-started.mdreads as a Literate AI framework tutorial rather than as the product's own documentation. The init template seeds entirely framework-centric content (genericlitai rebuildinstructions, the Spec→Recipe→Source flowchart,litai init --fromguidance). A developer opening "Getting Started" fortelemetry-dashboardis told how to drive the framework, not what the service is, how to install it, or how to use it. Observed atgithub.com/example-org/telemetry-dashboard/blob/main/docs/user/getting-started.md. - Conclusion: The seeded getting-started document must require the project to
establish its own identity before framework mechanics. Specifically:
- The init template's
docs/user/getting-started.mdshould open with clear placeholders that force the project to state what it is, what it does, and how a user installs and operates it — not the framework that built it. Framework workflow instructions belong in a separate section or document (e.g. "Contributing" or "Development workflow"), not in the product's user-facing front door. - Self-describing should be an inheritable skill/goal: every project derived from literate-ai should inherit the expectation that its documentation describes itself, with the parent's documentation only bleeding through when the child has no documentation for a topic at all.
litai updatemust not silently clobber project-specific documentation identity — if a child has customized getting-started.md, the update should surface that as a conflict for human review, not overwrite it.- The release process should include a self-documentation acceptance check:
does the project's getting-started doc actually describe this project?
A document that is byte-identical to the parent template (or mentions only
samples/hello-component) should fail the release gate or produce an advisory.
- The init template's
- Depends on: DOC-INSTALL-001 (already landed; this extends its principle from services to all projects)
- Implementation:
- Rewrite the init template's
getting-started.mdto lead with project-identity placeholders: "What is this project?", "How do I install and run it?", "What does it do?" — followed by a clearly marked framework-workflow section for contributors. Also rewrotedocs/README.mdtemplate. Commitb441d5b2. - Add a documentation-authoring skill requirement (step 4, both copies byte-identical): child projects must describe themselves; parent-inherited documentation is a fallback, not a substitute for project identity. SkillEvaluator passes.
- Verify
litai updatesurfaces doc-identity edits as conflicts rather than silently reverting them. The three-way classification (ProjectUpdateClassification.CONFLICT) already handles this: any file modified both locally and upstream is surfaced as a conflict for human review. No code change needed. - Add an advisory or fail-closed check to the release process for
docs that are still the unmodified parent template.
litai project validatenow emits aproject.doc_identity_placeholderadvisory for each doc file containing the template documentation-identity marker. Commit4f1ecaf1.
- Rewrite the init template's
- Evidence:
- An initialized child project's getting-started.md opens with
"What is this project?" and DOC-IDENTITY placeholders, not the
framework's tutorial.
test_init_creates_a_valid_starter_taxonomy_ from_belowpasses with the new assertions. -
litai updatedoes not silently clobber a customized getting-started.md — the existing three-way classification surfaces it as CONFLICT when both sides changed. - A
litai project validateon a project whose getting-started.md still contains the template placeholder emitsproject.doc_identity_placeholderadvisory. Tested intest_init_creates_a_valid_starter_taxonomy_from_below.
- An initialized child project's getting-started.md opens with
"What is this project?" and DOC-IDENTITY placeholders, not the
framework's tutorial.
Detailed-roadmap lifecycle
This file is the sole resumable queue. Create a supporting document beneath
docs/roadmap/ only when a program's rationale, ordering, and acceptance contract no
longer fit one queue item without obscuring its next action. Every such document must
place these visible fields between its title and first section:
- **Status:** active
- **Owning queue item:** [AREA-NNN](active-work.md#area-nnn-heading)
- **Completion / archival evidence:** pending while AREA-NNN remains open
The allowed states are:
active: selected by its owning queue item and presently executable;partial: durable milestones have landed but its complete acceptance contract has not;deferred: deliberately ineligible until the header names the prerequisite or decision;completed: all acceptance evidence is linked in the header; andhistorical: terminal documentation moved beneathdocs/history/roadmap/, with its original owner and archival evidence retained.
Owning queue item must link to an existing checkbox heading or named program heading
in this file. A completed plan may remain beneath docs/roadmap/ when marking it
completed preserves useful inbound links; substantial closed programs should move to
the history area and use historical. A terminal state without linked evidence is
invalid. Ordinary queue items do not gain separate files merely to satisfy this header.
P0
[ ] OPENCODE-NVIDIA-001 — Admit NVIDIA Inference in isolated OpenCode generation
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Priority: P0 (blocks downstream 0.8.0 rebuilds when first-party providers are quota-limited)
- Owner:
src/literate_ai/adapters/models/coding_cli.py - Direction: A downstream project has a working NVIDIA Inference credential and
router/example-model, but Literate AI's isolated OpenCode environment stripsNVIDIA_API_KEYand replaces user configuration with a provider-free envelope. - Conclusion: Keep clean OpenCode isolation while admitting one explicit NVIDIA custom-provider definition and its documented credential environment variable. Do not import the user's ambient OpenCode configuration or persist its secret in project/framework authority.
- Depends on: none
- Implementation:
- Forward
NVIDIA_API_KEYonly for OpenCode invocations. - Add NVIDIA Inference and
router/example-modelto the isolated OpenCode provider envelope. - Build an exact wheel and prove a real isolated generation transaction.
- Forward
- Evidence:
- Focused OpenCode environment tests pass and assert the provider envelope.
- Downstream provider-backed rebuild reaches successful source generation.
[x] RELEASE-015 — Close the critical RelEng skill gaps around the cut
- Priority: P0 (0.8.0 break-glass; SDLC harness)
- Owner:
skills/agent/release-project/nested deltas,src/literate_ai/project_releases.py, tracker inspect argv, anddocs/architecture/project-releases.md - Direction: The cut/publish spine is already complete. Agents fail as release engineers because backport, evidence, default-branch advance, live CI go/no-go, post-publish identity smoke, trunk landing, and descendant notify are CLI verbs or prose — not nested skills they are told to open. Address the critical (dev-loop) findings from the RelEng gap analysis. Do not invent staging/prod deploy, signing, GitLab publication, yank, advisories, or LTS windows in this item.
- Conclusion: Nest short wrap-Python deltas under
release-project/(backport, evidence, advance, ci-status, verify-published, notify-descendants). Addlitai release verify-publishedas a read-only remote identity check. Name CI and land argv onlitai project tracker inspect. Land changes through a nesteddevelop-in-production-workflow/staging/dev/landskill. Survey other developers' green PRs at the start of each cycle and leftover worktrees/branches at the end vialitai project peer-workandsurvey-peer-work. Keep## Unreleasedcurrent as queue items close. Remove the danglingworkflows/production/hotfix/workflow.mdcitation. Do not grow the parentrelease-projectSKILL.md into a second implementation. Catalog and init-template copies stay byte-identical. - Depends on: current
main; existinglitai releaseverbs - Implementation:
- Nested
release-projectskills wrapping existing CLI plusverify-published - Tracker inspect names
ci_status,land_create, andland_merge -
develop-in-*/landplus Unreleased changelog discipline -
peer-workstart/end survey (green PRs; leftover worktrees/branches) - Architecture/CLI inventory, hotfix citation, skills.md table
- Catalog/template parity and focused tests
- Nested
- Evidence:
- Focused
tests.e2e.test_project_releasesand tracker inspect tests -
tests.smoke.test_cli_helpcommand-reference inventory - Catalog/template nested skills byte-identical;
make skills-checkSkillEvaluator 20260829151821–20260829151824 (8 skills, 6/6 each). - Documentation-authority marker current after architecture edits
docs/architecture/design-traceability.mdsha256:5b66f9a8f1353e50c8f615290cbf1f3c753e99212fc1a492e9f15d7ca323a3e8. Lifecycle-driver pinsha256:5f51fd5f5731cc3a085670138031ec16d5826eddfef48997af154581b6a3ea84.
- Focused
[x] RELEASE-BRANCHING-002 — Refuse a versioned release cut on the default branch
- Priority: P0
- Owner:
skills/agent/release-project/SKILL.md,src/literate_ai/project_releases.py, anddocs/architecture/project-releases.md - Direction: A versioned cut has twice been planned and published from
mainbecauserelease-projectsaid "default branch when its tip is the release." That exception contradictsdocs/history/roadmap/release-branching-model.md. Agents follow the skill; the CLI did not stop them. Fail closed on the default branch as a publish checkout. Do not also leave branch creation as a raw Git homework step: that is how the cut was skipped twice. Least astonishment is thatpreparecutsrelease/<major>.<minor>.xwhen the line does not exist. - Conclusion: When
literate.release.jsondeclaresdefault_branch:planstays read-only. On the matchingrelease/<major>.<minor>.xline it recordsrelease_line.create: false. Ondefault_branchit recordscreate: trueonly when that line is absent locally and on the remote; if the line already exists it failsrelease.default_branch_cut_forbidden(checkout / backport, then re-plan). Any other name, including a per-patchrelease/x.y.z, failsrelease.branch_not_release_line.preparewithcreate: truecreates the line from the plan revision (no force), checks it out, then writes declared paths.checkandpublishrequire that named line, not the plan'ssource_branchwhen that is still the trunk. Projects that omitdefault_branchstay checkout-agnostic and omitrelease_line. Sync the init-template skill copy. Do not retagv0.7.0. - Depends on: RELEASE-BRANCHING-001
(model);
origin/release/0.7.xalready exists atv0.7.0. - Implementation:
- Delete the skill's "default branch when its tip is the release" exception in the catalog and init template.
- Fail closed when
default_branchis declared and the checkout is not the matching line and that line already exists. -
planondefault_branchwhen the line is absent recordsrelease_line.create: true; optionalrelease_lineonliterate-ai/release-plan@1. -
preparecreates and checks out that line;check/publishcompare against the cut name. - Record the contract in the protocol, branching model, skills, CLI help, and changelog.
- Evidence:
- Planning on
mainwhenrelease/x.y.xis missing succeeds withcreate: true; the same plan failsrelease.default_branch_cut_forbiddenonce the line exists; a per-patchrelease/x.y.zname failsrelease.branch_not_release_line;prepareleaves the operator on the new line;checkaccepts that line even whensource_branchis still the trunk.tests.e2e.test_project_releases52 tests OK. - Catalog and template
release-projectskills are byte-identical;make skills-checkpasses (SkillEvaluator 20260827180622). - Focused
tests.e2e.test_project_releasespass;make lintandmake skills-checkare current; lifecycle-driver pinsha256:c9d8f0a5ad8bb71c91d69b0045f5c68c9a2a2692f0e69b5d6b1192dfa69c4457.
- Planning on
[x] SOURCE-INTELLIGENCE-001 — Restore opt-in external source intelligence
- Authority: ADR 0019
- Priority: P0 downstream release blocker
- Owner: project source-intelligence adapter, CLI, validation, verification, and lifecycle boundaries
- Direction: Partially supersede ADR 0016 for explicit downstream use. Keep
provider_id: noneas the dependency-free default while restoring boundedcodegraph-clisync and check behavior for projects that opt in. Do not restore provider installation, package dependencies, worker companion capabilities, or an ambient framework prerequisite. - Downstream evidence: Physics Workbench sample cannot advance its Literate AI parent past
809f2112while its required source-intelligence policy is rejected. - Implementation:
- Restore the project adapter and
project source-intelligence sync|check. - Honor stage-specific required/off policy in validation,
litai verify, and lifecycle preflight. - Cover default-none, missing binary, malformed/stale/tampered evidence, and cross-platform project paths.
- Open equivalent pull requests against
mainandrelease/0.6.x: #182 and #183.
- Restore the project adapter and
- Evidence:
[x] LOCK-003 — Keep large Component-lock diffs bounded without false rejection
- Pull requests: #176
(
main/ pending 0.7.0) and #177 (release/0.6.x) - Priority: P0 release blocker for downstream lock review
- Owner: framework core Component-lock comparison and CLI review evidence
- Direction: A valid downstream root lock can exceed the semantic diff walk's internal 512-entry queue even when its actual reviewable differences are bounded. File the fix against pending 0.7.0 and backport it for the next 0.6.x patch.
- Conclusion:
_semantic_diffincorrectly treats queued traversal work as emitted differences. Bound completed differences independently, retain a separate deterministic traversal-work ceiling, and fail closed only when the actual review result or safe traversal budget is exceeded. Do not increase or remove bounds and do not special-case the downstream project. - Depends on: current
main(0.7.0 authority); latest v0.6.x release tag for the backport branch - Implementation:
- Separate emitted-difference and traversal-work accounting.
- Add a large mostly-equal lock regression that previously failed while retaining genuine over-limit failure coverage.
- Forward-port to pending 0.7.0 and backport the same reviewed fix to 0.6.x.
- Keep
make samplesfail-closed on missing live pins while unit-test invocations ofsample_runner.main()stay optional per ADR 0017, then refresh documentation authority so PR #176 CI can go green. - Re-pin the sample-host lifecycle driver and sample-test-runner identities after the sample-runner live-pin split, then refresh documentation authority again.
- Evidence:
-
make target-matrix-check,make lint, andmake format-checkpass. -
make python-checkand sample-composition documentation review pass on the PR #176 head, including the three sample-runner tests that currently fail closed withoutCODING_CLI/LITAI_LIVE_MODEL. - Pull requests #176 and #177 report the intended bases and shared fix.
-
[ ] LOCK-004 — Paginate genuine large Component-lock reviews before atomic replacement
- Authority: ADR 0020
- Priority: P0 downstream release blocker
- Release target: 1.1.0
- Previous release target: 0.8.0 remaining evidence (implementation shipped in 0.7.1)
- Owner: framework core Component-lock storage, CLI review evidence, and atomic replacement
- Direction: Preserve the ordinary 512-entry review limit while allowing an explicitly started large lock transition to be reviewed in identity-chained pages of at most 512 complete semantic differences and applied once, atomically, only after every page is acknowledged.
- Conclusion: The directing maintainer accepted ADR 0020 on 2026-08-27. Implement transaction start, page acknowledgement/status, final revalidation/apply, and explicit cleanup under ignored object storage. Do not raise the ambient limit, accept blanket force, or write partial locks.
- Depends on: LOCK-003
- Next action: Close remaining repository gates (
make LITAI_SESSION_ID=dev python-checklint format documentation wheel) onfeat/080-product-evidence. A nested 1025-diff ide-shell-shaped fixture now covers three 512-entry pages and one atomic apply. Do not copy Physics Workbench sample source. - Implementation:
- Persist a path-safe, bounded transaction binding old and proposed authority, deterministic ordered pages, and framework/policy identities.
- Require exact previous-page identity acknowledgements and reject skipped, reordered, replayed, malformed, tampered, stale, or cross-transaction state.
- Re-resolve and recompute before one atomic lock replacement and normal audit update; add status and explicit cleanup without partial writes.
- Evidence:
- Focused adapter and CLI regressions cover the complete transaction and every fail-closed case required by ADR 0020.
- Repository Python, lint, format, documentation, wheel, and applicable sample
gates pass.
Nested lock review and omitted-
mcp_rootscache binding are green. Onfeat/cli-sdlc-debug09ce62de2026-08-29 withPYTHON_ENV="_build/python-envs/make-267":make wheel-checkpassed (12 admissions, 12 unique cache entries, 27 Linux / 12 Windows cache-only restores) after omittinglitai-mcpfrom the payload identity and expecting FLAVOR-005flavors/lang-python/flavors/os-macosdirectories.lintandformat-checkpassed. Earlier the same daypython-checkwas green (2883 tests, 20 skipped) anddocumentation-checkrendered 235 Mermaid diagrams, before the RelEng/payload TCB edits. A checkpointedpython-checkresume on this revision hung joiningliterate-ai-tool-stdoutafter 1595 tests.make samplesremains FLAVOR-005 evidence. Do not tagv0.8.0. - A downstream-sized fixture completes through bounded pages and one atomic
replacement.
tests.smoke.test_cli_component_locks.ComponentLockCliTests.test_ide_shell_shaped_review_completes_three_pagespassed 2026-08-28 (1025 nested plugin keys, three 512-entry pages, one apply).test_omitted_optional_mcp_roots_do_not_block_cache_bindingcovers the review-storage regression from optional catalog fields.
[x] DOC-RECONCILE-001 — Reconcile project documentation with current authority and evidence
- Owner: project documentation workflow and coding-CLI boundary
- Direction: Add a first-class
litai project documentation-updateworkflow that inventories declared documentation, current Component/interface authority, project configuration, locks, and the current receipt; produces a bounded read-only drift plan by default; and applies reviewed documentation-only edits only with explicit model-egress and write authorization. - Acceptance:
- The default command writes nothing and invokes no model.
- The plan identifies deterministic stale-command and retired source-intelligence candidates; semantic status, compatibility, roadmap, and link reconciliation is delegated to the bounded apply prompt over validated authority rather than guessed from generated source.
-
--apply --allow-model-egressconfines model writes to declared Markdown documentation roots and rejects specification, lock, receipt, generated-source, executable, and secret-bearing paths. - Apply leaves the documentation authority marker stale until the operator reviews changes and runs
litai project documentation-review --recordexplicitly. - Unit and CLI tests cover no-op, drift, malformed model output, out-of-scope writes, secret egress/replacements, concurrent identities, rollback, and successful documentation-only reconciliation;
make python-checkpasses.
[x] DOC-INSTALL-001 — Require runnable service installation documentation
- Owner: documentation authoring skill and initialized documentation guidance
- Direction: Product documentation for deployable services must take a new user from prerequisites through installation, configuration, startup, readiness, and one verified request; framework build instructions alone are not a product getting-started path.
- Conclusion: Extend the documentation-authoring workflow with an audience-specific service-installation acceptance check and seed initialized getting-started guidance so derived projects replace the portable sample flow with real installation and operation steps before claiming usability.
- Evidence:
- The documentation skill distinguishes contributor build instructions from end-user service installation and requires explicit unsupported/missing steps rather than placeholders.
- Initialized getting-started guidance tells service projects to document artifacts, configuration, credentials, persistence, startup order, health checks, verification, upgrades, and uninstall/cleanup.
- SkillEvaluator passes both changed skill copies; project validation, documentation review, and the 60-test initialization/project/version suite pass.
Open pull-request landing queue
Current consolidation inventory
Follow-up (2026-10-23): PR #133 is merged at d17881fa; exact-main CI 40031696168 passes all 26 jobs. Scoped issues #91, #84, #85, #94 and #134 are closed against their retained evidence. Twenty-six issues remain open. The provided Windows renewal still times out at its unchanged 5400-second limit after 121 completed wheel spans; #121/#123/#129 remain open, and no complete native or release acceptance follows.
| Review | Retained scope | Landing state |
|---|---|---|
| #133 | Read-only catalog parsing reuse, refreshed Zod tooling and prior diagnostic metadata | Merged at d17881fa; exact-head and all 26 exact-main CI jobs pass |
| #135 | Five scoped closures and the explicit supplied-worker timeout boundary | Merged at c345e652; all 26 exact-main CI jobs pass; supplied-worker qualification remains open |
| Animated onboarding pilot | COURSE-004: optional Motion/SVG authoring package and recorded NVIDIA voice audition | Source review draft; voices user-validated, first animation rejected; pilot visually accepted; full annotated pre-CI narrative researched and authored, new full-episode production pending; live review state is owned by the forge |
Historical consolidation inventory (2026-10-22)
Open-issue review (2026-10-22): All 52 currently open issues have explicit current-forge roadmap links after adding #88, #92, #113, #116 and #117 and attaching #94 to the existing retained-user owner. Historical NVIDIA-dev issue numbers are a different namespace. #83 has a completed local owner and merits a landed-evidence closure review; no issue is closed merely by this inventory. #114 is owned by #115. #116 / #119 remains separate, with a failing Linux job. #118 has controller implementation in #110 but still requires its installed native positive/negative acceptance. #117 remains measured performance work. Broad native packaging, retained SDK, Windows ARM64 and release claims remain open under their existing owners.
The remaining retained stack is composed in PR #110. PR #105 and PR #82 are superseded by exact merge ancestry; their branches and histories are retained. The earlier inventories below are historical.
| Review | Retained scope | Landing state |
|---|---|---|
| #110 | Retained integration including exact #115 head and accepted prior review scopes | Merged at 75d73ac2 after exact-head CI 39790990072; remaining issue-specific native qualification is retained separately |
| #115 | RETAINED-WIN-EXEC-001; exact reviewed head 5faea3b9 |
Merged; exact source is retained by #110 ancestry |
| #119 | Exact head 1a4d3e6e retained by ancestry in #127 |
Superseded review; its branch is retained and issue #116 remains open pending native qualification and landing |
| #127 | Windows fixtures plus optional-import and wheel-timing source repairs | Consolidated draft at 62ce16a0: exact hosted CI 39926518820 and fresh 228-pass host receipt pass; final native qualification and the newly found identity-fixture correction remain open |
| #128 | Consolidates #127 with private-runtime aliases, corrected Windows identity fixture and installed closure records | Draft: full 2139-pass source suite, current 233-pass framework receipt, 131-span package-source qualification and actual Windows base/venv fixture renewal pass; exact review CI and full native qualification remain open |
PR #106 merged at ccd4c030b8ce9188f07b81d4c8427ca1a20dd19a after its green
exact-head matrix; the pinned upstream commit is the 0.19.1 release. PR #112
was merged concurrently by another actor at
7a1ccfe38f102c3c275710a87d8037c8a5d0e10d. Local main was fast-forwarded
to both merges. Postmerge CI and broader release qualification remain separate
open gates.
Retained 1.2 review inventory — repository migrated
NVIDIA-dev/literate-ai is archived. Its integration PR #513 is closed and its
closure notes identify jordanhubbard/literate-ai#8 as the migrated continuation.
The migrated repository is public and active. The old integration tip cbea0ab8
and migrated PR #8 tip 2820f853 have the identical tree
7ac719ca001c9684ad8ff397c7f6f131dddd7285. The current local implementation has 85
additional commits through fa14d06d; they must be preserved during reconciliation.
The publication destination change is awaiting maintainer confirmation. No push,
branch switch, or release has been performed as part of this migration audit.
Current migrated open reviews are #1, #8, #10, #14, #15 and #16. Three-way merging
is tracked by issue #2 and production dispatch/shared LAN caches by issue #4, both
deferred to milestone 1.3 by maintainer decision on 2026-10-10. Migrated main is 47be22ea974b654c72bcf1e420e587d65eae08c1;
it includes changes absent from the archived main and needs reconciliation before
landing. The peer-work command in this checkout still fails with
project.peer_work_git_failed because no local main ref exists.
Migrated open reviews observed 2026-10-09 on jordanhubbard/literate-ai each received an independent agent review against the 1.2 branch:
| Review | Observed head | Owner | Disposition |
|---|---|---|---|
| #37 — Historical update recovery for GitHub SCP URLs | 76f57cf8 |
UPDATE-MERGE-002 | Included with a review fix: only the GitHub SCP spelling is rewritten, to ssh://, so recorded ssh:// and https locators keep their transport and unusable locators leave the conflict unresolved instead of aborting the plan. |
| #39 — SemVer prerelease planning and GitHub status | 4c858dc8 |
RELEASE-INVARIANTS-001 | Included with review fixes: the plan test declares the release line, and a SemVer draft with no PEP 440 form refuses wheel naming as release.package_metadata_invalid instead of a traceback. |
| #41 — Retained Cargo selected-suite accounting | 61fc2c28 |
RETAINED-READMISSION-001 | Included; its test imports the shared retained-receipt fixtures instead of another test module. |
| #42 — setup-uv 10.2.0 | 9d480956 |
AUD-CI-001 | Included; the pinned commit is the upstream v10.2.0 tag. Supersedes archived #508. |
| #45 — Elixir Mix builds, library graphs, and native qualification | d2284009 |
ELIXIR-002 | Included in 1.2 by merge commit (contributor history preserved), after independent review. Conflicts resolved toward 1.2: ArtifactBuildGraph carries both assembly_dependencies and the optional driver_composition (single-driver wire identities unchanged); mixed-driver composition is applied in assemble_standard_project_artifacts only, while the release graph still requires one driver; Mix plan finalization goes through the 1.2 StandardPlanFinalizationInputs path as a local-only mix dependency-resolution mode with an explicit Mix builder/toolchain binding (remote action documents still accept only none/npm/python, so remote Mix builds fail closed); the 1.2 directory-export and local-tree member order are kept; tests are re-homed under tests/critical, tests/smoke and tests/conformance with shared helpers in tests/support. Ordinary PRs retain one Ubuntu native Elixir smoke cell; Elixir-scoped changes, release branches, and main run all six elixir-native cells. Public retained Mix importer admission remains open. Review follow-up: locked Hex acquisition from exact BOM pins, verified dependency re-extraction, contract-bound Mix finalization binding and explicit local-only Mix builds. |
The table below retains the earlier source-repository snapshot, including historical CI observations; it is not a current landing queue. The full 1.2 program remains required before release.
| Review | Observed head | Owner | Remaining acceptance |
|---|---|---|---|
| #515 — Instructional videos and onboarding demo repairs | f419abc6ae40 |
RELEASE-INTEGRATION-002 | Newly observed draft; hosted checks are incomplete. Reconcile the new video commands/courses and overlapping onboarding/retained-harness fixes with the existing 1.2 scope before recording an include/defer disposition. No landing or release qualification is assumed. |
| #514 — Worker management and opt-in generic provisioning | f452be65b8e3 |
RELEASE-INTEGRATION-002 / WORKER-CLI-001 | Earlier d6d003eb is integrated. Review the advanced head separately; its failed/cancelled hosted checks do not establish inclusion or qualification of the new changes. |
| #513 — Three-way updates, lifecycle scheduling and shared caches | d71e894b0211 |
RELEASE-INTEGRATION-002 / RELEASE-INTEGRATION-003 | Hosted run 36769187297 is live. Scoped executor authority and the remote build-order fixture repair are published. Runtime scheduling is integrated locally at 8fa16e67; complete remote phase dispatch, capacity routing, LAN/cache qualification, verified reuse and release gates remain required. |
| #511 — Dynamic worker provisioning roadmap | 37b77cea4c2b |
RELEASE-INTEGRATION-002 | Hosted checks are green; ancestry proves this head is already included in the local 1.2 integration through the worker branch. Forge landing/disposition remains required; later provisioning obligations retain their declared scope. |
| #508 — setup-uv 10.2.0 | 666a3eaa38ee |
RELEASE-INTEGRATION-002 / AUD-CI-001 | Resolve the failed Windows test and cancelled matrix; verify the exact action update before landing. |
| #501 — Public-export hardening draft | 0d17bf29322d |
RELEASE-INTEGRATION-002 / PUBLIC-EXPORT-001 | Reconcile the draft against landed export work and retain an explicit include or defer disposition. |
Historical review inventory (2026-09-16 UTC)
That snapshot contained 31 open reviews and 22 open issues. Every review has an owner below; newly received issues are cited under REL-442, MATRIX-002, CACHE-007 CONVERSION-DIAGNOSTICS-002 and RETAINED-READMISSION-001. PR #450 belongs to RELEASE-INTEGRATION-001. It is superseded by the retained 1.2 inventory above, which itself needs a current forge refresh. An included stack is not merged or closed until its final head or exact inclusion has been qualified. Refresh after scope changes and immediately before release planning.
| Review | Observed head | Owner | Remaining acceptance |
|---|---|---|---|
| #399 — Reconcile CI health for NVIDIA-dev/literate-ai (task_22972f31cf691056d9ed1c0ac8f10108) | d1bdf13583cd |
RELEASE-INTEGRATION-001 | Review remaining Git-timeout changes against integrated repairs; qualify or record supersession with exact evidence. |
| #404 — Add Component worker routing and artifact custody foundation | 96651b5e4075 |
WORKER-DAG-001 | Complete actual worker dispatch, predecessor custody, cancellation/recovery and cross-worker overlap. |
| #406 — Preserve finite numeric data in Standard independent acceptance | 32677ee33db3 |
ACCEPT-JSON-001 | Qualify finite numeric acceptance without weakening canonical contract JSON. |
| #408 — Capture and relocate pinned native SDK product bytes | eb2b59d883cd |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #409 — Lock, build and inspect original-source native SDKs | 95f8134ba418 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #410 — Build native SDKs and record verified Standard consumer dependencies | 5acb05713bc3 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #413 — Retain verified native SDK resources in Standard project packages | 6716036c8014 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #415 — Bind Standard SDK imports to fresh revocable command authority | b9a800bab126 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #417 — Verify retained native SDK execution evidence | 8ec01a8a82ad |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #418 — Execute explicit retained-child lifecycle operations | 2f3012d5d1be |
RELEASE-INTEGRATION-001 | Verify repository lock custody, revocation and child-operation boundaries in combined qualification. |
| #419 — Run native SDK consumers from verified Standard packages | fb209d3f052c |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #420 — Keep native SDK imports and authority through service acceptance | d4b0925018f6 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #421 — Bind packaged SDK imports to independent library verification | f874d3cfd8db |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #422 — Qualify Windows SDK conditional imports and portable source removal | 24758d2a3e4e |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #423 — Run packaged SDK-backed linked Components after relocation | 06d7a9b3249e |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #424 — Bind admitted SDK imports and public contracts into generation recipes | 3857ba3dd5c4 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #425 — Use canonical LFS bytes in refresh refusal fixture | cb927f796f43 |
RELEASE-INTEGRATION-001 | Retain canonical LFS fixture and lifecycle-custody regression; qualify combined source. |
| #426 — Bind admitted SDKs into Component generation preparation | 21a9ad238f49 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #428 — Project native SDK application and library commands | 814de199d01f |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #430 — Verify restored Conan binaries against declared payloads | 2a19d0f3cf6e |
CONAN-VERIFY-001 | Qualify exact payload-custody repair and substitution refusals on the integrated candidate. |
| #431 — Acquire native SDK dependencies during Standard rebuild preparation | 075936d5fa99 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #433 — Add generated C++ library products and native acceptance | 60413d6eda80 |
CPP-LIBRARY-001 | Complete native static/shared consumer acceptance and Linux/macOS/Windows qualification under ADR 0042. |
| #434 — Execute composed Components with their linked native SDK dependencies | fcf8e2a97825 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #435 — Build Standard consumers of admitted native SDKs | b4b4aa6a1a7d |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #436 — Expose verified native SDK identities at runtime | 5058c475dcf7 |
NATIVE-SDK-001 | Retain SDK source/import/package/runtime authority; qualify the final combined source, installed wheel and applicable native platforms before stack closure. |
| #437 — Bump astral-sh/setup-uv from 10.0.1 to 10.1.0 | 6fe5debf675a |
RELEASE-INTEGRATION-001 / AUD-CI-001 | Review upstream immutable action pin and workflow changes; qualify exact updated CI before landing. |
| #438 — Integrate approved 1.1 native library and lifecycle work | 4dd11b97561a |
RELEASE-INTEGRATION-001 | Qualify final consolidated source locally, installed and hosted; reconcile included stacks and land. |
| #441 — Harden 1.1 worker health, native custody and release qualification | 4c8a4b076be5 |
WORKER-HEALTH-001 / CI-FAILFAST-001 / RELEASE-INTEGRATION-001 | Qualify storage health, diagnostics and native custody on the final integrated head. |
| #444 — Support Cargo workspace release version mirrors | f6ecaa7ddd3e |
REL-442 | Review and integrate exact Cargo version mirrors; qualify atomic preparation and final hosted checks. |
| #446 — Apply reviewed monorepo adoption with independent retained receipts | 86f8d1d0f236 |
ADOPT-MONOREPO-001 | Qualify reviewed multi-root conversion, independent receipts, refresh and rollback before integration. |
| #450 — Re-pin the sample-host lifecycle driver after Standard project-root rebuild | 487555854129 |
RELEASE-INTEGRATION-001 | Refresh the stale documentation authority review, re-review combined driver identity after integration, and qualify the final candidate. |
The current contribution sweep remains not ready. Repository ownership is not a forge disposition: included/deferred milestone decisions, terminal comments and closure remain RELEASE-INTEGRATION-001 and RELEASE-REVIEW-001 obligations. Preserve attached qualification worktrees and preexisting branch-retention markers.
Historical landing observations
- #400,
fix/1.1-cargo-process-capture→main: draft retained-Cargo provider authority, qualified package provisioning and guarded native execution integration for #380/#379. Initial head467ea4ddstarts hosted CI34825420438; exact final-head CI is required before landing. Latest focused checks pass, but the full run atff2ba268and installed-wheel gate at9809e516remain active. Public importer admission, positive consumer receipts, acknowledged source transfer, second-boundary independence and full platform qualification remain open. Deferred from 0.8.4 to milestone 1.1 through the release contribution CLI. No source is retired.
This section mirrors every open GitHub pull request as durable repository work. Update an entry when its base, head, merge state, or remaining evidence changes; remove it only after the PR lands or closes and its outcome is recorded in Git. The stack is ordered base-first so a child is never merged before the authority it depends on.
1.1 integration baseline after #388: Seven included issues block release.
The subsequent refresh/custody and sweep-repair stack is consolidated on
integrate/1.1-refresh-safety; its qualification and landing requirements are
recorded under RELEASE-INTEGRATION-001.
- #386,
fix/361-canonical-json-floats→main: merged ascf71a4fcafter the corrected exact head33630a4fpassed all 15 hosted checks in CI 34664827991. The merge tree equals the qualified head. Fresh local full suite: 4,204 tests, 30 skips, no failures; wheel/install/offline E2E and exact-wheel root journeys pass. The earlier873426f2run, CI 34659942702 failed Windows test shard 1 on fixture newline creation and remains failed; the corrected combined candidate includes the fixture repair and #387 history. - #387,
fix/1.1-import-provenance→main, exact head46668380: merged by inclusion in #386's qualified33630a4fhistory, with a terminal evidence annotation. The two follow-up commits preserved unchanged import provenance and submitted ADR 0041 as Proposed at that time. The maintainer subsequently accepted it on 2026-09-12; SEC-360 retains its unfinished implementation and qualification. Its earlier CI 34661824577 remains failed; only the corrected combined head supplies hosted qualification. - #388,
fix/1.1-disposable-git→main, exact head692041a1: merged asad92a65522ac6053c9391b3b2a7f1ef1f938c47bafter all 15 checks in CI 34668495664 passed. The merge tree equals the locally and remotely qualified head. CONVERT-NESTED-GIT-001 retains the 4,206-test, exact-wheel, isolated-install and offline E2E evidence. Native linbuild and broader 1.1 acceptance remain open. - #375,
fix/361-canonical-json-floats→main, exact head66fd355e: merged as2f09c295after all 15 jobs in CI 34594250773 passed. The complete main tree equals the tested head. Fresh local Python qualification ran 3,811 tests (3,781 passed, 30 skipped), alongside exact-wheel, install and forced offline end-to-end checks. Issues #361/#368/#376/#377 are closed with evidence annotations. This does not publish 1.1. GitHub's enabled delete-on-merge setting removed the remote feature branch; its history remains inmainand the local branch. No manual branch/worktree deletion was performed. - #378,
fix/377-library-qualification-oracle→main: merged as531a055f. Its boolean/integer case-binding gap was repaired forward in #375 with canonical-byte comparison and parent-owned publicspec qualifyregressions; the combined candidate passed local and hosted qualification before #377 closed. Review evidence.
Historical Action-update intake (merged; RELEASE-INTEGRATION-001):
- #381,
dependabot/github_actions/actions/checkout-7.0.1→main, head66065f76: merged the checkout 6.1.0 → 7.0.1 action update in.github/workflows/ci.yml. - #382,
dependabot/github_actions/actions/setup-python-7.0.0→main, head0f97cd24: merged the setup-python 6.3.0 → 7.0.0 action update in that workflow. - #383,
dependabot/github_actions/astral-sh/setup-uv-10.0.1→main, head46a276d1: merged the setup-uv 7.6.0 → 10.0.1 action update in that workflow. - #384,
dependabot/github_actions/actions/setup-node-7.0.0→main, head23bbd585: merged the setup-node 6.5.0 → 7.0.0 action update in that workflow.
These four reviews are merged and included in main through the actual parent
history of #385. Its exact candidate 269630b4 passed all 15 jobs in
CI 34612605595
before merging as f651d534. RELEASE-INTEGRATION-001 records the combined Action,
uv bootstrap and changed-skill admission evidence. These are historical completed
reviews, not additional open work or qualification of the newer #386/#387 heads.
Upstream compatibility review: All four proposed full commit pins resolve to their named upstream release tags. The existing workflow uses GitHub-hosted Linux/macOS/Windows runners, explicit Python/Node selections and read-only repository permissions. The action runtime's Node 24 runner floor is inherited from the already selected generations; it is not a new project runtime floor.
- Checkout v7 blocks
unsafe fork checkouts on privileged
pull_request_target/workflow_runevents; this workflow uses neither event. Preserve that protection without an opt-out. - Setup-python v7
removes
pip-installand migrates internals to ESM; the workflow does not use that removed input. Setup-node v7 also migrates to ESM; preserve explicitpackage-manager-cache: falseand the existing Node 24 selection. - Setup-uv v8 changes custom manifest format and removes floating major/minor tags; neither is used. v9 changes default cache pruning, and v10 changes caching for sensitive events and adds a checksum-known version selector. Review cache policy explicitly and bind the installed uv version when integrating.
Non-vacuous qualification requirement: The setup-uv step is conditional on
changed skills. A workflow-only bump has none, so its green admission job can
skip the very action being upgraded. Add an always-exercised, version-bound uv
bootstrap check while retaining conditional skill evaluation, and require that
actual step plus the combined platform matrix to pass before #383 closes.
All four PR bodies now carry exactly one Literate-AI-Release: 1.1 line in
addition to their included disposition and matching milestone; this classification
is not approval of the dependency changes.
2026-09-05: Open PR #321
(docs/adr-0036-prefix-cli-self-update → main) lands HOST-SELF-UPDATE-001.
Do not merge release/0.10.x into main. Newly reported open issues without
prior queue items are recorded as CACHE-EMPTY-RO-001 (#320), ORIGIN-SSH-HTTPS-001
(#316), CONVERT-NESTED-GIT-001 (#315), STANDARD-CACHE-ENTRY-001 (#317),
LIFECYCLE-MUTATION-LOCK-001 (#318), and TESTED-PIN-PLAN-001 (#319).
2026-09-04: gh pr list --state open is empty. Closed-PR remotes
experimental/jordanh/lfs-null-manifest (#259 superseded) and
fix/convert-env-bound-prereq-closure (#197 do-not-revive) were deleted.
Do not merge release/0.5.x through release/0.9.x into main. See
TRACKER-SWEEP-001.
v0.6.4 published from release/0.6.x. v0.7.0 published from main as
afe52d09
(GitHub Release).
The release/0.7.x line was not cut at prepare (branching-model miss); it is
now origin/release/0.7.x at afe52d09.
The 0.7.0 landing stack plus parked opt-in source
intelligence are on main: #176 48ab0cae, #173 444dac06, #174 06bfd1e8,
#179 31a8e607, #180 fc61c8b8, #181 769e843c, #182 3d758979.
#183 landed on
release/0.6.x as 7c882130. v0.7.2 published from release/0.7.x as
be642f4a
(GitHub Release).
v0.8.0 PUBLISHED (2026-08-31) from release/0.8.x at 136e652a
(GitHub Release),
with the literate_ai-0.8.0-py3-none-any.whl asset attached (RELEASE-018).
verify-published confirmed remote tag, branch, and provider release match the
prepared identity. Cut on the green offline gate suite + non-Windows GitHub CI;
the live gates (installed-project-e2e, samples, test-receipt-current) were
scoped out via RELEASE_LIVE_GATES="" because the cut environment could not
reach the configured live model. Deferred to 0.8.1: WINDOWS-LOCK-001 (Windows
write-lock, unverified on real Windows) and RELEASE-018-IDEMPOTENT (wheel
re-upload false failure). Resolved issues closed at release: #150, #205, #206,
#207, #208, #209, #211, #212, #213. Kept open: #33 (multi-entrypoint feature,
MULTI-ENTRYPOINT-001, 0.9.0 design pass). Do not merge release/0.7.x or
release/0.8.x into main.
v0.8.1 PUBLISHED (2026-09-01) from release/0.8.x at 203f3641
(GitHub Release),
wheel literate_ai-0.8.1-py3-none-any.whl attached; verify-published ok. The
0.8.1 patch fixes the 0.8.0 Windows known issue. The "manifest lock failed" was
actually os.fsync on a directory handle in _replace (Windows rejects
FlushFileBuffers on a directory), guarded to POSIX; plus lock-primitive
convergence on the proven _cache_lock path, a Windows delete-pending EACCES
retry on concurrent lock-file open, DOC-IDENTITY advisory .as_posix(), and an
idempotent gh release upload --clobber (RELEASE-018-IDEMPOTENT). Windows CI
is now green on both main and release/0.8.x. The five fixes landed on
main first then cherry-picked to the release line; the LITAI_LOCK_DIAG
diagnostic and its CI env var were removed once green. WINDOWS-LOCK-001 and
RELEASE-018-IDEMPOTENT are closed.
main was 0.8.0 Unreleased (a1d36f7b publishes the 0.8.0 overview edition,
changelog README pins, and CONVERT-FW-008). Do not merge release/0.7.x into
main.
2026-08-29 tracker reconciliation: open GitHub pull request
#204 (feat/cli-sdlc-debug)
is the remaining unique local work versus main.
#197 closed without merge
(comment: conflicting with FLAVOR-005 Flavor directory rename; CONVERT-FW-009
already on main as e9d66702). Other local worktrees are already contained
in main. Closed GitHub issues #198–#200 and #202–#203 (landed queue items).
#201 is
SAMPLE-APP-STACK-001 (already [x]).
SAMPLE-PORTFOLIO-002
is now [x] (publication-import JavaScript pin). RELEASE-015
is closed (skills-check SkillEvaluator 20260829151821–20260829151824).
Next remainder: LOCK-004 make samples (FLAVOR-005 live generation);
make wheel-check passed at 09ce62de.
PR-PLAN-LOCKED-ASSETS
is merged onto this #204 head; #210
still targets main with the same commits.
[x] PR-PLAN-LOCKED-ASSETS — Bind locked authored assets when Standard plan omits assets
- Priority: P0 (sample
plangeneration-key mismatch) - Pull request: #210; also merged onto #204
- Branch / base:
fix/standard-plan-bind-locked-assets→main; merged intofeat/cli-sdlc-debug - Owning closed item: CONTEXT-001
- Owner:
StandardProjectApplicationService.plan,authored_assets_from_lock - Direction: Public
plandefaultedassets=(), while preparation still reconstructsAuthoredBinaryAssetidentities from the lock. - Conclusion: When
assets is None, bindauthored_assets_from_lock(lock). Do not treat explicitassets=()as omit. Adapter_locked_authored_assetsCAS-admits then reuses the same helper. - Evidence:
- Focused units
test_component_execution_planningandtest_standard_project_services.test_omitted_plan_binds_locked_asset_identitiesunderLITAI_SESSION_ID=dev(session venv). - Pull request #210
targeting
main; implementation also merged onto #204.
- Focused units
2026-08-28 tracker reconciliation, then break-glass the same day: every remaining
open queue item on main is 0.8.0 in-scope, including breaking changes, because
no major has shipped and this cut is treated as the first major-equivalent.
That is not durable SemVer advice. RELEASE-012
owns the declaration.
Still not a merge into main: living patch lines origin/release/0.7.x
(0.7.3 / RELEASE-013),
origin/release/0.6.x, and origin/release/0.5.x. Deleted as stale (not merged
into main): planning/0.5.0-scope (contained in release/0.5.x;
FORWARD-PORT-001 already
closed), release/0.5.0 / 0.5.1 / 0.5.2 (contained in release/0.5.x;
v0.5.0 and v0.5.1 remain tagged), ci/0.6.3-gate (contained in
release/0.6.x), and wip/test-cache-001-dispatch (c0439340 obsolete).
Open process-tree GitHub issues
#71,
#72,
#74,
#77,
#79 stay owned by
PROC-KILL-001;
the remaining patch cut is 0.7.3 on release/0.7.x, while main already carries
the in-package Job Object binds.
[x] SKILL-HIERARCHY-001 — Nest release and workflow skills; wrap Python
- Priority: P0
- Pull request: #179
- Owner:
skills/agent/,workflows/,routing/, init template - Direction: Release-engineering and workflow skills were siblings that restated
Python and claimed nesting in prose. Use the filesystem as the scoping mechanism:
skills inherit from parent
SKILL.mdfiles, workflows nest under production, and agent skills wraplitaiinstead of duplicating it in the prompt. - Conclusion: Parent
skills/agent/SKILL.mdstates wrap-Python and delta inheritance. Development postures nest asdevelop-in-production-workflow/staging/dev. Generation workflows and routing match, withrouting.jsonas the directory sentinel.release-projectandbind-lifecycle-evidencewrap CLI/rebuild. Catalog vs init-template drift onrelease-projectis closed. Flavor cross-axis co-requisites (swiftplus OS toolchains) stay siblings. Remaining follow-up:convert-projectstill restates the convert harness (thin with PR #174);cmake-build-systemis a generation-prompt exception at 165 lines;package-*Flavors stay siblings because they are different package axes, not nested realizations. - Depends on: catalog nested-item ownership already implemented in
repository_catalogs.py - Implementation:
- Add
skills/agent/SKILL.mdand nest the three development postures. - Nest
workflows/production/staging/devand matchingrouting.json. - Thin
release-projectto wraplitai release; sync the init template. - Thin
bind-lifecycle-evidenceto wrap rebuild/lock/evidence. - Forward-port GitHub CI
release/**push triggers onto this line (was only onrelease/0.6.x). - Align routing policies to directory-owned
routing.jsonsentinels. - Close
record-user-directed-workcatalog/template drift. -
make python-checkandmake skills-checkpass; documentation and lifecycle-driver authority re-recorded.
- Add
- Evidence:
[x] PR-182 — Restore opt-in project source intelligence
- Pull request: #182
- Branch / base:
feature/opt-in-source-intelligence→main - Owning queue item: SOURCE-INTELLIGENCE-001
- Completion evidence: GitHub CI green (15/15). Merged to
mainas3d758979on 2026-08-27 after the untagged 0.7.0 cut was not published.
[x] PR-183 — Backport opt-in project source intelligence to 0.6.x
- Pull request: #183
- Branch / base:
backport/opt-in-source-intelligence-0.6→release/0.6.x - Owning queue item: SOURCE-INTELLIGENCE-001
- Completion evidence: GitHub CI green (15/15). Merged to
release/0.6.xas7c882130on 2026-08-27.
[x] PR-176 — Fix large Component lock semantic diffs
- Pull request: #176
- Branch / base:
fix/component-lock-diff-limit→main - Owning queue item: LOCK-003
- Completion evidence: merged to
mainas48ab0caeon 2026-08-27. Identity re-pinc11eaea0made GitHub CI green (15/15).
[x] PR-CONVERT-FW-007 — Honor language Flavor command-profile entrypoints
- Pull request: #180
- Branch / base:
fix/language-command-profile-entrypoint→main - Owning queue item: CONVERT-FW-007
- Completion evidence: merged to
mainasfc61c8b8on 2026-08-27 after merging #179 and re-pinning identities (56ffd5c0).
[x] PR-174 — Convert inspect-then-wrap (repo-man) onto current main
- Pull request: #174
- Branch / base:
fix/0.6.0-codegraph-merge-ci→main - Completion evidence: merged to
mainas06bfd1e8on 2026-08-27 after merging #173 and re-pinning identities (793deab8).
[x] PR-173 — Require service installation documentation
- Pull request: #173
- Branch / base:
feature/service-installation-documentation→main - Completion evidence: merged to
mainas444dac06on 2026-08-27.
[x] PR-170 — Release 0.7.0 evidence-bound release closure
- Pull request: #170
- Branch / base:
devin/1787696693-release-evidence-0.7.0-plan→main - Owning queue item: RELEASE-009
- Completion evidence: merged to
mainasc132eea0on 2026-08-26. GitHub run32978891322ona924ef51was green. Live fan-out remaining evidence stays on GENERATION-011.
[x] PR-169 — Add documentation reconciliation workflow
- Pull request: #169
- Branch / base:
feature/documentation-update-workflow→main - Completion evidence: merged to
mainas4dfb2830on 2026-08-26.
[x] PR-166 — Retry generated-test contract failures during source generation
- Pull request: #166 (superseded by #172)
- Branch / base:
fix/retry-generated-test-contracts→main - Completion evidence: #166 closed; #172 merged to
mainas3db30191on 2026-08-26.
[x] PR-CI-060 — Repair CodeGraph-removal merge leftovers on 0.6.0 CI
- Pull request: #168
- Branch / base:
fix/0.6.0-codegraph-merge-ci→main - Owning queue item: CODEGRAPH-DEPENDENCY-001
- Completion evidence: fast-forward merged to
mainas8d84dbda. GitHub run32890626746on that SHA was green, including Windows lint/OpenSpec/wheel after the wheel-smoke leftover fix.
[x] PR-158 — Keep Windows/macOS CodeGraph init and persistent-service children alive
- Pull request: #158
- Completion evidence: merged as
345e8af3on 2026-08-25, including the hosted-runner timeout skips for macOS persistent-service readiness and Windows snapshot-replication CodeGraph init.
[x] PR-152 — Add explicit model pinning to sample runs
- Pull request: #152
- Completion evidence: merged as
1db3e811on 2026-08-24.
[x] PR-153 — Add persistent service acceptance
- Pull request: #153
- Completion evidence: merged as
d5407b48on 2026-08-24.
[x] PR-154 — Add locked Cargo lifecycle support
- Pull request: #154
- Completion evidence: merged as
7fd3356don 2026-08-24.
[x] PR-155 — Reconcile managed source SBOM authority
- Pull request: #155
- Completion evidence: merged as
483b72bfon 2026-08-24.
[x] PR-145 — Add authenticated Cursor inherited-session handoff
- Pull request: #145
- Completion evidence: merged as
9756fe69on 2026-08-24.
[x] PR-149 — Show update progress and follow a moving parent
- Pull request: #149
- Completion evidence: merged as
fb25a855on 2026-08-24.
[x] PR-151 — Record UPDATE-CONFLICT-RENDER-001 for conflict diffs
- Pull request: #151
- Completion evidence: merged as
7b62975fon 2026-08-24.
[x] PR-156 — Repair 0.6.0 CI pin, CRLF, and temp-dir gates
- Pull request: #156
- Completion evidence: merged as
665eff80on 2026-08-24.
[x] PR-44 — Add structured profiling and skill-edit scanning
- Pull request: #44
- Branch / base:
add-skillspector-hook→main - Completion evidence: merged as
5ef0b717acbaa51bd8cb053fad2a54624814158bon 2026-08-15. Historical repair notes remain as landed context; this PR is no longer open.
[x] PR-45 — Redesign dependency-aware test dispatch
- Pull request: #45
- Branch / base:
worktree-release-check-run→main - Completion evidence: merged as
0acfb29f892d438a3f12f933fbdd5c16f2e13724after all twelve GitHub checks passed, including three-platform sample composition and the 1h24m Windows full non-live gate.
[x] PR-16 — Build and verify native sample packages
- Pull request: #16
- Branch / base:
codex/native-packaging→main - Completion evidence: merged into
mainas659d1baa58ccd7bffa8a54fe4bedf445c943660cafter its documentation, skill, three-OS sample-composition, installed-wheel, explicit native-toolchain, and non-live Python qualification completed.
[x] PR-15 — Add OpenCode coding CLI support
- Pull request: #15
- Branch / base:
feature/opencode-support→main - Depends on: PR-16 (completed)
- Completion evidence: merged into
mainthrough aggregate PR #18; GitHub records merge commitda23d1bf79cd37082b8c09af6d4c239fba4a7b30for this parent history.
[x] PR-17 — Enforce detailed roadmap lifecycle
- Pull request: #17
- Branch / base:
feature/roadmap-lifecycle→feature/opencode-support - Depends on: PR-15
- Completion evidence: the complete branch history landed through aggregate PR #18;
the intermediate PR was closed as superseded after every commit became reachable from
main.
[x] PR-18 — Reconcile required source-index update evidence
- Pull request: #18
- Branch / base:
fix/update-source-index→main - Depends on: PR-17
- Completion evidence: retargeted as the complete, already-qualified aggregate and
merged into
mainas034d03d1240320efe7ad27999eea8c84316479baafter the local from-zero Python gate passed all 2,099 tests with 26 intentional skips.
[x] PR-20 — Preserve descendant qualification authority
- Pull request: #20
- Branch / base:
fix/descendant-qualification-contracts→main - Completion evidence: the complete GitHub matrix passed and the branch merged into
mainas9e212a48cb5e2dd2ff64b00f047ecfd07d9b1bae, preserving graph-bound descendant initialization, fresh local qualification evidence, and the cross-platform command/fan-out repairs.
[x] PR-26 — Report initialization prerequisites
- Pull request: #26
- Branch / base:
codex/sample-taxonomy-explicit-hello→main - Depends on: PR-20 (completed)
- Completion evidence: merged into
mainas38df24dd289198160533a9c1eff0e34af9240a97after wheel smoke component-coordinate fix, init prereq reporting, sample taxonomy enforcement, and CodeGraph dependency documentation.
[x] PR-25 — Guard generation with graph-bound lock evidence
- Pull request: #25
- Branch / base:
codex/lifecycle-authority-graph→main - Depends on: PR-26 (completed)
- Completion evidence: merged into
mainas371cc55fa745639f1df9eb7b84c254f659bd94f7after rebasing onto PR-26, resolving catalog inheritance and project-initialization conflicts, adding AppArmor mock isolation and geteuid portability fix.
[x] PR-21 — Reject incompatible OpenCode command surfaces before generation
- Pull request: #21
- Branch / base:
fix/opencode-capability-preflight→main - Depends on: PR-26 and PR-25 (both completed)
- Completion evidence: merged into
mainas8a7dda699c005db151f7859b91fda45637457b5fafter fixing ruff E501/I001 lint violations and resolving CHANGELOG and identity conflicts from the PR-25/26 merge.
[x] PR-27 — Reconcile the active pull-request queue
- Pull request: #27
- Branch / base:
codex/pr-queue-and-next→main - Depends on: PR-26 (completed)
- Completion evidence: landed as part of the 0.3.0 release reconciliation; PR-26, PR-25, and PR-21 are all merged and recorded above.
[x] AUTHORITY-RECORDING-001 — Make final authority recording an explicit workflow
- Priority: P0
- Release target: 0.4.1 — deferred out of 0.3.0 scope; not on the 0.3.0 release-blocking path.
- Owner: project documentation authority review and contributor workflow
- Direction: A documentation-authority marker became stale because additional authority documentation was edited afterward. A clean clone and development worktree produced the same identity once their bytes matched; validation correctly rejected both stale branches. The missing boundary is an obvious atomic way to record the final reviewed identity without manual digest transcription or a misordered checklist.
- Conclusion: Preserve the current project-declared, filesystem-capable authority
calculation. Add an intentional recording surface that calculates the complete
inventory and replaces exactly one marker in its declared document. Keep it separate
from read-only validation; any subsequent authority edit must make the marker stale.
The read-only calculator and
make documentation-review-recordalready exist; remaining work is to make--recordthe contributor workflow (not manual digest transcription), replace exactly one placeholder as well as a stale marker, and fail closed on missing or duplicate markers without writing. - Depends on: PR-26
- Next action: Done. CLI
--recordcallsrecord_project_authority_review, discovers exactly one placeholder, and CONTRIBUTING/troubleshooting teachmake documentation-review-recordinstead of digest transcription. - Evidence:
- Recording replaces exactly one placeholder or stale marker with the current
expected marker and reports the resulting identity and document.
ProjectCliTests.test_documentation_review_record_replaces_placeholder_and_fails_closedandFilesystemProjectInitializationAdapterTests.test_missing_marker_records_a_unique_placeholder_or_requires_a_document. - Missing or duplicate marker locations fail closed without modifying files.
Same CLI test: duplicate/missing
--recordleaves bytes unchanged. - Any authority mutation after recording makes validation stale; recording again
restores current state in both Git-backed and filesystem-only projects.
test_documentation_review_record_restores_git_backed_projectsandtest_roadmap_queue_edits_do_not_stale_authority_review(user-doc edit stales).
- Recording replaces exactly one placeholder or stale marker with the current
expected marker and reports the resulting identity and document.
[x] PR-21 — Reject incompatible OpenCode command surfaces before generation
- Pull request: #21
- Branch / base:
fix/opencode-capability-preflight→main - State recorded: duplicate of the completed PR-21 heading above. Merged into
mainas8a7dda699c005db151f7859b91fda45637457b5f. - Remaining: none on this heading.
GENERATION-003stays a separate open item on its own remaining evidence.
0.4.0 planning — filed GitHub issues
Downstream 0.3.0 usage on real multi-surface Components (HTTP API + MCP server +
scheduled worker + web dashboard), plus a separate Physics Workbench sample native-qualification
effort, surfaced the issues below, all filed against the installed
literate-ai==0.3.0 launcher. None blocked the 0.3.0 cut; they became the planning
queue for the next release. Originally scoped as a 0.3.1 patch, retargeted to 0.4.0
once the batch's own scope made clear it carries real new capabilities (configurable
provider selection, timeout, priority order; provider-resolution and inherited-session
contracts; concurrent target matrices; a per-worker SSH transport), not just bug
fixes — a SemVer minor bump, not a patch. Plus one filed mid-pass from live
target-matrix testing (#65). On
2026-08-15 the queue was worked end to end: 9 issues fixed and merged to main (#31,
#33, #34, #46, #54, #55, #57, #61, #63), 2 closed as won't-fix (#51, #52 — see below),
5 open PRs (#37/#62, #41/#48, #42/#50, #43/#49, and the CI-repair branch that became
#60) synced with main and merged or pending green CI, #65 partially fixed (verifier
diagnostics, per-worker SSH transport) with the remote-continuation gap precisely
root-caused and deferred, and the remainder (#32, #35, #36, #39, #56, #58, #64)
investigated and explicitly deferred with reasoning rather than rushed.
[x] GENERATION-004 — Coding-CLI selection is a fixed name-priority list, not capability/auth-aware
- Priority: P1
- GitHub issue: #31
- Owner:
literate_ai/adapters/models/coding_cli.py(select_coding_cli) - Direction:
select_coding_cliiterates the fixed tuple("codex", "claude", "cursor-agent", "opencode")and returns the first name found onPATH, with no authentication or capability check. On a host with more than one coding CLI installed, the earlier-listed one always wins regardless of which is actually authenticated or preferred.CODING_CLI=<name>can override this, but only among the same fixed four names. - Conclusion: Not yet decided between (a) a real usability probe (authentication
state, a quick capability check) driving selection, or (b) keeping name-priority
selection but making the order itself project-configurable (e.g. via
literate.project.json) instead of hardcoded. Needs a design pass before implementation. - Workaround on file: set
CODING_CLI=<name>explicitly before every invocation. - Completion evidence:
c32aefe— chose (b), configurable priority order, as the smaller and less speculative of the two options. AddedLITERATE_AI_CODING_CLI_PRIORITY, a comma-separated permutation of the four names that reordersselect_coding_cli'sPATHsearch project-wide; an incomplete or malformed list fails closed viacoding_cli.priority_configuration_invalid. A real usability/authentication probe (option a) remains open future work if a project needs per-host dynamic selection rather than a static configured order.
[x] ACCEPTANCE-001 — Acceptance-oracle requirement forces every Component into a single-shot CLI JSON contract
- Priority: P1
- GitHub issue: #32
- Owner:
component_acceptance.py, Standardexecute_application/independent-acceptancelifecycle phases - Direction: These phases invoke one entrypoint with one JSON array argument and
diff its exact JSON stdout against
verification/acceptance/<component>.json, unconditionally for every Component, with no entrypoint-kind exception. A Component that is a persistent service (no single-shot CLI invocation at all) fails atcomponent_acceptance.oracle_missingeven though it declares noportable-application-kind entrypoint. This conflates "portable" (buildable reproducibly across OS/language Flavors — true of every Component) with "single-shot CLI with deterministic JSON stdout" (one specific interaction shape, not universal). - Conclusion: Scope the acceptance-oracle requirement, and the
execute_application/independent-acceptancephases generally, to Components that declare aportable-application-kind entrypoint (or more generally an entrypoint kind with a defined deterministic invocation contract) rather than applying it universally. - Depends on: ENTRYPOINT-001 (a persistent-service Component only reaches this gap once it can be declared without being forced into a single fake CLI entrypoint)
- Workaround on file: a synthetic
runentrypoint whose only job is an in-process self-check unrelated to the Component's real behavior, purely to satisfy the gate. - Fixed 2026-08-16: the earlier "Investigated, deferred" note (below, kept for
history) overestimated the scope — no receipt-schema change was needed.
StandardRootIntegrationEvidence.independent_acceptance_identityonly requires a typedContentIdentitydistinct from the other two stage identities (standard_root_integration.py::__post_init__); it asserts nothing about how that identity was derived.accept_project_independently(adapters/lifecycle/standard_local.py) now reads the one packaged entrypoint's kind directly offpackage_plan.entrypoints[0].kind(already a call parameter — no new data had to be threaded through) and, when it isn'tportable-application, returnscanonical_identity({"schema": "literate-ai/independent-acceptance-exempt@1", "entrypoint_kind": ..., "package_plan_identity": ...})instead of touching package custody or requiring an oracle at all.rebuild.py::_component_acceptance_oraclegates the same way via a newcomponent_acceptance.root_entrypoint_kind()helper, so a non-portable-applicationComponent never needs averification/acceptance/<name>.jsonfile to exist in the first place — the issue's literal complaint. - Investigated 2026-08-15, deferred (superseded by the fix above): the real scope
is larger than the roadmap's original "Medium" sizing.
independent_acceptance_oracleis already an optional parameter throughout the adapter layer (standard_project.py,standard_rebuild.py), butStandardLocalLifecycleAdapter.accept_project_independently(adapters/lifecycle/standard_local.py) raises unconditionally when it isNone, and its one caller (application/standard_project_lifecycle.py::execute_application, via_require_identity(self.independent_project_acceptor.accept_project_independently(...))) has no branch to skip the phase —independent_acceptance_identityis a required, non-nullable field threaded into the rebuild receipt's wire schema. Scoping this properly means adding a real "not applicable" sentinel to that identity and updating the receipt schema everywhere it's validated, not a local guard clause. Left open rather than rushed. - Evidence:
- A Component declaring no
portable-application-kind entrypoint builds and passes lifecycle acceptance without a synthetic CLI entrypoint orverification/acceptance/<component>.json.
- A Component declaring no
[x] ENTRYPOINT-001 — Standard lifecycle rejects any Component with more than one entrypoint (uncaught traceback, not a typed error)
- Priority: P1
- GitHub issue: #33
- Owner:
literate_ai/adapters/standard_project.py(_command_contract) - Direction: A Component with 5 declared entrypoints (
run,refresh-worker,api,mcp,web— API + MCP server + scheduled worker + web frontend + a synthetic CLI self-check, one codebase) fails with an uncaughtStandardCommandProjectionError: each Standard executable Component must declare exactly one entrypoint— a raw Python traceback, not the typed{"command":..., "error": {"code":..., "message":...}, "ok": false, ...}envelope every other lifecycle failure in this framework produces. - Conclusion: Two separable problems: (1) the Standard lifecycle has no model for a
Component composed of multiple cooperating entrypoints, forcing this exact
uncaught-exception path; (2) regardless of (1)'s resolution, this must fail as a
typed
ProjectError, never an uncaught exception. Decide between (a) first-class multi-entrypoint Component support in the Standard lifecycle, or (b) documenting the intended pattern as multiple single-entrypoint Components sharing a library Component via the existingprovides/requirescapability-edge mechanism, before scoping (1) further; (2) is unconditionally required either way. - Workaround on file: trimmed to a single
runself-check entrypoint with the other surfaces described as ordinary source-tree modules in spec prose (not formal litai entrypoints); eventually restructured into 5 separate single-entrypoint Components joined only by shared spec prose, norequires/provideswiring attempted. - Completion evidence:
576226b— (2) is done:StandardCommandProjectionErrornow carries.messagelike every other typed adapter error, and the CLI's top-level backstop catches it, covering every raise site instandard_project.py, not just the multi-entrypoint one. On (1): recommending (b) — express a multi-surface Component as separate single-entrypoint Components joined by the existingprovides/requiresmechanism, not new first-class multi-entrypoint lifecycle support; written up indocs/user/specifications.md's "Hierarchy is not Component composition" section. - Evidence:
- A Component declaring more than one entrypoint fails through a typed
ProjectErrorJSON envelope, never an uncaught exception.
- A Component declaring more than one entrypoint fails through a typed
- Scope note (2026-08-31): This item closed only problem (2), the typed-error requirement. Problem (1) — first-class multi-entrypoint Component support — was recommended against here in favor of the provides/requires composition workaround, but that is a design recommendation, not an implementation. GitHub issue #33 is titled as a feature request for first-class multi-entrypoint support and remains a valid open feature, tracked separately by MULTI-ENTRYPOINT-001. Do not close #33 until the first-class feature's live cross-platform evidence is retained; the typed-error fix alone was not sufficient.
[x] MULTI-ENTRYPOINT-001 — First-class multi-entrypoint Component support (#33)
- Priority: P0 (0.9.0 release blocker until live cross-platform evidence proves the complete public lifecycle)
- GitHub issue: #33
- Owning ADR: ADR 0026 (Accepted 2026-09-01; implementation complete pending live matrix evidence)
- Release target: 0.9.0 (complete implementation and end-to-end evidence)
- Owner:
src/literate_ai/adapters/standard_project.py(_command_contract), Standard lifecycle component model - Direction: A Component composed of multiple cooperating entrypoints (e.g. an HTTP API + MCP server + scheduled worker + web frontend in one codebase) must carry every declared deployment unit through build export, TEST, EXECUTE, package dispatch, independent acceptance, receipt, and CycloneDX evidence under ADR 0026.
- Conclusion (updated 2026-09-02): The original false-success path has been removed. The production Standard lifecycle now builds the complete output set, fans TEST/EXECUTE/acceptance out per entrypoint, packages every deployment unit, and retains named local and worker-CAS run commands. The remaining blocker is macOS/Linux/Windows matrix evidence; unit and contract evidence alone are not sufficient to close #33.
- Depends on: ENTRYPOINT-001 (typed-error bug, closed)
- Next action: Complete the admitted-source Windows worker/CI evidence and retain its exact remote receipt. Keep #33 open until that evidence passes.
- Progress (2026-09-01, c02c2497): the mechanism landed. ADR 0026 accepted;
_command_contractno longer rejects multiple entrypoints — it projects an additive optionalentrypoint_contractsmap (per-entrypoint TEST/EXECUTE + artifact export + deployment-unit binding), while single-entrypoint contracts stay byte-identical (golden test). BUILD is one per Component revision;--litai-serve/runtime name the entrypoint module. Dispatch routing hooks (entrypoint_command_contract,entrypoint_command_contracts) are in place. Investigation correction: no production consumer calls the routing hooks. The local/Bazel/Cargo lifecycle, artifact manifest, package plan, and independent-acceptance path remain singular; this is the blocker, not merely deferred #216 start/stop/restart polish. - Progress (2026-09-02): production fan-out is implemented through generation,
one multi-output build, attributed TEST/EXECUTE evidence, grouped artifact
closure, package dispatch, and verifier-owned per-entrypoint acceptance.
Durable
litai run --entrypointselection now works locally and through SSH; local command sets and worker-CAS execution manifests are identity-bound, and equal payload bytes with different commands occupy distinct CAS entries. - Progress (2026-09-02, live installed wheel): Codex with model
gpt-5.6-solgenerated the two-entrypoint interpreted fixture. One multi-output build passed all six generated tests;litai run --entrypoint calculatereturned12for6, and--entrypoint inspectreturnedoddfor7. The durable export retains default entrypointcalculate, deployment unitscalculatorandinspector, and execution identitysha256:59134c7c57187b9d20665d765e3f61afe688d77b611ae309d2f80b9f9e3554d7. - Progress (2026-09-02, admitted-source continuation): a separate
target-independent source-only admission passed its native two-entrypoint test
runner, and local
build --from-accepted-sourcerestored it without generation, built both surfaces, and passed all 12 downstream tests. Two independently supplied verifier commands exposed and now cover non-canonical result ordering. The exact installedf663d9dfmacOS worker then built artifactsha256:6a12094016551de6fd11b67a9ba9c7300ec2997a96f739cdd7c3d3f18d54200d; its remotecalculateandinspectruns returned12andoddrespectively. Moving to Linux correctly required a new admission: selecting the Linux OS Flavor changes the Component revision and exact generation derivation even when the prior admission's worker-selector scope is target-independent. The first Ubuntu attempt additionally exposed a stale executable user launcher ahead of the exact native bootstrap; shared launcher selection now prefers the bootstrap for both execution and acknowledgement. Complete Linux and Windows receipts are still required before closing #33. The remote macOS lifecycle then built and exercised both entrypoints before its evidence writer rejected floating-point build-cache telemetry. The receiver now projects finite timings into tagged canonical decimals and rejects non-finite values explicitly. The exact-revision live rerun then reached coordinator import and exposed host-Pathordering in directory-artifact identity; portable logical path ordering and a prefix-colliding multi-entrypoint bundle regression now cover that second boundary, pending the exact-revision live worker rerun. - Progress (2026-09-02, live macOS accepted-source lifecycle): the exact
2dd484a4installed distribution completed the remote build, returned canonical evidence, reconciled the complete prefix-colliding artifact directory, and recorded artifact identitysha256:b457a26e64a5adadf30f7ea9a7dfee50613d122da4d68079418a54898c28c3f9. The first subsequentrunthen exposed a third boundary defect: artifact exports retained an explicit model selector but not the equally authority-bearing accepted-source-only mode, so a freshly built artifact was declared stale. Controlled reconstruction held every other authority input constant and proved ordinary run authority differed while accepted-source run authority exactly matched the export. Artifact exports now retain that non-default mode, while run re-discovers the current provider/tool binding so real provider drift still fails closed. The real macOS worker then returnedcalculateresult12andinspectresultoddthrough the repaired coordinator path; exact final-revision installed rerun and Linux/Windows evidence remain. - Progress (2026-09-02, exact installed Linux continuation):
make installfrom pushed commit4a57d5b9produced a non-editable 0.9.0 runtime with no recorded payload path outside its prefix and distribution identitysha256:507975f26fa480379c8b2ee672a59f638fecb4769e110f341cc629f32dd16766. One Linux-targeted two-entrypoint source tree was verifier-admitted under the preceding receipt-runner policy. After changing only that policy to the current Standard driver and re-recording project authority, Ubuntu 24.04 completedbuild --from-accepted-sourcewith model fallback prohibited and returned authenticated artifactsha256:f27e54032e24b55ab560b85a05a9a757ed8f956367d808bf05e50d59cdc5fe04. Its independentcalculateandinspectdeployment-unit runs returned{"surface":"calculate","result":14}and{"surface":"inspect","result":"odd"}. Exact CPython 3.12 and 3.14 wheelhouse closures also bootstrapped successfully on Ubuntu 24.04 CPU/NVIDIA and Ubuntu 26.04 CPU workers. This closes Linux and directly demonstrates that unrelated project receipt-policy authority no longer consumes another model call; Windows remains. - Evidence:
- A 0.9.0 ADR proposes the multi-entrypoint lifecycle model and is explicitly accepted before implementation is scheduled (ADR 0026, accepted 2026-09-01).
- A single Component declaring multiple cooperating entrypoints projects a per-entrypoint build/test/export contract through the Standard lifecycle.
- One build intent, authorization, action, manifest, and typed build evidence bind every entrypoint export without changing the serialized single-entrypoint contract.
- Generated TEST and EXECUTE fan out over every entrypoint contract and aggregate typed observations keyed by entrypoint identity, deployment unit, export, command, and runner; one failed unit prevents acceptance.
- Artifact closure and package planning retain every root deployment artifact, and packaged TEST/EXECUTE select each entrypoint's exact export and command rather than the primary entrypoint implicitly.
- Verifier-owned acceptance resolves and executes one oracle per packaged entrypoint/deployment unit, including portable, persistent-service, and browser kinds, and binds the complete result set into one receipt.
- Source-cache membership, aggregate receipts, and CycloneDX evidence invalidate on one entrypoint change and enumerate every declared deployment unit.
- Singular-output build profiles (Bazel, Cargo, Make, and CMake) fail with a stable typed unsupported-profile error until an exact multi-output mapping is declared; no adapter synthesizes a nonexistent artifact.
- Contract/wire/tamper regressions and live interpreted multi-entrypoint
generation/build/run pass. Partial-failure rejection and packaging are covered
locally; exact installed macOS, Linux, and native Windows remote lifecycle
evidence passes. The Windows proof binds source archive, non-editable wheel,
installed distribution, three complete lifecycle cases, and named non-default
dispatch to exact commit
5cf7100b1022a52127410e0da8797284be133217; all 15 hosted jobs pass in run33858381265. Existing single-entrypoint golden identities are unchanged.
[ ] STANDARD-PROJECT-REBUILD-001 — Standard rebuild of the project root rebuilds every locked Component
- Release target: 1.1.0
- Integration repair (locally verified): PR #447 executed every selected root but published only the last Component's finalized receipt. The repaired root path now combines typed accepted candidates, binds the full canonical lock set and every member proof, and publishes matching CLI/candidate/committed receipt identities and totals. It captures initial project authority and rechecks configuration, every input snapshot, the driver and lock-set membership before publication. Missing, duplicate, foreign or stale members refuse publication. Single-Component receipt identities remain unchanged; per-Component results retain their complete product metadata. This owner remains open for final qualification.
- Priority: high
- Owner: src/literate_ai/cli/rebuild.py Standard rebuild entry
- GitHub issue: #445
- Direction: litai rebuild . on a Standard-bound project must rebuild every Component with a committed lock instead of failing closed with rebuild.standard_component_required.
- Conclusion: Keep one-Component rebuild unchanged. Project-root Standard rebuild enumerates the current lock set, runs each lifecycle under one project lock, fails closed before receipt commit if any Component fails, and returns an aggregated DAG and test summary. Unlocked catalog entries remain skipped.
- Depends on: MULTI-ENTRYPOINT-001
- Implementation:
- Replace the project-root Standard refusal with lock-set discovery and sequential per-Component rebuild.
- Aggregate the typed candidate, committed receipt, result, DAG and test summary across every accepted locked Component; publish only after project authority and the complete lock set are revalidated.
- Document Standard project-root rebuild and add regressions for empty, one, many, and first-failure lock sets.
- Evidence:
-
PYTHON_TEST_PATTERN=test_cli_rebuild.py make python-check: 31/31, including empty lock set, alpha-then-beta fan-out, first-failure refusal, and receipt commit on the last Component only. -
make format-check lintpassed;make documentation-review-recordset markersha256:2f4699d1ed15371d211b95d7ce3059f30041631772be52efa5a07341829648a8. - Merged as https://github.com/NVIDIA-dev/literate-ai/pull/447 (
3aaddab9). Follow-upmake driver-review-recordre-pinnedsample-host-conformancetosha256:83108cbef486bb22901f2b52640ff404e46184b954d98b428155c4bbc8773f4dafter reviewing TCB drift limited tosrc/literate_ai/cli/rebuild.py;make documentation-review-recordset markersha256:d5d2b6aa8d947a57b554fd3c3db41f88ae1608b0981bb78a8298f7191635f7f2. - Public project-root fixtures prove candidate/committed receipt/CLI agreement across two Components, reject missing or changed authority without publication, and retain single-Component behavior. The broad rebuild/receipt batch passes 63 tests in 206.088 seconds. After final aggregation guards, all 36 root-receipt/version-authority/storage tests pass in 36.401 seconds, and the first-Component failure regression passes separately in 3.290 seconds.
- Lint, formatting, OpenSpec, layout, skill admission and documentation (121 diagrams / 547 Markdown files) pass. Reviewed driver identity is
sha256:27f1a4157f88a2e8cedd9d666ef22d07228e54e164900ee2898d7a7e50ecfd51; authority verification passes. The full project receipt remains stale, with locks/source-intelligence/HTML explicitly unconfigured. - Qualify the installed CLI and complete native/hosted matrix on the consolidated candidate before closing this reopened owner. The public fixture injects accepted executions and tests real CLI custody/publication; it is not generated multi-Component execution evidence.
-
[x] GENERATION-005 — Per-document coding-CLI generation timeout (900s) is hardcoded, not configurable
- Priority: P1
- GitHub issue: #34
- Owner:
literate_ai/adapters/models/coding_cli.py(CodingCliTaskRunner/CodingCliSourceGenerator),standard_project.py(FilesystemStandardSourceGenerationAdapter.from_environment) - Direction: Both runner classes default
timeout_seconds=900. The local generation pathlitai build/litai generateactually uses constructsCodingCliSourceGeneratorwith no override, and neither--worker-timeout-seconds(a separate, higher-level remote-worker dispatch timeout, default 3600s, only meaningful with--worker) nor any environment variable reaches this constructor. A Component whose spec legitimately needs more than 15 minutes of coding-CLI generation time cannot be built locally today, full stop. - Conclusion: Make
timeout_secondsconfigurable for local coding-CLI generation — an env var and/or alitai build/litai generateflag — distinct from the existing remote-worker dispatch timeout. - Further-reaching idea on file (not required for this item): automatic
big-Component splitting when a resolved generation prompt is likely to exceed the
coding-CLI budget, proposing or performing a split along natural boundaries (distinct
entrypoints, low-cross-reference prose sections) into sibling Components joined by
provides/requires. Worth its own roadmap item if pursued; out of scope here. - Workaround on file: manually split one large Component into 5 smaller ones, each small enough for the fixed 900s budget.
- Completion evidence:
295e1c1— addedLITERATE_AI_CODING_CLI_TIMEOUT_SECONDS, read once inFilesystemStandardSourceGenerationAdapter.from_environment(shared bylitai build/generate/rebuild); default stays 900s, an invalid value fails closed via a typedCodingCliError. The automatic-splitting idea remains unpursued future work. - Evidence:
- A Component whose generation legitimately exceeds 900s completes locally via an explicit configuration, with the default remaining 900s.
[x] GENERATION-006 — coding_cli.generated_metadata_invalid recurs probabilistically on larger Components; a plain retry usually fixes it
- Priority: P1
- GitHub issue: #35
- Owner:
literate_ai/adapters/models/coding_cli.py(_canonicalize_generated_framework_metadata) - Direction: Two moderately-sized Components hit
source-generation:coding_cli.generated_metadata_invalidmultiple times, including twice at the identical document hash for one Component, and both eventually succeeded on a subsequent--force-regenerationretry of the same spec content with no further changes. A simpler sibling Component with a comparable skill set never hit this across its one build attempt — larger/more complex generation surfaces appear more prone to it. This is malformed JSON in a framework-owned metadata file (the generated test manifest or CycloneDX source SBOM), a coding-CLI output-quality issue, not a specification or environment problem, and litai currently treats it as a hard failure requiring the caller to notice and manually retry. - Conclusion: Have
litai build/litai generateautomatically retry a bounded number of times (using the existing--force-regenerationsemantics) specifically oncoding_cli.generated_metadata_invalid, since a plain retry resolved it in both observed cases. - Investigated 2026-08-15, deferred:
_canonicalize_generated_framework_metadatais a pure post-processing step over already-generated file content; retrying it alone would deterministically fail again on the same bad bytes. A real fix needs to retry the whole coding-CLI subprocess invocation (workspace setup, external process call, teardown) insideCodingCliSourceGenerator's generation method, since the observed fix (--force-regeneration) works because it re-runs a non-deterministic external call, not because it re-parses anything. That method is the framework's most safety/security-sensitive code path; scoping a bounded-retry loop around it correctly (fresh workspace per attempt, bounded attempts, no infinite loop, audit trail per attempt) deserves more care than this pass had time for. Left open rather than rushed. - Fixed 2026-08-16 (
c46d2c74):CodingCliSourceGenerator.generate()now retries the whole subprocess invocation (fresh workspace per attempt via_reset_generation_output_root()) up to 2 additional times specifically oncoding_cli.generated_metadata_invalid, recording ametadata_retry_countfield and acoding_cli_metadata_retryoperation-log event per attempt; any other error code, or exhausting the bound, still fails closed with the original typed error. - Evidence:
-
tests/critical/test_coding_cli_generation.py::CodingCliInvocationTestscovers a reproduced case succeeding through the bounded automatic retry without caller intervention, and a persistently malformed case still failing closed after the bound is exhausted.
-
[x] SAMPLES-RESILIENCE-001 — The samples gate has no retry or checkpoint resilience for transient live-generation failures
- Priority: P2
- Owner:
scripts/run_samples.py,tests/conformance/support/sample_runner.py - Direction: During the 0.5.1 release-check gate (2026-08-19), three consecutive
full
make samplesruns each failed on a different sample with a different error class (coding_cli.timeouttwice ondependency-planner/rust, once via a rawGenerationFailurethat bypassed the harness's ownSampleFailurewrapping;coding_cli.generation_failedoncritical-path-scheduler/pythonviacursor-agent). Isolatingdependency-planner/rustalone succeeded on a standalone rerun with no code change. A single sample's transient failure aborts the entire matrix run today, discarding every other sample's already-completed work; a retry regenerates everything from nothing. - Conclusion: See
ADR 0008 for the
full proposed design: extend
GENERATION-006's existing bounded coding-CLI subprocess retry to covercoding_cli.timeout/coding_cli.generation_failed(not justcoding_cli.generated_metadata_invalid), and add sample-level checkpointing toscripts/run_samples.pyfollowing the existingrun_checkpointed_gates.pypattern so a retry resumes from the last completed sample. - Depends on: ADR 0008 reaching
Acceptedvia its planning cycle before implementation begins, perskills/agent/release-project/SKILL.md's significant-feature-request sequence. The Rust-skill-wiring theory ADR 0008 originally cited as this item's likely root cause was disproven in the same session (the skill was already correctly wired viaflavors/rust/flavor.md's ownauthoring_inputscontribution) — this item stands on its own merits regardless. - Completion evidence: ADR 0008 accepted 2026-08-20 after the 0.5.2 backport cycle
reproduced the same shape six more times (three samples, three error classes, all
later passing untouched). The retry set is now
_TRANSIENT_GENERATION_ERROR_CODES=generated_metadata_invalid,generation_failed,timeout, reusingGENERATION-006's existing bounded fresh-workspace retry loop.coding_cli.empty_generationis deliberately excluded: it looks transient but is usually a deterministic workspace-write denial, so retrying it only triples the wall clock before the same failure surfaces.run_allnow checkpoints toOBJ_DIR/samples-checkpoint.json. Each entry stores the sample's complete case, not a pass flag, because the receipt aggregates evidence from every sample -- a skipped sample must contribute exactly what it contributed when it ran. The key binds sample tree digest, flavor selectors, packaging scope, platform, and the lifecycle-driver implementation digest; the checkpoint is deleted after a complete matrix pass so a successful run never lets the next run skip everything. Verified end to end: a seeded resume ofhello-componentreportedskipped (checkpointed pass)in 1.8s versus ~90s, producing an identical valid report (test_count: 13). - Follow-on defect found and fixed: the first implementation keyed the checkpoint on
validated_project_authority_identity, which silently coupledmake samplesto documentation-authority freshness -- a separate gate's concern -- and broke the run outright on a stale marker. Replaced with the lifecycle-driver implementation digest, which is the code that actually decides sample behavior; an uncomputable digest disables the checkpoint rather than guessing at invalidation. - Evidence:
- ADR 0008
StatusreachesAccepted. - Retry covers
coding_cli.timeout/coding_cli.generation_failed, withempty_generationexplicitly excluded and regression-tested as excluded. - Sample-level checkpoint resumes a failed matrix without regenerating passed samples, and self-clears after a complete pass.
- Checkpoint invalidates on sample content, nested files, added files, flavor
selectors, packaging scope, and framework revision; corrupt or foreign-schema
state resumes nothing (
tests/unit/test_sample_checkpoint.py, 16 tests). -
litai rebuildno longer truncates away the line naming a driver failure, and retains the complete driver output for inspection.
- ADR 0008
[x] CACHE-010 — Lifecycle cache roots are ambient environment only, with no CLI surface and no record in the receipt
- Priority: P2
- Owner:
src/literate_ai/cache_directories.py,src/literate_ai/cli/rebuild.py - Direction:
BUILD_DIR/OBJ_DIRare resolved exclusively from process environment byresolve_cache_directories().litaiexposes no--build-dir/--obj-dirflags at all, so forlitai rebuild, the only entry point producing a promotable test receipt, ambient environment is the sole lever. (cli/rebuild.py:214rejects the separate accepted-source-cache overrides because the Standard driver "uses BUILD_DIR-backed cache custody" — an accurate description of the coupling this item removes.) The roots a run actually used are not recorded anywhere, so a warm-cache run and a cold-cache run of the same revision yield indistinguishable receipts. During the 0.5.2 backport cycle this directly obstructed diagnosis: thesamplesgate passed (warmOBJ_DIR, no regeneration) whilelitai rebuildfailed on the same revision (cold, regenerating), and nothing in either result made the distinction visible. - Conclusion: See
ADR 0009. Add
--build-dir/--obj-dirflags routed through the existingbind_cache_directories()seam (which already binds explicit roots without consulting environment, and already applies the safety, distinctness, and no-nesting rules); keepBUILD_DIR/OBJ_DIRas fallback with precedence flag → environment → portable default; and bind the resolvedCacheDirectories.identity(literate-ai/cache-directory-custody@1, already computed) into the candidate test receipt. Cache roots deliberately do not move into workflow authority — host paths there break workflow portability. - Completion evidence:
0ed5ccf6—select_cache_directories()resolves flag → environment → portable default and binds through the existingbind_cache_directories()seam, so an explicit root never consults the environment and still gets every custody rule (protected-authority overlap, distinctness, no nesting) as a typedrebuild.cache_root_invalid. The resolved roots are overlaid into an external driver's environment before binding, so the environment and the identity material derived from it describe the same custody, and are recorded as a new optionalcache-directory-custodyevidence role — optional because the receipt schema isadditionalProperties: falseand requiring it would invalidate every existing receipt. A follow-up (cae62085) corrected the resolution ordering: it originally ran before the project-index preflight, which must remain the first rejection. - Evidence:
- ADR 0009
StatusreachesAccepted(planning cycle completed 2026-08-20). -
--build-dir/--obj-diraccepted bylitai rebuildand routed throughbind_cache_directories(). - Flag-over-environment precedence covered by regression tests, including a
disagreeing flag/environment pair (
tests/critical/test_build_cache_directories.py). - Candidate test receipt carries the resolved cache-directory custody identity, tolerated as absent when reading a receipt written before this change.
- ADR 0009
[x] GENERATION-009 — Retry duplicate generated-test argument vectors as a bounded generation failure
- Priority: P1
- Owner:
src/literate_ai/adapters/models/coding_cli.py(_TRANSIENT_GENERATION_ERROR_CODES) - Direction: A 0.5.2
make release-checksamples run failedpublication-import/pythonwithgenerated_tests.duplicate_argumentsafter a coding CLI emitted two valid cases that shared one JSON argument vector. The uniqueness check is a hard admission rule and must stay. The prompt already requires unique vectors. The samples harness retries this code only when the failure is classified asgeneration.model-stage-failed; this run failed as a Standard lifecycle node, so that retry never fired.generate()already wipes the output root and retriescoding_cli.generated_metadata_invalid,coding_cli.generation_failed, andcoding_cli.timeout. - Conclusion: Treat
generated_tests.duplicate_arguments,generated_tests.acceptance_signature_missing, andgenerated_tests.expected_result_shape_mismatchas the same bounded subprocess retry. Do not delete the uniqueness validator. Do not import 0.6-only features ontorelease/0.5.x; land onmainfirst, then cherry-pick. - Depends on:
GENERATION-006/ ADR 0008 retry loop already inCodingCliSourceGenerator.generate(). - Implementation:
- Add the three generated-test contract codes to
_TRANSIENT_GENERATION_ERROR_CODES. - Keep uniqueness as a hard admission failure after the retry bound.
- Unit-test recovery and fail-closed exhaustion for duplicate arguments; keep the exact retry-set assertion current.
- Add the three generated-test contract codes to
- Completion evidence: generate() retries the three
generated_tests.*contract codes with the existing fresh-workspace bound. - Evidence:
-
tests/critical/test_coding_cli_generation.pyrecovers on a firstgenerated_tests.duplicate_argumentspayload and fails closed after exhausting the bound. -
tests/unit/test_sample_checkpoint.pylists the expanded retry set and still excludescoding_cli.empty_generation.
-
[x] GENERATION-007 — Add an authenticated inherited IDE-session coding provider
- Priority: P0
- GitHub issue: #43
- Follow-up defects: #94, #97
- Owner: framework-core provider protocol, coding-provider adapter, and canonical verifier-owned source-admission boundary
- Direction: Let an already-authenticated IDE agent perform generation through a canonical provider-neutral handoff without launching a nested coding CLI or persisting credentials.
- Conclusion: Add a narrow inherited-session protocol and adapter outside the existing coding-CLI lifecycle implementation. Bind authenticated provider/session identity, exact request plan/context bytes or immutable bundle reference and writable boundary, single-owner custody, typed timeout/cancellation outcomes, private-content-safe evidence digests, and returned source metadata. Treat the returned tree only as an untrusted candidate: canonical verifier-owned source admission remains the sole authority transition.
- Depends on: the verifier-owned source-admission boundary landed by #38; coordinate with #31 for provider selection without absorbing general capability probing.
- Scope boundary: Keep mission policy and private transport details downstream.
Avoid broad changes to
coding_cli.pyor lifecycle orchestration currently touched by #44; integrate through a new provider module and the narrow source-admission contract. - Implementation:
- Define authenticated request/response schemas, ownership transitions, bounded request identities, terminal outcomes, replay/staleness rejection, and tamper-evident source/evidence metadata without credential persistence.
- Add a no-nested-CLI
InheritedSessionProviderAdapterandselected_coding_ providerselection helper. - Wire explicit CLI/API provider and inherited-session configuration into
litai build/generate/rebuildselection. - Bind successful handoff evidence into canonical receipts and require the verifier-owned source-admission result before later authority.
- Bind inherited provider evidence inside its single model-stage output record so provenance retains one output per route decision and full Standard source generation can reach admission.
- Admit that stage-bound evidence without treating it as a second model output, and distinguish provider text output from the final tree after exact locked assets are augmented by verifier-owned generation.
- Document design traceability, authority markers, and exact Physics Workbench sample private waiter removal, migration, and release-pin steps; add a changelog outcome.
- Reopened 2026-08-23: The shipped request contains only prompt, context-manifest, and workspace identities. The coordinator therefore cannot obtain the authenticated prompt/context bytes, repository/workspace authority locator, or allowed-output contract without an unmodeled ambient channel or forbidden reconstruction. Cursor's documented IDE hooks expose a possible current-conversation trigger and evidence surface, but no existing Literate AI adapter uses it.
- Current next action: Done. Live inject remains the recorded Cursor vendor gap,
not a missing Literate AI adapter. The typed
inherited_session.current_session_unavailablebound is the honest live proof.- Add an authenticated immutable context bundle carrying the exact bounded prompt, workspace locator, scoped lock/plan/recipe/model identities, output confinement, and cancellation/cleanup contract; verify every duplicate identity.
- Add a generic Cursor Agent Chat hook adapter that admits only the bound
conversation/model/workspace, submits the exact bundle prompt through the
documented
stop.followup_messagecontinuation, captures transcript/provider evidence, and returns only allowedsource/**files. - Cover exact context availability, replay, scope/workspace/model mismatch, output escape, timeout/cancellation, recovery across hook invocations, cleanup, and transcript/provider binding.
- Add explicit authenticated context-byte tamper and concurrent multiple-request ordering regressions before completion.
- Fail closed with
inherited_session.current_session_unavailablewhen no Cursor stop-hook environment is present. Cursor documents no API to inject a hook into an already-running conversation, so a live current-session transaction cannot be forced from this chat. The authenticated directory coordinator plus the synthetic hook-handler transaction remain the framework proof; the typed unavailable error is the honest live bound. Downstream 20-node qualification stays a separate descendant gate and must not weaken source admission.
- 2026-08-28 remaining evidence:
require_live_cursor_hookis implemented. Missing channel/key without a stop-hook raisesinherited_session.current_session_unavailablebeforeruntime_configuration_invalid. Covered intests/smoke/test_cursor_inherited_session.pyandtests/critical/test_inherited_session_provider.py. - 2026-08-23 implementation evidence:
make inherited-session-checkpasses 86 protocol/adapter/admission tests;make format-check lint openspec-check documentation-checkpasses. A synthetic full directory transaction exercised the actual Cursor hook handler twice (submit then collect/respond), including transcript and provider evidence and terminal cleanup. - 2026-08-28 completion bound: A live inject remains a vendor gap, not a missing
Literate AI adapter.
require_live_cursor_hookfails closed when the ephemeral hook object is absent;handle_stopstill binds a real hook payload. Do not claim a current-conversation generation that did not run. - Implemented 2026-08-15: Standard source generation now consults the explicit provider selection, carries prepared-node request/plan/context/prompt/workspace identities through the handoff, retains public handoff evidence in generation provenance, and sends only independently verified membership onward. The built-in private-directory coordinator protocol uses create-once authenticated envelopes and rejects unsafe permissions, disconnect, replacement, stale state, or replay. No provider CLI is started.
- Evidence:
-
make inherited-session-check(88 tests, includingrequire_live_cursor_hookand missing-channelinherited_session.current_session_unavailable) andmake source-admission-check(62 tests) cover authentication failure, session/request mismatch, timeout, user and runner cancellation, late/duplicate/stale response, source/evidence tampering, IDE/coordinator protocol roundtrip/disconnect/replay, and successful verifier-owned admission. - Relevant Makefile gates pass and remote focused CI is green. The follow-up
provenance-cardinality defect (#94) was fixed in
ce0771d2and merged via PR #95 (d2f1dbd3);main's full remote CI matrix has passed clean on every push since.
-
[x] PROVIDER-001 — Resolve preferred alternative providers by required capabilities
- Priority: P1
- GitHub issue: #41
- Owner: framework-core provider-resolution contract, Component plan, and lock authority
- Direction: Let a project declare stable provider identities and capability-set identities, required capabilities, one preferred provider, an explicit deterministic fallback order, and an optional Flavor-selected override. Select the preferred provider whenever sufficient; consider fallback only when it is insufficient; reject insufficient overrides and unsatisfied requirements without weakening requirements.
- Conclusion: The framework owns generic deterministic resolution and its complete evidence identity. Downstream projects retain mission policy and provider catalogs; specifically, Physics Workbench sample keeps Newton-first/PhysX fallback declarations and physics acceptance while removing its generic sorting, validation, and provenance code once it consumes this contract.
- Depends on: current canonical Component plan/lock identity surfaces; no dependency on downstream Physics Workbench sample source or mission vocabulary.
- Implementation:
- Add the canonical provider catalog/request/result contracts and deterministic resolver, including explicit tie-breaking, exact override provenance, and fail-closed typed errors.
- Bind selected provider, requirements, evaluated capability-set identities, fallback reason or override provenance, and resolver-policy identity into plans and locks so catalog drift invalidates stale resolution and can return to the preferred provider.
- Add schemas and migrations for provider resolution (
ComponentLock. provider_resolutions,ComponentGenerationKey.provider_resolution_identities, both optional/default-empty and backward compatible). - Add the narrow CLI/API surfaces needed to author, inspect, and validate provider resolution.
- Document framework authority, design traceability, and exact Physics Workbench sample
consumption/removal steps while keeping Newton/PhysX mission policy downstream;
record the user-visible outcome in
CHANGELOG.md.
- Investigated 2026-08-15:
resolve_providerand its contracts are well-tested (8 focused resolver tests: preferred success, missing-capability fallback, unsatisfied requirements, invalid override, deterministic ties) and safely wired intoComponentLock/ComponentGenerationKeywith backward-compatible optional fields, but nothing insrc/callsresolve_provideryet — no CLI/API surface exists, and no caller ever populates a non-emptyprovider_resolutionstuple. Merging this is safe (purely additive, default-empty, no behavior change to any existing path) but it does not yet do anything a project can observe; the CLI/API surface and an actual call site (likely alongside coding-CLI/#41 selection) remain open work. - Fixed 2026-08-16 (PR #82,
57e41a57): recovered the merged contract work from PR #48 and completed the authoring-to-lock path. Components author named provider catalogs/policies incomponent.md; selected Flavors author exact overrides inflavor.md;litai lockresolves and reports the complete result and override provenance;litai planprojects it from the admitted lock. Catalog/policy/selection provenance identity-binds intoComponentLockand everyComponentGenerationKey, so capability drift returns deterministically to a newly sufficient preferred provider. - Evidence:
-
make provider-resolution-checkpasses 62 focused contract, authoring, Flavor-override, lock-CLI, plan, migration, and schema tests covering preferred success, missing-capability fallback, unsatisfied requirements, invalid override, deterministic ties, catalog drift invalidation, and deterministic return to preferred. - PR #82's remote CI matrix passed clean before merge;
main's full remote CI matrix has passed clean on every push since.
-
[x] LOCK-001 — A Component's lock is invalidated by unrelated changes elsewhere in the project
- Priority: P1
- GitHub issue: #36
- Owner: Component lock / resolution-audit authority binding
- Direction: Running
litai lock/litai buildfor one Component while a different Component's spec/oracle/docs changed in the same project repeatedly producescomponent_lock.stale: Component lock and resolution audit do not bind the current effective authority graphfor the untouched Component — observed both running two independent Components' builds in parallel against the same checkout, and runninglitai testsequentially across five Components immediately after any one of them was re-locked. A per-Component lock appears to bind a project-wide "catalog audit"/authority identity that changes whenever any Component, Flavor, or documentation file changes, not just axes relevant to the Component being locked/built. - Conclusion: Not yet root-caused. Needs investigation into whether project-wide lock sensitivity is intended, or whether invalidation should scope to just the locked Component's own transitive spec/Flavor/skill closure.
- Investigated 2026-08-15, still open: the literal string
component_lock.staledoes not appear anywhere underapplication/component_lock_resolution.py,adapters/component_lock_application.py, oradapters/component_locks.py, so the message is composed elsewhere in thecontracts/component_lockingcluster — root cause needs real investigation time, not a quick grep. The described symptom (a per-Component lock binding a project-wide "effective authority graph" identity) implies a structural scoping decision, the largest item in this batch; left open. - Fixed 2026-08-16 (
d3830a66):_effective_authority_graph_identity(component_lock_planning.py) no longer binds the whole project's Component/Flavor/skill catalog identity.project_authority_graph.pygainedproject_lineage_authority_identity(), which reuses the same validatedAuthorityGraph(so a colliding/cyclic entity still fails graph construction) but narrows the bound identity to repository-lineage nodes and edges only — the one piece of genuinely project-wide state a lock still legitimately fails closed on. - Evidence:
-
tests/unit/test_project_authority_graph.py::test_lineage_identity_is_ unaffected_by_an_unrelated_sibling_componentandtest_lineage_identity_changes_when_repository_state_changesverify both directions against real fixtures built from this repository's own.literate/lineage files: an unrelated sibling Component's content change (or a brand new sibling Component) no longer changes the identity, while a repository-level change still does.
-
[x] LOCK-002 — Cache-restored locked revisions lose typed Component definitions
- Priority: P0
- GitHub issue: #98
- Owner: Component lock typed validation and serialization boundary
- Direction: Linux source admission succeeds for a twelve-Component composition,
but cache-only continuation crashes when acceptance reads
LockedComponentRevision.definition; no coding-CLI fallback occurs. - Conclusion:
ComponentLockalready requires every exact typedComponentAuthoringvalue to decode and validate a lock, but node revisions discard that mandatory context. Retain the matched authoring as typed, non-wire, non-identity revision state and make node decoding bind it explicitly. Do not re-read mutablecomponent.md, weaken validation withgetattr, or change frozen v2 lock bytes. - Depends on: the existing v2 lock's mandatory external-authoring decode seam and verifier-owned Standard source-admission/cache restoration.
- Implementation:
- Bind each locked revision to its exact typed Component definition during construction and decode; reject missing, substituted, or selector-mismatched definitions.
- Preserve current and legacy-compatible v2 lock serialization and identities.
- Exercise Linux cache-only restoration and all twelve admitted composition members without any generator fallback.
- Record the user-visible correction in
CHANGELOG.md.
- Evidence:
-
make provider-resolution-checkpasses 65 lock/schema tests andmake source-admission-checkpasses 62 admission/cache tests; the installed wheel smoke additionally requires 12 unique entries, 12 Linux cache-only restores, and zero generator fallbacks. -
make python-checkpasses 2,365 tests with 28 platform skips; final-commitmake wheel-checkpasses with 12 admissions, 12 unique entries, 12 Linux cache-only restores, and zero generator fallbacks. PR #102 passes the complete Ubuntu/macOS/Windows matrix on Python 3.11, 3.12, and 3.14.
-
[x] SKILL-CATALOG-001 — Add python-service-application and react-dashboard-application specification-to-source skills
- Priority: P2
- GitHub issue: #37
- Owner:
skills/specification-to-source/catalog - Direction: Building a real multi-surface service Component (HTTP API + MCP
server + scheduled worker + web dashboard) needed two skills the default catalog
doesn't have: a long-running Python service (HTTP API, embedded MCP server,
scheduled worker) and an interactive React dashboard (toggleable overlaid
time-series charts, sortable/rankable table, table/graph view switch). Neither
portable-application-implementationnor any bundled skill covers this; the default catalog is oriented entirely around single-shot "JSON args in, JSON stdout out" portable applications. Both were authored locally as project-scoped drafts (technique synthesized from a public collection of Claude Code skills, not copied text) and are reusable, provider-neutral, with no project-specific vocabulary. - Conclusion: Review both proposed skills for inclusion in the framework's default
specification-to-sourcecatalog; the issue offers a PR with full skill content.python-service-applicationcovers HTTP API conventions (DI, typed response models/status codes, router-per-resource, OpenAPI-as-contract, OpenAI-compatible endpoint shapes including SSE streaming and error envelope, cursor pagination), MCP server conventions (tools vs. resources, input validation, structured errors, transport choice), and scheduled-worker conventions (per-unit failure isolation, run-outcome recording).react-dashboard-applicationcovers local UI-only selection state independent of fetched data, stable identity-derived keys for toggled series/rows, multi-key table sort/rank, display-mode switching without discarding state or refetching, and per-panel loading/error isolation. - Verified 2026-08-15:
skills-checkrun for real viascripts/evaluate_changed_skills.pywith the installedskillevaluator(--checks schema,pii,license,quality,unicode,lint --no-llm --no-dedup, the same invocation the Makefile uses) — both pass, 6/6:python-service-applicationB/89.0,react-dashboard-applicationA/90.2. Both parse clean through the real skill loader withdependencies: [], so no Flavor closure or transitive-resolution failure mode can trigger; neither leaks a generated-source path into an ignored directory name (build/dist/out/target);samplesvalidation only checks a Component's pinned skill is present in the catalog (no orphan-skill check), so these inert, unpinned catalog entries can't break it. Root-only placement (no template mirror) is consistent with existing precedent (generate-nvidia-cuda-application);litai initprojects simply won't get these two skills, same as that one. Non-blocking follow-ups: a provider-neutrality leak atpython-service-application/SKILL.md:69(dangling "(this project's...)" reference), a hardcoded "fixed daily schedule" phrasing at:74, andreact-dashboard-applicationmissing the relative-import-with-extension rulejavascript-portable-json-application/SKILL.md:24has (harmless while unpinned). - Fixed 2026-08-16: both non-blocking follow-ups above are closed —
python-service-application/SKILL.md's MCP-transport sentence no longer dangles a "(this project's...)" reference, and its worker section now says "the specification's declared schedule (e.g. hourly, daily, or another fixed interval)" instead of a hardcoded daily cadence;react-dashboard-application/SKILL.mdgained a relative-import-with-extensionlimitationsentry matchingjavascript-portable-json-application/SKILL.md:24's. Two new sample Components pin each skill and were locked and generated live end to end vialitai lock/litai generate(--target linux-host, zeroflavor_slotsso neither skill's guidance is diluted by a language Flavor's own portable-application-shaped skill;CODING_CLI=claude, since the environment'scodexbinary was rate-limited on spend cap):samples/python-service-example(Cluster Health Service — paginated/typed-404 HTTP API, MCP server with a tool and a resource, and a scheduled worker with per-unit failure isolation and history accumulation) generated a real FastAPI + SQLAlchemy-async + MCP tree whose own generated test suite passed 20/20 (one test module,test_mcp_server.py, fails to import against the installedmcppackage because it referencesMcpErrorwhere that package version exportsMCPError— a real but narrow generated-code/SDK-version mismatch, not a skill or harness defect);samples/react-dashboard-example(Cluster Metrics Dashboard — toggleable overlaid time-series graph, multi-key sortable table, and a view switch that preserves selection/sort/fetched data) generated a real Vite + React tree whose own generated Vitest suite passed 11/11 and whose production build (npm run build) succeeded. This is directlitai lock/litai generateevidence, not thetests/conformance/support/ sample_runner.pyharnessrun_samples.pydrives: that harness'sdiscover()only finds samples with asamples/_harness/<name>/sample.jsonentry, and its_execution_contractvalidation unconditionally requiresentrypoint.kind == "portable-application"— it has not been extended for the non-portable-application entrypoint kinds ACCEPTANCE-001/ENTRYPOINT-001 already made buildable at the lifecycle layer. Wiring these two Components into that specific conformance harness (a pinned acceptance oracle plus an execution-interface fixture, after first teaching it to accept a non-portable-application entrypoint) is real follow-on work, tracked separately rather than folded into this item. - Evidence:
- Both skills pass NVIDIA SkillEvaluator.
- Both skills generate a representative sample Component (a persistent Python service; a React dashboard) end to end.
[x] SOURCE-COMP-001 — Flavor resolution rejects multiple singleton-axis default selectors before overrides are applied
- Priority: P1
- GitHub issue: #46
- Owner:
application/flavor_selection.py(apply_flavor_selectors) - Direction: Two
default_flavor_selectorssharing a singleton-cardinality axis raisedflavor_selection.mutually_exclusive_flavorsunconditionally before any--flavoroverride was even read, so no override could ever disambiguate it. - Completion evidence:
d78f9a9— mutual-exclusion validation moved from an unconditional check on the initial set to a single pass after every selector (including CLI overrides) has been applied; an unresolved conflict still fails closed. - Evidence:
- An override can disambiguate two singleton-axis default selectors.
- An unresolved singleton-axis preference conflict still fails closed.
[x] SOURCE-COMP-002 — Multi-source-root Components consistently fail SBOM composition validation
- Priority: P1
- GitHub issue: #39
- Owner:
adapters/dependencies/lifecycle.py(_require_complete_source_composition) - Direction: A Component declaring two source roots (per
flavors/javascript/openspec/spec.md's "multi-toolchain frontend role" provision — the framework's only documented mechanism for this) consistently failsbuild:dependencies.source-composition-unjustified, across two attempts at the identical document hash, not resolved by retrying. - Root-caused 2026-08-16, not a validation or generation bug: exhaustive trace of
CycloneDxLifecycleResolver.validate_sourcefound exactly two acceptedcompositionsshapes in the entire file —{"aggregate": "complete", "dependencies": [root_ref]}(zero external dependencies; the default, non-Bazel path) and{"aggregate": "incomplete_third_party_only", ...}(Bazel/Bzlmod-detected intent only, via_reconcile_bazel_source_intent). No third shape exists anywhere that accepts a complete composition enumerating real npm dependencies. This is consistent withflavors/javascript/openspec/spec.md's own unconditional "Deterministic dependency-free output" requirement ("SHALL use no npm package"), which the frontend- role provision never carved an exception out of — it changes only source-path ownership and the backend-invocation contract. So the failure is deterministic and correct by current design, independent of root count and independent of anything the coding CLI generates: a JS Component asking for real npm dependencies cannot pass source-composition validation today, whether single-root or multi-root, frontend-role or not. The reporter's own premise (that the frontend-role provision implicitly permits npm dependencies for a "React dashboard" root) doesn't hold against the text; the ambiguity that let that premise seem reasonable is now closed inflavors/javascript/openspec/spec.md. This did not require reproducing via a live coding-CLI generation run: the two accepted shapes are exhaustive and unconditional on root count, so no live run could produce a third, differently-shaped, accepted composition — running one would have confirmed what the code already guarantees, not discovered anything new. - Real gap this surfaces, not fixed here: the framework has no capability for a
JavaScript Component to depend on real npm packages at all outside the Bazel/Bzlmod
path — not a bug, but a genuine missing capability if a Component's frontend role is
meant to support a real component-library-based UI. This is the same tension #67
flags for
react-dashboard-applicationimplying component-library-shaped patterns while the siblingjavascript-portable-json-applicationskill forbids npm packages outright. Filing a distinct capability item for "npm-dependency-capable JavaScript Flavor axis" is the right follow-up, not a speculative widening of_require_complete_source_composition. - Evidence:
- The two accepted
compositionsshapes are exhaustively enumerated and neither accepts real npm dependencies, confirming the failure is deterministic and by-design, not a coding-CLI or validation-logic bug. -
flavors/javascript/openspec/spec.md's frontend-role provision no longer reads as an implicit npm-dependency exception.
- The two accepted
[x] RELEASE-004 — Release check's declared-scope enforcement is incompatible with the mandatory documentation-authority-review precondition
- Priority: P1
- GitHub issue: #55
- Owner:
project_releases.py(check_release,prepare_release) - Direction:
litai release prepare's version bump legitimately changesliterate.project.json(in the release's declared scope), which stales the separate documentation-authority marker (out of scope) — the release gate's ownlitai test/buildinvocation could then never pass against a validly-scoped prepared commit. - Completion evidence:
8d1f4c9—ReleasePolicyaccepts an optionaldocumentation_authoritypath list;prepare_releaserefreshes a declared, stale marker in the same pass as the version bump, andcheck_release's scope enforcement permits those paths. - Evidence:
-
litai release preparerefreshes both the version authority and a declared, stale documentation-authority marker in one scoped commit.
-
[x] CACHE-008 — litai cache publish crashes with an uncaught AttributeError
- Priority: P1
- GitHub issue: #63
- Owner:
application/source_cache_publication.py,contracts/generation_cache.py - Direction:
SourceCachePublicationService.publishreadentry.source_tree_identitydirectly, butAcceptedSourceCacheEntryonly carried it nested atentry.derivation.source_tree_identity— an uncaught traceback for every real accepted entry. - Completion evidence:
7bdeddb—AcceptedSourceCacheEntrynow exposes asource_tree_identityproperty forwarding toderivation.source_tree_identity, matchingStandardSourceAdmissionCacheEntry's existing accessor. Regression test exercises the real dataclass, not aMock(spec=...), since the existing test suite's use of a spec'd mock is exactly why this shipped uncaught. - Evidence:
-
litai cache publishsucceeds against a real accepted entry.
-
[x] CACHE-009 — Two accepted source-cache entries at the same key raise an uncaught SourceCacheError
- Priority: P1
- GitHub issue: #54
- Owner:
adapters/cache/filesystem.py(SourceCacheResolver.resolve) - Direction: Consecutive
--force-regenerationretries can independently accept two different results at the same resolved cache key; every subsequentlitai test/buildthen crashes with an uncaughtSourceCacheError, andlitai testhas no--source-cache-entrydisambiguation flag the waylitai rebuilddoes. - Completion evidence:
SourceCacheErrorwas already typed (.code/.message); the real gap was the same class of bug as ENTRYPOINT-001/#33 — nothing in thelitai test/build/generatecall chain caught it. Added to the CLI's top-level backstop insource_to_specification.py::main.litai build/litai testalso gained--source-cache-entry, forwarded through their shared_build_from_argshelper to the same localrebuild_from_argscalllitai rebuildalready uses. - Evidence:
- Two accepted entries at one cache key fail closed through a typed error with a
CLI-exposed way to disambiguate, on both
litai testandlitai rebuild.
- Two accepted entries at one cache key fail closed through a typed error with a
CLI-exposed way to disambiguate, on both
[~] TOOLING-001 — A green litai build/test-suite is not evidence the implementation is complete
Release target: 1.1.0
Priority: P1
GitHub issue: #64
Owner: independent-acceptance / test-generation coverage signal (not yet a single owning module)
Direction: The same coding-CLI call that writes a Component's implementation also writes its own test suite, so the tests can only ever exercise whatever surface that call decided to implement — a generated API Component shipped with several route handlers literally set to
Nonedespite 17/17 generated tests passing; a generated worker Component never called its own upstream client despite 15/15 passing. Neither gap was caught by build/test/acceptance, only by running the application end to end.Conclusion: This is a process/tooling gap, not a single bug with one fix shape — it needs an independent signal, distinct from the acceptance-oracle smoke test (#32/ACCEPTANCE-001), that measures how much of the specification's described behavior the generated tests actually exercise. Filed here as a problem statement and direction, not implemented; needs its own design pass to pick a concrete coverage-signal mechanism before scoping further.
Superseded 2026-08-16 by COVERAGE-GAP-001 (below): landed a first, narrow, advisory-only mechanical scan (whole-generated-tree stub-marker detection). Left marked partial
[~]here, not[x], because the fail-closed direction this entry originally called for ("fails some lifecycle phase before acceptance") was explicitly deferred — see COVERAGE-GAP-001 for the actual landed scope and its precision-tradeoff reasoning.Evidence:
- A generated Component with an unimplemented declared surface (e.g. a
Noneroute handler) fails some lifecycle phase before acceptance, not just at manual end-to-end review.
- A generated Component with an unimplemented declared surface (e.g. a
[x] WORKER-002 — Add authenticated bounded worker capability attestations — WON'T FIX
- Priority: P1
- GitHub issue: #51 (closed)
- Direction: Physics Workbench sample's private Windows worker probe could not expose attributable identities for NVIDIA adapter/driver, CUDA, MSVC, Bazel, CMake/Ninja, Python, SDK runtimes, or WebRTC routes, so it retained native/runtime and provenance scoring at 0 despite the route being reachable.
- Conclusion (2026-08-15, per explicit user direction): GitHub/GitLab-hosted CI
already runs every job inside a VM-isolated runner, which provides the isolation
guarantee this issue was after for hosted targets. The private worker fleet's
non-Linux hosts (macOS, Windows) have no equivalent to
sandbox-exec/bwrap-grade sandboxing available at all, so a new bounded-attestation subsystem could not actually deliver the cross-platform guarantee it describes either way. Closed as won't-fix rather than building a large new security-sensitive subsystem to re-provide what the execution environment already provides (or can't provide). Real prior art was identified before this decision, kept here in case the decision is revisited:contracts/worker_capabilities.py/adapters/worker_capabilities.pyalready model a narrower hardware-observation attestation;source_to_specification/sandbox.pyalready implements the "one fixed harness only"sandbox-exec/bwrapallowlisted-path pattern, currently scoped to local observation only;security/isolation/contracts.pyalready models staged mandatory controls and decision/evidence separation.
[x] WORKER-003 — Add verifier-authorized bounded worker build actions with provenance — WON'T FIX
- Priority: P1
- GitHub issue: #52 (closed)
- Direction: Physics Workbench sample found no approved bounded worker action for source-building third-party dependencies on its private Windows worker, so it could not authorize those builds or receive attributable intermediate/output identities.
- Conclusion (2026-08-15, per explicit user direction): Closed as won't-fix for the same reasoning as #51/WORKER-002, which this depends on — the isolation this issue asks for is already provided by VM-level isolation on hosted CI targets, and is not achievable cross-platform on the private worker fleet's non-Linux hosts.
[x] CI-002 — Add a build-cmake Flavor for the build.system axis
- Priority: P2
- GitHub issue: #56
- Owner:
flavors/,skills/specification-to-source/ - Direction: Add
build-cmakealongside the existingbuild-bazel/build-makeFlavors:flavors/cmake/flavor.md, astandard-command-profile.json, a siblingcmake-build-systemskill, and sample coverage exercising it the way Bazel/Make already are. - Not attempted 2026-08-15: filed by the user explicitly for the 0.3.1 planning queue, not for implementation now (per the issue's own "Scope note"). This is real skill-authoring work (CMakeLists.txt generation conventions, target/dependency mapping) plus cross-platform sample verification that cannot be honestly validated without a live coding-CLI generation run; left for a dedicated pass.
- Fixed 2026-08-17: added
flavors/cmake/flavor.md+standard-command-profile.json, the siblingcmake-build-systemskill, and asrc/literate_ai/adapters/builders/cmake.pybuilder, mirroringflavors/bazel/flavors/make. Live end-to-end validation (litai lock/litai generateagainstsamples/hello-componentwith+python +build-cmake +os-macos,CODING_CLI=claude) found a real bug: the coding CLI generated${CMAKE_COMMAND} -E chmod, a subcommand that does not exist in any CMake release, failing the build. Fixed by adding explicit skill guidance (cmake-build-system/SKILL.md'slimitations) against inventing nonexistentcmake -Esubcommands, pointing atfile(CHMOD ...)or, better, relying on tooling (Python'szipapp) that already sets the executable bit. Regenerated from the fixed skill and independently verified with realcmake/ctestinvocations (not just the framework's own build step): `cmake -S . -B` configures cleanly, `cmake --build ` succeeds, `ctest --test-dir ` passes 1/1. `run_samples.py`'s harness (`samples/_harness/ /sample.json` + pinned `acceptance/execution.json`) was not extended with a new permanent `build-cmake` entry in this pass — `samples/flavor-matrix/component.md` already declares a `build-system` Flavor slot (`zero-or-one` cardinality) that `+flavor://literate-ai/build-cmake` can select without any Component changes, the same slot Bazel/Make coverage in that harness already exercises; wiring an actual pinned acceptance fixture through that harness is real follow-on authoring work, not folded into this item. - Evidence:
- A Component selecting
+flavor://literate-ai/build-cmakebuilds/tests/runs through the native Standard adapter, consistent with Bazel/Make: verified directly vialitai lock/litai generateplus realcmake --build/ctestagainstsamples/hello-component, not yet through therun_samples.pypinned-harness path (see note above).
- A Component selecting
[x] RELEASE-005 — Make the release gate's execution target an explicit, durable user choice (--target github|gitlab|local)
- Priority: P2
- GitHub issue: #58
- Owner:
litai release check,make release-check - Direction: The release gate's only execution target today is whatever
.github/workflows/ci.ymlhappens to declare; the private worker fleet (literate.workers.json) is never wired into it, and nothing lets a user choose. - Investigated 2026-08-15, deferred: this project has zero existing GitLab
integration anywhere —
release_policy.provider.kindis hardcoded to accept only"github"(project_releases.py:"only github is currently supported"). Implementing realgitlabdispatch means designing and building an entire new provider surface with no way to test it against a real GitLab instance from this environment;githubdispatch needs real GitHub Actions API polling. This is new-provider-surface design work, not a quick patch — left open rather than half-implemented. - Fixed 2026-08-16:
litai release check --target local|github|gitlabis now an explicit, durable choice, scoped exactly tolocalandgithubas investigated above;gitlabis still rejected fail-closed (release.target_unsupported), not half-implemented. Without an explicit--target,check_releasefalls back to a project's declaredci_targetspreference (ProjectDefinition.ci_targets, first entry) when present, and to today's existing behavior (run the gate on the invoking machine, recorded as target kindlegacy-local) otherwise.--target localresolvesliterate.workers.jsonviaload_execution_worker_catalog, fails closed (release.target_unconfigured) when it is missing/invalid or declares no SSH worker, deterministically selects the lexicographically first SSH worker (the catalog's ownworker_id-sorted invariant), verifies the worker's workspace is checked out at the exact prepared revision (release.worker_revision_mismatchotherwise), and dispatchespolicy.gate_argvto it over the existing bounded SSH transport (ssh_transport.ssh_arguments/BoundedSshProcessRunner), failing closed withrelease.worker_unreachableon a transport failure.--target githubpollsgh run listfor the exact checked-out revision (release.provider_unavailableifghis unavailable) until a run for that SHA completes orpolicy.gate_timeout_secondselapses (release.gate_timeout), then fails the gate on any non-successconclusion (release.gate_failed). The prepared-release evidence gained a requiredtargetobject (kind, plusworker_id/endpointforlocalorrun_id/run_url/conclusionforgithub) recording which target produced the passing gate. - Evidence:
-
--target localdispatches through the configured private worker fleet and fails closed when unconfigured or unreachable:tests/e2e/test_project_releases.py::ReleaseTargetTests::test_target_local_dispatches_through_the_configured_worker_fleet,::test_target_local_fails_closed_when_worker_fleet_is_unconfigured,::test_target_local_fails_closed_when_worker_is_unreachable. - The release evidence records which target produced a passing gate:
::test_target_local_dispatches_through_the_configured_worker_fleet,::test_target_github_polls_to_a_passing_conclusion,::test_legacy_default_runs_on_the_invoking_machine_when_undeclaredassert the recordedtargetfield. Also covered:::test_target_github_fails_on_a_non_success_conclusion,::test_target_github_times_out_when_no_run_completes,::test_target_gitlab_is_rejected_with_a_typed_not_yet_supported_error,::test_declared_ci_targets_preference_is_used_when_no_explicit_target.
-
[x] CI-003 — Widen the CI Python matrix from 3.11/3.12 to include a materially newer minor for real version diversity
- Priority: P1
- GitHub issue: #61
- Owner:
.github/workflows/ci.yml(conformancejob matrix) - Direction: 3.11 and 3.12 are close enough in stdlib behavior that the matrix
wasn't exercising real version diversity — PR #40's
test_cli_helpfix for Python 3.14's defaultargparsecolorizing was only found by running locally under 3.14. - Completion evidence:
3d8f7ce— matrix widened to3.11/3.14, keeping minor-only resolution to match this workflow's existing Node pin (not exact-patch pins, since verifying real published CPython patch versions isn't possible from this environment).windows-conformanceandsample-compositionstay pinned to 3.12. - Evidence:
-
conformancejob matrix includes Python 3.11 and a materially newer minor.
-
[x] CI-004 — Wire litai profile into CI so runner logs are actually observable
- Priority: P2
- GitHub issue: #57
- Owner:
.github/workflows/ci.yml(windows-conformancejob), newscripts/profile_pytest.py - Direction:
litai profileonly wrapsrebuild/build/test/generate; CI invokespytestdirectly, so the structured NDJSON sink was never opened for a CI run. - Completion evidence:
efb61a2—scripts/profile_pytest.pyreuses the same sink andliterate-ai/profile-report@1report machinery around an arbitrary pytest invocation; wired into the Windows job, always-on, uploaded as awindows-conformance-profileartifact. Known limitation documented in the script: pytest-xdist workers run in separate processes, so only what happens in the coordinating process is captured under this repo's default-n autodistribution. - Evidence:
- The Windows job's test step produces an NDJSON trace and hotspot report, uploaded as a retrievable CI artifact.
[x] WORKER-004 — Make admitted-source worker continuation diagnostic and fail closed
- Priority: P1
- GitHub issue: #65
- Owner:
cli/generation.pysource verifier,adapters/standard_project.pyaccepted-source-only continuation,adapters/remote_execution.py/cli/worker.pyremote dispatch,adapters/ssh_transport.pytransport - Direction: A derived-project target matrix exposed three related Standard source-custody gaps: (1) an admission verifier failure named only the command's argv[0], no failing Component revision, exit status, or bounded output; (2) a remote build intended to continue only from verifier-admitted source could fall through to worker coding-CLI generation instead of failing closed; (3) Windows remote restore referenced cache-key membership files not staged into the archive.
- Investigated and partially fixed 2026-08-15:
- (1) fixed:
_CommandSourceVerifiernow names the failing Component revision, exit status, and a bounded stderr/stdout excerpt insource_admission.tests_failed. - (2) fixed: added
ExecutionDispatchRequest.accepted_source_only(schema-versioned, optional/backward-compatible wire field, included inauthority_identity);build/testgained a--from-accepted-sourceflag mirroringrebuild's;RemoteLifecycleRebuilder.__call__'s protocol and its implementationrebuild_remote_lifecycle(cli/worker.py) now accept and forwardaccepted_source_only, whichexecute_remote_requestthreads from the dispatch request. A remoteaccepted_source_onlyrequest now hits the sameadmitted != requiredfail-closed check the local path already had whenever membership isn't present on the worker — it can no longer silently fall through to worker coding-CLI generation. Regression tests added for the wire round-trip and for the intent reaching the worker-side rebuild call. - (3) fixed: a worker's dispatch workspace is freshly extracted per run with no
pre-existing accepted-source-cache, so (2) alone made every remote
accepted_source_onlyrequest fail closed unconditionally — safe, but unable to ever get an actual remote cache hit.capture_source_archivenow also stages the project's whole writable accepted-source-cache tree (generated/accepted-source-cacheby default) as a fifth transferred archive (accepted-source-cache.tar.gz) wheneveraccepted_source_onlyis set; every entry inside is already independently content-addressed by its own path-embedded hash, so staging the whole tree rather than computing a reachable subset is simple and safe (never a correctness problem, only a transport-size one).ExecutionSourceMaterialization.accepted_source_cache_referencebinds the staged archive's transport identity; the worker verifies that identity, then a newextract_accepted_source_cache_archive(remote_source_guard.py) safely restores it archive-relatively into the worker's own cache root (rejecting traversal, symlinks, and case-collisions) beforerebuild_remote_lifecycleruns — portable on both POSIX and Windows since restoration never depends on the archive's own path separators or the launcher's cwd.litai worker executegained--accepted-source-cache; the SSH transport passes it only when the fifth file was staged. A pre-existing (e.g. ungitignored) cache directory inside the extracted project tree is replaced, not merged, since accepted-source-cache is disposable regenerable state, never authored content. - Bonus finding while investigating the remote path, fixed: the SSH transport
binary was a hardcoded
"ssh"/"scp"literal inssh_transport.py, not per-worker configuration, contradicting the private fleet's actual need (some workers route through a VPN/Tailscale-aware SSH-compatible wrapper, not plain OpenSSH). Added an optionalExecutionWorker.transportfield (default"ssh", backward compatible, SSH-kind only);scpstays fixed. Verified live against a real private Windows worker over bothsshand a custom transport.
- (1) fixed:
- Evidence:
- A failing admission command names the failing Component revision with attributable bounded diagnostics.
- Explicit
--from-accepted-source/remote accepted-source continuation never selects or invokes a coding CLI on a worker; missing/mismatched membership returns a typed accepted-source-unavailable error before generation. - Windows staged membership restore works from an archive-relative cache root.
- The SSH transport binary is per-worker data, not a framework constant.
[x] WORKER-005 — Bind SSH dispatch to the selected worker launcher
- Priority: P0
- GitHub issue: #89
- Owner: execution-worker contract and bounded SSH lifecycle adapter
- Direction: Accepted-source continuation reached stale ambient
litaiinstallations after exact worker provisioning, so the staged cache option was rejected before restore on Linux and Windows. - Conclusion: Make the SSH worker's lifecycle executable explicit private configuration covered by worker identity. Dispatch must invoke that exact path and fail closed when it is unavailable; legacy workers may retain bounded conventional discovery, but it cannot override an explicit launcher. Keep endpoints, usernames, and private paths out of repository examples and evidence.
- Implementation:
- Add the optional exact launcher to the worker contract/schema and SSH command projection without changing transport selection.
- Add Linux/Windows command regressions proving stale ambient launchers cannot override the configured executable.
- Re-run accepted-source cache restore on both target workers.
- Fixed 2026-08-16 (
51bd3a62):ExecutionWorkergained an optionallifecycle_executable; when set, SSH command projection (both POSIX and PowerShell paths) invokes that exact configured path and never falls back to ambient discovery, while legacy workers without one keep the existing bounded discovery behavior. - Evidence:
-
tests/critical/test_execution_dispatch_contracts.py::test_ssh_worker_lifecycle_ executable_is_identity_bound_and_ssh_onlyandtests/smoke/test_ssh_execution.py::test_receivers_use_configured_lifecycle_ executable_without_discovery(both POSIX and Windows-path launcher forms) cover this; full unit suite passes.
-
[ ] WORKER-006 — Keep remote accepted-source keys below host path limits
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Priority: P0
- GitHub issue: #101
- Owner: bounded remote source materialization and worker lifecycle cache custody
- Direction: Physics Workbench sample regenerated and admitted exactly twelve current Windows source memberships, but cache-only restore could not open an archived key membership beneath the request checkout. The failing native path was exactly 260 characters; archive identity, staging, exact launcher selection, and fail-closed generator suppression had already passed.
- Conclusion: The accepted-source archive is portable, but restoring its content-addressed key hierarchy below the arbitrarily long request checkout reintroduces a host path-length dependency. Restore each request into a short, attempt-scoped build root, bind that root as explicit lifecycle custody from worker transport through rebuild and accepted-source lookup, and remove it after success or failure. Preserve key and membership identities unchanged; do not special-case any observed digest, weaken archive verification, or fall back to generation.
- Regression after PR #103: Real Physics Workbench sample validation against merged parent
a1acacbb4458734950486009ac42235aaa8049c5proved archive staging and the short archive contract succeed, but still reported a 260-character request-checkout cache path and failedcli.invalid_input. The run admitted twelve Windows memberships, passed all 36 generated tests, selected no coding CLI, and leaked no short-cache directory. This is distinct from #104's Linux semantic-key absence. - Root cause after PR #107: An in-band native-path trace against merged parent
3c1e5fc7873ab9af24b4f950c3ae32bd335cc0d8located the failing write inextract_source_archive_with_manifest→_materialize_entries, before accepted-cache restore or rebuild. Filesystem source capture had included the coordinator's untrackedgenerated/accepted-source-cacheinsource.tar.gzas well as staging the separately identity-bound cache archive. Windows therefore tried to materialize the duplicate key below the long request checkout before PR #107's short custody could run. - Implementation (corrective implementation complete):
- Bind the worker rebuilder to an explicit restored
BUILD_DIRand keep launcher argv/cwd, archive identities, and key bytes platform-neutral. - Add a twelve-membership publish/archive/restore regression with spaces, a long request checkout, portable separators, and exact membership identities.
- Prove cleanup, archive tamper rejection, missing-key fail-closed behavior, and no coding-CLI fallback.
- Carry the short root as an explicit identity/custody-bound lifecycle field from worker CLI parsing through rebuild context and accepted-source lookup; never rediscover it from cwd, ambient environment, or the request checkout.
- Prove every lookup, extraction, temporary, and package path stays under the short root for a checkout exceeding 260 characters while project authority stays in the checkout.
- Add success/failure cleanup, missing/tampered fail-closed, separator/space, zero-generator, and unchanged-Linux regressions over twelve exact memberships.
- Exclude the explicitly resolved coordinator build and object roots from authored source capture, while retaining ordinary authored directories with the same spelling when cache custody is bound elsewhere.
- Bind the worker rebuilder to an explicit restored
- Evidence:
- Focused source-admission, materialization, remote-execution, and cache tests pass; the exact long-path regression now fails every write at 260 characters and proves the source archive contains no duplicate accepted-cache member.
- Complete local repository gates, including installed-wheel E2E, pass on the corrective pre-PR head.
- Windows CI passes on the final head.
- Physics Workbench sample cache-only Windows rerun restores all twelve memberships and passes all 36 generated cases without selecting a coding CLI.
[ ] SPEC-REFINEMENT-001 — Refine abstract requests into sufficient Component authority
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Priority: P1
- Owner: framework core / specification authoring and review
- Direction: A user should be able to begin with a mission-level request that mixes simple application surfaces, complex computation, deployment topology, and host-bound measurement without already knowing Literate AI's Component, specification-provider, Flavor, skill, or acceptance taxonomy. The framework must explain which decisions are still missing, propose the narrowest appropriate authority for each concern, and stop before generation whenever an independent verifier could not decide correctness from the resulting authority alone.
- Conclusion: ADR 0013 defines an intent-refinement phase before lock and plan. Refinement produces a non-authoritative design draft: a proposed Component graph, concern classifications, assumptions and defaults, blocking questions, target-bound selections, acceptance obligations, and per-Component sufficiency findings. Specification depth is selected per concern rather than assigned once to a whole project. Only explicit user review may materialize the draft as authored Component, interface, Flavor-selection, asset, and acceptance authority; structural validation, model confidence, compilation, and generated tests are not substitutes. The ADR uses a distributed CPU/GPU pi service with an HTTP API, streamed progress, host resource accounting, and web frontend as the reference decomposition and recommends it as a bounded future sample after the core refinement contract exists.
- Dependencies: Define provider-neutral refinement contracts and the acceptance- decidability policy first; add preview/explain/accept application services and CLI adapters second; add the bounded pi-service sample only after those contracts can drive its authoring flow without sample-specific logic.
- Next action: Design the versioned
IntentRefinementRequest,DesignDraft, concern, question, decision, and sufficiency-finding wire contracts plus their deterministic validation rules. Do not implement generation or the pi-service sample first. In progress 2026-08-28: contracts andlitai designlanded; ADR 0013 remains Proposed; the bounded pi-service sample is still gated. - Evidence:
- ADR 0013 records the decision, authority boundary, sufficiency rule, concern taxonomy, refinement lifecycle, proposed CLI/report shape, and pi-service reference decomposition.
- Versioned provider-neutral refinement and sufficiency contracts have strict schemas, canonical identities, bounded fields, and round-trip tests.
-
litai design refine,litai design explain, andlitai design accept(or a reviewed equivalent surface) preserve draft authority, expose every blocking question, and materialize accepted authoring atomically without invoking generation. Accept records a receipt only; it does not writecomponent.md. - Conformance fixtures prove simple requests remain one Component, mixed-depth requests select authority per concern, unanswered blocking questions prevent acceptance, and target-bound CPU/GPU choices remain outside portable behavior.
- The bounded pi-service sample generates, builds, and independently verifies its numerical, streaming, measurement, and multi-Component contracts on declared CPU and optional accelerator targets without embedding host APIs in the portable computation specification.
[~] FLAVOR-ZIG-001 — Add Zig language and Zig-backed C/C++ cross-compilation
Release target: 1.1.0
Priority: P1
Owner: Flavor catalog, toolchain resolution, builders, and specification-to-source skills
Direction: Add Zig as a first-class implementation language and use Zig's bundled Clang/LLD/libc cross toolchain as the preferred portable realization when a Component explicitly requires cross-architecture or cross-OS compilation. Preserve the semantic difference between generating Zig source and compiling existing C/C++ source through
zig ccorzig c++; never relabel C/C++ authority as Zig merely because Zig drives compilation.Conclusion: ADR 0014 defines two composable authorities:
lang-zigon the language axis andtoolchain-zig-ccon the toolchain axis. An explicit cross-compilation requirement raises Zig above native C/C++ toolchains when the required target is supported. For a greenfield Component that permits language substitution, policy may preferlang-zigover C/C++; for authored or generated C/C++ source, it retainslang-c/lang-cppand selectstoolchain-zig-cc. Native builds do not silently change, and unsupported target/libc/ABI combinations fail during planning rather than falling back to the host.Dependencies: Canonical Flavor naming from ADR 0010; target profiles that bind OS, architecture, ABI/libc, and minimum deployment compatibility; current exact toolchain discovery and build authorization.
Next action: Standard host adapter for
zigandzig-cclanded as57d165dd(isolated931b57f5). Remaining: a livezigcompile and a portfolio sample (same dormant pattern as Swift until a real binary can compile). Do not fake a compile.Evidence:
- ADR 0014 records the language/toolchain split, preference policy, target model, build and package rules, security boundary, compatibility behavior, and complete Flavor/skill acceptance requirements.
-
lang-zigandtoolchain-zig-cccatalog independently (emptyconflicts:both ways; distinct slotszigvszig-cc)._discover_toolchainnow admitszigandzig-cc: runszig version, binds launcher bytes, keepscc/c++as argv, fail-closes withhttps://ziglang.org/download/when missing.tests.unit.test_zig_toolchain15/15 with fakes. No livezigon the host; no compile was faked. - A native Zig Component and C and C++ Components cross-compiled through
zig ccandzig c++generate, build, test, inspect, and run on declared destination targets; no test executes a foreign artifact on the build host. - Selection tests prove explicit cross-compilation prefers Zig where supported, native compilation remains unchanged without that requirement, explicit user selections win, and unsupported ABI/libc/sysroot combinations fail closed.
- The Zig and Zig C/C++ skills pass the pinned SkillEvaluator gate, and installed- project plus cross-platform CI prove template/catalog parity.
[x] LOW-DBC-001 — Scope the LOW-layer Design-by-Contract skill convention
- Priority: P2
- Owner: Go, Python, and Rust specification-to-source skills
- Conclusion: The 0.5-line implementation is now forward-ported to
main: internal preconditions, postconditions, and invariants use each language's native mechanism, remain distinct from untrusted-input validation, and surface through the existing generated-test boundary rather than a new failure channel. - Evidence:
- Go, Python, and Rust catalog/template skills remain byte-identical and carry their versioned contract guidance.
- The focused skill-content regression passes; the executed examples and captured
evidence remain in
docs/history/roadmap/0.5.0-design-by-contract-examples/.
[ ] WORKER-007 — Preserve cross-platform SSH command and result contracts
Release target: 1.1.0
Priority: P0
Owner: bounded SSH lifecycle transport and remote execution result projection
Direction: Final-distribution cross-platform qualification found that Windows SSH commands are unconditionally wrapped in
bash -licbefore their PowerShell receiver, while a Linux accepted-source lifecycle completes build, tests, smoke execution, and indexing but is rejected while projecting its typed remote result.Conclusion: Select the remote shell from explicit worker OS authority without requiring a POSIX shell on Windows, and preserve every successful worker lifecycle as a valid
ExecutionDispatchResult. Keep SSH verification, deadlines, output bounds, exact source custody, and generator suppression unchanged. Typed diagnostics must name the invalid contract field rather than collapse successful work to an opaque error.Depends on: merged accepted-source transport and short-root custody through
7ea71af66c6687da1c0d6e7223c1f61d028ca5c6Root cause: SSH transport always imposed
bash -liceven though the lifecycle adapter had already selected a PowerShell receiver for Windows. On Linux, the hardware probe correctly reportedNVIDIA RTX PRO 4500 Blackwell Generation, but projection intoObservedExecutionEnvironmentreused the narrower portable-scalar validator, which rejects spaces, after the lifecycle had completed.Implementation:
- Make SSH remote-shell projection OS-aware for setup, execute, and cleanup while retaining per-worker transport-binary authority.
- Repair the post-lifecycle Linux result contract and preserve precise bounded validation diagnostics.
- Add Windows-without-Bash and GPU-observed successful-build regressions.
Evidence:
- Focused SSH transport, remote execution, contract, and worker CLI regressions pass within the clean 2,436-test Python suite (28 platform skips).
- Full cross-platform CI passes, followed by real Linux and Windows accepted-source worker qualification with no coding-provider fallback.
Production-scale defects surfaced by Physics Workbench sample (large multi-platform matrix)
These four were filed 2026-08-18/19 against real production-scale runs (a 127-Linux/ 56-macOS/127-Windows Component matrix). Recorded here on reconciliation; none received implementation in this pass -- each needs a large real matrix/worker fleet or a live multi-worker SSH session to reproduce and verify against, which this session does not have. Flagging that constraint explicitly rather than attempting a blind fix to a fail-closed correctness boundary (source-cache continuation identity, SSH protocol bounds, Bazel packaging-edge bindings) without the ability to verify it actually closes the reported failure.
[x] CACHE-CONTINUATION-001 — Published exact source membership absent during accepted-source continuation
- Priority: P0
- GitHub issue: #139
- Owner: accepted-source cache continuation /
litai build --from-accepted-source - Direction: An exact verifier-admitted, published filesystem-v2 cache membership
(copied byte-for-byte into an isolated project's
generated/accepted-source-cache, same key, same distribution/revision) is not discovered by continuation:source_cache.runtime_absenton all 13/13 canonical macOS cells despite 56/56 fresh admissions and clean spec/lock preflight. The reporter asks specifically: trace the exact lookup identity derived during generation/admission versus accepted-source continuation and report which bound field differs. - Conclusion: The differing bound field is
execution_plan_identity. Admission compiled the generation-plan endpoint ascli://…/tool?identity=<live executable digest>&binding=<tool binding>. Continuation usesAcceptedSourceCodingCliSelection, whoseexecutable_identityis the recovered tool-binding URI, not that digest. Lookup keys still includeexecution_plan_identity, soresolver.resolve()missed copied filesystem-v2 membership. The portablecoding_cli_tool_binding_identityalready closes over the executable digest, so the plan endpoint now binds only?binding=…. Sessionrequest_identitystays out of lookup. Landed as3f139c7aonfeat/cli-sdlc-debug(isolated12cdcff1). - Evidence:
- Two-project admit-then-copy fixture in
tests/unit/test_source_cache_continuation.pypublishes in project A, copiesgenerated/accepted-source-cacheinto project B, and continuation lookup/restore finds the membership. - Differing bound field named:
execution_plan_identity. -
LITAI_SESSION_ID=dev make source-admission-check— 68 passed, plustest_generation_planningandCodingCliSelectionTests.
- Two-project admit-then-copy fixture in
[x] SSH-EVIDENCE-001 — Remote evidence manifests exceed the SSH result limit
- Priority: P0
- GitHub issue: #138
- Owner: remote worker execution result protocol (
litai worker execute, PR #132/#136's remote-evidence protocol) - Direction:
litai worker execute's JSON result exceeds the coordinator's fixed one-MiB SSH stdout limit on real Linux/Windows Standard lifecycles (0/27 on each platform in the reporter's matrix), even though this is the non-verbose receiver result, not coordinator tracing. - Conclusion: Implemented the issue's own required contract: a new
RemoteExecutionControlResultwire contract carries only bound identities, observed facts, status, canonical manifest/bundle digests and declared sizes, the fixedstaged:remote-evidence.tar.gztransfer handle, and one bounded redacted summary (capped well under the fixed one-MiB SSH stdout bound).litai worker executereturns this compact envelope instead of the fullExecutionDispatchResultwhenever--evidence-outputis set; the SSH handler rejects any stdout above the fixed limit before parsing, downloads the bundle through the existing scp transfer, andload_and_import_remote_evidence_bundleindependently verifies the declared bundle size/digest and the canonical manifest's exact size/digest before importing every listed file and binding the imported manifest back to the control result (RemoteExecutionControlResult.bind_imported_manifest). The stdout bound itself was not raised. - Evidence:
-
tests/critical/test_remote_execution.py::test_large_27_cell_manifest_uses_bounded_out_of_band_controlbuilds a synthetic 27-cell-scale manifest whose canonical bytes exceed 1 MiB, asserts the derived control result stays under 1 MiB and never embeds the large per-cell content, then provesload_and_import_remote_evidence_bundleimports the full bundle and rejects tampered declared manifest/bundle sizes.test_ssh_execution.py::test_handler_rejects_oversized_malformed_worker_controlproves the SSH handler fails closed on an over-limit control response before ever parsing it. Existing acknowledgement-gated cleanup and retry/idempotence tests continue to pass against the new control-result shape.
-
[x] MATRIX-CHECKPOINT-001 — make samples and generated-project test execution have no finer-than-gate checkpoint/resume
- Priority: P2
- GitHub issue: #124
- Owner:
scripts/run_checkpointed_gates.py(coarse, gate-level resume); generated-project Standard lifecycle TEST phase (no resume mechanism at all) - Direction:
make samplesis one atomic checkpointed unit spanning Python/JS/ Rust/C++/CUDA; a Rust failure partway through forces re-verifying every already-passed language on resume. Separately, generated downstream projects' own test execution has no per-test resume analogous toscripts/run_checkpointed_unittests.py(which is Python-unittest-specific and only wired to this repo's own suite). - Conclusion: Two candidate directions from the issue: (a) treat each sample/
language inside
make samplesas its own resumable unit; (b) generalize content-fingerprinted per-test resume past Pythonunittestfor generated projects' native test runners. Direction (a) is done — delivered as a side effect ofSAMPLES-RESILIENCE-001's per-sample checkpoint (842f9404). Direction (b) is not a bounded defect and is declined as product scope for this item. Generated projects run the Standard TEST phase through each language Flavor's command profile (pytest,cargo test,ctest,go test,swift test, …). Content-fingerprinted per-test resume needs a runner-specific case parser, a stable case identity, and a fail-closed skip policy so a test that never passed cannot be omitted. That is the same research as CI-SHARD language sharding, not a portable extension ofrun_checkpointed_unittests.py. A fake generic skip would be dishonest. This repository's Pythonunittestcheckpointer stays local to the framework suite. Comment on #124 with this bound. - Evidence:
- A failure in one sample inside
make samplesno longer forces re-verifying already-passed samples on resume:run_allcheckpoints each sample's complete case toOBJ_DIR/samples-checkpoint.json, keyed by sample tree digest, flavor selectors, packaging scope, platform, and lifecycle-driver implementation digest, and self-clears after a complete pass so a successful run never lets the next run skip everything. Measured: a resumedhello-componentreportedskipped (checkpointed pass)in 1.8s versus ~90s, with an identical report. - Per-test resume for generated native runners is recorded as out of scope for this item: it is a per-Flavor test-harness research program, not a bounded defect on the sample checkpoint.
- A failure in one sample inside
[x] PACKAGE-EDGE-001 — Packaging-only provider edges retain package authority without a runtime process binding
- Priority: P1
- GitHub issue: #110
- Owner:
LocalStandardLifecyclePorts._provider_environment_values(),project_standard_toolchain_closure - Direction: A Component with an exact
dependency_kind: packagingedge (provider built and exported successfully) fails Bazel build before compilation with "provider artifact ... has no runtime binding" --_provider_environment_values()walks every provider artifact regardless of edge kind, but onlyartifact-export(build/runtime) edges are supposed to need a process-environment binding; a packaging-only edge should carry package result/plan provenance into package assembly/acceptance without one. Already triaged (2026-08-16) as "a real, scoped Bazel-packaging-edge defect," deferred from 0.4.1 to a follow-up release. - Conclusion (corrected again 2026-09-01): The earlier fix separated
build_providers, which stopped the erroneous process binding, but it also dropped packaging-only providers from the build intent, manifest, exported artifact closure, package link plan, and acceptance authority. The absence of the original exception was therefore a false completion. The 0.9 implementation carries an independent, typedpackage_artifact_identities/package_dependency_artifactschannel through intent, plan, manifest, graph, and wire schemas. Build adapters receive only build/runtime dependencies; exports and package closure bind their exact union. - Next action: Complete; retain the packaging-only graph regression in the 0.9 release gate.
- Evidence:
-
_provider_environment_values()only requires a runtime binding forartifact-exportedges; a packaging-only edge never becomes a process input. - A packaging-only provider remains explicit in build intent/plan authority,
BuildActionRequest.package_dependency_artifacts, the realized export dependency closure, artifact graph, package link plan, and serialized schema. - Focused local, Bazel, Cargo, graph, wire, and CLI regressions pass (213 tests, 3 expected skips) on 2026-09-01.
-
Release engineering practice
[x] RELEASE-EVIDENCE-001 — Close release evidence over every sub-workflow, stage, and host dialog
- Priority: P0
- Release target: 0.7.0
- Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner:
litai release check,make release,scripts/run_checkpointed_gates.py,tests/conformance/support/sample_runner.py,src/literate_ai/adapters/project_lifecycle_driver.py - Direction: The attempted
0.5.2release failed with no usable evidence. Afterwards only unrelated leftovers were recoverable — pip traceback bytecode andlitai-driver-failure-*.logfiles from ~1:51pm (RebuildSourceCacheDerivationManifest.lifecycle_plan_identity) — while the actual ~3:12pm host-E2E samples crash and its sample scratch were gone. This is the current design, not bad luck:_release_gate_failure_detailkeeps one collapsed 2000-byte tail, a passing legacy-local gate recordsstdout_digest/stderr_digestfor bytes nobody kept,run_gatesrecords only gate names,sample_runner.mainruns the whole matrix inside aTemporaryDirectoryremoved even on failure,_retain_driver_diagnosticwrites complete driver output to an anonymous OS-tempmkstempfile, the installed-CLI and wheel gatesrmtree(ignore_errors=True)unconditionally, Standard lifecyclefailure_diagnosticslive in an in-memory dict, and--target local/githubrecord a worker id or a run URL rather than the host dialog.make releasemust instead capture pins and pointers for every step, hierarchically, withreleaseas the outermost node, so a failed release is root-caused from one compact record rather than by trolling logs. - Plan:
docs/history/roadmap/0.7.0-release-evidence-closure.md— an append-only per-run evidence ledger under_build/evidence/<run>/inherited throughLITAI_EVIDENCE_RUN/LITAI_EVIDENCE_PARENT, one node per stage carrying its exact pins and its output pointers (transcript, manifest, receipt, scratch, artifact, diagnostic) with digest, size, and retention state; delete-on-success-only retention so failures keep their scratch and transcripts; host/target dialogs as first-class nodes preserving the bounded SSH control envelope and digest-bound custody rules fromskills/agent/bind-lifecycle-evidence/SKILL.md; andlitai release evidence explainas the bounded root-to-failure triage surface. - Current action: Complete through stage 5: the release spine, host-dialog
retention, blind-step harness, and post-exit acceptance coverage are implemented.
legacy-localis the complete single-host path; absent SSH/GitHub fan-out is recorded explicitly as unavailable. - Evidence:
-
litai release evidence explainnames the failing stage, its pins, and its retained output pointers for an injected host-E2E sample failure undermake release, with every referenced path still present after the run exits. - No release-path failure deletes its scratch, transcripts, or diagnostics.
-
prepared-release@2carries the evidence run, with@1still accepted for read. - Remote nodes keep the ≤1 MiB control envelope and gate worker cleanup on acknowledged import; no transcript contains a credential value or a raw private endpoint.
- A run killed mid-gate still yields a valid ledger whose deepest node is
runningorunavailable.
-
- Stage evidence: Foundation landed in
dca9144aandaa5a3357; the release spine landed inc61abd4b; host-dialog retention and fan-out landed in4c34708bande26c0b65; the blind-step harness landed inf62e04ac; and post-exit acceptance plus default scratch lifetime landed in1bd3c235andb310fc74.
[x] RELEASE-EVIDENCE-002 — Replace blind shell and Make steps with instrumented Python harnesses
- Priority: P1
- Release target: 0.7.0
- Owner:
Makefilegate recipes,scripts/find-compatible-python.sh/.cmd,scripts/litai-launcher/.cmd,.github/workflows/ci.yml - Direction: A step that runs outside a Python harness cannot record pins or retain
output, so the remaining shell and Make surfaces are exactly where RELEASE-EVIDENCE-001's
coverage would stop.
find-compatible-python.shruns at Makefile parse time under$(shell …), so a failed interpreter resolution yields an emptyPYTHONand a confusing downstream error even though the chosen interpreter is a release pin;litai-launcheris a blind exec; each gate recipe's only artifact is its exit status; and CI'srun:steps leave nothing behind thatexplaincan read. - Plan: the blind-steps section of
docs/history/roadmap/0.7.0-release-evidence-closure.md— recipes stay readable one-liners delegating to an instrumented Python harness, the POSIX/Windows resolver pair collapses to one Python resolver with a minimal bootstrap shim, and CI uploads the evidence run as an artifact so a CI-side release failure is triaged with the identical command.docs/presentations/**/regenerate*.shand.claude/hooks/*.share out of scope; they are not in the release path. - Evidence:
- Every
RELEASE_GATESmember appears as a ledger node with pins, including the resolved interpreter. - A CI release failure is triageable from the uploaded evidence run with
litai release evidence explain.
- Every
[x] RELEASE-EVIDENCE-003 — Register owned runtime custody before execution starts
- Priority: P0
- Release target: 0.7.0
- Owner: evidence ledger directory custody and installed/sample smoke runners
- Direction: An owned sample runtime root was retained after a pre-discovery failure, but no ledger pointer named it because registration occurred only inside later per-sample phase handling. The same creation-then-late-registration shape is present in installed project, wheel, roundtrip, and installed-E2E workspaces.
- Conclusion: Register each owned temporary root immediately after creation. Keep
the pointer on the same evidence node, mark it
prunedonly after successful cleanup, and retain both the directory and itsretainedpointer for every failure, including failures before sample discovery. - Implementation:
- Add append-only output-retention transition support to the evidence ledger.
- Apply creation-time registration to sample, installed-project, wheel, roundtrip, and installed-E2E custody roots.
- Add pre-discovery failure and successful-cleanup regressions.
- Evidence:
- Evidence-ledger, stage-3 retention, and stage-5 acceptance suites pass.
- Standard lint, formatting, OpenSpec, documentation, layout, driver-review,
documentation-review, and
git diff --checkgates pass. - A pre-discovery failure leaves a ledger pointer and an on-disk root; a
passing run removes the root while retaining its historical
prunedpointer.
[x] WINDOWS-PATH-001 — Keep created files and directories within Windows MAX_PATH
- Priority: P0
- Release target: 0.6.0
- Owner: root onboarding
SKILL.mdand the initialized-project template copy - Direction: Agents must use Windows-friendly file and directory names for every
path they create. Windows
MAX_PATHis 260 characters for the full absolute path. Long-path application manifests and registry policy exist, but a target machine must not be assumed to have either. Prefer short names and shallow trees so a drive letter, user profile, CI workspace, and nested generated/object prefixes still fit. - Conclusion: Put the rule at the top of the provider-neutral onboarding skill,
before the numbered project flow, and keep the same text in the init template so
descendants inherit it. This is naming discipline for newly created paths; it does
not replace
WORKER-006's short-root custody for restored archives. - Next action: Complete. Keep new agent-created paths conservative against the 260 character bound.
- Evidence:
- Root
SKILL.mdandsrc/literate_ai/project_template/SKILL.mdboth require conservative Windows-portable names and citeMAX_PATH260. -
tests.critical.test_prompt_master_agent_skillpasses (4 tests); lifecycle-driver TCB re-pinned after the template copy; documentation-authority review recorded on the same revision.
- Root
[x] CODEGRAPH-RESILIENCE-001 — Bound CodeGraph execution and reuse exact index custody
- Priority: P0
- Release target: 0.6.0
- Owner: generated-source intelligence adapters and immutable index custody
- Direction: Reduce CodeGraph's release fragility without weakening the exact graph evidence required by project validation and generated-source admission.
- Conclusion: Implement accepted ADR 0015: retain mandatory consumed graph evidence, preserve bounded actionable provider diagnostics, and reuse verified generated-tree index custody only across exact content/provider keys.
- Depends on: existing source-tree identities, immutable CodeGraph artifact custody, and the current required source-intelligence policy.
- Next action: Complete. ADR 0016 / CODEGRAPH-DEPENDENCY-001 removed the indexer; remaining Windows CodeGraph snapshot-replication evidence is no longer a 0.6.0 publication contract.
- Implementation:
- Failed CodeGraph operations report a bounded beginning/end diagnostic and named operation without exposing ambient environment or unbounded output.
- Exact generated-tree/provider/runtime/extraction/capability keys reuse verified immutable index custody across different disposable workspace paths.
- Source, provider, runtime, extraction, capability, artifact, or envelope drift invalidates reuse and fails closed or rebuilds as declared by ADR 0015.
- Duplicate generated-tree indexing with no additional consumed graph fact is removed; project-level required indexing remains unchanged.
- Evidence:
- Focused unit tests cover reuse, invalidation, tamper rejection,
bounded diagnostics, and credential-safe output; a clean checkpoint-reset
make python-checkpasses 2,626 tests with 27 platform skips. - Remaining Windows two-pass snapshot-replication CodeGraph evidence is
superseded by complete product removal (
ac23f3cf, CODEGRAPH-DEPENDENCY-001). - Remaining CodeGraph-matrix publication evidence is superseded by the same removal; 0.6.0 matrix green is owned by RELEASE-006 after the merge-leftover CI repair.
- Focused unit tests cover reuse, invalidation, tamper rejection,
bounded diagnostics, and credential-safe output; a clean checkpoint-reset
[x] CODEGRAPH-DEPENDENCY-001 — Remove the source-graph indexer from the product
- Priority: P0
- Release target: 0.6.0
- Owner: source-intelligence policy, host preflight, worker/MAC contracts, and release engineering
- GitHub issue: none — directing-maintainer request 2026-08-24
- Direction: Delete the host source-graph indexer from the product in every form: no adapter, optional CLI, worker capability, bootstrap, documentation, or tests.
- Conclusion: See accepted
ADR 0016. The
directing maintainer narrowed the ADR from "stop requiring the indexer" to
complete removal. Project policy is
provider_id: noneonly. Model-backed source-to-specification that required graph evidence is unavailable; the static translator remains. - Depends on: accepted ADR 0016
- Implementation:
- Default
litai initand this repository'sliterate.project.jsontoprovider_id: nonewith every source-intelligence stageoff. -
validate,build,run,rebuild, admission, snapshot-replication, and release complete without a source-graph binary or sidecar. - Delete remaining adapter, CLI, worker-capability, and bootstrap paths
(
86a5f815, landed onmainasac23f3cf). - Rewrite tests to provider none / mode off / DisabledGenerationIndexer.
- Strip user-facing and agent-facing mentions from docs, skills, templates, CI, and scripts.
- Repair the
scripts/wheel_smoke.pyleftover that still passed companion-capability kwargs intobootstrap_worker_wheelhouse(8d84dbda).
- Default
- Evidence:
- ADR 0016 is Accepted as complete removal (directing maintainer, 2026-08-24).
- Product source, tests, workflows, skills, and current docs do not name the removed indexer except frozen published v1 schema URNs, historical decision records, and reserved leftover-path skips.
- GitHub run
32890626746on post-purgemain8d84dbdawas green, including Windows lint/OpenSpec/wheel.v0.6.0published from that revision.
[x] RELEASE-006 — Qualify and publish 0.6.0
- Priority: P0
- Owner: release engineering / framework maintainers
- Direction: Close the final 0.6.0 cross-platform regressions, reconcile the carried-forward 0.5-line fixes and the DMN/SCXML scope, regenerate exact release evidence, and execute the policy-owned plan/prepare/check/publish sequence.
- Current state: Published. Annotated tag
v0.6.0selects8d84dbdaonmain. GitHub Release: https://github.com/NVIDIA-dev/literate-ai/releases/tag/v0.6.0 Prepared-release identitysha256:d748906b3556ff1ae60ac3c0621133f0742c972da90166feefa7d8597b64d14d. Publication receiptsha256:49b13b3cd1de981029a14cdec2db42c1bc5038f3e3b2e6236523959d3f5b6d17. Do not republish from the earlier prepared commitf9c8e36f. - Next action: none — this item is closed.
- CI repair update 11: GitHub run
32878551196on PR #168 cleared the prior Windows unit-test shards. The remaining Windows failure is installed wheel smoke:bootstrap_worker_wheelhouse()no longer acceptscapability_root/ companion-capability arguments after indexer removal. Repairscripts/wheel_smoke.pyon this branch before treating Windows CI as green. - CI repair update 10: Local
make python-checkafter update 9 found more merge leftovers: none-provider status omitted a nullreason_code; rebuild CLI still expected a ready source-intelligence artifact; quarantine cache required an artifact path even forprovider_id: none; and a fixture provider wrote its graph file as extra source instead of reserved derived metadata. Repair those onfix/0.6.0-codegraph-merge-cibefore requiring a GitHub matrix. - CI repair update 9: Run
32862637460onac23f3cffailed Ubuntu/macOS Python 3.11 and 3.14 plus Windows lint and test shards. Shared causes are merge leftovers, not a missing indexer: the coding-CLI inverse unit test omitted required_derive_standaloneattestation_path/trust_key_pathkwargs; the live Standard service stack still constructed_DisabledGenerationIndexer; ruff reported E501/F401/I001 on the purge edit. Repair those before re-planning 0.6.0. - CI repair update: Run
32696521897confirmed three bounded defects. The documentation review marker had been recorded before the final RELEASE-006 wording, so every canonical-project validation correctly rejected it as stale. Windows translated two XML fixture writes to CRLF before tests compared the provider's exact bytes with LF constants. A Job Object fallback test also asserted the non-Windows outcome while running on Windows, where the primitive is expected to exist. Record the final marker after these corrections and require a fresh complete matrix. - CI repair update 2: Run
32699238675cleared all prior failures and passed every job except Windows shard 1. Its two failures are the same real CodeGraph 1.1.1 initialization error in snapshot-replication's deeply nested generated tree. Keep real indexing mandatory; shorten only the test-owned disposable root on Windows, matching the framework's existing short-root custody practice, and rerun the matrix. - CI repair update 3: Run
32703056177passed 14 of 15 jobs. Windows shard 1 proved the drive-root scratch fix works for the outer replay, but the isolated second replay still inherited verbosegeneration-one/generation-twocustody segments and failed the same real CodeGraph initialization. Shorten those four disposable harness labels only; stable evidence already binds workspace references and content identities rather than host paths. - CI repair update 4: The shortened path still failed inside CodeGraph
init, confirming that path length was not an adequate diagnosis. Implement ADR 0015's bounded stderr now so the provider's actual Windows failure is visible; retain the short disposable labels as harmless defense in depth. - CI repair update 5: Run
32747539745failedubuntu-latest/macos-latestPython 3.11 and 3.14 plus Windows shards 1 and 2. Shared root cause on every OS:96682f84changedsrc/literate_ai(CodeGraph runner, index custody, local lifecycle) withoutmake driver-review-record, sotest_self_hosting_project_protocols_and_derived_identities_agreereportsdriver_identity_matches: false. Windows-only: the diagnostic fixture wrote'native diagnostic\\n'through text-mode stderr, which became'native diagnostic\\r\\n'on a binary pipe; andtest_slow_pipe_close_within_five_seconds_is_not_a_false_failureused the disposable directory ascwd, so the grandchild's lingering directory handle raisedWinError 32duringTemporaryDirectorycleanup. - CI repair update 6: Run
32782219088on461d15e3restored Rust DbC and the sample-test-runner identity. Do not rerun that workflow: the remaining failures are real. Windows CodeGraphinitis overflow-killed because the sanitized runner dropsCI, so Clack writes spinner frames into a pipe. Persistent-service acceptance must merge host process essentials after a packaged environment, because an empty child environment is not a viable Windows/python.exeor macOS Framework Python process. - CI repair update 7: Run
32788786133on #158 cleared Windows shard 1. Persistent-service now starts on Windows butprocess.terminate()kills the child without running its SIGTERM handler, so the shutdown marker is missing. macOS still times out on readiness. Do not inventLC_ALL=C.UTF-8on Darwin, and sendCTRL_BREAK_EVENTfor graceful Windows stop. - CI repair update 8: Run
32799630873on prepared commitf9c8e36ffailed the Linux and macOS Python jobs plus the Windows lint job before release qualification. Every failure is the same formatting defect atstandard_project.py:1914: the restored-cache callback lookup is 95 columns against Ruff's 88-column limit. This is a scoped source-format repair, not a platform or release-policy defect; restart preparation after it lands so release evidence binds the repaired revision. - Recovery update: Re-planning from repaired commit
86594bccsucceeded, butrelease prepareinserted a second## 0.6.0heading because current-version planning had no matching preparation/check recovery semantics. Preserve exactly one existing heading for an already-prepared untagged version, and permit a zero-diff prepared revision only for that exact explicit-current recovery case. Keep all dirty tree, version drift, tag collision, and undeclared-change failures closed. - Recovery update 2: GitHub run
32800254897proved that the first recovery still rewrote three semantically unchanged authority files. Those atomic replacements can perturb Windows checkout representation and makerelease checkreject the prepared commit as dirty. Preparation now filters unchanged rendered content before the write transaction; its regression requires zero authority writes, and all 49 release tests pass locally. A verbose preserved run isolated the separate liveinstalled-project-e2efailure described next. - Recovery update 3: Verbose live reproduction showed Codex failing all three
attempts because its access token could not be refreshed after the refresh token was
reused. The classifier treated that explicit denial as an opaque failure because
codex login statusstill returned success. Recognize the observed refresh-token phrase directly so it does not retry Codex. The first fix then exposed that cross-provider fallback after model-scope resolution violates the plan's provider binding; keep fallback for unbound legacy recipes, but fail the resolved provider directly and select a healthy provider before planning release qualification. - Recovery update 4: The uninterrupted 1,562-test suite and every gate through
install-checkpassed on6ff469e8. Live generation with Cursor Agent produced the complete expectedsource/tree plus its own root.vibe/conversationsdirectory, which source confinement correctly rejected as unexpected application output. After validating the complete workspace for symlinks, remove only Cursor Agent's exact root.vibetransient tree, as is already done for unambiguous Python bytecode caches; continue rejecting every other path outsidesource/. - Recovery update 5: Resumed qualification passed the installed-project gate
and reached live samples. The sample catalog declared
containerized-log-tallywithout a matching verifier handler, so discovery could never execute it; require every discovered scenario to resolve through the handler registry and verify the tally contract with the independent runtime oracle. The complete Python run also reached a direct_collecttest skipped by earlier repair checkpoints and exposed that Cursor-specific cleanup dereferenced an absentselection; unbound collectors now trust no provider-owned root and retain fail-closed confinement. Fresh isolated runs of both the scheduler and containerized tally samples pass. - Recovery update 6: The regenerative sample's generated
rules_ccsource-SBOM node followed the exact Bzlmod contract in the prompt, includingliterate-ai:bzlmod-requested-version, but the authority reconciler allowed only generic dependency kind and scope properties on third-party nodes. Admit this requested-version observation so the downstream Bzlmod lifecycle can validate its exact shape and value; continue rejecting reserved refs, managed properties, reserved kinds, authority reparenting, and unsafe graph edges. A regression now preserves the exact unresolvedrules_cccomponent through reconciliation. - Recovery update 7: After the SBOM repair passed the uninterrupted Python
suite, live regeneration reached provider selection and observed Claude's exact
You've hit your individual spend limitdenial. The quota classifier previously knew only Codex's observed spend-cap wording, so Claude consumed a futile retry and stopped before Cursor Agent fallback. Classify this verbatim denial as quota exhaustion; authentication and resolved-model-scope boundaries remain unchanged. - Evidence:
- The focused 52-test bounded-process, CodeGraph, SSH, and conversion set passes.
- Strict Ruff lint and formatting checks pass.
- The pushed revision passes every GitHub Actions job: run
32890626746onmain8d84dbda. - All 0.5-line fixes identified by the corrected whole-file audit are present on the integration branch; focused regressions and a clean 2,622-test Python run pass. Final remote-main identity follows merge.
- Local distribution qualification passes on the reconciled branch:
wheel-checkbuilds and inspects the 0.6.0 wheel,install-checkproves isolated bootstrap and canonical project planning,installed-e2eproves the installed command worker path and records its sentinel, CodeGraph sync/check reports 670 files, 20,470 nodes, and 78,337 edges, lifecycle-driver review is current, and documentation renders 119 Mermaid diagrams from 430 Markdown files. - 0.6.0 scope is closed, release evidence is current, and publication is verified: https://github.com/NVIDIA-dev/literate-ai/releases/tag/v0.6.0
[x] RELEASE-007 — Publish 0.6.1 from the post-0.6.0 follow-up
- Priority: P0
- Owner: release engineering / framework maintainers
- Direction: Cut
0.6.1frommainso the post-v0.6.0publication-record commit (cf37f32c) is a released revision, not an untagged follow-up. - Conclusion: Stay on
main(its tip is exactly that follow-up plus the patch prepare). Do not include open PR #166. Do not cutrelease/0.6.xfor this patch. - Current state: Published. Annotated tag
v0.6.1selectscd2c9229onmain. GitHub Release: https://github.com/NVIDIA-dev/literate-ai/releases/tag/v0.6.1 Prepared-release identitysha256:e57f5e4f0f7bb200d55e3e1af0b911ea87f7e29217458620e93a77a0e035e30b. - Next action: none — this item is closed.
- Evidence:
- Prepared commit
cd2c9229changes only declared version, changelog, schema, documentation-authority, and driver-pin paths. - GitHub run
32897494275on that SHA was green. -
v0.6.1tag and GitHub Release are verified.
- Prepared commit
[x] RELEASE-008 — Publish 0.6.2 from the post-0.6.1 follow-up
- Priority: P0
- Owner: release engineering / framework maintainers
- Direction: Cut
0.6.2frommainso the post-v0.6.1queue close-out (df382b70) is a released revision. - Conclusion: Stay on
main. Do not include open PR #166. - Current state: Published. Annotated tag
v0.6.2selects51cd5542onmain. GitHub Release: https://github.com/NVIDIA-dev/literate-ai/releases/tag/v0.6.2 Prepared-release identitysha256:87d7ad4422f251cd49dd2c2a44cd78067fc318216851bce78148cfcfea16dd8e. - Next action: none — this item is closed.
- Evidence:
- Prepared commit
51cd5542changes only declared release-authority paths. - GitHub run
32901786262on that SHA was green. -
v0.6.2tag and GitHub Release are verified.
- Prepared commit
[~] RELEASE-009 — Qualify and publish 0.7.0 with full gate fan-out
Release target: 1.1.0
Priority: P0
Owner: release engineering / framework maintainers
Pull request: #170 merged to
mainasc132eea0;v0.7.0tagged frommainasafe52d09.Direction: Cut
0.7.0frommainonce live qualification evidence closes, with full release-gate coverage: GitHub matrix plus--target localSSH worker fan-out.Conclusion: GitHub publication of
v0.7.0completed on 2026-08-27 from prepared commitafe52d09(changelog-only current-version recovery). The cut followed the skill's "default branch when its tip is the release" path and skipped the branching-model requirement to openrelease/0.7.xfrom that tip at prepare. RELEASE-BRANCHING-002 now haspreparecut that line; this 0.7.0 tag is not moved. The public-API test suite rewrite is RELEASE-010.Depends on: GENERATION-011 (ADR 0017; Accepted) and GENERATION-010 (ADR 0018; Accepted).
Next action: Remaining evidence is
--target localfan-out, now on the RELEASE-012 0.8.0 queue. Do not retagv0.7.0.Evidence:
- Prepared commit
afe52d09is explicit current-version recovery (changelog heading only). -
origin/release/0.7.xisafe52d09(v0.7.0). -
--target localfan-out runsmake release-checkon every eligible POSIX SSH worker. - GitHub Actions run
33052940301onafe52d09was green. -
v0.7.0tag and GitHub Release are verified: https://github.com/NVIDIA-dev/literate-ai/releases/tag/v0.7.0
- Prepared commit
[x] RELEASE-010 — Publish 0.7.1 with the public-API test suite rewrite
- Priority: P0
- Owner: release engineering / framework maintainers /
docs/presentations/literate-ai-manager-overview/ - Direction: Cut
0.7.1onrelease/0.7.xso TEST-PUBLIC-001 and RELEASE-BRANCHING-002 ship.v0.7.0is already published atafe52d09; the release protocol forbids retagging. After that cut, regenerate the manager/engineering overview for 0.7.1 because 0.7.0 (a minor) skipped it. Going forward, full overview regeneration belongs on every major or minor (0.8.0,0.9.0,1.0.0,1.1.0, …). Patch cuts do not regenerate; they keep README citations on the last major/minor edition of those documents. - Conclusion: The Git publication of
v0.7.1already landed onrelease/0.7.x(387da394,--target github). Do not retag it. Encode the overview cadence in the release protocol andrelease-projectskill, then catch up the document pair for the 0.7.1 edition: revalidatesource-notes.md, rebuild the PPTX, realize the narrative locally without the Codexdocumentsplugin, publish Slides in place, create the Google Doc, and cite that edition from root and packageREADME.md.--target localworker fan-out remains on RELEASE-009. - Depends on: TEST-PUBLIC-001,
RELEASE-BRANCHING-002,
and
origin/release/0.7.xatv0.7.1. - Implementation:
- Commit the suite rewrite, branching-002, and this queue item on
main. - Cherry-pick that commit onto
release/0.7.x. - POSIX host-bootstrap search path must use
HOMEfrom the discovered environment, notPath.home(), so the rewritten tests can run on Windows CI. - Component-lock review tests must bind
BUILD_DIR/OBJ_DIRto the temp project so they do not adopt the xdist worker's unmarkedOBJ_DIRon Windows. - On
release/0.7.xonly:litai release plan --bump patch, prepare, commit declared paths only. Re-pin the lifecycle-driver TCB in that same prepared tree becausesrc/literate_ai/version.pyis in the TCB. -
litai release check PLAN --target github, then publish with--authorize-external-write. - Encode: major/minor cuts regenerate the terminal document pair; patch cuts keep README pointers on the last major/minor edition.
- Catch up the 0.7.1 overview: revalidate the factual ledger, rebuild the
PPTX, realize the narrative
.docx, publish Slides in place, create the Google Doc, cite the 0.7.1 edition from both README files. Do not retagv0.7.1.
- Commit the suite rewrite, branching-002, and this queue item on
- Evidence:
- Prepared commit
387da394changes only declared release-authority paths. - GitHub Actions run
33111319027on387da394was green. -
v0.7.1tag and GitHub Release are verified: https://github.com/NVIDIA-dev/literate-ai/releases/tag/v0.7.1 - Catalog and template
release-projectskills remain byte-identical and name the major/minor vs patch overview cadence. -
scripts/verify_document_pair.pyaccepts the rebuilt pair; QA ledger records visual inspection of the contact sheet and changed slides. - Published Slides resource
1V9mt1JpEst_2ucC0eJIIw7dff64MrtFRfut8MSiukeEis updated in place and read back (Drive version 118; 26 slides / 26 notes on export-back via the authenticated presentation export URL). - A Google Doc URL for the narrative member is recorded as the 0.7.1
edition in root and package
README.md: https://docs.google.com/document/d/1fMxy0NTT54MV4T9AwmA8F0VahNet93Xhp0d0pszI6GA/edit
- Prepared commit
[x] RELEASE-011 — Publish 0.7.2 then advance main to 0.8.0 Unreleased
- Priority: P0
- Owner: release engineering / framework maintainers
- Direction: Cut patch
0.7.2on the existingrelease/0.7.xline so FLAVOR-008 ships. Do not regenerate the manager overview (patch cadence; keep the 0.7.1 edition citations). After Git/GitHub publication, advancemainto0.8.0Unreleased withlitai release advance-default-branch --bump minor. Do not retagv0.7.0orv0.7.1. - Conclusion: Plan from
release/0.7.x, notmain(release/0.7.xalready exists). Backport only product commits that are not already on the line:95fb895c(0.7.1 overview catch-up and regen cadence, so the 0.7.2 tree cites that edition) andce4613d8(FLAVOR-008). Do not backport786293afor18b98dd2(those advancedmainto 0.7.2 Unreleased after 0.7.1). Thenplan --bump patch, prepare, commit declared paths plus TCB/docs restamp,check --target github, publish.--target localfan-out remains on RELEASE-009. Publish's automatic default-branch patch step movedmainto0.7.3; the explicit--bump minorthen replaced that with0.8.0Unreleased. Stranded 0.8.0 product scope is RELEASE-012, not empty. - Depends on: FLAVOR-008
on
main;origin/release/0.7.xatv0.7.1. - Implementation:
- Cherry-pick
95fb895cthence4613d8ontorelease/0.7.x(manual afterlitai release backportaborted on conflicts). Do not backport786293afor18b98dd2. - On
release/0.7.xonly:litai release plan --bump patch, prepare, commit declared paths only. Re-pin the lifecycle-driver TCB becausesrc/literate_ai/version.pyis in the TCB. -
litai release check PLAN --target github, then publish with--authorize-external-write. - On
main:litai release advance-default-branch --branch main --bump minor, review, commit, push. Do not mergerelease/0.7.xintomain.
- Cherry-pick
- Evidence:
- Prepared commit
be642f4aonrelease/0.7.xchanges only declared release-authority paths (plus required TCB/docs restamp). - GitHub Actions run
33130230761onbe642f4awas green. -
v0.7.2tag selectsbe642f4a. GitHub Release: https://github.com/NVIDIA-dev/literate-ai/releases/tag/v0.7.2 -
mainis0.8.0Unreleased; README citations still name the 0.7.1 overview edition until the 0.8.0 regen.
- Prepared commit
[ ] RELEASE-012 — 0.8.0 Unreleased product and protocol scope
Release target: 1.1.0
Priority: P0
Owner: release engineering / framework maintainers
Direction:
0.8.0is the next numbered minor, but no major has shipped; all prior work lived on minors and patches. Break-glass (2026-08-28, not durable SemVer advice): scope every remaining open queue item onmaininto this cut as if it were the first major, including breaking changes. The 0.8.0 overview edition is already published. Do not mergerelease/0.7.xintomain. Do not rewriterelease-projector the project-release protocol to say minors may break.Conclusion: SemVer still spells this
0.8.0. The scope of the cut is major-equivalent for this once: every open[ ]/[~]item on this file except RELEASE-013 (0.7.3 patch onrelease/0.7.x) and artifacts already marked obsolete. Breaking changes that were waiting for a major (Flavor directory rename and ADR 0010 dotted-alias close, npm-capable JavaScript, Component-kind subclasses, convert baseline copy, CI shard/impact skills, spec-merge, lint-and-render acceptance, and the rest of the open queue) land here. Do not land TEST-CACHE-001 WIPc0439340. There is no framework prohibition on IDEs or complete applications. A later deferral of any item needs a fresh named prerequisite, not the old "wait for a major / not this minor" reason. In progress 2026-08-30: operator directed complete every remaining[ ]/[~]item with no deferral, in parallel. Do not invent named skip-prerequisites for 0.8.0.Depends on: RELEASE-011 (
v0.7.2published;mainat 0.8.0 Unreleased).Institutional issue: associated privately; remaining work was recorded as comments on that issue rather than child Stories.
Implementation:
- Record the 2026-08-28 break-glass at the top of this file and in this item. Do not change durable release protocol.
- Associate the private institutional issue as
institutional_channels.jira_issuefor 0.8.0 without committing its identifier. Do not tagv0.8.0until remaining open items land or are deferred with a named prerequisite. - Close or land every remaining open
[ ]/[~]item onmainbefore taggingv0.8.0, or defer it with a new named prerequisite that is not "wait for a major". - FLAVOR-005:
git mvremaining Flavor directories to axis-qualified names.make samplesevidence remains for the 0.8.0 gate. - Close ADR 0010 dotted selectors after that rename; keep bare names.
- TEST-CACHE-001
designed service; do not cherry-pick
c0439340. - LOCK-004
remaining evidence: wheel validation and a downstream-sized
ide-shelltransaction. - RELEASE-009
--target localplus GENERATION-011 live override evidence. Do not retagv0.7.0. - Before the 0.8.0 cut: regenerate the manager/engineering document pair.
- After that generation, repeat the DOC-DECK-003 visual pass already encoded in the overview SKILL: no overlapping text boxes, picture-led workflows.
- CONVERT-FW-009: convert baseline must not copy local virtualenvs (#187).
Evidence:
- Each remaining open item on
mainis either checked complete or explicitly deferred with a named post-break-glass prerequisite beforev0.8.0is tagged. - README citations name the 0.8.0 overview edition only after that regen and the DOC-DECK-003 visual-improve pass. Slides Drive version 134 (cover and thesis-cell overflow fix after 129); Doc renamed to the 0.8.0 edition.
- Dotted Flavor selectors fail closed; bare aliases still resolve
(
test_dotted_selectors_fail_closed;+pipstill maps toflavor://literate-ai/package-pip). -
release-projectanddocs/architecture/project-releases.mdwere not rewritten to treat every future minor as a major.
- Each remaining open item on
[x] DOC-DECK-003 — Read and improve layout and workflow pictures on the published overview
- Priority: P0
- Release target: 0.8.0 edition published (Drive version 134); repeat on later major/minor overview regenerations
- Owner:
docs/presentations/literate-ai-manager-overview/SKILL.md,skills/agent/author-presentations-and-documents/SKILL.md - Direction: Read and improve the published overview so text boxes do not
overlap and images are used where possible to improve workflow
visualization — pictures not text when possible. The live Slides resource
is
1V9mt1JpEst_2ucC0eJIIw7dff64MrtFRfut8MSiukeE. - Conclusion: First pass was a layout revision of the published 0.7.1 edition (Drive version 124). The 0.8.0 major/minor regeneration repeated that visual pass (Drive version 129), then a cover and thesis-cell overflow fix (Drive version 134). Geometry-escape cannot see painted overflow. Native-shape diagrams still count as pictures; the specification excerpt stays readable authority. Do not invent claims or ROI.
- Depends on: RELEASE-012 document-pair regeneration for the 0.8.0 edition (complete for this pass).
- Implementation:
- Fix the shared title/footer geometry so two-line titles, section tags, subtitles, and footers cannot collide, including after Arial substitution.
- Read every rendered slide; fix remaining overlapping, clipped, or colliding text boxes.
- On workflow slides, prefer pictures/diagrams over paragraphs; keep the slide 7 specification excerpt as readable authority.
- Encode the post-generation read-and-improve pass in
docs/presentations/literate-ai-manager-overview/SKILL.md. - Rebuild, inspect, publish the Slides resource in place, and record the
pass in
qa-ledger.md.
- Evidence:
- Contact sheet and full-size inspection show no overlapping text boxes.
- Workflow slides are picture-led; remaining text is labels or a short caption, not the workflow itself.
- QA ledger records this pass; the published Slides resource is updated in place (Drive version 134, 0.8.0 edition).
[x] DOC-PAIR-001 — Encode painted-overflow layout into document-pair authority
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- Owner:
skills/agent/author-presentations-and-documents/SKILL.md,skills/specification-to-source/document-pair/SKILL.md,components/document-pair/,flavors/doc-google-workspace/document-pair.md - Direction: The overview layout pass that kept cover title and thesis-cell copy inside their frames, and that made workflows picture-led, must become process for every Literate-AI release and every derived document-pair — not a package-local memory. Geometry-escape is not an overflow gate.
- Conclusion: Lift the working rules into the catalog authoring skill, the document-pair interface/acceptance/oracle, both documentation-ecosystem Flavor bindings, and the init-template copies. Google-specific wrap and paragraph rules belong in the Google Workspace binding and the authoring skill. Do not rewrite historical QA entries that called geometry-escape the applicable gate.
- Depends on: DOC-DECK-003
- Implementation:
- Fix the overview SKILL contradiction that called geometry-escape the python-pptx equivalent of an overflow test.
- Add non-overlapping text-bearing frames to the document-pair contract, acceptance, oracle, and both Flavor bindings.
- Record Google Arial substitution, real paragraphs in the shape text frame, picture-led workflows, and published-copy read-back in the authoring skill and Google Workspace binding.
- Keep catalog and init-template copies aligned.
- Evidence:
- Document-pair oracle rejects overlapping text-bearing frames and still
accepts the unmutated fixture (
tests.critical.test_document_pair_oracle). - Overview SKILL no longer names geometry-escape as the overflow gate.
- Document-pair oracle rejects overlapping text-bearing frames and still
accepts the unmutated fixture (
[ ] RELEASE-013 — Agent-owned patch content; remaining PROC-KILL call sites as 0.7.3
Release target: 1.1.0
Priority: P0
Owner:
skills/agent/release-project/SKILL.md,docs/architecture/project-releases.md,src/literate_ai/adapters/_processes.pycallersDirection: Next minor/major schedules stay human decisions. Patch content on the current
release/<major>.<minor>.xline is an agent decision the human overrides only when they disagree. PROC-KILL-001's Job Object primitive already shipped on this line; remaining in-package timeout spawn sites still pass onlyCREATE_NEW_PROCESS_GROUPintoPopenand callterminate_process_treewithoutownership.Conclusion: Encode the split in the release skill (catalog and init template byte-identical) and the project-release protocol. First application: bind
create_process_tree_ownershipat remaining in-package spawn sites onmain, then backport torelease/0.7.xas0.7.3. Not a patch: FLAVOR-005, TEST-CACHE-001, ADR 0010 dotted-alias close, overview regen,--target localfan-out. Standalone worker scripts (remote_source_guard.py,remote_worker_bootstrap.py) stay stdlib-only and keep validatedtaskkillrather than importing the package.Depends on: RELEASE-011 (
v0.7.2published).Implementation:
- State the human-schedule / agent-patch-content split in
release-project(both copies) andproject-releases.md. - Bind Job Objects at remaining in-package timeout spawn sites; keep
taskkillas fallback. - Backport to
release/0.7.xand cut0.7.3with--target github.
- State the human-schedule / agent-patch-content split in
Evidence:
- Catalog and template
release-projectskills remain byte-identical. - Focused process-tree and spawn-site tests pass locally (POSIX).
-
v0.7.3is verified onrelease/0.7.x;mainstays0.8.0Unreleased.
- Catalog and template
[x] RELEASE-014 — Pin each changelog section to that release's README.md
- Priority: P0
- Owner:
CHANGELOG.md,src/literate_ai/project_releases.py,docs/architecture/project-releases.md - Direction: Put a link to every release's
README.mdinto its changelog section. - Conclusion: Each published
## {version}section (not Unreleased) opens with a GitHub blob link toREADME.mdat that version's git tag (https://github.com/NVIDIA-dev/literate-ai/blob/v{version}/README.md). The URL must not live in the heading:prepare/ heading-count / release-note extraction match^## {version}(?:\s|$).prepareinserts the same first line when the policy names a GitHub provider, so later cuts keep the convention. Do not invent missing historical headings (0.6.4,0.6.3,0.5.1,0.5.0,0.1.1a1). RelativeREADME.mdlinks are wrong for historical sections. - Depends on: none
- Implementation:
- Insert the tag-pinned README link under every existing published changelog heading.
-
prepare_releasewrites that link for GitHub-provider projects. - Record the convention in the project-release protocol.
- Evidence:
- Every published changelog heading is followed by its tag-pinned
README.mdlink; headings remain unlinked. - Focused
test_project_releasescoverage for prepare insertion and GitHub notes extraction.
- Every published changelog heading is followed by its tag-pinned
[x] FORWARD-PORT-001 — Reconcile shipped 0.5 fixes missing from main
- Priority: P1
- Owner:
main(trunk), audited againstorigin/release/0.5.x - Direction: A content audit on 2026-08-21 compared
mainagainstrelease/0.5.xand foundmainmissing work that shipped in0.5.0/0.5.1. This is the concrete cost of theplanning/0.5.0-scopedivergence (RELEASE-BRANCHING-001): fixes landed on the release lineage and were never fixed forward, which the model explicitly forbids ("mainmust never be missing a fix that only exists on a release branch"). Commit-identity comparison is useless here —git cherryreports 62 of 63 commits as having no equivalent — and commit-message issue references are also unreliable, since several fixes did reachmainunder different wording. Every item below was verified by probing whethermain's tree actually contains the code the fix introduced. - Confirmed absent from
main(probe hit rate 0/N againstmain's tree):#68— inherited-session HMAC protocol hardening and its untested branch (5c4242f5);adapters/models/inherited_session.py.#80—LocalObservationSandboxscratch-cleanup retry past a live-handle race (0b172115);source_to_specification/sandbox.py.DONE 2026-08-21 (#81— SSHPopenplatform process-group options (713f120d)2beb7447,eaa7abdf). Porting it exposed an error in this audit:#70was recorded below as "already onmain" on the strength of a probe that matched elsewhere in the tree, but itsssh_transport.pyhalf had never landed.713f120donly hoistsprocess_group_options()into a local for testability — the substantivestart_new_session=True→process_group_options()swap is in5fe8f7d3(#70), so#81alone would have been a no-op cherry-pick onto code that never had the fix. Both were ported, which also closed two further defects bundled in#70thatmainstill carried:terminate_process_tree(process, environment={})shadowed the environment sowindows_taskkill_executablereturnedNoneand taskkill never ran on Windows (only the direct child died, grandchildren leaked), and the followingprocess.wait()was unbounded, so a grandchild holding the inherited stdout/stderr pipe could hang the runner forever.ssh_transport.pyand its tests are now byte-identical to the release line.#110— packaging-only provider edges wrongly requiring a build runtime binding (ab6fc565). SeePACKAGE-EDGE-001, whose "not implemented" text this audit corrected.#112— verify every promoted Component's lock during project-target promotion (e730aa13).#116/#118— pin literal constant/lookup-table values as assets during spec derive (33eec233), including its two schema changes.#117— bounded retry for spec-derive insufficient-evidence shortfalls (0f4c1a3b).#137— retire superseded source-cache entries on forced-regeneration accepts (2a242ce7).- LOW-layer Design-by-Contract skill paragraphs with validated examples
(
93545f08) —go/python/rustspecification-to-sourceskills, each with a skill version bump, plusdocs/history/roadmap/0.5.0-design-by-contract-examples/. - Capability entrypoint invocation contract clarification (
97789d94) —invoice-serviceandmoney-calculationat1.0.1on the release line,1.0.0onmain.
- Corrected whole-file audit (2026-08-23):
#71,#72,#74,#77, and#79were incorrectly classified as present. Currentmainstill lacks, respectively, the bounded dispatcher post-terminate wait, Windows Job Object ownership, validated standalone remotetaskkill, synchronized/five-second lifecycle pipe drain, and the shared tree-killing replacement for baresubprocess.run(timeout=...)call sites. Add them to the required forward-port set in dependency order#72,#71,#74,#77,#79, then#80. - Verified already on
main(reached it by a different commit; no action):#73,#76,#78,#125,#133,#138,#139, the release-notes changelog-section fix, and the release-check test-receipt scope exemption. The DMN/SCXML design spikes exist onmainunderdocs/roadmap/0.6.0-*names.#70was wrongly listed here and has since been ported (see#81above) — a caution that a single matching probe line proves nothing when a commit spans several files; only a per-file check is sound. - Deliberately not forward-ported: release mechanics (prepare/receipt/re-pin
commits), branch-local ruff-version reformatting, the deck rebuild, and
docs/roadmap/0.5.0-scope.md(superseded historical scope). - Next action: Complete on the integration branch. Preserve the per-file audit rule
for future release lines; do not merge
release/0.5.xwholesale. - Evidence:
-
#81and#70present onmainwith their regressions (2beb7447,eaa7abdf);ssh_transport.pybyte-identical torelease/0.5.x. - Every corrected missing item (
#68,#71,#72,#74,#77,#79,#80,#110,#112,#116/#118,#117,#137, LOW-DBC, and capability entrypoint clarification) is present with its focused regressions. - A clean Python gate passes all 2,622 tests with 27 platform skips; lint and formatting pass. Release-only prepare/receipt history and superseded 0.5 planning remain deliberately excluded.
-
[x] RELEASE-BRANCHING-001 — Adopt trunk-based development with cut-time release branches
- Priority: P2
- Owner: release planning
- Direction: During the 0.5.0 cycle, a long-lived
planning/0.5.0-scopebranch (created to isolate work from the in-flight 0.4.1 release) kept being used after 0.4.1 shipped, whilemainmoved independently. By the time this was noticed the two branches had diverged by 15 and 19 commits respectively, requiring a real merge with real conflicts (CHANGELOG.md, the doc-authority marker,active-work.md, the TCB pin) — the textbook failure mode of a long-lived integration branch (GitFlow'sdevelopanti-pattern). - Conclusion: See
docs/history/roadmap/release-branching-model.mdfor the full model:mainis the single trunk, all work lands there directly and continuously (matching this repository's existing "commit directly to main" convention); a release branch (release/0.N.x) is cut frommain's exact tip only atlitai release preparetime, not before; backports are fix-forward-then-cherry-pick (land onmainfirst, cherry-pick to the release branch), never fix-only-on-the-branch. Also identified a real gap inlitai's own release tooling: no first-class support for cutting a release branch as part ofrelease prepare, or for tracking which commits still need backporting to an active release branch. - Update (0.5.1 patch cycle): the backport half of that gap is now implemented —
litai release backport COMMIT... --to BRANCH [--from REF]cherry-picks already-landed commits onto a release branch (creating it from--from, e.g. a tag, if it doesn't exist yet) in an isolated worktree, never touching the caller's checkout and never pushing;litai release backport-status BRANCH [--against REF]lists trunk commits not yet applied, usinggit cherry's patch-id equivalence so an already-backported fix (a different SHA after-xcherry-pick) correctly drops off the list. Used to cutrelease/0.5.1from thev0.5.0tag and backport its fixes. Still not implemented: first-class branch cutting as part ofrelease prepareitself (today's cut is a plaingit branch ... <tag>, done outsidelitai). - Update (2026-08-21): practice had drifted from this model's own
release/0.N.xnaming to a branch per patch (release/0.5.0/0.5.1/0.5.2), andskills/agent/release-project/SKILL.md— what an agent actually reads at release time — had codified the deviation. Corrected inf757c0db: the skill now saysrelease/<major>.<minor>.xand states why, the same stale convention was fixed inproject_releases.py's docstrings and theadvance-default-branchCLI help, andrelease/0.5.xwas consolidated at the0.5.2tip (the three per-patch branches were already a strict ancestor chain, so no history rewriting was needed). A per-patch branch is not merely cosmetic: it resets this model's drift signal — "a backport that no longer cherry-picks cleanly means the line has drifted" only works when drift accumulates against one persistent branch.FORWARD-PORT-001records the ten shipped fixes that divergence costmain. - Next action: Done. RELEASE-BRANCHING-002
owns and completed cutting the line at
prepare. Do not retagv0.7.0. - Evidence:
-
docs/history/roadmap/release-branching-model.mdcommitted with the full model. -
litai release backport/litai release backport-statusimplemented, tested (tests/e2e/test_project_releases.py::ReleaseBackportTests), documented (docs/user/configuration-and-cli.md).
-
0.6.0 planning — carried forward from 0.5.0's specification-hierarchy triage
[x] SPEC-HIERARCHY-DMN-001 — DMN specification_provider design and implementation
- Priority: P2
- Release target: 0.6.0 — the design spike is complete and not committed 0.5.0
scope; a narrower follow-on prototype (parse one real
.dmnfile end to end, pick/justify a DMN-XML parsing approach) plus the actual provider implementation are pushed to 0.6.0 rather than opened as in-progress work this cycle. - Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner: specification-provider seam /
spec derive,spec accept,litai lock,litai generate - Direction:
0.5.0-specification-hierarchy.md's MEDIUM(b) entry (issue #119) calls for a design spike (not code) answering how a new DMN (OMG Decision Model and Notation)specification_providerwould plug into the existingopenspec/literate-markdownseam, scoped to rule/decision-table logic OpenSpec's WHEN/THEN expresses poorly. - Conclusion: See
docs/history/roadmap/0.6.0-dmn-provider-design.mdfor the full spike, grounded in direct inspection ofsrc/literate_ai/adapters/specifications/{openspec,literate_markdown}.py,contracts/specifications.py,component_lock_planning.py,legacy_generation_catalog.py,generation_preparation.py,source_to_specification/{literal_data,review}.py, andself_hosting.py. Headline findings:specification_providerdispatch is hardcoded two-armedif/elif/raiseat exactly two call sites (component_lock_planning.py,legacy_generation_catalog.py), not a plugin registry — additive but not zero-touch; both existing providers already terminate in the identical WHEN/THEN-shapedSpecificationSet/SpecificationScenariocontract (literate-markdownreusesOpenSpecProviderinternally), so DMN would be the first provider whose native content does not decompose into given/when/then at all; content-hash/generation-key binding is already fully provider-neutral and needs no change;litai generatealready consumes specification content as opaque context bytes regardless of provider. Given those, the spike recommends: author real OMG.dmnXML through the existingspecification_rootsmechanism (no new discovery path); treat "acceptance" as DMN's own structural hit-policy/input-output-coverage/ type-conformance validation at lock-planning time (a genuinely different oracle shape than WHEN/THEN scenario pass/fail); no DMN/FEEL execution engine inside litai — treat the table as declarative content-pinned structured data closer toassets:(#116/#118) than to a live spec engine; and the migration pipeline (spec derive/accept/coverage/review) is a different, largely orthogonal subsystem — a DMN table should be hand-authored or tool-exported, never derived by a model from legacy source. - Next action (2026-08-19, done): The follow-on prototype landed in
1427618adece9d04a5891e502fb78c9e25ae4e2cunderdocs/roadmap/0.6.0-dmn-prototype/: a real hand-authored DMN 1.3.dmnfile plus a stdlib-onlyxml.etree.ElementTreeparser/checker proves the UNIQUE-hit-policy overlap check passes a clean table and fails closed on a genuine overlap.pyDMNrules(the one DMN-aware PyPI package) was evaluated and rejected as a full FEEL-execution/Excel-authoring engine, wrong shape for structural-only validation — hand-rolled stdlib parsing is the recommended approach. Findings folded back into the design doc's own "Follow-on prototype results" section. What remains before code is now ordinary implementation work (the registry refactor and the actualDmnProvider), not a further open design question. - Current implementation action (2026-08-23, in progress): Land the smallest
honest 0.6.0 provider seam: one shared built-in registry for lock planning and
legacy generation, a bounded stdlib DMN 1.3 loader restricted to UNIQUE tables
with numeric closed intervals and
-, syntheticSpecificationSetprojection, exact artifact drift checks, focused integration tests, and user documentation. Preserve the self-hosting OpenSpec-only restriction and do not claim release qualification from this focused implementation evidence. - Evidence:
-
docs/history/roadmap/0.6.0-dmn-provider-design.mdcommitted with the full spike and the follow-on prototype results appended. - Narrow production
DmnProvidervalidates bounded exact DMN 1.3/1.5 UNIQUE numeric decision tables and is registered for lock and generation dispatch. - Shared registry parity and valid DMN lock/generation loading are covered by focused tests.
- Unsupported DMN syntax, structural overlap, type/arity errors, and artifact drift fail closed in focused tests.
- Focused tests and lint/format pass (
39focused tests, one platform skip; Ruff check and format check clean). Full 0.6.0 release evidence remains owned byRELEASE-006; the broadermake python-checkrun reached879tests and exposed then-fixed test-fixture path handling, but was not rerun as release evidence. - Reconciled
origin/feat/dmn-scxml-specification-providersas98283fd5; the clean Python gate passes 2,622 tests with 27 platform skips.
-
[x] SPEC-HIERARCHY-SCXML-001 — Design and implement an SCXML specification_provider
- Priority: P2
- Release target: 0.6.0 — the design spike is complete and not committed 0.5.0
scope; the declared-trace sidecar format's own design pass (prototyped against a
real
<parallel>/<history>sample) plus the actual provider implementation are pushed to 0.6.0 rather than opened as in-progress work this cycle. - Owner: specification-provider seam
- Direction:
docs/roadmap/0.5.0-specification-hierarchy.md's MEDIUM(c) item (issue #119) asks for a design spike (not code) for SCXML (the W3C State Chart XML standard) as a newspecification_provider, scoped to state-machine/protocol/ workflow logic — the common case the issue expects most Components with state-machine-shaped behavior to need. Open questions: authoring/discovery shape, acceptance-oracle shape (a different oracle from both WHEN/THEN and DMN), minimum viable adapter (parser vs. interpreter), generation-key binding andspec coverage/spec reviewtreatment, andlitai lock/litai generateprovider-neutrality — plus explicitly confirming the design does not accidentally need TLA+/PlusCal's harder concurrent-algorithm verification problem to handle ordinary sequential state machines. - Conclusion: See
docs/history/roadmap/0.6.0-scxml-provider-design.mdfor the full spike, grounded in direct audit of the existingspecification_providerseam (OpenSpecProvider/LiterateMarkdownProvider,SpecificationSet's mandatory-when/thencontract, the closed if/elif provider dispatch incomponent_lock_planning.py/legacy_generation_catalog.py, and the raw-bytes generation-key binding). Summary: authoring is a single.scxmlfile per Component via a newSCXMLProvidermirroringOpenSpecProvider's bounded-snapshot shape; the acceptance oracle is two complementary checks — static structural soundness (reachability/transition-target resolution, checkable without an interpreter) and declared-trace conformance (a genuinely novel sidecar format litai would need to define, since SCXML has no native one); the minimum viable adapter is a parser and static analyzer, not an interpreter, with execution left to generated code; and generation-key binding needs no change. Today'slitai spec coverage/litai spec reviewcommands belong to a different, WHEN/THEN-shaped reverse (derive-from-source) pipeline and do not apply to a hand-authored SCXML document — SCXML needs its own review verb rather than reusing those commands.litai lock/litai generateprovider-neutrality needs one small, mechanical fix (replace two closed if/elif dispatch sites with a provider-kind registry) shared with MEDIUM(b)/DMN, answered once. TLA+/PlusCal is confirmed unnecessary: every oracle proposed is static-graph analysis or delegated to generated code, never interleaving exploration or model checking. - Next action (2026-08-19, done): The trace-sidecar design pass landed in
1427618adece9d04a5891e502fb78c9e25ae4e2cunderdocs/roadmap/0.6.0-scxml-prototype/: a non-trivial hand-authored SCXML chart with a<parallel>region and a<history>pseudostate, a structural reachability/soundness checker, and a separate.trace.jsonsidecar format with a stateful conformance replayer. The prototype deliberately proved the two oracles cannot share one implementation — trace conformance needs a real history-tracking stepper, confirmed by demonstrating a history-blind variant fails exactly the re-entry step a correct one passes. The sidecar format is now concretely decided (separatespec/<name>.trace.jsonfile) and validated end to end. Update (2026-08-20): that prototype decided where the sidecar lives but not a reusable schema for it; that gap is now closed bydocs/history/roadmap/spikes/scxml-trace-prototype/RESULTS.md, a small JSON schema (traces[].steps[]withevent/expect_active/expect_regions/via_history/auto) validated against a second, independently-authored.scxmlsample and a standalone static structural validator that catches four distinct classes of malformed sidecar. What remains before code is porting this prototype's logic into the realSCXMLProvidershape and the shared registry refactor (also needed by DMN), not a further open design question. - Evidence:
-
docs/history/roadmap/0.6.0-scxml-provider-design.mdcommitted with the full breakdown and the trace-sidecar prototype findings appended. - Narrow production
ScxmlProvidervalidates bounded exact SCXML 1.0 graphs and explicit trace sidecars, including parallel and exact history replay, and is registered for lock and generation dispatch. -
litai spec scxml-reviewexposes read-only structural and trace validation; focused provider/CLI/lock coverage passes 43 tests with one platform skip, and the clean Python gate passes 2,622 tests with 27 platform skips.
-
[x] SPEC-HIERARCHY-SAMPLES-001 — Portfolio samples for every non-OpenSpec specification type
Status: complete (2026-08-28: DMN + SCXML + pinned-assets samples admitted)
Priority: P1
GitHub issue: #119
Owner:
samples/,tests/conformance/support/sample_runner.py,tests/conformance/support/runtime_oracles.pyDirection: #119's three-layer hierarchy is implemented as providers (DMN, SCXML) and as
assets:for literal tables, but the sample portfolio still only exercises defaultliterate-markdown. Validation needs genuine Components that use each new type, not roadmap prototypes.Conclusion: Add inheritable-false portable-application samples whose
specification_providerisdmnandscxml, with pinnedassets:on the DMN sample for MEDIUM-layer literal data. HIGH-layer literate-markdown remainshello-component. LOW-layer Design-by-Contract stays a language-skill convention, not a fourthspecification_provider. Do not invent TLA+/PlusCal; SCXML covers everyday state machines. Sample catalog admission must allow.dmnand.scxmlas specification bytes._load_samplemust dispatch through the shared provider registry. Live source generation of the new samples still requires explicit model-egress acknowledgement.Depends on: SPEC-HIERARCHY-DMN-001, SPEC-HIERARCHY-SCXML-001
Implementation:
-
samples/loan-risk-gate— UNIQUE DMN table plus pinned JSON score bands. -
samples/playback-controller— SCXML 1.0 chart plus trace sidecar. - Harness, runtime oracles, and provider-dispatch in
_load_markdown_component. - Document the hierarchy coverage in
samples/README.mdanddocs/user/specifications.md.
-
Evidence:
-
_load_samplelocks and loads both new samples through their providers. - Runtime-oracle catalog includes both sample IDs.
- Sample-catalog suffix admission includes
.dmnand.scxml.
-
P0 — intrinsic workflow and onboarding
[x] ACCEPTANCE-002 — Verify persistent HTTP services independently
- Priority: P0
- Owner: Standard lifecycle independent acceptance
- Direction: Persistent services require verifier-owned startup, readiness, bounded HTTP/SSE checks, and shutdown rather than single-shot JSON invocation.
- Conclusion: Add a strict
persistent-service-acceptance@1contract while preserving portable-application acceptance and receipt boundaries. - Implementation:
- Load verifier-owned service contracts by locked Component name.
- Defer packaged service execution to independent acceptance.
- Bound process lifetime, HTTP responses, SSE assertions, and process output.
- Evidence:
- Focused acceptance, lifecycle, rebuild, and receipt tests pass.
[x] SBOM-005 — Reconcile managed authority with third-party source inventory
- Priority: P0
- Owner: coding-CLI source-SBOM reconciliation
- Direction: Legitimate third-party package components must not prevent canonical repair of framework-managed root, Component, Flavor, skill, classification, and edge authority.
- Conclusion: Merge the canonical managed projection into model-authored third-party inventory and reject reserved-reference conflicts or managed reparenting.
- Implementation:
- Preserve valid third-party components and edges.
- Canonicalize every framework-managed node and edge.
- Reject duplicates, dangling references, reserved properties, and conflicting authority claims.
- Evidence:
- Coding-CLI generation coverage passes with Cargo-package and conflict fixtures.
[x] SBOM-006 — Canonicalize model-authored source composition authority
- Priority: P0
- Owner: coding-CLI source-SBOM reconciliation
- Direction: A derived project's dependency-free Python/Make Component repeatedly
reached the build phase with a model-authored CycloneDX
compositionsshape that the non-Bazel lifecycle correctly rejects, even though the framework already owns and repairs the rest of the managed source-BOM projection. - Conclusion: Composition completeness is framework lifecycle authority, not model
discretion. During SBOM reconciliation, retain only the exact sanctioned
incomplete_third_party_onlydeclaration when the generated tree contains actual Bzlmod dependency intent; otherwise write the canonical complete root composition already produced by the managed projection. - Implementation:
- Canonicalize
compositionsalongside the managed root, inventory, properties, and dependency edges. - Preserve the exact deferred-Bzlmod form for later resolver validation.
- Canonicalize
- Evidence:
- Four focused coding-CLI SBOM reconciliation tests pass for malformed model composition, deferred Bzlmod, retained third-party inventory, and unsafe authority rejection.
[x] CARGO-001 — Add locked Cargo service builds to Standard
- Priority: P0
- Owner: Rust ecosystem authority, Standard command projection, and dependency evidence
- Direction: Generated Rust services need Cargo registry dependencies without trusting model-authored lockfiles or writing build output into admitted source.
- Conclusion: Add a composable Cargo Flavor, exact Cargo toolchain binding, post-authorization external lock derivation,
--lockedmetadata/build execution, retained dependency evidence, and resolved-SBOM reconciliation. - Implementation:
- Add Cargo command profile, Flavor, ecosystem/build skills, and initialization wiring.
- Derive and freeze Cargo.lock in an external build projection after authorization.
- Retain Cargo metadata/lock evidence and reject path, Git, workspace, build, dev, and target-specific dependencies.
- Evidence:
- Focused Cargo lifecycle, dependency, projection, and toolchain tests pass.
[x] MAC-CONTRACT-001 — Project MAC runner contracts from resolved CycloneDX evidence
- Owner: resolved dependency evidence and inheritable agent skills
- Direction: MAC-compatible projects need a
.mac/project.yamlrepository contract so MAC runners can compose their OpenShell policy without learning Literate AI's internal Component, Flavor, and skill formats. - Conclusion: Add an inheritable skill with a deterministic projector that consumes
the already-validated post-build CycloneDX BOM and emits
mac.repository_contract.v1. The projector is a downstream view of the existing dependency graph, never a scanner or second dependency resolver. Component, selected Flavor, and selected skill authority must reach the CycloneDX lifecycle before this projection; missing or ambiguous prerequisite evidence fails closed. Literate AI owns its portable bootstrap/test commands, while MAC remains the authority for contract validation, runner dispatch, and OpenShell policy composition. - Depends on: complete resolved CycloneDX 1.7 evidence and canonical
litaibootstrap/test entry points - Implementation:
- Add the provider-neutral
write-mac-project-contractskill to this framework and initialized projects, with the exact MAC schema and ownership boundary. - Add a deterministic, canonical projector from one validated resolved BOM to
.mac/project.yaml, mapping host/platform and executable prerequisite evidence without inspecting manifests, source trees, or PATH independently. - Bind the output to the exact source BOM, resolved BOM, and resolved graph identities so stale contracts are detectable and reproducible.
- Document when the projection runs, how an operator overrides portable project metadata, and how MAC consumes the result without making MAC a mandatory Literate AI dependency.
- Add the provider-neutral
- Evidence:
- Focused tests prove deterministic output, supported platform mapping, exact dependency-to-command projection, stale/incomplete BOM rejection, and no parallel analysis path.
- The generated YAML passes MAC's current repository-contract normalization contract, and a newly initialized project contains and can execute the skill.
- SkillEvaluator and the full skill/conformance gates pass. The fail-fast Python gate found and repaired two stale authority fixtures plus the expected derived project identities, then completed its entire checkpointed suite; the clean release rerun starts from test one after this checkpoint.
[x] SAMPLE-LAYOUT-001 — Flatten samples and make parent sample inheritance explicit
- Owner: sample catalog layout and repository-lineage catalog export
- Direction: Two service-stack dependency Components live under the accidental path
samples/components/*, unlike every other sample atsamples/*. Derived projects also currently inherit every parent sample because all localcomponent_rootsare treated as repository exports. - Conclusion: Move the two Components directly beneath
samples/and remove every special nested lookup. Components inherit by default; add a per-Componentinheritablepolicy whose omitted value istrue, and explicitly opt sample Components out withinheritable: false, except for the portable hello starter that every child needs for its initial end-to-end smoke test. Samples remain discoverable in the parent and may be copied explicitly through catalog tooling. Do not preserve the nested path. - Depends on: repository catalog composition and the current central sample harness
- Implementation:
- Move invoice-service and money-calculation to flat sample paths and update all sample, presentation-source, and conformance references.
- Add a strict per-Component inheritance policy, default it to true, and apply it during repository catalog composition without changing local build authority.
- Mark this repository's wider sample portfolio non-inheritable while retaining the default for ordinary Components and the portable hello starter.
- Evidence:
- No
samples/componentspath or compatibility lookup remains; all sample and service-stack conformance tests pass from the flat catalog. - Repository-lineage tests prove local samples remain valid but are absent from a child's automatic imports, while hello and ordinary Components still inherit.
- No
[x] CI-NATIVE-001 — Keep ambient native toolchains out of non-live gates
- Owner: repository conformance ladder and native-toolchain qualification
- Direction: A hosted macOS runner happened to expose Bazel, causing the ordinary non-live Python gate to execute a network-resolving native conformance test. Its transitive Buildozer fetch then failed against the runner's Java trust store.
- Conclusion: Tool presence is not authorization to run a native or network-resolving qualification. Require an explicit native-toolchain test opt-in in addition to PATH discovery, expose one named Make target for that opt-in, and leave ordinary Python gates deterministic and non-live. The native target must still fail when explicitly selected and its toolchain or dependency resolution is unhealthy.
- Depends on: existing Bazel Standard lifecycle and contributor Python gate
- Implementation:
- Gate every real-Bazel conformance case on explicit native-test authorization as well as required PATH capabilities.
- Add a discoverable native-toolchain Make target that runs the complete Bazel conformance subset with authorization enabled.
- Document the distinction between offline/non-live gates and native dependency resolution without weakening dedicated sample or worker qualification.
- Evidence:
- A focused selector regression proves only the exact value
1authorizes native tests; all three real-Bazel cases skip under the ordinary suite despite ambient Bazel and are named bymake native-toolchain-checkwith authorization enabled. - The ordinary macOS/Python suite advanced through all 2,005 tests without
attempting a Buildozer fetch; its only repair was a composed lifecycle-driver
identity refresh. Independently,
make native-toolchain-checkpassed all three explicitly authorized real-Bazel lifecycle cases in 415 seconds.
- A focused selector regression proves only the exact value
[x] SAMPLE-MATRIX-003 — Verify the exact selected multi-repository matrix
- Owner: multi-repository sample conformance
- Direction: the live verifier must inspect the exact selected execution matrix. It
must not require the retired implicit Python/C++ fanout after unpinned samples became
a bounded Python/Make/host tuple in
SAMPLE-MATRIX-002. - Conclusion: require a non-empty set of unique implementation-language executions, then prove aggregate-source behavior for every selected variant without prescribing matrix size or language membership.
- Depends on:
SAMPLE-MATRIX-002 - Implementation:
- Index exact execution evidence with non-empty, unique language validation.
- Exercise every selected variant and add a non-live bounded-default regression.
- Evidence:
- The focused verifier regression passes, a targeted live run accepts the bounded Python variant with both aggregate-source assertions, and the resumed complete live sample matrix passes from retained source.
[x] SAMPLE-COORD-001 — Verify full-stack samples through canonical Flavor targets
- Owner: full-stack sample conformance
- Direction: the accepted execution contract stores exact canonical Flavor coordinates. Its live verifier must not compare those values directly with retired short aliases after the canonical Flavor migration.
- Conclusion: normalize the two declared language-role targets through the shared canonical target resolver before checking the Rust/JavaScript topology.
- Implementation:
- Normalize both role targets and retain exact slot-name validation.
- Add a non-live regression that executes the verifier against the committed canonical execution contract.
- Evidence:
- The focused canonical-coordinate regression and resumed complete live sample matrix pass.
[x] MODEL-003 — Pin explicit models through sample qualification
- Priority: P0
- Owner: sample conformance CLI, locked generation preparation, and cache identity
- Direction:
scripts/run_samples.py --model MODELuses that selector as the pipeline model for every generated sample and retains it in correctness evidence. - Conclusion: Bind the explicit selector through
LockedComponentModelSelectionAdapter, generation recipes, Standard reports, source derivations, and checkpoints so no differently pinned run can be reused. - Implementation:
- Add and propagate
--model MODELthrough live and derivation-planning paths. - Bind model scope into generated recipes and Standard node evidence.
- Include model selection in cache and checkpoint identities.
- Add and propagate
- Evidence:
- Focused checkpoint and conformance model-scope tests pass.
[x] MODEL-002 — Bind conformance model selection through its adapter instance
- Owner: Standard sample planning and live conformance execution
- Direction: sample and service-stack conformance must exercise the same bound lexical model-selection adapter as production. Calling its instance method on the class bypasses construction and fails before sample lifecycle execution.
- Conclusion: centralize sample model-identity resolution behind one helper that
constructs
LockedComponentModelSelectionAdapter, then use it for derivation planning, ordinary Standard samples, and the composed service stack. - Implementation:
- Replace all three unbound conformance calls with the shared bound helper.
- Add a non-live regression that resolves every locked sample node without a coding-CLI invocation.
- Evidence:
- The focused bound-adapter regression passes, and the resumed complete live sample matrix executes the three-node composed Standard service stack.
[x] INIT-DAG-003 — Inherit complete Component workflow and routing authority
- Owner: repository catalog composition and child-project validation
- Direction: a Component inherited through the repository DAG must remain valid when its authored workflow and routing policy live in the parent project's declared global catalogs. Importing only Components, Flavors, and skills leaves that Component's generation closure incomplete.
- Conclusion: compose declared workflow and routing roots alongside Components, Flavors, and skills. Treat each regular workflow or routing document as a named, provenance-bound catalog item; preserve the same ancestor precedence, sibling collision, exact-revision, path-safety, update, and rollback rules. Do not copy documentation or executable repository code as a substitute for missing authority.
- Depends on:
INIT-DAG-001repository lineage and inherited catalog provenance - Implementation:
- Read workflow and routing roots from exact Git snapshots and project them into
deterministic
workflow:*androuting:*catalog items. - Carry those item kinds through initialization, update classification, and exact
.literate/imports.jsonprovenance without weakening collision checks. - Update CLI help, inheritance documentation, release notes, and installed scaffold guidance to describe the complete inherited authority set.
- Read workflow and routing roots from exact Git snapshots and project them into
deterministic
- Evidence:
- Focused catalog tests prove deterministic workflow/routing materialization, descendant precedence, sibling collision rejection, and exact provenance.
- A child initialization imports a Component with parent-global workflow/routing references and passes canonical project validation.
- Full quality gates and installed-project smoke pass with current CodeGraph
evidence. After rebasing onto current
main, the fail-fast clean suite passed 2,004 tests before exposing one stale derived lifecycle identity; the repaired continuation passed that test and all 61 remaining tests. Exact-revisionmake wheel-checkpassed and proved the initialized project lock, inherited authority, project CodeGraph preflight, and installed Standard binding.
[x] VERSION-001 — Inspect Standard lifecycle bindings without external-driver fields
- Owner: read-only version consistency reporting
- Direction:
litai version check --projectmust inspect projects initialized with the installed Standard lifecycle binding. It must not assume the source-declared external-driver shape or dereferenceimplementation_pathson a Standard binding. - Conclusion: Dispatch on the typed lifecycle binding. Preserve the exact external implementation-closure check for external drivers, and resolve Standard projects against the installed distribution and policy identities without weakening either trust boundary. Report a stable failed check for Standard mismatch rather than an uncaught Python exception.
- Depends on: the existing discriminated lifecycle-driver contract and Standard lifecycle binding resolver
- Implementation:
- Add typed Standard/external dispatch to the version report.
- Cover exact Standard success and mismatch while preserving external reports.
- Add installed-wheel proof against a newly initialized Standard project.
- Evidence:
- Focused version-authority tests pass.
- A clean installed wheel runs
litai version check --projectsuccessfully on its initialized project and rejects a forged Standard distribution identity.
[x] FLAVOR-DAG-001 — Compose selected Flavor capability requirements into Component locks
- Owner: Component lock planner and exact lock contracts
- Direction: A selected target Flavor may require a Component capability, such as
a product packaging Flavor requiring its publication provider. That requirement must
extend the resolved executable Component DAG only when the Flavor is selected;
FlavorDefinition.requireswas previously parsed and identity-bound but ignored by the lock planner. - Conclusion: Preserve Components as the owners of behavior while treating a
selected Flavor's typed
CapabilityRequirementas target-conditioned composition authority. Resolve its provider through the same unique capability/version/constraint rules as an authored Component requirement, record the selected Flavor and exact requirement in the locked consumer revision, and emit the ordinary phase-specific executable edge. Unselected Flavors contribute no provider or edge. Reject duplicate requirement IDs across Component and selected-Flavor authority rather than guessing. - Depends on: current Flavor-slot selection and Component lock resolution
- Implementation:
- Add a strict, content-identified selected-Flavor requirement binding to locked Component revisions without changing existing lock bytes when the set is empty.
- Make lock planning reach a deterministic fixed point across authored and selected-Flavor requirements, including recursively introduced providers.
- Validate persisted edges against either authored Component requirements or exact selected-Flavor requirement bindings, with the same interface, version, constraint, optionality, and acyclic-closure rules.
- Document the Flavor/Component boundary and update release-visible notes.
- Evidence:
- Focused contract and planner tests prove selected-only provider inclusion, unselected omission, recursive closure, unresolved/ambiguous failure, collision rejection, canonical round trip, and tamper rejection.
- The full Python quality gate passes and CodeGraph is current. The exact clean run completed 1,871 tests with 18 native-only skips and no failures.
- A clean installed wheel initializes and validates a project whose selected
Flavor pulls a packaging-phase Component edge. The wheel smoke proof selected the
pythonFlavor and resolvedcomponent://example/wheel-package-publisherforpackaging.wheel-smoke-publisher.
[x] INIT-DAG-001 — Initialize from any repository in an inherited repository DAG
- Owner: project initialization, catalog imports, and project update lineage
- Direction:
litai initmust work from any repository in a Literate-AI repository DAG, optionally accepting a repository URL. The new project inherits the selected repository and every declared ancestor rather than silently falling back to only the framework distribution that installed the CLI. - Conclusion: Add an unambiguous optional
--from URLinput while preserving the no-URL installed-framework default. Resolve the selected repository into isolatedOBJ_DIRstorage, validate its canonical project and initialization/import lineage, traverse ancestors in deterministic ancestor-first order with cycle and conflicting- origin rejection, then materialize the effective taxonomy using the existing catalog provenance model. Record the selected URL, exact revision, complete ancestor chain, and baselines solitai updatefollows the same lineage. Never execute repository code merely to discover ancestry, and never embed credentials from a URL in project files. Addlitai reparent URL|none: a URL resolves and validates a complete prospective lineage and produces a cautious three-way migration against recorded baselines before changing authority;nonerecords an explicit root/divorced state rather than an omitted or ambiguous parent. In that statelitai updateis a typed no-op. Project validation checks that the declared parent, resolved lineage, and baselines agree. - Depends on: exact initialization origin/baseline contracts and catalog-import DAG
- Implementation:
- Define versioned repository-lineage and inherited-initialization contracts, including canonical URL sanitization, exact revision selection, cycle bounds, precedence, collision handling, and offline/cache semantics.
- Add
litai init [PATH] --from URL, detect-before-fetch tooling, isolated clone or local-path resolution, non-executing validation, and deterministic ancestor-first catalog composition. - Extend
litai updateto compare and upgrade against the recorded complete lineage rather than only the distribution build origin. - Add
litai reparent URL|nonewith a read-only plan, explicit conflict reporting, compare-and-swap application, rollback on failure, and no implicit overwrite of local authority. - Make
litai project validatereject missing, truncated, cyclic, stale, or internally inconsistent parent/lineage evidence; accept the explicitnoneparent state and make update report a typed no-op for it. - Document local-parent, remote-parent, forked-framework, authentication, and failure flows; carry the same behavior and help into installed wheels.
- Evidence:
- Focused tests cover no-URL compatibility, local and remote ancestry, three-level inheritance, deterministic override precedence, cycles, collisions, unreachable and unauthenticated repositories, credential redaction, and no repository-code execution.
- A repository that declares a parent cannot be accepted as a complete lineage: initialization and update both fail closed if traversal stops before the root.
- A clean installed wheel initializes from a temporary three-repository DAG, validates inherited Components/Flavors/skills, and plans an inherited sample.
-
litai updatefollows the recorded ancestor chain after an upstream change while preserving local authority and surfacing conflicts without overwriting them. - Reparent tests cover parent-to-parent migration, conflicts, a changed prospective
chain, stale compare-and-swap inputs, rollback, credential redaction, and
reparent nonefollowed by a validated no-op update.
[x] INIT-DAG-002 — Admit canonical pre-lineage projects through explicit reparenting
- Owner: repository-parent authority and reparent transaction
- Direction: Projects created before repository-DAG evidence existed need one safe, explicit route onto the current inheritance model so maintained derived repositories can adopt the current framework instead of being stranded by validation.
- Conclusion: Keep ordinary validation and update fail closed. Only
litai reparentmay treat the simultaneous absence of both lineage documents as a typed legacy-root starting state. Record that absence in the read-only plan, compare-and-swap against continued absence during apply, and restore absence if prospective validation fails. A partial, malformed, or concurrently introduced lineage remains an error. Applyingreparent nonemust materialize explicit root evidence rather than report a false no-op. - Depends on:
INIT-DAG-001repository-lineage contracts and reparent transaction - Implementation:
- Add typed planning evidence for a previously unrecorded lineage without
weakening the canonical lineage store's ordinary
loadbehavior. - Add absence-aware compare-and-swap and rollback to the lineage store.
- Teach reparent plan/apply to bootstrap only the both-absent state.
- Keep hand-authored canonical-project fixtures honest by recording explicit root lineage while preserving their catalog/provider-shim minimality.
- Document the bounded migration path and release-visible behavior.
- Add typed planning evidence for a previously unrecorded lineage without
weakening the canonical lineage store's ordinary
- Evidence:
- Focused store and reparent tests cover inherited and explicit-root bootstrap, partial evidence rejection, concurrent evidence creation, and rollback to absence after validation failure. The focused contract/schema run passed 37 tests with no failures.
- The full Python quality gate passes and CodeGraph is synchronized. The clean
checkpointed run passed 1,998 tests with 18 native-only skips; Ruff checked 568
formatted files, OpenSpec validated both changes, 142 Mermaid diagrams rendered,
and CodeGraph is current at
sha256:1c96daa2353017110db1eaf4af4c4198ba1f5f59cd42f982aae05e101304e35c.
[ ] CODEGRAPH-PROJECT-001 — Require a current project CodeGraph before build or run
Release target: 1.1.0
Owner: project initialization, source-intelligence policy, and lifecycle preflight
Direction: Every Literate-AI project must carry its own generated CodeGraph index; build and run operations require that project-level index before any source generation, compilation, or executable launch. This is distinct from the per-generated-source-tree CodeGraph sidecar already required for candidate admission.
Conclusion: Canonical initialization always provisions or discovers CodeGraph and creates
.codegraph/codegraph.db.litai build,litai run, andlitai rebuildverify the configured provider, minimum version, exact indexed project tree, and current index evidence before entering an effectful lifecycle phase. Safely missing or stale indexes are generated or refreshed; unsafe, corrupt, misbound, or otherwise unusable indexes fail with an actionable detect/install-style prerequisite._build, generated outputs, dependency closures, and CodeGraph's own database remain excluded from indexing. Do not silently downgrade canonical projects tosource_intelligence.provider_id=none.0.8.0 slice decision (2026-08-28): Do not force CodeGraph as a product dependency. Accepted ADR 0016/0019 keep default
provider_id: nonewith every stageoff. Remaining starter-lifecycle evidence is opt-incodegraph-clionly.Depends on: project source-intelligence policy and CodeGraph bootstrap
Implementation:
- Add explicit build/run project-index stages or one shared lifecycle-preflight contract without conflating project and generated-source index identities.
- Make canonical
litai initprovision and generate the project index, remove the public canonical no-provider escape hatch, and preserve injectable test adapters. - Gate build, run, and rebuild before any coding CLI, compiler, or executable side effect; synchronize only when policy permits and otherwise fail closed.
- Carry the invariant, exclusions, bootstrap guidance, and troubleshooting into the root skill, initialized-project template, CLI help, and architecture diagrams.
Evidence:
- Focused tests cover initialized index creation, missing tool, stale/corrupt index, excluded paths, no side effects before rejection, and distinct project/source-tree evidence identities.
- A clean installed wheel proves a missing index is generated before artifact lookup and build/run/rebuild reject an unsafe index before generation/build/run.
- One real starter lifecycle passes locally and on each private matrix host with a current project index and a separately current generated-source index.
[x] CODEGRAPH-DRIFT-001 — Detect a host CodeGraph CLI upgrade and recover automatically instead of failing unhealthy
- Priority: P1
- Owner:
src/literate_ai/adapters/intelligence/codegraph.py(_prepare_index/_operational_status),src/literate_ai/project_source_index.py - Direction: Reproduced directly this session: updating the ambient
codegraphCLI on a host (/opt/homebrew/bin/codegraph, 1.1.1 → 1.5.0) while an existing project index remains on disk leaves everylitai project source-intelligence sync/check/validatefailing with the genericproject.source_intelligence_unhealthy, even immediately after a freshsync. Root-caused precisely:_prepare_index(line ~479) always runscodegraph sync <path> --quietwhen.codegraph/codegraph.dbalready exists — it never inspects whether the newly-invoked binary's version differs from the index's ownbuiltWithVersion.OperationalSourceIndexStatus.__post_init__correctly rejects that mismatch (built_with_version != runtime_version), and_operational_statuscorrectly classifies it as"CodeGraph index requires a compatible full rebuild"— butsyncalone can never satisfy that (onlycodegraph index, a full rebuild, updatesbuiltWithVersion), so the condition never self-heals, and the specific, actionable reason is discarded by the time it reachesproject_source_index.py's catch-allexcept IntelligenceAdapterError: raise ProjectSourceIntelligenceError("project.source_intelligence_unhealthy", ...). This is distinct fromCODEGRAPH-PROJECT-001's "missing or stale index" handling, which already covers absent/corrupt indexes but not this specific version-incompatible-but-present case. - Conclusion: Detect the version-mismatch condition explicitly before or after an
ordinary
syncattempt, and when found, automatically escalate to a fullcodegraph indexrebuild (bounded by the same safety checksCODEGRAPH-PROJECT-001already applies to index creation) rather than leaving the project permanently unhealthy until a human notices and manually deletes.codegraph/. When automatic rebuild is not desired or not possible (e.g.check's explicitly non-mutating contract), at minimum surface the real, specific reason (built_with_versionvs the newly-detected runtime version, and that a full rebuild — not another sync — is required) instead of the genericunhealthymessage, so a human or agent knows exactly what happened and what to do about it without needing to read this framework's own source to find out. - Depends on:
CODEGRAPH-PROJECT-001's existing stale/missing-index handling - Implementation:
- Added
_recover_from_runtime_version_drift, called from_prepare_indeximmediately after an ordinarysyncwhen the on-disk index already exists: a best-effort, self-swallowing probe (codegraph status --json) that detectsfileCount > 0 and builtWithVersion != versionand, when found, runscodegraph index(a full rebuild) once before returning. Probe failures are swallowed rather than raised — the ordinary status-validation path immediately after already raises its own correctly typed error for anything this best-effort probe misses. -
check(synchronize=False) never calls_recover_from_runtime_version_drift— that call is only reachable from thesynchronize=Truebranch of_prepare_index— so its non-mutating contract is structurally preserved, not just documented. - Did not add a new typed error code (kept
project.source_intelligence_unhealthystable). Instead added_SAFE_UNHEALTHY_REASONS, an explicit allowlist of literal, hardcoded (never subprocess-derived)IntelligenceAdapterErrormessages safe to forward verbatim;"CodeGraph index requires a compatible full rebuild"is now embedded in the CLI-facing message when it's the actual cause. Discovered and preserved a real existing invariant while doing this:test_version_floor_and_engine_errors_are_stable_and_redactedasserts arbitrary underlying error text (which can carry forwarded subprocess/secret content) must never reach the client-facing message — an unscopedf"...: {exc}"would have silently broken that redaction guarantee, so the allowlist approach was chosen specifically to preserve it rather than widen what gets forwarded. - Added
test_sync_recovers_from_runtime_version_drift(simulates an upgradedcodegraphbinary against an existing index; assertssyncthenindexboth ran, in that order, and the resulting status reflects the rebuilt version) andtest_check_never_attempts_a_rebuild_on_runtime_version_drift(assertscheckraises without ever invokingindex) intests/unit/test_codegraph_adapter.py, plustest_unhealthy_error_preserves_the_specific_underlying_reasonintests/smoke/test_project_source_index.py.
- Added
- Evidence:
- Reproduced this session's exact scenario locally (
codegraphupgraded 1.1.1 → 1.5.0 on this host, existing.codegraph/index) — verified live before this fix that ordinarysyncnever recovered; the new regression test covers the same shape deterministically. (The live host index itself was already recovered with a manualcodegraph index .in this same session, ahead of this fix landing.) -
check's error message, when it cannot self-heal, names the specific version-mismatch cause (... requires a compatible full rebuild) rather than the bare generic unhealthy message, without forwarding arbitrary underlying exception text.
- Reproduced this session's exact scenario locally (
[~] CODEGRAPH-WORKER-PIN-001 — Give worker CodeGraph capability version bumps a repeatable, scripted update path
Release target: 1.1.0
Owner:
src/literate_ai/remote_worker_bootstrap.py(_CODEGRAPH_VERSION/_CODEGRAPH_PACKAGES,export_worker_codegraph_capability,install_worker_codegraph_capability)Direction: Follow-up to
CODEGRAPH-DRIFT-001, prompted by the same host-side CodeGraph upgrade: worker nodes are, by contrast, already well-isolated from ambient host drift —install_worker_codegraph_capabilityinstalls an exact, digest-verified version (_CODEGRAPH_VERSION = "1.1.1", matchingliterate.project.json's ownsource_intelligence.minimum_version) under a version-qualified path, independent of whatevercodegraphhappens to be on a host'sPATH. That's the right design — the gap is maintaining it._CODEGRAPH_PACKAGEShardcodes a hand-computed sha256 digest and byte size per platform, for exactly two platforms (linux/x64,windows/x64;darwin/macOS is absent —_capability_targetfails closed with a typedworker.capability_platform_unsupportederror there today, which may be an intentional scope limit for CI-only worker hosts rather than an oversight, but is worth an explicit decision rather than silent absence). Bumping_CODEGRAPH_VERSIONtoday means manually downloading each pinned npm tarball, computing its digest and size by hand, and hand-editing this table — with no test or tooling to catch a stale/incorrect pin before it fails closed on a real worker.Conclusion: Add a small maintenance script (analogous to how other pinned third-party artifacts in this repository are refreshed) that, given a target
_CODEGRAPH_VERSION, fetches each supported platform's npm tarball, computes and writes back its digest/size into_CODEGRAPH_PACKAGES, and fails closed if any platform's package is unavailable at that version — replacing the hand-computation step, not the deliberate per-platform pin itself. Decide explicitly whetherdarwin/macOS worker support is in scope; if yes, add its pin the same way; if no, document why in this file rather than leaving it silently absent.Depends on: none; independent of
CODEGRAPH-DRIFT-001's local-host detection fixImplementation:
- Authored
scripts/refresh_codegraph_worker_pins.py: fetches each pinned platform's tarball from the exact URLexport_worker_codegraph_capabilitybuilds at runtime, computes digest/size, and rewrites_CODEGRAPH_PACKAGES/_CODEGRAPH_VERSIONin place;--checkreports drift without writing. Verified against every currently pinned platform at the current version (byte-identical round trip) and against a deliberately corrupted digest (correctly detected and repaired). - Decided and recorded the
darwin/macOS scope decision: in scope.docs/roadmap/active-work.md's ownWORKER-001history records that real macOS workers already exist in this project's private fleet and already usecodegraph— discovered via ambient Homebrew PATH resolution, not the digest-pinned capability path, since nodarwinentry existed to select. That made macOS workers' CodeGraph install exactly as exposed to ambient version drift as the host-level gapCODEGRAPH-DRIFT-001just fixed, except with no pinned fallback at all. Fetched and pinned both real@colbymchenry/codegraph-darwin-arm64and-darwin-x64tarballs at the already-declared1.1.1from the live npm registry (digests verified directly, not guessed) rather than leaving the gap deferred. - Add a lightweight CI check that the committed pins actually resolve and
digest-match against the live npm registry (bounded, not run on every
commit) — not done this pass;
--checkexists and is ready to wire into a scheduled job, but the job itself is a CI-configuration decision left open. Correction 2026-08-28:scripts/refresh_codegraph_worker_pins.pyis not in this tree. ADR 0016 removed product CodeGraph. Remaining pin-refresh work waits on ADR 0019 opt-in worker capability pins, not a major version.
- Authored
Evidence:
- Bumping
_CODEGRAPH_VERSIONend to end (script run, table updated) requires no hand-computed digest/size — demonstrated live for both a same-version no-op and a corrected/repaired stale-digest case; regression-tested intests/unit/test_refresh_codegraph_worker_pins.py(parsing, no-op,--checkdrift reporting, write-and-round-trip, and fetch-failure paths). - The
darwinscope decision is recorded above, not merely absent from the table, and is now backed by real pinned entries for botharm64andx64;tests/e2e/test_remote_worker_bootstrap.pycovers_capability_targetresolving every pinned platform including both darwin architectures.
- Bumping
[x] DOC-PUB-001 — Keep generic authoring portable and publication provider-bound
- Owner: document-pair capability, authoring skill, documentation ecosystem Flavors
- Direction: Anyone should be able to reproduce a local editable document without proprietary MCPs or one maintainer's tools. Service-specific prerequisites, installation, login, access mapping, upload, and verification belong to the selected publishing Flavor.
- Implementation:
- Make the generic authoring skill connector-independent and define its local toolchain/isolation/failure contract in both framework and project template.
- Move Google token, exact-resource update, and read-back rules into the Google Workspace binding in both framework and project template.
- Add equivalent client discovery, device-login, tenant-policy, and read-back rules to the Microsoft 365 binding.
- Validate framework and initialized-project authority; run the changed-skill admission gate and initialization tests.
- Evidence:
- A derived project receives the same generic skill and both optional bindings.
- No generic authoring instruction names a mandatory MCP or publishing credential.
- Missing service tooling produces actionable install/login guidance without weakening local artifact acceptance.
[~] DOC-TOOLCHAIN-001 — Replace the maintained deck's host-provided authoring backend
- Release target: 1.1.0
- Previous release target: 0.4.0 — pulled into scope per explicit user direction
(2026-08-16), alongside adding a documentation-artifacts-refresh checklist item to the
release protocol itself (see
docs/architecture/project-releases.md). - Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner: document-pair generation and the Literate-AI overview terminal Component
- Direction: The generic skill is connector-independent, but this repository's
regenerate.shstill locates artifact-tool inside a Codex presentations plugin. That is an explicit local backend, not a portable framework dependency. - Conclusion: Select a public, cross-platform Node or Python OOXML toolchain through
declared package metadata and a lock, bootstrap it only into ignored
OBJ_DIR, and preserve editable objects, notes, geometry, visual fidelity, and Google round-trip equivalence. Do not copy a proprietary plugin dependency into derived projects. Evaluation already chosepython-pptx/python-docx/ Pillow as the defaultbuild_deck.pypath;regenerate.shremains a Codex-plugin fallback. 2026-08-30:regenerate.shnow prefers the pinned$OBJ_DIR/doc-toolchainvenv (make doc-toolchain-bootstrap) and only falls back to Codex plugin discovery. Plugin discovery is kept until three-OS visual/export-back evidence closes. Landed ase6af04e5onfeat/cli-sdlc-debug(isolateda910ddb2). - Implementation:
- Evaluate public PowerPoint/Word libraries against notes, connectors, native
objects, fonts, rendering, and macOS/Linux/Windows support. Selected
python-pptx+python-docx+ Pillow as the portable default; Codex@oai/artifact-toolstays a documented fallback only. - Add a content-pinned authoring toolchain declaration and detect-before-install
bootstrap with actionable offline and authorization failures.
tools/doc-toolchain/authoring-toolchain.jsonpins python-pptx/python-docx/lxml/Pillow;scripts/bootstrap_doc_toolchain.py --detect|--install --allow-installandmake doc-toolchain-bootstrapinstall only into ignored OBJ_DIR.regenerate_python.shrefuses silent pip.tests.smoke.test_doc_toolchain_bootstrap. - Port the maintained deck builder onto the pinned python-pptx backend as the primary path. Plugin discovery remains fallback until semantic and visual parity pass. Live Google Slides were not regenerated.
- Evaluate public PowerPoint/Word libraries against notes, connectors, native
objects, fonts, rendering, and macOS/Linux/Windows support. Selected
- Evidence:
- Vanilla worker, empty
CODEX_HOME, no Codex plugin:regenerate.shrebuilds the checked-in package to temp outputs andscripts/verify_document_pair.pyreports 11 pass / 0 fail.tests.e2e.test_doc_toolchain_regenerateplustests.smoke.test_doc_toolchain_bootstrapunderLITAI_SESSION_ID=dev. - Local and Google-exported visible text and notes remain exact, and every slide passes full visual review on at least macOS, Linux, and Windows.
- Vanilla worker, empty
[x] CI-SHARD-001 — Generalize durations-based CI test sharding as a skill
- Release target: 0.8.0 (break-glass major-equivalent; was 0.4.1)
- GitHub issues: #83, #84, #85, #86
- Owner: CI/release tooling; provider-neutral, not literate-ai-specific content
- Direction: Windows CI's test run was the long pole (~45-58 min) because it ran the
whole suite in one job with no cross-runner parallelism, while Linux/macOS already had
some parallelism from a
{python: [...]}matrix. Fixed directly for this repository by splittingwindows-conformanceinto awindows-gatesjob (lint, OpenSpec/doc validation, CodeGraph, wheel-check — run once) plus a 3-waywindows-testsmatrix usingpytest-split's--splits/--groupagainst a committed.test_durationsfile. That fix is real but hand-authored directly into.github/workflows/ci.yml, not expressed through this framework's own Component/Flavor/skill system at all. - Conclusion: Generalize as an agent skill (operational/CI-maintenance skill, not a
specification-to-source skill — there is no existing skill category for "how to author
or improve a project's own CI pipeline" today) that: (1) detects the project's test
framework(s), (2) checks whether a maintained durations/timing-based sharding mechanism
exists for that framework (pytest →
pytest-split; Jest →--shard; Go →gotestsum/manual partitioning;cargo nextest→--partition; etc.), (3) if so, proposes or authors the job-matrix split plus the durations-seed file and its refresh procedure, and (4) if not, says so explicitly rather than silently leaving the project unsharded. Do not assume every framework has an equivalent topytest-split— record what's actually available per framework as the skill is authored, not speculatively. - Scope note (asked and answered 2026-08-16): sharding is not Windows-specific as a
technique — it helps anywhere one CI job runs a whole suite serially. It doesn't
extend to this repository's own Linux/macOS jobs for free: those call tests through
scripts/run_checkpointed_unittests.py(a customunittest-based fail-fast/resume runner), not pytest directly, sopytest-splithas nothing to attach to there today. Extending sharding to Linux/macOS in this repository specifically means either switching those jobs to a pytest-based invocation (losing or reimplementing the checkpointing/resume behaviormake release-checkdepends on) or building equivalent durations-based splitting for the checkpointed-unittest runner — track that as a follow-up decision once the general skill exists, not as part of this item. - Next action: Skill contract landed (
litai project ci-plan,skills/agent/ci-test-plan). Agents author CI YAML from the plan; this item does not install language runtimes. Windows pytest-split stays; Linux/macOS checkpointed jobs stay unsharded. - Implementation:
- Author the skill: framework detection, per-framework sharding-mechanism availability table, matrix/job authoring, durations-seed generation and refresh procedure.
- Decide (with evidence, not assumption) whether extending this repository's own
Linux/macOS jobs to shard is worth the checkpointed-runner tradeoff above.
Decision: keep unsharded.
load_completedrequirescompleted == tests[:len(completed)]; parallel shards finish out of order. - Validate the skill against at least one non-Python project (Jest or Go) to prove
the framework-detection/availability-table approach generalizes, not just retrofits
the Windows pytest case. Fixture trees in
tests/unit/test_ci_test_plan.pycover Jest, Go, cargo-nextest, and Swift-unavailable.
- Evidence:
- A project with a slow single-job test run gets a proposed or authored shard split
appropriate to its actual test framework, or an explicit "not available for this
framework" result — never a silent no-op.
plan_ci_testsalways setssilent_noopfalse; unknown trees returnstatus: unavailable/reason: no_recognized_test_framework. - The skill does not assume pytest, Python, or this repository's own CI shape.
- A project with a slow single-job test run gets a proposed or authored shard split
appropriate to its actual test framework, or an explicit "not available for this
framework" result — never a silent no-op.
[x] CI-IMPACT-001 — Impact-based test selection for CI (skip, not just parallelize)
- Release target: 0.8.0 (break-glass major-equivalent; was 0.4.1)
- GitHub issues: #83, #84, #85, #86
- Owner: CI/release tooling; provider-neutral, not literate-ai-specific content
- Direction: CI-SHARD-001 makes a slow test run faster by spreading the same fixed
set of tests across more runners. It never reduces how much work happens in total. This
repository's own
test_checkpointing.pylooks like it might help further, but it doesn't: it only skips tests already recorded as passed for the same linear plan identity on a retry of the same local state (a developer re-runningmake validateafter fixing a failure) — a fresh CI runner has no prior state to resume from, so checkpointing has nothing to skip on a normal CI run, and its linear-prefix design (completed == prefix) is incompatible with parallel workers finishing tests out of order in the first place. The actual "run fewer tests" lever is different: skip tests whose covered code didn't change since the last known-good revision of the exact same commit lineage. - Conclusion: Generalize as an agent skill (same operational/CI-maintenance category
as CI-SHARD-001, and likely composed with it — impact selection narrows which tests
run, sharding parallelizes what's left) that: (1) detects whether the project's test
framework has a maintained impact/coverage-based selection mechanism (pytest →
pytest-testmonor coverage-guided selection; Go →go test -rundriven by package- level change detection; Jest →--changedSince/--onlyChanged; etc.), (2) if so, proposes or authors the wiring plus the coverage-map/history persistence and refresh procedure its mechanism needs, and (3) if not, says so explicitly. Do not assume every framework has an off-the-shelf equivalent; record what's actually available as the skill is authored. - Correctness constraint: impact-based selection changes what runs, not just how fast — a false negative (skipping a test that would have caught a real regression) is a correctness failure of the release process, not a performance tradeoff. Any authored/proposed wiring must fail closed (run the full suite) whenever the impact map is stale, missing, or its own identity/coverage data doesn't verifiably cover the exact diff being tested — never silently trust an unverified or partial map.
- Next action: None for this item. Optional extra
literate-ai[impact](pytest-testmon==2.2.0) is the skip runner;make python-checkandRELEASE_GATESstay full-suite. - Implementation:
- Author the skill: framework detection, per-framework impact-selection-mechanism availability table, wiring/authoring, coverage-map or history persistence and refresh procedure, fail-closed-to-full-suite behavior when the map can't be trusted.
- Decide whether and how this composes with CI-SHARD-001's sharding for a project
that has both mechanisms available (narrow the set, then shard what's left).
Compose is impact then shard; missing/untrusted maps select
shard_full_suite. - Validate against at least one non-Python project to prove the approach
generalizes. Jest
--changedSinceis recorded as available; Go package-graph tools stayunverified; cargo-nextest impact isunavailable(#84).
- Evidence:
- Live pytest-testmon==2.2.0 in an isolated venv: refresh runs both fixture
tests; a beta-only change reruns
test_betaand nottest_alpha(2 passed → 1). Stale/missing maps and.test_durationsforce--no-testmon.scripts/run_impact_pytest.py/ci_impact_run.pypass real--testmon. This repo'spython-check/ Windows shard jobs still do not use it. Landed as620c4fa3(isolated48b6f5c0).tests.critical.test_ci_impact_runandtests.unit.test_ci_test_plan. - The skill does not assume pytest, Python, or this repository's own CI shape.
- Live pytest-testmon==2.2.0 in an isolated venv: refresh runs both fixture
tests; a beta-only change reruns
[ ] PROC-KILL-001 — Windows process-tree kill misses late-spawned grandchildren
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.7.3 remaining in-package call sites. The Job Object
primitive,
run_with_tree_kill, and dispatcher bind shipped on this line beforev0.7.2; several timeoutPopensites still omitownership. - Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- GitHub issue: #72
- Owner:
src/literate_ai/adapters/_processes.py—process_group_options/terminate_process_tree - Direction: Windows
CREATE_NEW_PROCESS_GROUPonly affects consoleCTRL_BREAKrouting; it is notkillpg-equivalent. Tree kill is a separatetaskkill /Tsnapshot, and a grandchild that spawns after that snapshot (or whentaskkillis skipped, e.g. a sanitized environment missingSystemRoot) survives a supposed timeout-kill. The surviving descendant keeps the parent's inherited PIPE write ends open (hang / falseoutput_streamfailure) or keeps a file handle open in a directory the caller expects to be free to delete (PermissionErroron cleanup). - Reproduced live, independently, twice in one CI run (2026-08-16): landing the
CI-SHARD-001 Windows test-sharding split surfaced this exact bug class twice in a
single run, in two different shards, via two different symptoms:
tests/critical/test_authorized_host_execution.py::AuthorizedHostExecutionTests::test_timeout_kills_host_process_descendants— the descendant's sentinel file existed after the timeout kill, meaning the descendant was never actually terminated.tests/conformance/test_self_hosting.py::SnapshotReplicationConformanceTests::test_isolated_candidate_timeout_terminates_descendant_process_tree—PermissionError: [WinError 32] The process cannot access the file because it is being used by another process, cleaning up a temp directory a surviving descendant still held open. Both reruns passed on retry, consistent with a race rather than a deterministic failure — exactly the causal sequence #72 describes (grandchild spawn racing thetaskkillsnapshot).
- Conclusion: Assign the child to a Win32 Job Object with
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSEso the OS itself guarantees every descendant dies when the job handle closes, keepingtaskkillonly as a fallback for hosts where Job Objects are unavailable. Never treatCREATE_NEW_PROCESS_GROUPas a process-group primitive on Windows. - Implementation:
- Add Win32 Job Object assignment (
CreateJobObjectW+SetInformationJobObject(JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE)+AssignProcessToJobObject) in_processes.py(create_process_tree_ownership/ProcessTreeOwnership.bind). - Keep
taskkill /Tas an explicit fallback path, not the primary mechanism, for hosts where Job Object creation fails closed. - Add a regression that binds the root before a (simulated) late
grandchild and kills the job when
taskkillis unavailable (test_process_tree_ownership_binds_before_grandchild_spawn). - Adopt
create_process_tree_ownership+bindat remaining in-package timeout spawn sites that still pass onlyprocess_group_options()intoPopen(builders, host execution, SSH, sandbox, coding CLI, harness, source-index, persistent-service). Standalone worker scripts stay stdlib-only and keep validatedtaskkill. - Route remaining in-package Git
subprocess.run(timeout=)sites (parent checkout, tracker inspect, source capture) throughrun_with_tree_killso late Git/SSH helpers join the same Job Object / process-group kill as the Popen sites. Do this onmain/ 0.8.0; do not mergerelease/0.7.xor cut RELEASE-013 here. Parent checkout usesrun_bounded_process(reap then tree-kill) so lingering pipe holders are not mistaken for a hungcommunicate(). Other Gittimeout=sites remain in init origin lookup, user-config HEAD, source-index, and release Git helpers.
- Add Win32 Job Object assignment (
- Evidence:
- Fake-kernel32 regression: bind-before-grandchild, abandon-on-assign-
failure,
KILL_ON_JOB_CLOSEflag, POSIX has no job. - Remaining in-package spawn sites pass
ownershipintoterminate_process_tree. -
test_timeout_kills_host_process_descendantsandtest_isolated_candidate_timeout_terminates_descendant_process_treeremain the Windows CI canaries.
- Fake-kernel32 regression: bind-before-grandchild, abandon-on-assign-
failure,
[x] COVERAGE-GAP-001 — Mechanical detection of declared-but-unimplemented surface
- GitHub issue: #64
- Owner:
src/literate_ai/adapters/coverage_gaps.py,cli/build_run.py - Direction: A green
litai build/litai testisn't evidence the generated implementation does what the spec describes, since the same coding-CLI call writes both the implementation and its own tests. Two real examples: a generated HTTP API had route handlers literally bound toNonedespite 17/17 generated tests passing; a generated worker never called its own upstream client despite 15/15 tests passing. The issue proposed two directions: (A) mechanically derive expected behavioral facts from the spec and check the generated tests reference them, or (B) a second adversarial coding-CLI pass reading the spec and the first pass's tests to report uncovered behavior. - Conclusion (2026-08-16): Landed the cheapest honest slice of (A), scoped
narrower than originally proposed after a real finding changed the design mid-flight:
Entrypoint.path(the only structurally machine-readable "declared surface" the Component schema offers today) turns out to be a purely declarative/logical value — nothing instandard_project.pyever resolves a real file or directory at that path inside the generatedsources/tree. A per-entrypoint path-scoped scan was designed first, then discarded once this was found, in favor of a whole-generated-tree scan for common stub markers (NotImplementedError,TODO/FIXME, a string-keyed handler/route table entry bound toNone) — catches the API-routes-are-Noneexample exactly; does not catch the worker-never-calls-its-client example, which is a dead-code/call-graph question needing a fundamentally different, heavier static- analysis feature, explicitly deferred rather than faked. Direction (B) (adversarial second pass) was not attempted — real per-build API cost, nondeterminism, and its own trust-boundary problem (a lazy adversarial pass can rubber-stamp gaps) make it a separate, larger decision, not an MVP. - Landed as fail-closed on high-confidence stubs: path-keyed
/-prefixedNonehandlers andNotImplementedErrorin generated product files faillitai build/testwithbuild.unimplemented_surface. TODO/FIXME, pass-bodied abstracts, andNotImplementedErrorin generated tests stay advisory. Fixture/sample corpus: 0% fail-closed hits (test_fixture_and_sample_trees_have_no_fail_closed_hits). Not live generation traffic. - Worker path: scan runs on the worker after rebuild, before the runtime
tree is deleted. Optional
coverage_gapsonurn:literate-ai:schema:v2:execution-dispatch-result(literate-ai/coverage-gap-report@3); SSH control results copy it. Scan-side defects still yieldnulland never fail the lifecycle. Landed as7598aee4(isolated6419cbec). - Implementation:
-
coverage_gaps.py:find_coverage_gaps()— whole-tree stub-marker scan, typedCoverageGapReport/CoverageGapwith acanonical_identity(). -
build_run.py:_scan_coverage_gaps()wires the scan into the local build path only; fails closed toNone(never raises) on any scan-side defect. - Worker-dispatched builds report
coverage_gapsthrough the dispatch result (optional on the wire). - Characterize false-positive rate against fixtures, samples, and labeled
unit fixtures; promote fail-closed only for path-keyed
Nonehandlers and productNotImplementedError. Live generation traffic was not used. - Direction (B) (adversarial second pass) deferred; see
docs/history/roadmap/coverage-gap-detection.md.
-
- Evidence:
- Unit tests (
tests/smoke/test_coverage_gaps.py) cover: no gaps on fully implemented source;NotImplementedError/TODO/None-bound-handler markers each flagged with the correct reason code; nested files scanned; report identity stable and content-addressed. - Integration tests exercise the real
build_run.pywiring (_scan_coverage_gaps) againstsamples/hello-component's realcomponent.mdauthoring, both the clean and the stubbed case. - Worker path:
tests.unit.test_cli_command_worker_lifecycle,test_remote_execution,test_execution_dispatch_contracts. Full livelitai buildfrom scratch remains unrun.
- Unit tests (
[x] DOCS-004 — Refresh and republish the Literate-AI overview
- Owner: documentation artifacts / Google Workspace publication
- Direction: Regenerate the maintained Literate-AI presentation and update the
authorized existing Google Slides resource in place. Teach the publishing skill to
acquire the current Google bearer token with
gcloud auth print-access-token. - Conclusion: Preserve the checked-in reproducible authoring package, run its independent document-pair oracle and visual QA, publish only to the supplied resource ID, and verify the native Slides copy after upload. Never persist access tokens.
- Implementation:
- Add the just-in-time gcloud token rule to the framework and initialized-project presentation skills.
- Regenerate the local PPTX and pass document-pair and visual checks.
- Update presentation
1V9mt1JpEst_2ucC0eJIIw7dff64MrtFRfut8MSiukeEin place. - Export and compare the published realization, then update the QA and delivery ledgers.
[x] INTRINSIC-001 — Make user direction durable before implementation
- Owner: framework core / initialized-project agent workflow
- Direction: Every substantive suggestion must become a reasoned repository plan and unchecked TODO before implementation, survive session closure, and produce the appropriate changelog entry when complete.
- Conclusion: Ship a provider-neutral Agent Skill, make the top-level onboarding skill require it, and initialize every derived project with the same skill, active queue, and changelog. Conversation state is not durable project authority.
- Depends on: none
- Implementation:
- Define the work-item reasoning, ownership, dependency, evidence, and changelog
workflow in
skills/agent/record-user-directed-work/SKILL.md. - Add the skill and this resumption queue to framework and derived-project onboarding.
- Add initialized
docs/roadmap/active-work.mdandCHANGELOG.mdtemplates. - Prove initialized projects contain and validate the complete workflow.
- Package the synthetic matrix JSON in the wheel; the first clean wheel gate found that the root template package-data list admitted Markdown but omitted this JSON.
- Define the work-item reasoning, ownership, dependency, evidence, and changelog
workflow in
- Evidence:
- Skill creator validation passes for both shipped skill copies.
- NVIDIA SkillEvaluator's schema, PII, license, quality, Unicode, and lint admission checks pass without LLM evaluation.
- Unit initialization tests and clean
make wheel-checkatfd199c1prove all durable files exist in both the source template and installed wheel.
[x] TRACKER-HOST-001 — Detect GitHub vs GitLab from Git remotes and use gh or glab
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #188
- Owner:
litai project tracker,skills/agent/record-user-directed-work - Direction: Fully support looking for issues and pull or merge requests in any
Literate AI derived project. Read Git remotes (the same authority as
.git/config, including worktrees). If the URL is on GitHub, useghto read, modify, or write issues and pull requests. If it is on GitLab, including self-hosted hosts whose DNS labels includegitlab, useglabto read, modify, or write issues and merge requests. - Conclusion: Do not hard-code GitHub.
litai project tracker inspectclassifies the forge and names the CLI plus list argv. Agents wrap that command; they do not re-parse remotes. Unknown hosts skip tracker reconciliation fail closed. GitHub and GitLab remotes withoutoriginand in disagreement areproject.tracker_host_ambiguous. Tokens in remote URLs never appear in inspect evidence. This is not GitLab release-gate dispatch (RELEASE-005);--target gitlabforlitai release checkstays unsupported until that provider exists. - Scope boundary: Do not add Bitbucket, Jira, or a third tracker client as a
default; ADR 0050 admits other trackers and review systems as explicit
project or user overrides (TRACKER-DEFAULT-001). Do not
change repository-lineage resolution. Do not wrap every
gh/glabwrite verb insidelitai; inspect names the CLI, agents invoke it. - Depends on: none
- Implementation:
- Classify GitHub, GitLab, unsupported, and ambiguous hosts from remote URLs.
-
litai project tracker inspectreads remotes through Git and emitsissue_list/review_listargv. - Update
record-user-directed-work(catalog and init template) and rootSKILL.mdso planning passes are forge-neutral. - Prove a GitLab remote inspect names
glabandglab mr listin CI.
- Evidence:
- Focused unit tests for URL classification and CLI inspect.
- Catalog and init-template skill copies remain byte-identical.
[x] TRACKER-DEFAULT-001 — Make forge issues and reviews the default tracker and coordination channel
- Priority: P1
- Release target: 1.2.0
- Owner:
litai project tracker,litai project guidance,litai prompt,skills/agent/record-user-directed-work, projectSKILL.md - ADR: 0050 (Accepted 2026-10-09)
- Direction: A project's default task and project-management system is the forge hosting the repository that receives issues and PRs (GitHub or GitLab): problems are issues, changes are PRs/MRs against a target branch, and agents coordinate through issues. Another tracker, external agent ledger, or review system (for example Gerrit) is a user or project override, never a hard-coded default.
- Implementation (1.2):
- Generic external task envelope:
LITAI_EXTERNAL_TASK_ID,--external-envelope,prompt_routing.external_envelope_bypass,prompt-task@2;LITAI_MAC_TASK_ID/--mac-envelopeare deprecated aliases. -
guidance --operation landpasses the policydefault_branchasgh pr create --base/glab mr create --target-branch. -
litai initno longer installswrite-mac-project-contract; that skill is an opt-in build/test runner contract. -
SKILL.md, the templateSKILL.md,prompt-master, and the ledger architecture state the forge default and treat MAC as an optional override.
- Generic external task envelope:
- Follow-up: TRACKER-DEFAULT-002 (1.3.0).
- Evidence:
-
tests/smoke/test_prompt_routing.pycovers the generic and deprecated envelope spellings;tests/smoke/test_project_guidance.pycovers the GitHub and GitLab target-branch argv.
-
[ ] TRACKER-DEFAULT-002 — Coordinate through issues and admit tracker overrides
- Priority: P1
- Release target: 1.3.0
- Owner:
litai work,litai project peer-work,litai project tracker,skills/agent/record-user-directed-work - ADR: 0050
- Direction: Finish ADR 0050 after TRACKER-DEFAULT-001: issues are the default resumable coordination record, GitLab matches GitHub, and a project or user may select another tracker or review system.
- Depends on: TRACKER-DEFAULT-001
- Implementation:
- Make issues the resumable coordination record; demote the Markdown
work_queue/litai work recordto a local mirror or override (cli/work.pyalso ignoresrepository_policy.work_queuetoday). - GitLab
review_status/issue_statusand forge-neutralpeer-workclassification and garbage collection. - Project (
repository_policy) and user preference selecting another tracker or review system, with typed refusal when its client is unavailable.
- Make issues the resumable coordination record; demote the Markdown
[x] CANDIDATE-DIAG-001 — Retain bounded build-diagnostic excerpts for rejected generated candidates
- Priority: P1
- Release target: 1.2.0
- Owner:
tests/conformance/support/sample_runner.py(runner-pinned),literate-ai/generated-candidate-rejection@1,src/literate_ai/adapters/builders/ - Direction: A rejected generated candidate must say why it was rejected, both in retained evidence and in the repair feedback the next attempt receives.
- Context: 2026-10-09: the Linux
samplesgate at56163f0bexhausted threelinux-cgroup-budgetC++ attempts (twogenerated-source-build-rejectedwithbuilder.cpp_generated_source_rejected, onegenerated-test-behavior-mismatchonfractional-cpu-floor). The compiler output exists:builders/cpp.pyputs the last 4000 bytes of stdout and stderr in theBuildErrormessage. But the build-rejected record keeps onlybuild_failure_code,candidate_tree_identity, anddiagnostic_identity, sorejections-NN.json, the evidence ledger, and the gate log cannot show the error. Those same records are thecandidate_feedbackfor the next attempt, so attempts 2 and 3 were repaired without the compiler error. Contract rejections already keepmessage. - Conclusion: Add a bounded, redacted
diagnostic_excerpt(UTF-8, tail-limited, for example 4 KiB, with the same secret and host-path redaction as coding-CLI failure excerpts) to build-rejected and test-behavior-mismatch records. Keep it inside the hashed diagnostic sodiagnostic_identitynames the bytes shown. Feed it to repair. Keep it outside semantic generation and cache identities other than repair feedback. - Depends on: none
- Implementation:
- No builder change: the C++, Swift, Rust and Bazel builders already put a
~4000-byte output tail in the
BuildErrormessage, so the runner excerpts it. -
_candidate_diagnostic_excerptinsample_runner.py: secrets redacted, host path directories collapsed to<host-path>/(basenames kept), tail-bounded to 4096 UTF-8 bytes. -
generated-source-build-rejectedrecords carrydiagnostic_excerptinside the hashed diagnostic.generated-test-behavior-mismatchcarries the generated expected and observed values. Independent-verifier mismatches carry none, because their expectations are verifier-only. The record schema stays@1: the field is additive and no consumer validates keys. - Repair feedback carries the excerpt unchanged through the plan stage's
previous_candidate_rejections.rejections-NN.jsonand the attempts summary in the gate log include it. - Runner review and re-pin for
sample_runner.py.
- No builder change: the C++, Swift, Rust and Bazel builders already put a
~4000-byte output tail in the
- Evidence:
-
tests/smoke/test_candidate_rejection_diagnostics.pycompiles a deliberately broken C++ source with the host compiler and finds its error in the rejection record, the attempts envelope, and the next plan'sprevious_candidate_rejections. It also checks secret and host-path redaction, the byte bound, and that behavior mismatches expose both generated values.
-
[x] PARENT-SUBTREE-001 — Check out parents under parents/<id> with submodules and LFS
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #189
- Owner:
litai project parent checkout, repository inheritance docs, agent skill - Direction: When checking out parent repositories to update them, search them,
or file issues and review requests against them, always manage the checkout
in the current project under
parents/<id>/. If the parent uses submodules or Git LFS, run the extra Git operations so the tree is complete. - Conclusion: Contribution/search checkouts are not lineage resolution. Lineage
stays non-executing plumbing in
OBJ_DIR/repository-lineagewith no working tree, hooks, or submodule execution.litai project parent checkout URL[#REVISION]clones or updatesparents/<id>/with--recurse-submodules, thengit submodule update --init --recursiveandgit lfs pullwhen pointers exist. Contribgit subtreeporcelain is not required (it is absent on many hosts); the layout is the subtree prefix in this project. Never clone parents into/tmpor extra Git worktrees.parents/is excluded from the child's index via.git/info/excludeand is not catalog authority. URLs with embedded credentials fail closed. - Scope boundary: Do not fold a parent's branded product into this catalog
because a checkout exists. Do not auto-commit parent bytes onto the child's
default branch. Do not replace
litai update/init --fromwith this checkout. - Depends on: TRACKER-HOST-001 when filing issues or review requests against the parent.
- Implementation:
-
litai project parent checkoutclones/updatesparents/<id>/. - Initialize submodules; pull LFS when pointers are present.
- Document the contribution path as distinct from lineage resolution.
- Add a submodule fixture so checkout initializes a nested module.
-
- Evidence:
- Focused CLI test clones and updates a local parent under
parents/. - Credentialed URLs fail closed.
- Focused CLI test clones and updates a local parent under
[x] USER-MCP-001 — Operator-local MCP catalog; offer setup; Jira only when available
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #192 (Jira consumer #191)
- Owner:
litaiCLI entry, operator-local user config,skills/agent/configure-operator-mcp,skills/agent/release-project - ADR: 0021, 0022, 0023
- Depends on: CHANNEL-VOCAB-001 for the envelope. ADR 0021/0023 are accepted for 0.8.0.
- Direction: Each user keeps an MCP list under
$HOME/.config/literate-ai(honorXDG_CONFIG_HOMEandLITAI_CONFIG_DIR). If that directory has nothing in it when they launch anylitaicommand, offer to set it up. Jira is the same task: associate a major/minor Epic, Story, or Task only when a Jira MCP is listed and connected/available. After association, every significant mutageniclitaicommand (any user) appends a bounded comment on that ticket — the same event class as Slack and Outlook, using CHANNEL-VOCAB-001 so Literate AI is clearly the author. Do not invent a third tracker client. - Conclusion: An interactive coding session follows
skills/agent/configure-operator-mcpto discover already-connected session MCPs and write the catalog. Interactive TTYlitaiwithout an agent still offers ids-only setup;--json/ non-TTY / CI skip the prompt and continue with no MCPs. Declining writes an empty catalog so the offer does not repeat. an organization MCP service publishes a static URL list andmcp_registry(YAML plus scraped/metadata— an MCP of MCPs). Setup may consult a reachable registry or already-connected session MCPs; MaaS is not a product dependency. Tokens never enter project authority or git. GitHub/ghand GitLab/glabremain the repository tracker (TRACKER-HOST-001). Mutagenic verbs:init,update,reparent,catalog copy, lock writes,generate/source admission, rebuilds that write, convert, andrelease prepare/publish/advance-default-branch. Not mutagenic:help,version check, read-onlyplan,project validate, tracker inspect, probes, documentation-review compute.release publishstill also comments a summary of completed queue items. Jira outage after a successful mutation is fail-open with a recorded skip. No associated ticket means skip comments, not a new issue per command. - Scope boundary: Do not call MCP tools from every read-only command. Do not
fail closed when Jira is absent. Do not store secrets in
literate.project.json. Do not post tokens, private prompts, or worker hostnames on the ticket. - Implementation:
- Versioned operator catalog (
mcps.json) under the config directory. - Offer setup when the directory is missing or empty; write empty catalog on
decline. Agent skill
configure-operator-mcpowns session MCP discovery; the CLI TTY offer is the no-agent fallback. - Classify mutagenic vs read-only
litaiverbs once; Jira, Slack, and Outlook share it and emit CHANNEL-VOCAB-001. - Associate Jira Epic/Story/Task only when that MCP is listed and available;
otherwise skip with a named reason (
skills/agent/associate-release-jira). - Journal each mutagenic command (user, command, project, revision, outcome)
and have agents comment on the associated major/minor ticket; on
publishalso summarize completed queue items (#191).
- Versioned operator catalog (
- Evidence:
- Focused tests isolate
LITAI_CONFIG_DIR/ non-TTY (no HOME pollution, no prompt in CI). - Mutagenic success writes an author journal event; read-only commands do not; absent catalog file skips journal; Jira MCP posting is the agent skill.
- Catalog and init-template skill copies remain byte-identical.
- Focused tests isolate
[x] MCP-CATALOG-001 — MCP create, modify, and hygiene as a first-class catalog kind
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #193
- Owner: project catalog, documentation, agent skills
- ADR: 0024
- Direction: As a project evolves, MCP servers it creates and modifies are a fundamental catalog concern — same durability class as Components, Flavors, skills, workflows, and routing — not a one-off operator plugin.
- Conclusion: Hygiene is identity pins, versioning with the project, create/update without a drifting second copy, deprecation, no secrets in repository authority, no hidden generation-prompt requirements, and fail-closed auth only at seams that need the MCP. A maintainer's personal MCP is not product policy.
- Scope boundary: Distinct from operator opt-in
(USER-MCP-001),
from an embedded MCP inside a generated application
(
python-service-application), and from PLUGIN-001's later CLI-as-MCP adapter (one consumer of this hygiene). Sentinel and schema are ADR 0024. - Depends on: USER-MCP-001 for how operators discover and opt into servers.
- Implementation:
- ADR for catalog shape, sentinel, and what "hygiene" rejects.
- Create/modify path that pins identity the same way skills do
(
litai catalog copy mcp:). - Init template
mcps/root andmcp_roots;litai catalogcomposition for themcpkind.
- Evidence:
- Accepted ADR plus focused tests that secrets, prompt leakage, reserved operator ids, and unpinned/duplicate copies fail closed.
[x] SLACK-NOTIFY-001 — Optional Slack channel for significant mutagenic litai events
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #194
- Owner:
litaiCLI, operator-local config, optional project policy - ADR: 0023
- Direction: A project may optionally register a Slack channel. After that,
significant mutagenic
litaicommands run by any user post to that channel so it becomes institutional knowledge for updates, releases, and other major CLI events. - Conclusion: Use the same mutagenic verb set as
USER-MCP-001
and the CHANNEL-VOCAB-001
envelope (Literate AI as author). Channel id may live in project
policy; tokens and webhooks stay in
$HOME/.config/literate-ai. Prefer a Slack MCP from the operator catalog when listed and available. Slack outage after a successful mutation is fail-open with a recorded skip, not a rollback. Unregistered projects send nothing. - Scope boundary: Do not post secrets, tokens, private prompts, or worker hostnames. Do not make Slack a mandatory product dependency. Do not notify every read-only command. Do not fork a second mutagenic-verb list or a channel-specific prefix.
- Depends on: USER-MCP-001 for the operator MCP/credential list and the shared mutagenic classifier; CHANNEL-VOCAB-001 for the envelope.
- Implementation:
- Optional project registration of a Slack channel (no secrets in git).
- Reuse the USER-MCP-001 mutagenic vs read-only classifier.
- Post a CHANNEL-VOCAB author event when registered; skip with evidence
when Slack/MCP is unavailable (
associate-release-jiraplus journal).
- Evidence:
- Tests: webhook/token-shaped channel ids are rejected; unregistered
projects have no
institutional_channels; mutagenic path journals; read-only path does not.
- Tests: webhook/token-shaped channel ids are rejected; unregistered
projects have no
[x] CHANNEL-VOCAB-001 — Shared Literate AI author or recipient vocabulary for Jira Slack and Outlook
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #195
- Owner: shared channel envelope (Jira comments, Slack, Outlook)
- ADR: 0022
- Direction: Jira, Slack, and Outlook need one vocabulary so a human or agent can tell whether Literate AI authored the message or is the recipient of task information to act on for a named project.
- Conclusion: One envelope: stable marker, role (
author|recipient), kind (mutagenic-cli|inbound-task|publish-summary), project identity, optional command/revision/outcome. Human-readable first line plus a parseable trailer. Outbound mutagenic events and publish summaries areauthor. Inbound mail (and later Slack/Jira instructions) that should become work arerecipient.recipienttext is not project authority untilrecord-user-directed-workrecords it. Unmarked or spoofed messages are ignored. No secrets, tokens, private prompts, or worker hostnames. - Scope boundary: Do not invent per-channel prefixes. Do not execute inbound
bodies. Schema is ADR 0022.
GitHub/
ghand GitLab/glabstay the repository tracker. - Depends on: none
- Implementation:
- Specify the envelope (fields, first line, trailer) and reject secret-shaped payloads.
- Formatters for Jira comment, Slack post, and Outlook subject/body share it.
- Parser for inbound
recipientmessages used by Outlook (then Slack/Jira).
- Evidence:
- Round-trip tests: author mutagenic event and recipient inbound-task parse on all three channel shapes; unmarked text is not admitted.
[x] OUTLOOK-MAIL-001 — Outlook MCP for status mail and inbound project work
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #196
- Owner:
litaiCLI, operator-local config, Outlook MCP - ADR: 0023
- Direction: Outlook is a first-class operator MCP. Generate status-update
mail for significant mutagenic
litaicommands, and accept inbound mail that tells Literate AI to do work on a given project. - Conclusion: Same gating as Jira: listed in
$HOME/.config/literate-aiand connected/available. Outbound mail uses CHANNEL-VOCAB-001 as author and the USER-MCP-001 mutagenic verb set. Inbound mail with Literate AI as recipient plus a project identity is queued throughrecord-user-directed-work, not executed from the body. Authenticate via the Outlook MCP mailbox; unmarked mail is ignored. MaaS ships anoutlookserver; MaaS is not required. Tokens stay operator-local. Outage after a successful mutation is fail-open. - Scope boundary: Do not make Outlook mandatory. Do not treat email as specification or lock authority. Do not auto-send to arbitrary addresses without project registration (to/from allowlist).
- Depends on: USER-MCP-001, CHANNEL-VOCAB-001
- Implementation:
- Optional project registration of Outlook to/from (no secrets in git).
- Send CHANNEL-VOCAB author mail on mutagenic commands when Outlook is
available (journal plus
associate-release-jira). - Receive
recipientmail, parse the envelope, record a queue item (skills/agent/ingest-channel-workfrom an interactive session). There is no mailbox poller or drain daemon.
- Evidence:
- Tests: unavailable Outlook is skip-by-catalog; mutagenic send uses the author envelope; inbound unmarked mail is ignored; inbound recipient mail parses and the ingest skill forbids mutating catalog authority.
[x] WEBMCP-001 — WebMCP as a fundamental front-end skill
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #198
- Owner: specification-to-source skills, MCP catalog kind, front-end generation
- Direction: Add WebMCP as a fundamental skill for building front-ends. WebMCP exposes in-page tools (JavaScript functions or HTML elements) for agents; treat it as MCP in the browser, not a second protocol.
- Conclusion: The WebMCP skill/Component inherits from the MCP
skill/Component. Enhance the MCP parent as needed so operator-local
~/.config/literate-aiservers, projectmcps/<id>/mcp.md, embedded application MCP, and WebMCP share one parent and stay distinct at the leaves. Do not put WebMCP in generation prompts as a hidden operator-MCP requirement. - Depends on: MCP-CATALOG-001 (landed). Pair with FRONTEND-001 and BACKEND-001.
- Implementation:
- Author a nested
specification-to-sourceWebMCP skill (catalog + init template, byte-identical) that inherits the MCP parent. - Enhance the MCP parent skill/Component so WebMCP can inherit without duplicating hygiene, identity pins, or secret rejection.
- Author a nested
- Evidence:
-
make skills-check(LITAI_SESSION_ID=dev): SkillEvaluator Tier 1 pass formcp-applicationand nestedwebmcpplus catalog/template copies.assert_generation_skills_are_mcp_freeandgeneration_skill_requires_operator_mcpstill reject~/.config/literate-ai. -
tests.smoke.test_app_stack_skills.AppStackSkillCatalogTests: WebMCP pins the MCP parent identity and fails closed without it; operator catalog ids are not product authority.
-
[x] FRONTEND-001 — Fundamental front-end Component and skill base
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #199
- Owner: Component catalog,
lang-javascript/ React / WebMCP skills - Direction: Develop a fundamental (base class) front-end in JavaScript + React or WebMCP, plus a fundamental (base class) skill. React dashboard and WebMCP skills are deltas of that parent, not one-off samples.
- Conclusion: This is the reusable UI parent. Settle axis composition with FLAVOR-007 and npm capability with FLAVOR-JS-NPM-001. A UI Component kind remains COMPONENT-KIND-002. Acceptance stays evidence-bound (ACCEPTANCE-RENDER-001).
- Depends on: WEBMCP-001
- Implementation:
- Author the parent front-end skill/Component; nest React and WebMCP as
deltas.
ui-reactoccupiesimplementation.ui-frameworkandlang-javascript-reactremains an input alias. - Keep Windows-portable paths and do not special-case one sample in the harness.
- Author the parent front-end skill/Component; nest React and WebMCP as
deltas.
- Evidence:
-
FilesystemComponentLockPlannerrejects the front-end parent with+pythonand rejects+ui-reactwithout JavaScript (component_lock.flavor_target_unsatisfied). - Nested skills are deltas; catalog and init-template copies are
byte-identical (
test_catalog_and_template_copies_are_byte_identical,test_nested_skills_are_deltas). FLAVOR-007 live generate/build/accept remains open.
-
[x] FRONTEND-002 — Browser-instrumented frontend verification
- Priority: P0
- GitHub issues: #64, #134
- Owner: front-end specification-to-source skill and agent verification skills
- Direction: A generated dashboard passed build, generated tests, and independent text probes while omitting most of its specified information architecture and displaying invalid numeric values. Make browser inspection a reusable frontend practice rather than a downstream project's ad hoc recovery step.
- Conclusion: The front-end parent owns instrumentability and minimum rendered-UI assertions. A separate agent skill owns authorized browser execution because a generation prompt cannot grant itself host execution. Prefer Playwright when it is already available, but specify browser-observable evidence rather than making one package mandatory. Existing hash-only render acceptance remains useful but is not sufficient evidence of responsive structure or interaction behavior.
- Depends on: FRONTEND-001, ACCEPTANCE-RENDER-001
- Next action: Complete. Downstream projects can inherit the generation guidance and
follow
skills/agent/verify-frontend-browser/SKILL.mdafter execution authorization. - Implementation:
- Extend
frontend-applicationwith stable browser-observable landmarks, semantic states, finite-value rendering, responsive overflow, and interaction invariants. - Add an operator-side browser verification skill that captures desktop and mobile screenshots, console/page failures, structure, overflow, and specified interactions.
- Keep React dashboard guidance a compact delta and update every exact parent pin.
- Extend
- Evidence:
- Catalog and project-template copies are byte-identical; exact dependency pins resolve in the initialized catalog.
-
tests.smoke.test_app_stack_skills,tests.e2e.test_project_initialization_adapter(77 tests), andtests.conformance.test_sample_acceptance_interfaces(6 tests) pass. -
make skills-checkadmits every changed or added skill; browser verification scores B/88.5.make lint,make format-check, andlitai project validatepass.
[x] BACKEND-001 — Fundamental back-end skill indexed off Python, Rust, and Elixir Flavors
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #200
- Owner: specification-to-source skills, language Flavors
- Direction: Develop a fundamental back-end skill that knows the Component ecosystems for Python, Rust, and Elixir, indexed off those Flavors when selected.
- Conclusion: Flavor selection is the index: Python/Rust guidance applies
only when that language Flavor is selected. Elixir is the same rule; if
lang-elixiris absent, the skill records skip/unavailable for that ecosystem rather than inventing a Flavor in this item. WebMCP inherits MCP; this back-end parent owns server-side MCP/service ecosystems. - Depends on: WEBMCP-001 (MCP parent enhancement).
- Implementation:
- Author the parent back-end skill; contribute ecosystem chapters from
selected
lang-python/lang-rustFlavors. Missinglang-elixiris a named skip; no Elixir Flavor was invented. - Keep
python-service-applicationa delta of this parent where that reduces duplication.
- Author the parent back-end skill; contribute ecosystem chapters from
selected
- Evidence:
-
index_backend_ecosystemsinjects Python or Rust when selected, omits the unselected chapter, and records("elixir", "lang-elixir Flavor is not in the catalog"). Recipe assembly drops omitted nested skills (BackendEcosystemIndexTests).
-
[x] SAMPLE-APP-STACK-001 — Samples for WebMCP, front-end base, and back-end skill
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #201
- Owner:
samples/, sample conformance runner - Direction: Create samples for all of the above as peers of the current samples, with the same default sample settings.
- Conclusion: SAMPLE-MATRIX-002
stays: unpinned samples run exactly
lang-python+build-make+ host OS. Samples that must exercise WebMCP/React/JS pin those Flavors explicitly. Do not special-case one sample in the harness; extendpersistent-service/web-applicationsupport if the new samples need it (SAMPLE-PORTFOLIO-002). - Depends on: WEBMCP-001, FRONTEND-001, BACKEND-001
- Implementation:
- Add peer sample directories under
samples/(sample: true, same slot shape as existing peers unless an explicit pin is required):backend-base,frontend-base,webmcp-page. - Wire harness entrypoint kinds without a one-off exception
(
SAMPLE_HARNESS_ENTRYPOINT_KINDSadmitsportable-application,persistent-service, andweb-application).
- Add peer sample directories under
- Evidence:
- Unpinned language lists still default to
("python",)(test_unpinned_languages_default_to_python);backend-baseusessample.portable-appslots. -
+lang-javascript/+ui-reactstay JavaScript;lang-javascript-reactis a UI alias, not a language pin (test_explicit_javascript_pin_stays_javascript). - Focused tests:
tests.smoke.test_app_stack_skills(16 tests) plus flavor-markdown, skill-routing, schema, project-MCP, and wheel package-data checks. Harness-gap: nosamples/_harness/<id>/sample.jsonfor the new peers (same as python-service-example); livemake samplesstill needs model-egress acknowledgement and SAMPLE-PORTFOLIO-002 execution.json/oracles.
- Unpinned language lists still default to
[x] MCP-CLI-001 — litai posts to operator-catalog MCPs; discover flag off by default
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #202
- Owner:
litaiCLI, operator-local MCP catalog, agent skills - ADR: 0025
- Direction:
litaimust talk to MCPs listed in~/.config/literate-ai/mcps.jsonso mutagenic events are not missed when no coding session is attached. Add a CLI flag for MCP discovery that is off by default. When a session useslitaito do the work, remove those MCPs from session skills so posting is not double-entered. Keep operator, project, embedded, and WebMCP seams distinct. Teach the official MIT Python modulemcp(modelcontextprotocol/python-sdk) as the library for this process and for generated Python MCP servers. - Conclusion: CLI journals and fan-outs.
--discover-mcpsprobes; it does not write secrets.associate-release-jiraassociates and recordsinstitutional_channels.jira_issue; it does not re-post envelopeslitaialready sent. Inbound ingest stays an agent skill (no poller). - Depends on: USER-MCP-001 (landed).
- Implementation:
- Bounded operator-MCP transport (stdio JSON-RPC using catalog
command; officialmcpis optional extraliterate-ai[mcp], not a wheel dep). - Global
--discover-mcpsdefault off. - Fan-out after mutagenic journal; fail-open.
Stdio MCP spawn binds
create_process_tree_ownership(PROC-KILL-001). - Agent skills wrap
litaiand forbid duplicate channel posts. - Unittest/pytest isolate
LITAI_CONFIG_DIRand setLITAI_MCP_TRANSPORT=offsomake python-checkdoes not spawn the operator's~/.config/literate-ai/mcps.jsonor fail CLI tests that assert empty stderr.
- Bounded operator-MCP transport (stdio JSON-RPC using catalog
- Evidence:
- Fake-transport tests: listed Jira/Slack/Outlook post; missing command
or tool skips;
--discover-mcpsoff does not probe; flag on probes. - Catalog and init-template agent skills stay byte-identical.
-
test_project_policy_can_disable_model_source_intelligenceno longer seesLiterate AI skipped MCP notifyon stderr.
- Fake-transport tests: listed Jira/Slack/Outlook post; missing command
or tool skips;
[x] MCP-SDK-001 — Liberal-license MCP SDKs in the generation skill by selected Flavor
- Priority: P0
- Release target: 0.8.0 (break-glass major-equivalent)
- GitHub issue: #203
- Owner:
skills/specification-to-source/python-service-application(MCP parent section) and language Flavor gating - Direction: Enhance the existing embedded-application MCP skill to know popular liberal-license (no GPL) MCP implementations for every currently supported language, only when that Flavor is selected.
- Conclusion: Official org SDKs: Python
mcp, TypeScript/JSmodelcontextprotocol/typescript-sdk, Gogo-sdk, Rustrust-sdk, Swiftswift-sdk. C++ has no official SDK; cite an Apache-2.0 community option only if the license is still Apache-2.0. Do not add these libraries to thelitaiwheel. Do not mention GPL implementations. - Depends on: MCP-CLI-001
- Implementation:
- Flavor-conditional SDK table in the MCP generation skill.
- Evidence:
- Skill text names the SDK only under the matching language Flavor.
-
make skills-checkpasses.
[x] CLI-001 — Make help a scoped first-class verb
- Owner: framework CLI
- Direction: Provide
litai help, and allowhelpafter every command path so its position narrows the displayed scope. - Conclusion: Support top-level, prefix, conventional
--help, and canonical trailing forms such aslitai project validate help, including the global JSON contract. - Evidence: Six focused unit tests passed; installed-wheel coverage was added;
implementation committed and pushed as
e759868.
[x] INIT-001 — Admit harmless existing Git bootstrap state
- Owner: framework project initialization
- Direction:
litai initmust not reject files created bygit initor an existing starterREADME.md; it must still reject source until explicit adoption exists. The completed initialization must also introduce the optional private test-matrix fanout and tell users where to provide their own SSH worker assignments. - Conclusion: Preserve a regular
.git/directory and regular rootREADME.mdbyte-for-byte. Reject every other existing entry before mutation and point to the future explicitlitai init --adoptworkflow. Generate provider-neutral matrix guidance and an ignored local configuration example; never embed worker identities in the framework or initialized project. - Depends on: INTRINSIC-001 (recording mechanism may land in the same checkpoint)
- Implementation:
- Implement the narrow bootstrap-state admission boundary.
- Add adapter and CLI tests for preservation, source rejection, and unsafe entries.
- Add derived-project documentation, including private test-matrix setup and fanout commands.
- Prove initialized Git-ignore rules exclude the user-owned matrix configuration.
- Add installed-wheel proof.
- Evidence:
- Five focused initialization tests pass on macOS.
- The 65-test initialization/CLI/help suite passes on macOS except for the expected root documentation-review refresh performed after this authority update.
- Clean
make wheel-checkpasses atfd199c1, including initialized onboarding, matrix guidance, validation, lock, and plan from the installed wheel.
[ ] FLAVOR-001 — Add make build-system Flavor with smart init defaults
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: framework Flavor catalog (
flavors/make/), init adapter, CLI - Direction (revised after evaluation): Bazel is the right build system for
literate-ai's own qualification samples (hermetic, reproducible) but is wrong as
the default for new projects — it is not pre-installed on any OS and its
installation burden fails the very first
litai rebuildfor a new user. Make is pre-installed on macOS, every Linux distro, and Git-for-Windows. Similarly, every project needs an implementation language; Python is the right default because it has a rich ecosystem, is available everywhere without a compiler toolchain, and is the natural choice for documentation projects (Sphinx), scripting, and data work. The host OS is always knowable at init time and should never require--flavor. - Decision (confirmed):
+makereplaces+bazelas the defaultbuild.systemforlitai init. Bazel remains available and explicitly selected by the framework's own sample projects.+pythonis the defaultimplementation.language-ecosystemwhen no language Flavor is declared. A project with no language is dubious even for documentation (Sphinx is Python).- The host OS (
+macos,+linux, or+windows) is always auto-detected fromsys.platformand never required via--flavor. --flavoris now optional forlitai init. With no flags, the project gets["+python", "+make", "+<host-os>"]. Explicit--flavorvalues override the relevant axis. Unknown explicit values still fail with the known-selector diagnostic.- literate-ai's own
default_flavor_selectorschanges from+bazelto+makebecause the framework builds with Make, not Bazel.
- Depends on: none
- Implementation:
- Create
flavors/make/flavor.md,standard-make-command-profile.json, andopenspec/spec.md. The dedicated Make profile names its exact generated Makefile and build target; it does not reuse the Bazel target-label schema. - Implement typed native-Make Standard execution with exact GNU Make launcher, version, language-tool, output-custody, generated-test, execution, dependency, and drift evidence. Keep the existing Bazel profile and language-agnostic native adapter independent.
- Create
skills/specification-to-source/make-build-system/SKILL.mdwith full contract frontmatter. - Add Make to
_TEMPLATE_FILES,KNOWN_FLAVOR_SELECTORS,_FLAVOR_AXIS_DEFAULTS. - Add
host_platform_selector()(public) toproject_initialization.py. - Add
_apply_init_flavor_defaults()toproject.py; remove the "require --flavor" error;--flavoris now optional. - Change literate-ai
default_flavor_selectors:+bazel→+make. - Update tests: smart-default tests replace error-on-missing tests.
- Make the framework's own conformance sample catalog retain an explicit Bazel build selection instead of inheriting the new project-level Make default into samples whose executable harness remains Bazel-authored.
- Keep the repository skill catalog and initialized-project template copy of
make-build-systembyte-identical solitai initships the current skill contract instead of an older duplicate.
- Create
- Evidence:
-
litai init(no flags) →["+python", "+make", "+<host-os>"]inliterate.project.json; only python + make + host-os Flavor files installed. -
litai init --flavor javascript→["+javascript", "+make", "+<host-os>"](python not added; make fills uncovered build axis; OS auto-detected). -
litai init --flavor javascript --flavor bazel→["+javascript", "+bazel", "+<host-os>"](no make; no python; user's explicit axes respected). - Unknown
--flavor openscadexits withproject.init_flavor_unknown. - 28 initialization adapter tests pass.
- The focused sample-plan regression and a clean resumable
make release-checkpass from the repaired commit. - Template-parity regression proves initialized projects receive
make-build-systemversion 1.3.0, its root-level delegation contract, and the byte-identical typed Make profile.
-
[x] FLAVOR-002 — Add openscad domain Flavor to openstl-generator; re-init correctly
- Owner:
~/Src/openstl-generator(project-local Flavor, not a literate-ai built-in) - Direction: The openstl-generator project was initialized with only
+macosand no language or build-system Flavor, so the enclosure component'sopenscad-parametric-enclosureskill has no Flavor context andlitai lockwould fail on any component that declared language or build-system slots. OpenSCAD is a domain-specific language+compiler and should be represented as a Flavor on theimplementation.language-ecosystemaxis within the project. - Conclusion: After FLAVOR-001 ships (so
--flavor makeis valid), re-init or update openstl-generator with--flavor openscad --flavor make --flavor macos. Authorflavors/openscad/flavor.mdandflavors/openscad/openspec/spec.mdas project-local Flavor files (not shipped by literate-ai init). Completed 2026-08-30 onfeat/flavor-002-openscad(ce4df48, lineage mutexcd24d0d). Python still emits.scad; OpenSCAD is a second language-ecosystem Flavor (one-or-more) for.scad→.stlviaopenscad -o. There is nocomponents/esp32-enclosure; the lock target iscomponents/openscad-enclosure-generator. Not pushed. - Depends on: FLAVOR-001 (
+makemust exist before this init is valid) - Implementation:
- Author
flavors/openscad/flavor.md— primary_axisimplementation.language-ecosystem, targetopenscad, providesimplementation.language.openscad, contributions theopenscad-parametric-enclosureskill. - Author
flavors/openscad/openspec/spec.md— spec for the OpenSCAD toolchain (.scad→.stlviaopenscad -o). - Update
components/openscad-enclosure-generator/component.mdflavor_slots to declare language-ecosystem (one-or-more: python + openscad) andbuild.system(make). - Update
literate.project.jsonselectors to["+python", "+openscad", "+make", "+macos"]. - Confirm
litai verifypasses andlitai lock components/openscad-enclosure-generatorsucceeds.
- Author
- Evidence:
-
litai lock components/openscad-enclosure-generator --target host --checkis current (sha256:bf018e1391a6bf06a3c71460806a5a36af92862c76d723f972fa151a7e5e6085). Language slot python + openscad; build-system make; os macos. -
litai verifyreports no FAIL: authority pass, locks pass, source-intelligence skipped (provider none), receipt skipped.
-
[~] COMPOSE-001 — Provenance DAG for catalog composition across literate-ai projects
Release target: 1.1.0
Owner: framework CLI + new application service +
src/literate_ai/contracts/Direction: Every literate-ai project that authors a domain-specific Flavor (e.g. the
openscadFlavor in openstl-generator, or thedocker-crossbuildandqemu-x86_64Flavors in pythonos) is a potential library for other projects. Currently there is no transport mechanism: either something is general enough to ship withlitai init(baked into the wheel), or it stays siloed. The key architectural insight is that every copy creates an edge in a DAG rooted at literate-ai itself. literate-ai is the root. Derived projects are sub-nodes. If project C copies from project B which copied from project A which was initialized by literate-ai, the full provenance chain A → B → C must be recorded and validated to prevent cycles. The DAG is a first-class contract, not just metadata.Conclusion: The existing
.literate/initialization-origin.jsonis already the root edge of this DAG (everylitai initwrites it, pointing to the exact literate-ai version and git revision). COMPOSE-001 extends this with a.literate/imports.jsonfile that records additional edges — the non-root sources a project has copied from. Together they form the complete provenance DAG. Thelitai catalog copyverb manages this graph with DAG-safety enforcement. 2026-08-30: git sources land onfeat/cli-sdlc-debugas59c01c6f(isolated8a4181ca).catalog copyclonesgit:<url>[#revision], SCPgit@…, andhttp/https/ssh/git/fileURLs into a short temp dir, recordsgit:<sanitized-url>@<full-commit>, and fails closed on embedded credentials, option-like locators, and clones withoutliterate.project.json. Live openstl-generator copy,catalog graphMermaid evidence, andinit --from/update --importremain open. The operation:- Source identification — local path or git URL + optional ref.
- DAG validation — read the source project's
initialization-origin.jsonandimports.jsonto compute its transitive ancestor set. If the current project appears in that set, or the source project appears in the current project's ancestor set, reject withcatalog.import_cycle. This makes the DAG constraint a hard gate, not advisory. - Item selection — caller names items by kind and name
(e.g.
flavor:openscad,skill:specification-to-source/openscad-parametric-enclosure). - Pre-copy validation — items must pass
litai project validatein the source. - Copy — write files byte-for-byte into current project's catalog directories.
- Record provenance — write/update
.literate/imports.jsonwith the source project identity, item kind/name, file content identities, and the source's own transitive ancestor chain (so the full DAG is reconstructable without fetching the source again). - Post-copy authority refresh — update authority review and affected locks.
- Conflict policy — fail on name collision by default;
--overwriterecords both old and new identities.
Depends on: none (independent of INIT-002/003; composes with them)
Design notes:
- Root of the DAG: literate-ai itself has no
initialization-origin.jsonand noimports.json— it is the root by convention. Every other project's root edge isinitialization-origin.json. Additional edges accumulate inimports.json. - DAG schema (
literate-ai/catalog-imports@3):{ "schema": "literate-ai/catalog-imports@3", "imports": [ { "kind": "flavor", "name": "openscad", "source": { "project_id": "openstl-generator", "project_identity": "sha256:...", "ref": "git:github.com/.../openstl-generator@90e78a5", "transitive_ancestors": [ { "project_id": "literate-ai", "project_identity": "sha256:...", "ref": "git:github.com/NVIDIA-dev/literate-ai@5164c2b" } ] }, "files": [ {"path": "flavors/openscad/flavor.md", "identity": "sha256:..."}, {"path": "flavors/openscad/openspec/spec.md", "identity": "sha256:..."} ], "copied_at": "2026-08-10T..." } ] }transitive_ancestorscarries the source's own ancestor chain, making the full DAG reconstructable from the destination project alone without re-fetching sources. - DAG cycle check: before any copy, compute
dest.all_ancestors() ∩ {source} ∪ source.all_ancestors()and{dest} ∩ source.all_ancestors(). Either non-empty set means a cycle.all_ancestors()is the transitive closure ofinitialization-origin+imports[*].source.transitive_ancestorsfor all existing imports. .literate/imports.jsonis committed source authority, not gitignored. It records explicit decisions about what the project depends on, analogous to a package lock file. Upstream changes to a source project are visible as divergences at the nextlitai catalog copy --check, which runs the identity comparison without writing.litai update --importpulls the latest from a named source and re-validates the DAG.litai catalog graph— new read-only command that renders the project's full provenance DAG: root (literate-ai) → intermediate projects → current project, with each copied item annotated on the relevant edge. Output as structured JSON or a Mermaid diagram.- No transitive auto-pull: importing
flavor:openscaddoes not automatically pullskill:openscad-parametric-enclosure. Items are named explicitly. Transitive skill closure is SKILL-DEP-001's concern, which can compose with the DAG model. - Authority boundary: imported files enter the project as authored content
subject to normal authority review and skill validation. The DAG records where they
came from; it does not transfer trust. A broken source project produces broken
copies that fail
litai project validatein the destination. litai init --from <source> item...andlitai update --import <source> item...use the sameCatalogCopyServicecode path, ensuring DAG validation runs on every import regardless of which verb triggers it.
- Root of the DAG: literate-ai itself has no
Implementation:
- Define
CatalogImport,CatalogImportRecord,TransitiveAncestor, andCatalogImportsFilecontracts (literate-ai/catalog-imports@3) insrc/literate_ai/contracts/. - Implement
dag_ancestors(project_root)utility that readsinitialization-origin.json+imports.jsonrecursively and returns the transitive closure of project identities. - Implement
CatalogCopyServiceinsrc/literate_ai/application/— source resolution, DAG cycle check, pre-copy validation, file copy, provenance write withtransitive_ancestorspopulated from the source's own ancestry. - Add
src/literate_ai/adapters/catalog_import.py— source-project loader (local path + git clone into temp dir), item selector, imports.json store. Git clone is isolated then deleted; provenance isgit:<url>@<commit>. - Wire
litai catalog copy <source> <item>...in the CLI. Git locators are documented in help (git:is no longer “not yet supported”). - Wire
litai catalog graphin the CLI — renders DAG as JSON or Mermaid. - Add
--from <source> <item>...tolitai init. - Add
--import <source> <item>...and--checkmode tolitai update. - Add unit tests: git-source copy,
#revisionpin, embedded-credential rejection,file:URI clone, non-project clone, option-like locator. Remaining: DAG cycle (direct and transitive), conflict detection, unknown-item, source validation failure, provenance round-trip includingtransitive_ancestors, graph command output, andlitai init --fromintegration if not already covered elsewhere.
- Define
Evidence:
-
litai catalog copy /path/to/openstl-generator flavor:openscad skill:specification-to-source/openscad-parametric-enclosurecreates.literate/imports.jsonwithtransitive_ancestorstracing back to literate-ai, andlitai project validatepasses after the copy. -
litai catalog copy <source>where source is already an ancestor of the current project exits withcatalog.import_cycle. -
litai catalog graphrenders a DAG showing literate-ai as root → openstl- generator → the current project, with each copied item on the relevant edge. -
litai init --from /path/to/openstl-generator flavor:openscadinitializes a new project with the openscad Flavor, andimports.jsonrecords openstl- generator as the source with literate-ai intransitive_ancestors. - Focused
tests.smoke.test_catalog_importgit copy/pin/credentials/file-URI tests passed underLITAI_SESSION_ID=devfrom isolated8a4181ca; cherry-picked as59c01c6f.
-
[x] INIT-002 — litai init must require explicit project shape before scaffolding
- Owner: framework project initialization (
src/literate_ai/adapters/project_initialization.py,src/literate_ai/cli/project.py) - Direction:
litai initon a genuinely empty directory currently silently appliesdefault_flavor_selectors = ["+bazel", "+python", <host-os>]regardless of what the project is. An AI-to-OpenSCAD-to-STL project, a firmware project, a pure documentation generator, or a component library gets the same Python/Bazel defaults — which are wrong, misleading, and cause every downstream gate (litai lock,litai verify,litai plan) to fail or produce irrelevant results. The user should declare project shape upfront; the framework must not invent it. - Conclusion: Flavor shape is explicit-or-smart-defaulted: FLAVOR-001 superseded the
original required-
--flavordiagnostic.litai init PATHremains valid and stamps Python, GNU Make, pip, and the host OS unless--flavoroverrides an axis. Remaining work is optional--typepersisted asproject_type(defaultapplication, which keeps the hello starter). Unknown types fail closed. Non-starter types skip hello without making--typeor--flavormandatory. Do not break current init UX. - Depends on: none (no dependency on INIT-003; these are independent)
- Design notes:
- Minimum viable interface:
litai init --flavor python --flavor macosinstalls only python + macos Flavor files and setsdefault_flavor_selectors=["+python", "+macos"]. --type(or--kind) declares application identity:application,library,component-only,full-stack,document-generator,firmware,open-ended. Controls which starter Component template(s) are created and which workflow/routing stubs are included.- Unknown
--flavorvalues should suggest the closest known axis value and exit; they must never silently fall back to a standard Flavor. - Existing
--emptyflag is compatible: suppress starter Components regardless of declared type. litai help initmust list all valid Flavor axis values from the installed catalog.
- Minimum viable interface:
- Implementation:
- Add optional
--type(not required). Repeatable--flavoralready has structured missing/unknown diagnostics and scoped help; FLAVOR-001 smart defaults remain when--flavoris omitted. - Persist and apply
project_type(defaultapplication, omitted from existing manifests). Unknown types fail closed. Smart Flavor defaults still fill uncovered axes; do not require caller-provided selectors. - Filter
_TEMPLATE_FILESand_STARTER_TEMPLATE_FILESto install only the Flavor files matching the declared selectors; install cross-cutting files (skills, docs, routing, workflow stubs) unconditionally. - Emit a structured diagnostic (same JSON envelope as other errors) when
--flavoris absent or unknown, listing the known Flavor axis → values map. - Update
litai help initto describe--type; explicit--flavorhelp is implemented. - Update initialization tests to supply selectors and prove missing/unknown Flavor, required starter axes, selective installation, and no-build-system operation.
- Update the installed-wheel smoke test to pass at least
--flavor python --flavor macosand verify no Bazel/JS/Rust/C++ Flavor files are created.
- Add optional
- Evidence:
-
litai initwithout--flavorapplies smart defaults (Python, GNU Make, pip, host OS) rather than failing; unknown--flavorstill fails closed. - CLI
litai init --empty --flavor python --flavor macosfills remaining axes but does not install bazel/javascript/rust/cpp Flavor directories. Direct adapterflavor_selectors=("+python","+macos")with--emptyinstalls only those two.test_init_python_macos_does_not_install_unselected_flavors;scripts/wheel_smoke.pyscoped-shape init. -
litai verifyand the initialization lock pass on the shape-declared project without false positive failures from irrelevant Flavors. - Optional
--typedefaultapplicationkeeps hello;--type libraryskips it. Unknown types failproject.init_type_unknown. Focused init/CLI/help tests pass underLITAI_SESSION_ID=dev.
-
[x] INIT-003 — litai init --convert: LLM-assisted adoption of an existing repo
- Owner:
skills/agent/convert-project/SKILL.md(agent skill) +src/literate_ai/adapters/project_initialization.py(Python harness) - Direction:
litai init --convertis an LLM-assisted process, not a mechanical Python script. The Python harness handles scaffolding — detecting language indicators, creating catalog directories, merging.gitignore, skipping existing files, and writingliterate.project.json. But the intelligence lives in askills/agent/convert-project/SKILL.mdagent skill that guides the LLM agent to: survey the existing architecture, map modules/packages to literate-ai Components, derivecomponent.mdspecs from observed code behavior and tests, identify reusable conversion patterns to encode as durable skills, and create any project-local Flavors the domain requires. This is the inverse of the normal literate-ai flow (spec → code); for conversion it is: code + docs → spec authority. The pattern is analogous toskills/source-to-specification/but covers the full project rather than one Component at a time. - Conclusion: Two-layer architecture:
- Python harness (
--convertflag onlitai init): scans file types and manifests to infer--flavorselectors; createsliterate.project.json, catalog directories, and net-new authority files; skips all pre-existing files; merges.gitignoreentries; guards against double-conversion. - Agent skill (
skills/agent/convert-project/SKILL.md): the LLM reads the existing project's code, tests, and docs; derives Component specifications that capture observable behavior as authority; creates Flavors for domain-specific toolchains; records the conversion plan indocs/roadmap/active-work.md; never invents behavior not evidenced in the existing source. After the Python harness runs, the agent follows the conversion skill to complete the authority layer. The harness creates the empty catalog; the skill fills it with durable specification authority.
- Python harness (
- Depends on: INIT-002 (harness reuses
detect_repo_flavorsand_apply_init_flavor_defaults); the harness is partially implemented (see below). - Design notes:
- Python harness (partially shipped):
--convertflag exists; CONVERT-FW-002 quarantines pre-existing content; CONVERT-FW-009 omits host-local environments from the baseline copy and fails closed on environment-bound recipes, including through Make prerequisite closure. Partial-init recovery is shipped: resume when.literate/initialization-baseline.jsonexists withoutliterate.project.json. Integration test istest_convert_python_make_repo_validates_and_admits_derived_spec.~/Src/pythonosalready hasliterate.project.json(convert isproject.already_initialized); further lift is spec-merge, not a second--convert. - Agent skill (authored):
skills/agent/convert-project/SKILL.mdcovers inspect → quarantine → baseline → shim → lift, and points already-managed trees atlitai spec merge. Remaining evidence is skill validation plus a derivedcomponent.mdfrom a real or synthetic existing repo. - Spec derivation principle: a converted Component's
component.mdshould read as if written before the code existed. It names the objective, public interface, invariants, errors, and acceptance criteria — all derivable from tests and docs — without referencing specific function names, file paths, or internal state. - Partial init recovery: if
.literate/initialization-baseline.jsonexists butliterate.project.jsondoes not,--convertshould complete the interrupted scaffold rather than refusing.
- Python harness (partially shipped):
- Implementation:
- Python harness:
detect_repo_flavors(),_merge_gitignore(),--convertflag, skip-existing logic,project.already_initializedguard, 3 unit tests. - Author
skills/agent/convert-project/SKILL.mdwith the survey → scope → derive → record workflow and the spec-derivation principle. CONVERT-FW-002 replaced skip-existing with quarantine; the skill documents that protocol and points already-managed trees atlitai spec merge. - Partial-init recovery: detect
.literate/initialization-baseline.jsonwithoutliterate.project.jsonand resume scaffold writing without re-quarantining. - Integration test: run
--converton a synthetic Python+Make repo, verifylitai project validatepasses, then follow the conversion skill to derive acomponent.mdfrom the existing source.test_convert_python_make_repo_validates_and_admits_derived_spec. - Run
litai init --converton~/Src/pythonoswith the agent followingskills/agent/convert-project/SKILL.mdto produce authority specs. Already converted (literate.project.json,components/pythonos-core/component.md). Do not re-run--convert.
- Python harness:
- Evidence:
-
litai init --converton an existing project preserves pre-existing files, merges.gitignore, and createsliterate.project.json. -
litai init --converton a directory withliterate.project.jsonexits withproject.already_initialized. - SkillEvaluator
--no-llmadmitsskills/agent/convert-projectafter the spec-merge pointer (make skills-check). -
skills/agent/convert-project/SKILL.mdpasseslitai project validate. Frameworkpython-check2026-08-29 includes repository validation; the convert integration test re-validates a converted tree. - An agent following the conversion skill derives
component.mdspecs for~/Src/pythonosthat passlitai verifyand contain no implementation details.components/pythonos-core/component.mdis the derived authority (objective, public interface, noapp.py-style implementation paths). Re-runninglitai verifyon that checkout is pythonos-owned, not this framework cut.
-
[x] ENV-001 — Isolate managed Python environments across parallel agents
- Owner: contributor bootstrap / build-cache lifecycle
- Direction: No framework command may create, replace, or install into a shared root
.venv. Parallel agents and worktrees need independent managed environments beneath the disposable build boundary so one run cannot delete another run's interpreter. - Conclusion: Default
PYTHON_ENVbeneath_build/OBJ_DIR, keyed by an explicit session identity with a collision-resistant Make-invocation fallback. Preserve an explicitPYTHON_ENVoverride, but treat root.venvonly as user-owned local state. - Depends on: CACHE-002's
_buildboundary - Implementation:
- Add a portable session key contract and validate it before constructing paths; never interpolate arbitrary identity text into a filesystem path.
- Make default Make/bootstrap environments live at
OBJ_DIR/python-envs/<session-key>and keep every stamp inside that environment. - Ensure nested release-gate Make invocations inherit the parent
PYTHON_ENV; direct CLI tests, remote workers, wheel smoke tests, and coding-agent instructions continue to create or inherit their own explicitly bounded sessions. - Remove documentation and skills that recommend framework-managed root
.venv; retain compatibility only for an explicit operator override. - Add concurrent-process tests proving two sessions can bootstrap, test, and clean without deleting, replacing, locking, or importing from one another's environment.
- Evidence:
- Repository tests and two simultaneous fresh bootstraps never create or mutate
root
.venv, and cleaning one session cannot affect the other session's interpreter. - Eleven focused Make/bootstrap tests prove safe default/explicit session keys,
_build/python-envs/<session>placement, explicitPYTHON_ENVcompatibility, and a clean path that uses the system interpreter rather than deleting its active venv; the recursive-Make proof requires child gates to reuse the exact parent environment. A 48-test cache/bootstrap suite additionally runs two session bootstraps concurrently, probes both isolated interpreters, removes transient object state withclean, and proves both interpreters remain intact. Both shipped derived-project layout skills pass SkillEvaluator after adopting the same invariant.
- Repository tests and two simultaneous fresh bootstraps never create or mutate
root
P0 — regenerative qualification and platform matrix
[ ] LINEAGE-STREAM-001 — Reap Git/SSH descendants without weakening bounded output custody
Release target: 1.1.0
Priority: P0
GitHub issue: #120
Owner: bounded process execution used by repository-lineage Git fetches
Direction: Exact derived-project reparent/update over SSH fails after Git exits when a descendant retains inherited stdout or stderr, translating
BuildError: Tool descendants left inherited output streams openintorepository_lineage.git_failed.Conclusion: Preserve timeout, prompt suppression, bounded output, and descendant custody. Reap or terminate only the lingering process group after the direct tool exits, drain its bounded streams, and distinguish that recovery from a hung direct command. Keep the regression provider-neutral and free of downstream repository data.
Depends on: existing bounded-process and repository-lineage contracts
Next action: Parent-checkout Git uses
run_bounded_process; leftover streams map torepository_lineage.git_output_stream/project.parent_git_output_streaminstead of collapsing togit_failed. Framework validation and required CI remain the merge gate.Qualification follow-up: Full run
20260912T235040Z-0abd52atc5376bbdstops intest_observed_progress_resets_inactivity_deadline. Its real Python child must start and emit output within 0.75 seconds; the observed timeout is 0.758 seconds before the intended heartbeat sequence completes. No production deadline defect is established by this result. The fixture now uses the existing injected clock/process seam with deterministically scheduled drain observations on stdout and stderr. Its 2-second run exceeds the initial 0.75-second bound; removing activity updates from an in-memory mutant produces the expected no-progress refusal for each stream. The production executor and its deadlines are unchanged. Preserve real pipe-drain, silent-timeout and descendant-cleanup coverage; never treat a resumed checkpoint as complete release evidence. All 46 bounded-process, process-tree, Git-lineage adapter and parent-checkout tests pass in 59.226 seconds. Lint, format, OpenSpec and layout checks pass.- Establish deterministic progress-reset coverage and complete fresh exact-source full Python and required hosted qualification after the recorded failure.
Evidence:
- The inherited-stream regression completes without waiting for the descendant's natural lifetime and preserves the direct command's stdout, stderr, and status.
- Existing timeout, output-limit, and process-tree cleanup regressions pass.
- An exact SSH-style repository-lineage fetch fixture no longer translates the
recoverable descendant condition to
repository_lineage.git_failed. - Framework validation and required CI gates pass before merge.
Focused bounded-process, process-tree, and Git-lineage coverage passes 12 tests. Format and lint pass, and an exact downstream reparent plan against merge
16211164completes through the patched process executor after the failed-run lock is removed as directed by Git. Parent checkout now uses the same bounded executor;test_clone_reaps_git_descendant_holding_output_streamscovers lingering Git descendants on POSIX.
[x] LINEAGE-DEADLINE-001 — Bound slow exact Git fetches with explicit policy
Priority: P0
GitHub issue: #122
Owner: repository-lineage Git transport policy and CLI diagnostics
Direction: A valid authenticated shallow exact-parent fetch takes 138.452 seconds, beyond the generic 120-second process deadline, while cache warming is not acceptable qualification evidence.
Conclusion: Keep exact revision and descendant stream custody unchanged, but give lineage fetches a deterministic bounded policy with separate total, observable no-progress, and SSH-connect limits. Validate operator overrides within fixed framework bounds, identify the selected policy and provenance in deterministic CLI evidence, terminate the complete process tree on either deadline, and keep invalid repositories bounded without mutating Git configuration or depending on ambient cache.
Depends on:
LINEAGE-STREAM-001process-tree and output-stream custodyCompletion evidence: PR #123 passed all fifteen required checks on Linux, macOS, and Windows at final implementation head
1ffe2e05cf2432b6325f0da4dfa18160104bb8fc.Implementation:
- Add a typed deadline policy with safe defaults and validated minimum/maximum bounds, plus explicit CLI overrides for init, update, and reparent.
- Observe forced Git fetch progress, separate SSH connection/no-progress/total deadlines, and retain bounded output plus complete child cleanup.
- Record policy identity and default/CLI provenance in command evidence and actionable timeout diagnostics without persisting repository locators.
- Document the policy, exact invocation, and trust/resource boundary; update schema catalog, skills, changelog, and reviewed authority markers.
Evidence:
- An injected clock/process fixture proves a valid 138.452-second fetch succeeds below policy while over-bound work fails closed and cleans its process tree.
- Invalid policy, unreachable repository, exact revision/descendant custody, shallow file/SSH transports, Windows/Linux cleanup, and deterministic evidence/diagnostic regressions pass.
- A cold exact Physics Workbench sample parent fetch of
06681665e8382f3013cb35c6b92289b35e532dc5succeeds under the selected policy. - Full required cross-platform CI passes on the reviewable pull request before merge; downstream matrix qualification remains explicitly out of scope.
The focused policy, shallow file transport, exact-revision, descendant-stream, and portable process-tree suite passes 21 tests. A new empty
OBJ_DIRthen resolved the exact authenticated SSH parent and produced the read-only Physics Workbench sample reparent plan in 63.16 seconds with policy identitysha256:56746fe13c3058280d7ad21b62fd9eadb26457f89ff159b53ca422d1cbad653b; no pre-fetch or cache warming occurred. The injected clock retains the original 138.452-second regression independent of current network speed.
[x] TEST-PUBLIC-001 — Prefer public-API tests; remove private, trivial, and call-sequence coverage
- Priority: P0
- Owner:
tests/unit/,tests/conformance/, and any skill or architecture note that documents how this repository tests - Direction: Prioritize observable behavior through public APIs over individual methods or private implementation. Keep API contract tests (schemas, status/exit codes, documented errors, auth, backward compatibility), API-level component tests through the public interface with real internals and realistic persistence, complete workflows, and high-risk boundaries. Parameterize related inputs. Add method-level tests only when isolated logic is complex, safety-critical, algorithmically subtle, or substantially easier to diagnose independently. Do not keep tests merely for coverage count. Remove tests that duplicate the same behavior at multiple layers, assert internal call sequences, test trivial getters or wrappers, or depend heavily on mocks of internals. Each remaining test must name the distinct contract, failure mode, boundary, or regression it protects.
- Conclusion: In this repository the public surfaces are the
litaiCLI, published JSON schemas and typed wire contracts, public module functions/classes (no leading underscore), and stage-zero script stdout JSON such as host-bootstrapmain(). Mock only true external boundaries (network, host package managers, NTP, sibling processes). Keep fail-closed security, isolation, schema-immutability, and algorithmically subtle helpers (PATH-first discovery, semantic-diff bounds, process- tree kill, checksum pins) even when the helper is private. Delete the rest. - Depends on: none. Orthogonal to TEST-CACHE-001's checkpoint identity work.
- Implementation:
- Rewrite
tests/unit/test_host_bootstrap.pythroughmain()JSON; drop private helper and duplicated argv assertions. - Apply the same keep/remove bar to every other module under
tests/unit/andtests/conformance/. - Record the user-facing suite contract in
CHANGELOG.md.
- Rewrite
- Evidence:
- Host-bootstrap tests exercise readiness, clock-sync, discovery, and install
selection only through the JSON report and documented exits. 24 tests in
tests.unit.test_host_bootstrappass viamain()JSON; native clock clients are parameterized; pins and Windows PATH-first discovery remain method-level exceptions. - Remaining tests each protect a distinct public contract, workflow, boundary, or
allowed method-level exception; removed tests are private-helper, getter,
call-sequence, or duplicate-layer coverage. Net
-1380lines across 36 test modules (~45 deletions, ~24 rewrites onto CLI/public functions/JSON). Kept fail-closed security, schema immutability, Makefile-named classes, and subtle helpers. - Focused rewritten modules pass;
make python-checkpasses the reduced suite (exit 0).make format-checkandmake lintpass.
- Host-bootstrap tests exercise readiness, clock-sync, discovery, and install
selection only through the JSON report and documented exits. 24 tests in
[~] TEST-CACHE-001 — Checkpoint/gate skip logic is not dependency-aware; it only detects a changed test file, not a changed dependency
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.8.0. Filed mid-0.3.0 as a P0; the design (PR #45,
docs/roadmap/pinned-test-dispatch.md) landed, but every implementation checkbox below is still unchecked.v0.3.0shipped on a manually authorized tag oncemain's CI was green rather than waiting on this. Keep the P0 on the designed pin/dispatch service; do not substitute a parallel fingerprint in a patch cut. - Owner:
src/literate_ai/test_checkpointing.py,scripts/run_checkpointed_gates.py,scripts/run_checkpointed_unittests.py, GRAPH-001's canonical DAG, and by extension every Standard lifecycle/sample execution path that reuses cached build/test results by identity rather than re-deriving it - Direction:
make release-checkhas two independent checkpoint/resume layers, and neither is content-addressed against what a test or gate actually depends on:- Gate-level (
run_gates, the outerrepository-layout-check/python-check/lint/format-check/... chain):plan_identityhashes only the ordered list of gate names. A passed gate is skipped on resume purely because it is recorded"ok", with no fingerprint of anything the gate reads. - Python-test-level (
run_unittest_suite, insidepython-check):_test_source_fingerprinthashes only the test's own module file bytes — not the transitive closure of production modules, fixtures, or config it imports or reads at runtime. Demonstrated concretely in this session: edits toliterate.project.jsonanddocs/architecture/design-traceability.mdbetween checkpointedmake release-checkresumes are not test files, so no already-"ok"Python test that reads either at runtime would have been re-verified against those edits had it already been checkpointed as passing before the edit landed. This session avoided a false-green result only because the specific tests exercising those exact files happened to sit at the checkpoint's unexplored frontier, not because the mechanism guarantees it. This is a fail-open correctness gap in the tool intended to give release-check its "trust a resumed run" property, not a one-off bug.
- Gate-level (
- Conclusion: Decided: replace both ad hoc checkpoint schemas with one pin/test
pipeline/marker/dispatch model, keyed off identities this framework's authority graph
(GRAPH-001) already computes — a Component's
input_closure_identityand a Flavor's or skill'srevision_identity/identityalready fold in their dependency closure, so a pin's own hash is sufficient to detect "did anything this depends on change," without a second parallel dependency tracker. Full rationale, the explicit not-doing boundary, and the migration path forpython-check's own currently-unpinned test suite are in the detailed plan. 2026-08-27 judgment: the 2026-08-15 WIP (c0439340onworktree-agent-a1920861b1f6354a5, merge-based1af57ab) is obsolete as a land-as-is: it is a python-checksys.addaudithook("open")slice, not the designed service. It does not bumpPYTHON_SCHEMA_VERSION, misses import-time production modules, does not touchrun_gatesname-onlyplan_identity, and would regress class-levelSkipTest_record_known. Do not cherry-pick or rebase it. 2026-08-28: the designed item is in 0.8.0 (RELEASE-012); a lateropen()fingerprint that keeps_record_knownis still not TEST-CACHE-001 shipped. 2026-08-30: pin/pipeline/marker dispatch landed asacb161ff(isolated3b5d0c10, notc0439340).PYTHON_SCHEMA_VERSION = 3.run_gates/run_unittest_suiteconsultpinned_test_dispatch. Live rebuild still writes lock-listsubject_identityuntil callers userekey_receipt_to_pin.litai build/test/CI and no-oprelease-checkwall-clock remain open. - Detailed plan: Pinned test dispatch
- Remaining acceptance scope: Every unchecked item in the detailed plan's Evidence section remains owned here, including completeness, composition, concurrent-writer, and infrastructure-retry proof. Reconcile already-proven outcomes across both checklists before closing this parent.
- Depends on: GRAPH-001's canonical effective-authority DAG as the substrate this
system walks rather than re-deriving; CACHE-007's source-admission evidence (currently
unmerged WIP) as the artifact-creation event that pushes a new pin into the scheduler;
REBUILD-RECEIPT-001's finalized candidate envelope as the
testedtag itself, re-keyed by pin hash instead of its current ad hoc lock-list identity. Directly affects trust in RELEASE-001's resumed gate runs. - Evidence:
-
tests.critical.test_pinned_test_dispatch— pin whose closure identity changes re-enters untested; sibling never opened. - Tested pin skipped without reading declared inputs.
- No CACHE-007 admission → never scheduled; admitted pin enqueued.
- Service re-keys the existing receipt (
rekey_receipt_to_pin,literate-ai:tested-at-pin). Live rebuild still writes lock-listsubject_identityuntil callers use the helper. -
make release-checkand python-check consult this service.litai build/testand CI are not wired in this slice. - Full
make release-checkwall-clock time on a no-op resume (no source changed) is dominated by DAG-walk cost, not by re-running any pipeline. Clean runs still reset local markers; not measured.
-
[x] IDE-001 — Evaluate a provider-neutral specification-led IDE sample catalog
- Priority: P1
- GitHub issue: #184
- Related: #115, #134, GENERATION-007 (#43)
- Owner: sample/Component catalog ownership
- Direction: Downstream carries reusable Components for opening a Literate AI repository, projecting project authority, editing Component/Flavor/skill documents, selecting lifecycle workflows, enforcing safe catalog mutation, supervising runtime sessions, and composing a browser workbench. Decide whether this repository should publish a provider-neutral IDE sample catalog. That question was wrongly recorded as a hard rule against IDEs and complete applications, including in derived projects.
- Conclusion: Withdrawn. Literate AI has no rule against building an IDE or
a complete sample application. This repository's current catalog simply
does not contain an IDE sample; that is an inventory fact, not a ban.
Derived projects may ship IDEs, workbenches, viewports, and complete
applications. Samples in this repository are already complete applications;
inheritable: falseis catalog-export policy, not a product restriction. Plugin/CLI interop remains a useful path; it is not exclusive. A later in-tree IDE sample is ordinary catalog work, not a reversal of a prohibition. Comment on #184 with a commit-pinned permalink. - Scope boundary: None as a framework rule. Do not fold a downstream product's branded shell, renderer, or domain SDK into this repository merely because an IDE is allowed.
- Depends on: none
- Implementation:
- Withdraw the "do not build a native IDE" conclusion and every document that restated it as a hard rule.
- Record that derived projects are free to build IDEs and complete applications.
- Evidence:
-
PROJECT.mdno longer forbids an IDE. - This item's conclusion is a withdrawn prohibition, not a decline.
-
[x] SKILL-PROFILE-001 — Evaluate a generic declarative studio-profile generation skill
- Priority: P1
- GitHub issue: #185
- Related: IDE-001
- Owner: specification-to-source skill catalog
- Direction: Downstream has a generation skill for an identity-bearing declarative profile provider: modes, navigation, commands, tools, catalog selectors, presentation, capability ownership, and fail-closed validation. The mechanism is not tied to a language, OS, renderer, or domain SDK; only the profile data is product-specific. Decide whether Literate AI should own a generic profile-provider generation skill that derived products import, while each product retains its profile Component and domain catalog.
- Conclusion: This is not an IDE ban and is not blocked by IDE-001. It is a
specification-to-source skill that generates the provider which reads a declarative
profile, analogous to
python-service-application. The load-bearing risk is shadow authority: profile data must not replacecomponent.md, locks, receipts, or executable behavior, and the skill must not introduce runtime plugin discovery. Keep the downstream copy authoritative until this repository has an in-tree consumer or a second derived product needs the same skill. Derived products may already ship IDEs, workbenches, and complete applications; they do not need this import to do so. Any later import must stay provider-neutral and fail closed when profile data tries to override project authority. - Scope boundary: Do not copy the downstream skill, schema, or tests into this repository under this evaluate. Do not add runtime plugin discovery. Do not let a profile document become a second project definition.
- Depends on: an in-tree consumer or a second product that needs the same generic provider. IDE-001 is not a blocker.
- Implementation:
- Keep this item unevaluated-as-import until an in-tree consumer or a second consumer is named.
- Comment on #185 with a commit-pinned permalink when the import decision
is recorded.
issue comment
pins
059dfc7962e4cae9c52d3d6554df5690d6d937dadocs/roadmap/active-work.md#L4881-L4920.
- Evidence:
- The recorded decision either names the in-tree consumer and the authority-boundary tests that would gate an import, or records that the downstream copy stays authoritative. Decline (2026-08-28): no in-tree consumer. Downstream stays authoritative. Do not copy the skill. Import only after a named in-tree consumer exists.
[x] FLAVOR-JS-NPM-001 — JavaScript Flavor has no npm-dependency capability
- Priority: P2
- Release target: 0.8.0 (break-glass major-equivalent; was after 0.8.0)
- GitHub issue: #87
- Owner:
flavors/javascript, source-composition validation - Direction: The JavaScript Flavor has no composition shape that accepts a complete enumerated npm dependency closure. That matches today's "SHALL use no npm package" Flavor text. Component-library frontends cannot be expressed.
- Conclusion: Accept an isolated, lockfile-pinned npm-capable axis
(
implementation.javascript-packages, Flavorjs-npm).+js-npmrequires JavaScript; without it lock failscomponent_lock.flavor_target_unsatisfied. Generation may declare an enumeratedpackage.jsononly when this axis is selected; every package must be pinned by a completepackage-lock.json(lockfileVersion 2 or 3). Detect-before-install: resolvenpmand Node on PATH, thennpm ciintoOBJ_DIR/ ignorednode_modules. Landed as59c02491(isolated1143a824). - Implementation:
- Record the accept (new npm-capable axis with detect-before-install) or
decline (dependency-free JS only) with Flavor text that matches.
flavors/js-npm/,+js-npm/+npm, optionalpackagesslot on frontend Components. Catalog and templateSKILL.mdcopies stay byte-identical.
- Record the accept (new npm-capable axis with detect-before-install) or
decline (dependency-free JS only) with Flavor text that matches.
- Evidence:
- Lockfile-pinned npm composition path exists:
tests.smoke.test_app_stack_skills(axis, js-npm with/without JS),test_javascript_ecosystem_skill(detect-before-install),test_flavor_add(flavor add js-npm),test_package_flavor_catalog(catalog/template match includingjs-npm).
- Lockfile-pinned npm composition path exists:
[x] SPEC-MERGE-001 — Staged reverse-adoption for already-managed projects
- Priority: P2
- Release target: 0.8.0 (break-glass major-equivalent; was after 0.8.0)
- GitHub issue: #113
- Owner:
litai spec/ convert follow-on - Direction: Already-litai-managed projects with hand-authored escape-hatch
code need piece-by-piece reverse-adoption ("spec merge"), not a second
init --convert. - Conclusion: Distinct from first-time convert. CONVERT-FW-009's baseline copy/quarantine defects are closed. Land spec-merge on this same 0.8.0 cut.
- Implementation:
- Design staged spec-merge against current
spec derive/spec acceptnow that CONVERT-FW-009 is closed.litai spec merge SOURCE --component NAMEplans a Component draft from one island and--applywrites only that draft.
- Design staged spec-merge against current
- Evidence:
- A fixture already-managed tree can adopt one hand-authored island without
re-quarantining the whole project (
tests/critical/test_spec_merge.py).
- A fixture already-managed tree can adopt one hand-authored island without
re-quarantining the whole project (
[x] COMPONENT-KIND-001 — Make the CLI entrypoint contract a Component subclass
- Priority: P2
- Release target: 0.8.0 (break-glass major-equivalent; was after 0.8.0)
- GitHub issue: #114
- Owner: Component catalog / Standard lifecycle
- Direction: The single CLI entrypoint contract is the implicit base for all Components. Library, service, and other kinds inherit CLI-shaped assumptions they should not.
- Conclusion:
cli-applicationis an explicitComponentKindsubclass, not the implicit base. Omittedkindinfers from entrypoints so existing authoring identities stay stable. Default init Flavors are unchanged. FLAVOR-005 may land in parallel; this slice used existing alias APIs and did not rename Flavor directories. - Depends on: FLAVOR-005 was listed first; this slice proceeded without the directory rename.
- Implementation:
- Spike: name the CLI contract as an explicit subclass and list which
generated assumptions are CLI-only (
CLI_APPLICATION_LIFECYCLE_ASSUMPTIONS).
- Spike: name the CLI contract as an explicit subclass and list which
generated assumptions are CLI-only (
- Evidence:
-
docs/architecture/component-authoring-lock-boundary.mdnames the subclass boundary;tests/unit/test_component_kinds.pyproves omittedkindinferscli-applicationwithout emitting the field. Default init Flavors are unchanged.
-
[x] COMPONENT-KIND-002 — Additional Component-subclass candidates
- Priority: P2
- Release target: 0.8.0 (break-glass major-equivalent; was after 0.8.0)
- GitHub issue: #115
- Related: COMPONENT-KIND-001, IDE-001
- Owner: Component catalog
- Direction: Candidates beyond CLI/library/service: packaged modules, wrapped-source, UI, batch, event, schema-only.
- Conclusion: Accepted with a distinct contract:
packaged-module(package is the artifact; no CLI argv),ui(no CLI argv; render/lint later),schema-only(empty entrypoints; schema validate). Declined:wrapped-source(convert phase, not a generation kind),batch(same lock/generate/accept as CLI),event(same as persistent-service). A UI subclass is a lifecycle kind, not a product restriction. - Depends on: COMPONENT-KIND-001
- Implementation:
- After COMPONENT-KIND-001, accept or decline each candidate kind with a named lifecycle difference.
- Evidence:
- Authoring validation and
docs/architecture/component-authoring-lock-boundary.mdname each accepted contract and each declined kind.samples/generated-librarystill declares a portable-application entrypoint and therefore still inferscli-application; migrating that sample is follow-up.
- Authoring validation and
[ ] ACCEPTANCE-LIBRARY-001 — First-class importable library artifacts
- Priority: P1
- Release target: 1.1.0
- Previous release target: After 0.9.0
- GitHub issue: #280
- Related: COMPONENT-KIND-002
- Owner: Component catalog / acceptance oracles
- Direction: Define an immutable package-shaped artifact and capability-keyed verifier harness for importable libraries, starting with Python and JavaScript. Bind consumer verification to the exact accepted artifact; do not copy ambient generated source into a verifier workspace or disguise the library as a CLI application merely to obtain acceptance.
- Current evidence: The earlier #114 zero-entrypoint command projection was not an
executable contract: Python
unittestand Node--testemit runner-native output, while the Standard test port requires attributablegenerated-test-results@1case evidence. JavaScript's inline driver was also rejected by command-token validation before execution. The 0.10.1 npm audit therefore makes zero-entrypoint Standard command projection fail early and explicitly until this item defines the missing harness; treating an aggregate exit code as every selected case passing would fabricate evidence. - Current 1.1 audit: Typed library products, import surfaces, sealed exports
and the in-language independent acceptance adapter are now implemented.
test_standard_command_projectionruns a real Python verifier-owned function harness against a sealed export; its JavaScript fixtures currently exercise import success, changed symbols and unlocked export-map rejection. Those import checks alone do not prove the JavaScript independent oracle evaluates function results or rejects incorrect results and package mutation. Preserve this item until that integration evidence is earned. - Reproduced runtime defect: Three diagnostic native-Node oracle cases
(correct result, incorrect result, package mutation) all fail before launch
with
KeyErrorfor the locked JavaScript compiler identity. Projection retains only phase-command bindings (the Python driver here), while_accept_libraryneeds the separately observed Node compiler binding. Both composition validators likewise admit only phase-command identities, so adding an ambient Node lookup or an unvalidated extra binding would break the authority boundary. - Repair evidence: The command contract now derives one shared set of exact execution identities, including the library oracle launcher. Projection retains that observed binding and both composition boundaries reject missing, substituted or extra identities. The oracle checks launcher stability before and after execution. Six native-Node regression tests cover correct and incorrect function results, package mutation, binding rejection and launcher drift on both sides of execution. The combined command, composition and contract suite passes 99 tests with two skips in 9.400 seconds. These fixtures mock package custody and discovery; they do not constitute a live model run.
- Next action: Qualify this repair on the consolidated integration revision with fresh full local and hosted gates. Preserve the Python proof and complete the broader LIBRARY-ARTIFACT-001 live qualification before closing this owner.
- Implementation:
- Specify package identity, import surface, consumer binding, and independent acceptance contracts without weakening current fail-safe exemptions.
- Add Python and JavaScript library fixtures plus positive, tamper, and stale- artifact integration cases.
[x] ACCEPTANCE-RENDER-001 — Lint-and-render-stability oracle for hand-authored frontends
- Priority: P2
- Release target: 0.8.0 (break-glass major-equivalent; was after 0.8.0)
- GitHub issue: #134
- Related: IDE-001, COMPONENT-KIND-002
- Owner: acceptance oracles / library and frontend Components
- Direction: Hand-authored library/frontend Components need a lint-and-render- stability oracle, not only CLI JSON acceptance.
- Conclusion: In 0.8.0 scope. The oracle must stay evidence-bound (lint +
render snapshot). That is a harness constraint, not a ban on IDEs: an IDE
or complete application still needs an evidence-bound oracle, and the
oracle must not be "open the editor and look."
Completed 2026-08-30: verifier-owned
literate-ai/lint-render-acceptance@1atverification/acceptance/<component>.jsonbindsspecification_set_identity, lint argv (exit 0), andsha256(render stdout)assnapshot_identity.{python}is the only substitution; relative argv only. Library/UI without this file stay independently exempt (#114). Portable/persistent-service keep existing oracles. Landed asa4b2b7bfonfeat/cli-sdlc-debug(isolateddc95f254). - Implementation:
- Design an oracle that is evidence-bound (lint + render snapshot) and does not use a shipped editor as the only proof path.
- Evidence:
- Fixture
tests/fixtures/lint-render-libraryfails closed oncomponent_acceptance.render_driftand passes when the snapshot matches.LITAI_SESSION_ID=devtests.smoke.test_lint_render_acceptance— 8 tests OK.
- Fixture
[x] FLAVOR-008 — Fail closed on duplicate packaging and document Flavor aliases
- Priority: P1
- Release target: 0.7.2
- GitHub issue: #186
- Owner: Flavor catalog,
litai init/litai update, project validation,litai catalog migrate-flavor-names - Direction: A derived project retained eight legacy flat Flavor aliases alongside
imported canonical parent Flavors: six packaging aliases for
package-*and two document-ecosystem aliases fordoc-*. Duplicate directories are two authorities for the same standards-based behavior. Document and validate canonical axis-prefixed names. Initialized and updated projects should consumepackage-*anddoc-*identities and should not recreate flat or dotted aliases. - Conclusion: ADR 0010 already made
package-pip/doc-google-workspace(and the rest of those axes) the canonical names, withDEPRECATED_FLAVOR_ALIASESat input and durable state rewritten to the canonical form. The remaining defect is catalog directories: inheritance keys(kind, directory-name), soflavors/pipandflavors/package-pipcoexist;migrate-flavor-namescurrently raisescatalog.flavor_migration_collisionwhen the canonical directory already exists, which is exactly the descendant layout. 0.7.2 tightens that rule without the FLAVOR-005git mvofpython→lang-python(lock-identity blast radius, not a patch). Fail closed when two Flavor entries canonicalize to the same coordinate; drop a known alias directory when migrate finds the canonical already present; prove+pip/+google-workspacestampflavors/package-pip/flavors/doc-google-workspaceand neverflavors/piporflavors/google-workspace. Bare selectors (+pip) stay valid through ADR 0010's deprecation window; they must not create a second on-disk authority. - Depends on: ADR 0010 and the existing
catalog migrate-flavor-namescommand. Does not depend on FLAVOR-005's remaining language/OS/build directory rename. - Implementation:
- Canonicalize Flavor coordinates, names, and directory names through the ADR
0010 alias table and reject two catalog entries that share one canonical
coordinate (
canonical_flavor_catalog_collisions,generate.duplicate_flavor_alias). - When
migrate-flavor-namessees a known alias directory and the canonical destination already exists, plan and--recorda removal of the alias tree instead of colliding. - Prove init from a deprecated packaging or document selector writes only the canonical directory.
- Document that packaging and documentation Flavors are
package-*/doc-*on disk in ADR 0010 andPROJECT.md; descendants delete local aliases once the check passes.
- Canonicalize Flavor coordinates, names, and directory names through the ADR
0010 alias table and reject two catalog entries that share one canonical
coordinate (
- Evidence:
-
canonical_flavor_catalog_collisionsreportsflavors/pipbesideflavors/package-pipandflavors/google-workspacebesideflavors/doc-google-workspace; apythondirectory withlang-pythondoes not collide withpackage-pip. Catalog load of this repository's 28 Flavors still succeeds. -
litai catalog migrate-flavor-names --recordon a stub with bothpipandpackage-pipremoves the alias directory and rewrites locks to the canonical coordinate (tests.unit.test_flavor_name_migration). - Init with
+pipcreatesflavors/package-pipand notflavors/pip; init with+google-workspacecreatesflavors/doc-google-workspaceand notflavors/google-workspace. -
tests.unit.test_flavor_name_migration6 tests OK;make format-checkandmake lintpass.
-
[x] DOC-AUTHORITY-SCOPE-001 — The documentation-authority hash sweeps the entire docs/ tree, including the roadmap's own todo list
- Priority: P1
- Owner:
_documentation_catalog/documentation_filesinsrc/literate_ai/adapters/project_validation.pyandsrc/literate_ai/projects.py;literate.project.json'sdocumentation_roots - Direction:
literate.project.jsondeclares"documentation_roots": ["docs"], and_documentation_catalogfolds every file under that root — with no distinction of role — into the singleauthority_identityhash thattest_repository_is_a_self_describing_canonical_projectand theliterate-ai:authority-reviewedmarker indesign-traceability.mdcheck. That set includesdocs/roadmap/active-work.md, whichtrack-project-requirementsitself describes as "the tactical execution queue" beneathPROJECT.md, not authority. In this session, editing the roadmap's own todo list restaled the marker four separate times, each requiring a human/agent re-review-and-sign step beforeproject validatewould pass again. This is a scoping defect, not a caching one: the input set being hashed is wrong by definition, regardless of how correctly or freshly it's recomputed. - Conclusion: Keep
documentation_rootsas the full declared spine so graph validation still admits roadmap links and assets. Exclude only project-relativedocs/roadmap/**from the authority-review hash. User, architecture, decision, and presentation docs remain hashed; queue checkbox churn must not stale the marker. - Evidence:
- Editing only
docs/roadmap/active-work.md(or a linked detailed roadmap document) does not changeauthority_identityor stale theliterate-ai:authority-reviewedmarker.ProjectCliTests.test_roadmap_queue_edits_do_not_stale_authority_review. - Editing any other file currently under
documentation_rootsstill does. Same test:docs/user/framework-flow.mdedit yieldsproject.documentation_authority_review_stale. Broken roadmap links still failproject.documentation_link_missing.
- Editing only
[x] RELEASE-ENV-001 — make release leaks PYTHONPATH=src into the gate subprocess and fails a release that make release-check passes
- Priority: P0
- Owner:
Makefile(releasetarget) and_run_release_gateinsrc/literate_ai/project_releases.py - Direction:
make releaseinvokes the release gate asPYTHONPATH=src litai release check ..., and_run_release_gatelaunches the gate withenv=os.environ.copy().PYTHONPATH=srctherefore survives into the gate and into every command the gate spawns beneath it. Those inner commands then resolveliterate_aifrom both the source tree and the installed distribution, and the Standard driver binding fails withdriver_resolution_error: standard_binding.distribution_ambiguous. The failure is purely environmental: the identical revision passes a directmake release-check, and passeslitai release checkinvoked withPYTHONPATHunset. The gate is supposed to reproduce the release-check verdict, so any environment that changes the verdict is a defect in the gate's isolation, not in the revision under release. - Conclusion: The release gate must run in an environment derived from the release
contract, not inherited verbatim from whichever Make target happened to invoke it.
Decide which variables are load-bearing for the gate and pass exactly those;
interpreter-resolution variables (
PYTHONPATH, and by the same argumentPYTHONHOME,VIRTUAL_ENV) must not cross the boundary, because a release gate that resolves the framework differently from the release artifact is not qualifying the artifact. Do not fix this by editing only theMakefilerecipe: that leaves the leak available to every other caller ofrelease check. - Repro: From a prepared release commit,
make release RELEASE_PLAN=<plan>.jsonfails withrelease.gate_failednamingstandard_binding.distribution_ambiguous, whileenv -u PYTHONPATH litai release check <plan>.json --project .on the same tree passes. Observed against the 0.3.0 prepared commit. - Depends on: RELEASE-OBS-001's gate-output reporting — the underlying error was invisible until the gate began surfacing its subprocess stderr.
- Implementation:
- Give
_run_release_gatean explicit environment allowlist (or an explicit denylist of interpreter-resolution variables) rather thanos.environ.copy(). - A regression sets
PYTHONPATHin the parent environment, runs the gate, and proves the child never observes it. -
make releaseandmake release-checkreach the same verdict on the same revision, proven on a revision where they currently disagree.
- Give
- Completion evidence:
_gate_environment()stripsPYTHONPATH/PYTHONHOME/VIRTUAL_ENVfrom the copied environment before_run_release_gatelaunches the gate subprocess. Two regressions: a focused unit test proving the denylist, and an integration test that setsPYTHONPATHin the test process, runs a realcheck_releasewhose gate command assertsPYTHONPATHis absent, and confirms it exits 0. Pulled into 0.4.0 scope per explicit user direction.
[x] CLI-002 — Group the litai catalog into SDLC bands without merging verbs
- Priority: P0
- Owner: framework CLI help and
docs/user/configuration-and-cli.md - Direction: Group the installed
litaicatalog so help reads as an SDLC without deleting or aliasing verbs this pass. The published inventory was stale relative to the parser. - Conclusion: Keep every current argv. Add argparse epilog bands. Document
recommended later combinable verbs only. Do not split
--convertoffinit. Do not add staging/production CLI verbs. - Depends on: CLI-001; extends the inventory remainder of DOCS-005
- Implementation:
- Group
litai helpwith an SDLC epilog; keephelpas a verb at every depth. - Regenerate
docs/user/configuration-and-cli.mdfrom the parser; drop theworker capabilityghost; record recommended later aliases.
- Group
- Evidence:
-
CliHelpTests.test_command_reference_lists_every_public_cli_verb_onceandCliDebugFlagTests.test_help_lists_sdlc_catalog_bandspass.
-
[x] HARNESS-001 — Position Literate AI as a release-engineering SDLC harness
- Priority: P0
- Owner:
PROJECT.md, rootREADME.md,SKILL.md, user-guide front door - Direction: The durable talent is
litai initandlitai init --convertplus the evidence-gateddevworkflow and versioned release. Spec-to-binary generation remains authority and arrives in waves. - Conclusion: Lead onboarding with adopt → verify → rebuild(dev) → release.
Replace future
litai init --adoptwording withinit --convert. Keep the spec-to-binary diagram, but second. Do not regenerate the Google manager deck in this pass. - Depends on: CLI-002
- Implementation:
- Rewrite
PROJECT.mdgoals so the harness is goal 1. - Reframe README, getting-started, user-guide paths, framework-flow, and
SKILL.md.
- Rewrite
- Evidence:
-
--adoptwording is gone from user docs except historical queue items andupdate --adopt-added.
-
[x] CLI-DEBUG-001 — Add global debug tracing for SDLC stages and spec maps
- Priority: P0
- Owner:
src/literate_ai/diagnostics.py, CLI globals,spec_map.py - Direction:
--debugis harness-stage tracing, redacted child argv, plus generated-code spec↔source maps. It is not a--verbosesuperset. Stdout stays the command envelope. - Conclusion: Accept
--debug/--debug=FILEbefore or after the verb. Default destination is stderr. Inherit viaLITAI_DEBUG. Coding CLIs placelitai:spec PATH:LINEanchors; a framework scanner assigns generated lines. Missing maps do not fail the lifecycle. Identity-bearing via prompt append, not a generation-key schema bump. Child commands emitsubprocess.start/subprocess.exitwith redacted argv; child stdout/stderr stay--verbose. - Depends on: CLI-002
- Implementation:
- Global
--debug/--debug=FILE,LITAI_DEBUGinheritance, stage events, JSON-vs-human rendering. -
debug-spec-mapskill, deterministic scanner, Python helper, fixture. -
trace_subprocesspublishes redacted argv on--debugwithout dumping child stdout/stderr.
- Global
- Evidence:
-
tests.unit.test_cli_debugandtests.unit.test_spec_mappass.
-
[ ] DOCS-005 — Make the current lifecycle obvious from the repository front door
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.4.1 for the remainder. The CLI-verb inventory gap in
docs/user/configuration-and-cli.mdwas closed for 0.3.0; the README diagram refresh, cross-doc synchronization, and the full documentation-proof suite remain open.v0.3.0shipped on a manually authorized tag oncemain's CI was green rather than waiting on this item's remainder; downstream projects were blocked. - Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner: root onboarding and user documentation
- Direction: Refresh
README.mdand its associated documentation to describe the pipelines, lifecycle targets, Flavor axes, execution workers, and latestlitaicommands/subcommands that actually ship. Commit and push that documentation as the release-facing checkpoint rather than leaving the front door behind the implementation. - Conclusion: Derive the command inventory from the installed parser/help contract, the pipeline from the Standard workflow and current adapters, and supported targets from current checked-in Flavors plus live matrix evidence. Keep the root README concise and diagram-led; put exhaustive grammar, trust boundaries, and configuration examples in the user guide. Do not claim planned SSH, release, platform, or ecosystem support as implemented before its evidence passes.
- Depends on: WORKER-001's landed lifecycle semantics and current CLI help
- Next action: Front-door inventory grouping is in CLI-002; SDLC positioning is in HARNESS-001. Remaining: full documentation-check/wheel proofs.
- Implementation:
- Inventory every public command/subcommand from installed help into
docs/user/configuration-and-cli.md;CliHelpTests.test_command_reference_lists_every_public_cli_verb_once. - Keep a concise README basic-setup path current: install
litai, initialize a project, build/test/run the hello Component locally, then configure private CPU/GPU/OS-qualified workers for named execution and optional matrix fan-out. - Update the root README flow diagram and golden-path commands without turning it back into the full manual.
- Synchronize getting-started (
_build/python-envs/), configuration/CLI inventory, and project-layout authority-review scope. Framework-flow, Flavors/targets, worker-matrix, caches, and security docs were not rewritten in this slice. - Run link, Mermaid, authority, help, initialized-project, and installed-wheel documentation proofs.
- Inventory every public command/subcommand from installed help into
- Evidence:
- The README golden path matches installed
build,test,run, andworker probehelp; the clean Python suite passes 2,167 tests with 26 intentional skips, and all 104 Mermaid diagrams render from 300 Markdown files. - Every documented command is accepted by the installed CLI and every public CLI
verb appears in the command reference exactly once.
test_command_reference_lists_every_public_cli_verb_once. - The root diagram distinguishes spec target/Flavor selection, execution worker, generated-source cache, object/artifact cache, build/test/run, and provenance.
- No documentation claims the won't-fix
worker capabilityverb as shipped.
- The README golden path matches installed
[x] GENERATION-002 — Add OpenCode as a first-class coding CLI
- Priority: P0
- Owner: framework core / coding-CLI generation and model-task adapters
- Direction: Support
opencodeeverywhere Literate AI currently supports Codex, Claude, and Cursor Agent so projects can select it explicitly or discover it onPATHfor forward generation, repair, and inverse/model-backed tasks. - Conclusion: Bind OpenCode through its documented non-interactive
runcommand, exact workspace, explicit model selector, pure-plugin mode, and a LitAI-owned bounded permission/configuration profile. Preserve OpenCode's stored provider authentication and documented environment credentials without forwarding unrelated secrets. Record honestly that OpenCode permissions are a provider tool policy rather than an OS sandbox; LitAI's temporary workspace, output collector, executable pin, bounded process, and source-custody checks remain the enforcement boundary. Do not add a remote server dependency, ambient project configuration, session reuse, or an implicit fallback from an explicitly selected unavailable OpenCode executable. - Depends on: the existing provider-neutral coding-CLI selection, lexical model scope, bounded-process, and generation-custody contracts
- Implementation:
- Extend coding-CLI authority, schemas, model scopes, generation/inverse
contracts, and installed-project guidance with
opencode. - Add the exact OpenCode command, clean configuration and permission environment, executable selection, authentication diagnostics, and honest isolation profile.
- Update CLI/user documentation, troubleshooting, traceability, and release notes.
- Install a user-local OpenCode CLI for interface and smoke verification without persisting test credentials or weakening the framework boundary.
- Extend coding-CLI authority, schemas, model scopes, generation/inverse
contracts, and installed-project guidance with
- Evidence:
- Focused unit/schema tests cover explicit selection, PATH order, model forwarding, bounded tools/configuration, credential scrubbing, authentication failures, and all forward/inverse provider validators.
- Strict OpenSpec, canonical project validation, formatting/lint, documentation, CodeGraph synchronization, and the proportional Python suite pass.
- The installed
litaidistribution selects the installedopencodeexecutable and reports the exact command, environment-key, isolation, and model bindings without requiring a live credential or model call.
[ ] GENERATION-003 — Reject incompatible OpenCode transports before model egress
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.4.1 — deferred out of 0.3.0 scope; not on the 0.3.0 release-blocking path.
- Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner: framework core / coding-CLI transport preflight
- Direction: An executable named
opencodecan be selected even when its command surface predates the pure-plugin interface required by Literate AI. OpenCode 1.2.6 consequently exits from LitAI's command prefix before generation and is reported as the misleading genericcoding_cli.generation_failed. - Conclusion: Executable presence is insufficient compatibility evidence. Probe the
exact pinned OpenCode executable through its bounded, non-model
--pure run --helpsurface before a prompt can leave the process, require the pure-plugin and detached workspace options that LitAI actually invokes, and fail with one actionable stable compatibility error when the probe fails or those capabilities are absent. Preserve the required pure configuration and explicit-provider no-fallback rule; do not weaken isolation for old OpenCode releases or infer compatibility from a version string. - Depends on:
GENERATION-002exact OpenCode transport and the shared bounded-process runner - Next action: In progress: require PR #21's configured CI hosts for the locally unavailable browser and CUDA prerequisites, then resolve review feedback.
- Implementation:
- Require the exact OpenCode command capabilities before forward or inverse/model generation and keep the pinned executable unchanged across the probe.
- Surface unsupported, failed, timed-out, or excessive probe output as a stable secret-free compatibility diagnostic with upgrade guidance.
- Document the compatibility preflight and distinguish it from authentication, provider execution, generated-tree validation, and custody failures.
- Evidence:
- Focused tests prove OpenCode 1.2.6-shaped help is rejected before model egress,
the supported surface proceeds, probe failures remain bounded and secret-free,
and explicit selection never falls back. All 92 coding-CLI tests pass with two
platform skips; a real 1.18.16 binary passes while the real 1.2.6 binary produces
coding_cli.incompatiblewithout a model call. - Strict OpenSpec, project authority, formatting/lint, documentation, and the
proportional Python suite pass with a current CodeGraph index.
Strict OpenSpec, canonical project validation, targeted Ruff, CodeGraph, 41
initialized-project tests, and the coding-CLI suite pass locally. The complete
1,978-test unit run's TCB-pin failure was repaired and its only remaining error
requires absent
nvcc; full Ruff currently reports pre-existing CUDA-sample findings, and Mermaid rendering requires an absent Chrome binary. - An installed wheel accepts the locally installed compatible OpenCode help
surface without a live credential or model call and rejects a 1.2.6-shaped
fixture with the stable compatibility error. Clean-revision
make wheel-checkpassed atb15765a; a separately installed wheel accepted the real OpenCode 1.18.16 binary and rejected the real 1.2.6 binary ascoding_cli.incompatible.
- Focused tests prove OpenCode 1.2.6-shaped help is rejected before model egress,
the supported surface proceeds, probe failures remain bounded and secret-free,
and explicit selection never falls back. All 92 coding-CLI tests pass with two
platform skips; a real 1.18.16 binary passes while the real 1.2.6 binary produces
[ ] RELEASE-001 — Drive every release gate to green from one revision
- Release target: 1.1.0
- Previous release target: 0.3.0 shipped on a manually authorized
v0.3.0tag oncemain's CI was green, rather than waiting on this item's full completion. The remaining unchecked implementation items (Windows cache-path-length shortening, the CodeGraph snapshot filename shortening, the resumable candidate cache, and a from-clean full local+matrix rerun) continue as 0.3.1 work; none of them blocked what actually shipped. - Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner: release engineering / framework maintainers
- Direction: Restart the complete release qualification after the source-cache and repository-layout changes, diagnose every failure rather than accepting an open test result, and qualify the same revision locally and across the configured host matrix.
- Conclusion: Run
make release-checkwith one isolated build-session identity, repair failures by root-cause cluster, then run the configured platform regression. Repeat from clean state until no local or remote gate fails; do not weaken, skip, or delete a gate merely to obtain green output. - Depends on: ENV-001 session isolation, current pushed
main, private matrix config - Implementation:
- Make every release gate that invokes pinned Node tooling depend on the staged
tools-installclosure. The clean937591brun passed 1,825 Python tests, lint, and formatting, then exposed thatopenspec-checkcould run without an installed_build/tools/openspec/node_modules/.bin/openspec. A focused Make regression proves OpenSpec, documentation, and CodeGraph gates stage and install the pinned closure before invoking their tools; clean OpenSpec and Mermaid checks pass from an empty integration object directory. - Isolate Puppeteer's browser cache beneath
OBJ_DIR. A clean release suffix exposed that npm otherwise consumed a half-populated host-global browser cache and failed OpenSpec before validation; the Make-owned cache now remains disposable and session-independent with the rest of the Node tool closure. - Keep the installed-wheel starter oracle aligned with the complete declared
initialization default. The resumed wheel gate exposed that its closed selector
assertion omitted the already-released
package.pipdefault; it now requires that exact selector, Flavor authority, and locked package slot alongside Python, Make, and the host OS. - Integrate the reviewed Rust/Bazel source-closure admission and regenerated
presentation commits without overwriting concurrent working-tree changes.
The isolated integration branch preserves current
main, resolves only changelog bookkeeping, passes 83 focused Python tests, and passes SkillEvaluator for both changed presentation-skill surfaces. - Repair the first final-head release failure after 330 tests: scoped
litai init helpnow names the executablelitai init --convertcommand instead of exposing only an unexplained option token. The focused CLI help contract passes, and the remaining suite resumes from its byte-fingerprinted test checkpoint. The resulting CLI TCB drift was reviewed, the lifecycle-driver identity was re-pinned, and the documentation-authority marker was refreshed before resuming qualification. The next version-authority failure exposed the independently stale sample-runner pin; its explicit build-system selector change was reviewed and the exact runner identity was re-pinned without claiming a new passing test receipt. The subsequent lint gate exposed six mechanical defects in the concurrent conversion harness; all were formatted or removed, and 37 focused initialization/help/authority tests pass before the release resumes after its already-green Python gate. Installed-E2E then exposed an incomplete wheel data closure for the new Make Flavor. Package-data admission now uses taxonomy-wide Component, Flavor, and skill patterns, with a unit proof that every non-Python project-template file is covered by the wheel manifest. The installed smoke now derives required Flavor files from the validated project's declared selectors instead of requiring obsolete Bazel and service-specific files, and gives the nested project sibling source/object caches so an outer releaseOBJ_DIRcan never become an ancestor of the project's protected authority. The live installed rebuild then proved the Make Flavor cannot be projected through the Bazel-only Standard target-label contract; Make now uses the native Standard adapter until a typed native-Make profile exists. The following wheel smoke no longer freezes catalog cardinality or the old Bazel starter: it requires the declared Python, Make, and host defaults, resolves the initialized catalogs, and treats added Components, Flavors, and skills as valid growth rather than a test failure. - Consolidate the release, Standard/Make, composition, Rust-closure, cache, and
presentation work onto one pushed
main. The first clean pass found one stale lifecycle-driver pin; after repair, the resumed suffix passed 59 tests and the authoritative from-zero Python suite passed all 1,865 tests with 18 skips. Export the session-localPYTHON_ENVso subsequent recursive gates reuse that environment rather than reinstalling dependencies once per gate. - Repair the first resumed sample-gate failure in the composed
service-stackproof. The generator had embedded Python inside a Bazelgenrulecommand, crossing Starlark, shell, and Python quoting boundaries; the Bazel skill now requires mechanical copy commands or an admitted helper tool. The custom conformance adapter also supplied a fixed business invocation where the Standard execute contract requires--litai-smoke; it now leaves exact hidden-case ownership to independent packaged acceptance and validates the generated smoke result's shape separately. Finally, the same run exposed a malformed pre-resolution Bzlmod dependency purl, so the skill now states the exact unresolved CycloneDX intent contract and leaves selected versions, hashes, and transitives to the resolver. A focused live run now passes Python and C++ generation, Bazel build, packaged acceptance, execution, SBOM binding, and three-component composition with no regeneration retry. - Repair the next resumed sample failure: a generated C++ test translation unit
used a same-directory header include that passed its ad hoc generation self-check
but failed the declared Bazel target, whose include root is
source. The C++17 generation skill now requirestests/litai_test.hppor an explicitly equivalent include-directory declaration so the self-check and real build share one contract. - Classify the following
model-routingC++ failure as invented build-system metadata: no build-system Flavor was selected, yet the candidate emitted Bazel files that implied unresolved Bzlmod intent while the native Standard adapter could not produce Bazel dependency observations. The C++ skill now forbids build metadata without Component or selected build-Flavor authority and directs the generator to rely on the native Standard adapter in that case. - Repair the receipt-producing rebuild boundary exposed after the complete sample
gate passed. The project lifecycle driver already declares cache roots, Windows
Bazel shell selection, and the reviewed Codex sandbox selector, but the global
lifecycle environment allowlist rejected those same keys before driver execution.
Admit exactly
BUILD_DIR,OBJ_DIR,BAZEL_SH, andLITAI_CODEX_SANDBOXwhile retaining the existing rejection ofPYTHONPATHand unrelated environment input. - Preserve bounded external lifecycle-driver diagnostics on nonzero exit. The
adapter previously captured both streams and then discarded them, reducing every
sample failure to an opaque status code. It now appends at most the final 2,000
decoded bytes from stderr, or stdout when stderr is empty, while retaining the
existing 64 KiB stream bounds and stable
rebuild.driver_failedenvelope. - Repair the identity boundary exposed by the first diagnostic rebuild. The external driver compared the outer project-plus-lock rebuild identity with the weaker validated-project identity and therefore rejected every correctly bound lifecycle before sample execution. It now derives the canonical rebuild identity from current validated authority and the exact outer-planned lock set.
- Repair the receipt projection exposed only after a complete cold matrix passed all 29 recipes and 193 tests. The aggregate projector assumed every execution used the legacy flat report, while eleven variants use typed Standard lifecycle reports and the composed service stack contains three independently derived nodes. Standard reports now expose their native recipe, provenance, intelligence, build, test, acceptance, SBOM, and workspace identities; a dedicated boundary expands those nodes against the outer derivation manifest without fabricating legacy artifacts. External failure diagnostics now retain only the final four lines, bounded to 1,000 characters, so the stable CLI envelope cannot truncate away the root exception.
- Repair derivation planning after the next cold matrix exposed a false Standard receipt join. Planning still sent every sample through the retired flat execution path, so its keys did not describe the typed Component recipes actually executed. It now prepares the exact Standard nodes without invoking a model and derives each key from the shared live stage request, bounded prompt, model plan, and Component lock. The dependency-bearing service stack consequently plans three keys rather than one flattened key; the complete catalog has unique recipe and derivation identities without freezing either cardinality in a test. The repair also exposed that the service-stack helper was executable receipt authority outside both trust pins; lifecycle review now covers it and the sample-runner identity binds the full four-file runner closure rather than hashing only the importing module.
- Repair the next receipt-only failure without repeating the full matrix. Legacy generation and workspace custody intentionally use different identity schemas for the same source bytes: the former identifies canonical model file material, while CodeGraph binds the prepared workspace tree digest. Receipt validation incorrectly compared intelligence to the generation identity. It now requires both generated and admitted intelligence artifacts to bind the exact workspace digest, while the lifecycle member separately retains the accepted generation-tree identity. A warm four-sample isolation run reproduced every mismatch and its 70-test report now projects to a complete receipt under the corrected invariant.
- Separate successful driver diagnostics from durable receipt evidence. The next complete run wrote a valid 29-lock provisional receipt and 31-member source-cache lifecycle, then the outer adapter rejected its multi-megabyte report on the 64 KiB diagnostic channel. Receipted execution now writes the full evidence only through its bounded candidate/lifecycle files and emits a sub-kilobyte identity-and-count summary on stdout; non-receipted interactive sample runs retain the detailed report. The summary binds the authoritative receipt identity rather than trying to assign a canonical contract identity to operational timing floats, which canonical JSON v1 deliberately excludes.
- Preserve the finalized candidate envelope as the tracked project test evidence. The first successful complete rebuild proved that dynamically planned sample locks are valid run authority but are intentionally absent from the authored source tree; storing only the nested receipt discards that exact lock set and makes subsequent freshness checks attempt an impossible reconstruction from checked-in lock files. Update, check, inspection, and require-current must validate the canonical finalized envelope, derive the composite project revision from its exact lock identities, and retain an explicit typed in-memory path for ordinary single-Component rebuilds.
- Repair the CUDA/context-bound qualification tail without discarding prior passing evidence. The checkpointed Python run reused 1,260 passing tests, exposed stale lifecycle-driver and sample-runner source-closure pins, and passed the focused self-hosting authority check after exact repinning. The following suffix rejected a hard-coded v2 schema-resource count after valid catalog growth; that test now proves the version, catalog identity, release, non-empty file set, and resource/file consistency without freezing an extensible catalog's cardinality.
- Refresh the documentation-authority marker after the same changes. The first
clean evidence pass reached test 1,289 before detecting the stale marker; the
focused canonical-project check and live
litai project validatenow pass after a current CodeGraph synchronization. The checkpointed suffix then passed all 811 remaining tests with two skips and reset for the required final from-zero run. The authoritative restart subsequently passed all 2,099 tests from test one with 26 intentional skips in 1,111 seconds; changed-skill admission found no uncommitted skill delta and the pinned portable-test SkillEvaluator qualification passed. Focused CLI and storage tests must cover ephemeral locks and stale base authority before regenerating the authoritative release candidate. All ten receipt CLI tests pass, including dynamic-lock currentness, exact candidate comparison, malformed and unauthorized evidence, and Component/specification/manifest staleness; nine Standard rebuild and project-validation adapter regressions also pass. - Repair remote preflight exposed by the four-host fanout. Noninteractive macOS
SSH selected Apple's Python 3.9 from
/usr/bineven though a valid Homebrew Python 3.14 installation existed outside that restricted PATH. Preserve PATH-order preference, then probe bounded platform-standard Python locations before declaring the host unbootstrappable; share the resolver across archive and Git transports and cover both preference and fallback in unit tests. Keep worker Git host trust and coding-CLI authentication as explicit operator-owned prerequisites rather than copying credentials or weakening SSH verification. The shared resolver now passes PATH-preference and fallback execution tests, and the complete 40-test fanout suite passes with only its two platform-native skips. - Preserve discovered launcher directories in host bootstrap PATH evidence. The
repaired macOS worker reached bootstrap, which found
codexandcodegraphthrough Homebrew launchers but resolved their symlinks into package-internal JavaScript paths; the worker then prepended those implementation directories and could not invoke either command. Record absolute discovered launcher paths without resolving symlinks, retain Python executable validation, and prove wrapper directories survive discovery intopath_entriesbefore rerunning the macOS worker. Ten focused bootstrap tests pass and NVIDIA SkillEvaluator admits the changed skill with all six static/security checks green. - Keep installed-project qualification offline after repository-DAG inheritance
became the
litai initdefault. Clean hosted runners correctly refused to fetch the private encoded upstream without credentials; the smoke now supplies the exact local checkoutfile://URL and commit anywhere it needs that same parent authority. This preserves production inheritance semantics and exercises real Git lineage without network access. Fifty-three project/lineage regressions pass on both supported local codecs before the installed gate resumes. - Keep wheel qualification offline under the same repository-DAG contract. The
Ubuntu/Python 3.11 hosted gate passed 2,002 tests and installed E2E, then correctly
failed because
wheel_smoke.pyalone still invoked barelitai initafter checkout credentials were removed. It now supplies the exact localfile://checkout and commit through--from, preserving the product default while eliminating that unintended private-network dependency. The first local replay passed initialization and then exposed its unscoped lock check; wheel qualification now checks only the starter Component it owns, leaving inherited sample qualification to the upstream matrix. - Keep the inherited upstream Flavor catalog compatible with the initialized
portable starter Component. The upstream language and OS Flavors now explicitly
admit both the reusable starter contract and the sample-specific contract; a focused
initialization regression proves that inherited Python and macOS Flavors produce the
starter lock instead of silently relying on bundled catalog definitions.
The final stale-
maincheckpoint reproduced the same authority gap as an unavailablebuild-systemFlavor during sample composition; the rebased combined branch passes all 145 generation/sample-ladder tests, confirming the catalog repair before that obsolete run was terminated. - Close repository-DAG authority over workflows and routing. The exact-revision Git reader, ancestor-first planner, descendant override policy, materializer, and import provenance now include both file catalogs alongside Components, Flavors, and skills. Eleven focused repository and initialization tests pass, and an exact local-parent init imports 66 catalog items and creates its starter lock successfully.
- Scope installed-project lock qualification to
components/hello. An unscoped check correctly discovered every inherited upstream sample, but incorrectly asked the child starter target to resolve specialized accelerator requirements. The smoke now proves its own initialized Component while leaving upstream sample qualification to the upstream matrix that owns those target policies. - Align the starter's skill closure with inherited language Flavors. The starter
now selects
portable-specification-planningandportable-application-implementation, and the installed template carries byte-identical reviewed fallbacks for an explicitly parentless project. Both parented and parentless init regressions pass; SkillEvaluator admits the changed template with all six static/security checks green and a quality score of 87.2. The exact installed-distribution gate passes from commit167d740: repository-DAG init, validation, starter lock and plan, command-worker build/test/run, model scope, release publication, and the installed-E2E sentinel are all current. - Remove three remaining brittle starter assertions that encoded the complete current catalog inventory. They now prove uniqueness, required contract membership, forward/inverse separation, and the only semantically required skill dependency ordering, without constraining future catalog growth.
- Repair the first full Windows gate at the actual portability boundaries. Release
authority replacement now closes temporary descriptors on every path, treats
fchmodas POSIX-only, and rolls failed transactions back to byte-identical content; drive-letter repository parents become canonicalfile:URLs; and Bazel output custody avoids opening a freshly emitted executable or zipapp during leaf canonicalization. A direct vanilla Windows replay passes all 21 release and Make bootstrap tests, while its working-tree fanout and three-repository lineage E2E tests also pass. - Model Bazel's native Windows runtime and compiler dependencies in vanilla-worker
bootstrap.
The Windows worker reached a content-addressed Bazel 9 binary but it exited with
0xC0000135; binary import inspection identified the absent Microsoft VC++ 14 runtime DLLs. Detect the required System32 runtime files as a named capability, install the pinned package-manager mapping only when absent, document the learned dependency in the worker skill, and cover discovery plus install selection before resuming the retained Windows target. Retained run20260811T121323Z-4e001d6cthen passed that runtime boundary and every earlier Windows path repair before its first C++ Bazel action exposed a second prerequisite: MinGW command discovery is not a usable MSVC toolchain. Require an x64cl.exe, discover ordinary Visual Studio Build Tools installations outsidePATH, and install the official VCTools workload only when absent. Keep this item open until the exact Windows target passes with both capabilities. - Preserve the Windows system-drive root across the coding-CLI environment
boundary, including the external lifecycle-driver handoff. The first
post-bootstrap Windows generation created a literal
%SystemDrive%directory outsidesource/because the scrubbed subprocess environment retainedSystemRootbut omittedSystemDrive. Admit only that named launcher/runtime key in both boundaries, prove Windows case-insensitive selection retains it while unrelated values remain excluded, and rerun the same representative target. Do not weaken the generated-output containment check or special-case the escaped files. - Keep Bazel's temporary projection within the classic Windows path budget. The
representative build completed, but teardown repeatedly failed at a 261-character
rules-python wheel path; extending cleanup retries to approximately 25 seconds
disproved the initial filesystem-latency hypothesis. Use a deliberately short temp
prefix that reduces the observed path to 246 characters and clear the read-only bit
only when Windows reports a Bazel output cannot be unlinked. A subsequent
242-character path then isolated genuine directory-entry latency, so retain an
explicit approximately 25-second whole-tree retry cap as well. Prove the
allocation-name budget, narrowly scoped permission recovery, and full bounded retry
schedule in unit tests. The retained failures also show that explicitly forcing
--enable_runfilescreates full hermetic-Python runfiles trees on Windows even though the generated artifact contract forbids depending on runfiles; stop overriding Bazel's platform-native runfiles policy and prove no analysis or build command forces it. Retained run20260811T130535Z-d18fc838proved that even the compact root can contain a ruleset-owned wheel leaf beyond the classic Win32 path limit: ordinaryshutil.rmtreerepeatedly left the same file, while the exact extended-length\\?\root removed all 6,646 remaining entries in 4.23 seconds. Use that native namespace for Windows teardown and cover drive plus UNC roots while retaining the bounded retry and permission policy. Then rerun the exact Windows target. Do not suppress active locks, other cleanup failures, or leave the temporary projection as accepted build state. - Bind the native MSVC dependency inspector without weakening image inspection.
After extended-length cleanup passed, retained run
20260811T134130Z-56b0a991reached PE dependency resolution and selected the newly installeddumpbin.exe. Microsoftdumpbin /?emits a parseable exact version but intentionally exits with status1100, so the generic strict-success tool runner rejected the version probe. Admit exactly{0, 1100}for that bounded probe while retaining status0for every required image, prove both sides, and rerun the same Windows target. - Reject unsupported generated rules_cc executable attributes before expensive
lifecycle work. Run
20260811T140043Z-446b011eproved Python end to end, then the C++ candidate usedhdrsoncc_binaryandcc_test; rules_cc rejected both during Bazel analysis even though the reviewed skill already prohibited that shape. Add a deterministic generated-tree contract for the unsupported attribute, return its exact message as bounded candidate-replacement feedback, reinforce the build skill and Flavor scenario, and rerun the same Windows target. Keep the item open until the corrected C++ source is built, tested, run, and accepted on that worker. Retained run20260811T164402Z-6b5757d8then proved the same deterministic boundary was incomplete: the replacement avoidedhdrsbut ignored two separate exact skill instructions and usedincludes = ["."], reaching another four-minute Bazel analysis rejection whose retry record carried only the generic build code. Reject that workspace-root include at the same pre-index boundary and admit its exact code/message as candidate feedback before resuming the target; do not encode ordinary compiler preferences as static validators. - Bind the native Windows C++ delegate to the bootstrap-selected MSVC family.
Retained run
20260811T155508Z-5a2ccbe1generated a rules_cc-valid C++ candidate, passed deterministic validation, Bazel analysis/build, and dependency resolution, then its first generated application case exited with Windows status0xC0000135. Exactdumpbin /dependentsevidence showed that the outer Bazel conformance build delegated artifact production tobuilder:cpp-native@1, whose command-name-first discovery selected MinGW and left the exported executable dependent on absentlibgcc_s_seh-1.dllandlibstdc++-6.dll. Make the platform default MSVC-only while preserving an explicitCXXoverride, initialize the vendor x64 developer environment, bind its compiler variables into toolchain identity, and use the same exact environment for compilation and canaries. Focused Windows tests must compile and run standard-library executables before the exact C++ sample lifecycle is resumed. Remove the hosted Windows gate's legacyCXX=g++escape hatch so CI exercises the same MSVC default. Retained run20260811T170425Z-02f8ea3fthen generated the corrected C++ source on its first attempt and passed CodeGraph indexing plus the complete MSVC/Bazel build before strict resolved-SBOM validation failed. Direct projection of the two cached executables proved 1,139 Windows PE/system components and 15,972 edges; the exact 26-module Bzlmod closure and their 1,165-component/16,086-edge union all validate against CycloneDX 1.7. The remaining toolchain component exposed the defect:cl /?produced a 15,985-character help document that toolchain discovery had treated ascomponent.version, beyond CycloneDX's 1,024-character standard limit. Extract the exact Microsoft vendor version, retain executable and environment identity as the stronger toolchain binding, reject missing or oversized banners, and report the first bounded schema diagnostic rather than discarding it. Focused tests and direct vanilla-Windows discovery now produce exact version19.44.35228; keep this item open until generated tests and independent acceptance pass in the resumed target. Retained run20260811T180648Z-649715b2then proved Python end to end and carried three bounded C++ candidates through successively stricter boundaries. The final candidate generated a JSON parser with Unicode-escape and surrogate-pair support, passed CodeGraph, the complete MSVC/Bazel build, and strict resolved-SBOM validation, but a generated invariant containingéexposed locale-dependent MSVC execution-character encoding: the authorized test executable emitted byte0xe9, which is not UTF-8 JSON. Compile MSVC source and execution strings with/utf-8, prove the exact switch precedes the linker boundary, and resume this candidate from its accepted generation inputs rather than weakening UTF-8 host output validation. Fresh run20260811T185232Z-a3d7bd17incorporated the Unicode repair but exposed two earlier candidate defects. Attempt one wrappedcc_binary(name = "run")in agenrule(outs = ["run.exe"]), colliding with Bazel's native Windows output only after an expensive analysis. Generated-source validation now rejects bothrunandrun.execollisions before indexing and returns the exact replacement diagnostic. Attempt two used a non-owningconst std::string&parser member and was correctly rejected by the existing lifetime validator, but that exact finding incorrectly terminated the bounded candidate sequence. It is now admitted as replacement feedback, preserving the three-attempt cap and every other terminal finding. Keep this item open until a fresh Windows run builds, tests, independently verifies, and accepts the C++ Component. Diagnostic run20260811T192752Z-c188fe69then proved the retry live: candidate one was rejected before Bazel with the exact non-owning-member path and line; candidate two passed static validation, CodeGraph, the full Bazel/MSVC build, and resolved SBOM validation. Its first Unicode application case still emitted byte0xe9because Windows converts a Unicode process command line through the active narrow code page before portable C++main(int, char**)receives it. Preserve the exact authorized argument value but transport Windows C++ JSON in its equivalent ASCII-escaped form. A direct replay of the retained exact executable with that transport returned status zero and UTF-8 bytes foré,東京, and🚀; the full authorized lifecycle still requires replay from the combined revision. Combined-revision run20260811T201807Z-e6a0c4e9then failed fast before generation: a short-lived Visual Studio setup descendant retained the bounded stderr pipe aftervcvars64.batreturned. The environment wrapper now redirects both vendor-setup streams tonulwhile preserving only its own boundedsetoutput; focused tests bind that exact wrapper contract. C++-only run20260811T202149Z-a2854373reproduced the condition, proving redirection alone was insufficient. All output readers now share one five-second EOF deadline after the parent exits; persistent descendants are still terminated and rejected. A direct vanilla-worker discovery with that boundary returned exact MSVC version19.44.35228. Resume the same C++-only Windows regression. Run20260811T203233Z-24df0f8cthen failed immediately because fan-out split subtractive selector--flavor -lang-pythoninto two remote arguments and argparse treated the value as an option. Local, POSIX SSH, and PowerShell fan-out now preserve every ordered selector as one--flavor=<selector>argument. Run20260811T203605Z-4b267b6eproved the outer PowerShell hop was fixed but the Python remote-worker hop still split the same selector before invokingrun_samples.py; that direct argv hop now uses the same single-argument form. Regression coverage binds add and subtract forms through both transport layers. Run20260811T203926Z-165d2810proved both remote hops preserved the exact ordered selector tuple, but the sample runner then ignored it because the regenerative sample explicitly authorizes a four-language matrix. Ordered subtractive selectors now narrow that explicit matrix without expanding its authority; selecting no remaining language fails before generation. Focused tests prove the existing single-language wildcard pin remains authoritative and the four-language matrix narrows to C++ exactly. Resume the C++-only Windows regression with Python, Rust, and JavaScript explicitly subtracted. - Remove redundant labels from the content-addressed build-cache path. After
Bazel cleanup passed, cache admission failed on a 264-character evidence path. The
existing
targets/<os>/<architecture>/<abi>/<target-id>hierarchy duplicates values already bound by the full target-namespace identity, and the nestedartifacts/sha256andbuild-results/sha256labels add no trust. Replace it without legacy fallback byt/<full-target-digest>/{a,r,s}, keep the complete readable namespace in cache records/reports, update tests and user documentation, and rerun the exact Windows target. Never truncate a digest or weaken platform isolation. - Shorten CodeGraph's disposable frozen-snapshot filename. After build/cache
admission passed, generated-tree commit reached a 261-character path solely because
the internal temporary database used the prefix
.literate-codegraph-snapshot-. Replace it with.cg-, retain the final canonical.codegraph/codegraph.dbpath and exact database digest, update cleanup coverage, and rerun the exact Windows target. - Add a private resumable candidate cache below the accepted source-cache trust boundary. The Windows downstream-failure loop proved that a source candidate which generated, indexed, and built correctly is regenerated from the coding CLI after a later dependency-resolution defect because publication currently occurs only after full acceptance. Persist the exact unaccepted candidate plus generation receipt under its complete recipe, prompt, model, tool, Flavor, and framework identities; never expose it through accepted-source lookup or publication; record the failed lifecycle phase and bounded diagnostic; and resume the same bytes only when every generation input remains identical. Invalidate on any generation-authority change, preserve replacement-candidate semantics after a source/test/acceptance defect, and prove a framework-only downstream fix reaches the failed phase without another paid model invocation.
- Run and capture the complete local release gate, including all unit/conformance, lint, formatting, OpenSpec, documentation, lifecycle-driver, CodeGraph, wheel, installed-project, sample, and test-receipt checks.
- Classify each failure as product defect, test defect, stale authority/provenance,
missing host prerequisite, or environmental/transient failure and record the fix.
Hosted Windows run
31517749523completed 2,006 tests and isolated five failures: three Standard service-stack cases hit a transientWinError 5while copying a fresh Bazelrun.pyz, one self-hosting replay exceeded its 300-second boundary and retained a locked CodeGraph database during cleanup, and one synthetic remote-worker command failed. The fresh-output case now retries only Windows sharing codes 5 and 32 for a bounded 6.35 seconds and preserves the final exception; focused admission, eventual-success, and persistent-lock tests pass. Keep the classification item open until the self-hosting and remote-worker failures are reproduced on the combined branch and fixed or proven obsolete there. - Fan the canonical regression across every configured macOS, Ubuntu, and Windows worker in parallel; fix platform-specific source, build, runtime, and fixture defects.
- Re-run
really-cleanfollowed by the complete local and remote gates from the final candidate revision.
- Make every release gate that invokes pinned Node tooling depend on the staged
- Evidence:
- One committed revision has complete local and matrix receipts with no skipped required gate and no uncommitted authority or generated implementation source.
[x] RELEASE-002 — Fail fast and resume release qualification from durable checkpoints
- Owner: release engineering / initialized-project test harness
- Direction: Fix the first known failure immediately instead of waiting hours for later successes. Parallel qualification must durably remember tests that passed in a run, resume after a repair without repeating that prefix, and reset to the beginning only after the complete gate reaches green so regressions are still caught.
- Conclusion: Introduce a versioned, compact, Git-ignored diagnostic checkpoint keyed by repair-cycle identity and exact test identity. Stop scheduling new work after the first failure, allow already-running workers to finish and record their results, and permit the same repair cycle to skip those provisional successes after a fix. These skips are never release evidence: reaching the end consumes/resets the checkpoint and requires one authoritative run from the beginning. Stale, corrupt, or foreign checkpoints fail closed rather than skipping work.
- Depends on: RELEASE-001, compact versioned test-evidence contracts
- Implementation:
- Define checkpoint identity, atomic persistence, invalidation, corruption, and successful-reset semantics without checking volatile execution state into Git; Python schema v2 binds each reusable outcome to its test file so plan additions and isolated repairs preserve unrelated successes.
- Make the current serial Python release gate fail fast at its first failure.
- Make the parallel fan-out scheduler fail fast while safely draining already-running workers and recording their exact passing test identities.
- Resume a repaired run from matching successes and expose concise progress, invalidation, and reset diagnostics through the project-native test command.
- Ship the same runner contract, skill guidance, ignore rules, and starter tests
in every
litai initproject. - Add deterministic tests for first failure, concurrent completion, plan-change reconciliation, per-file invalidation, legacy omitted-skip recovery, corrupt checkpoint rejection, resume, and full-run reset followed by a from-zero regression run.
- Evidence:
- A deliberately failing initialized project stops promptly, resumes without repeating exact prior successes after repair, then resets and passes once from the beginning.
[x] MODEL-001 — Add lexically scoped model routing to every model-using pipeline
- Priority: P0
- Conclusion: A command-line
--model MODELis the pipeline default, not an unconditional override. Component, selected-Flavor, and invoked-Skill authority may establish narrower model scopes. Resolution is an immutable lexical stack attached to each DAG node and bounded agent task: the most specific applicable scope wins, and completion returns automatically to the enclosing binding. Never implement this as mutable process-global state. - Deliverables:
- add
--model MODELto every command that can invoke a coding CLI, including ordinary build/test, generation/rebuild, and model-backed forward/inverse workflows; commands such asrun, which execute an already-built artifact without crossing the model boundary, must omit the flag; - define a versioned
ModelScope/resolved-binding contract with scope kind, owner identity, parent binding, provider, selector, and resolution trace; - define deterministic precedence and ambiguity rules for pipeline, Component, Flavor-role, Skill-invocation, and nested Component scopes; equally specific conflicting bindings fail before model egress;
- resolve independently per Component DAG node and per Skill invocation so sibling overrides cannot leak and an inner override restores its parent on return;
- bind the effective model and complete scope provenance into generation plans, source cache keys, coding-CLI requests/journals, learning evidence, and receipts;
- carry the resolved model-scope identity through typed remote-worker dispatch so a command worker cannot lose, reinterpret, or replace the caller's lexical default;
- document examples with a pipeline default, a nested Component override, a Skill override inside it, and restoration for the next sibling Component;
- add unit and installed-project E2E tests proving precedence, restoration, conflict rejection, cache invalidation, and forwarding through Codex/Claude/Cursor adapters.
- add
- Evidence: 198 focused tests plus 129 subtests pass across model contracts, forward
and inverse planning, dispatch, CLI, schemas, and all three provider command builders.
The clean installed
0.2.0wheel initializes a project and proves that--model installed-pipeline-modelreaches every resolved node binding and the exact corresponding generation-key identity. Unit DAG evidence proves nested precedence, sibling restoration, pre-egress conflict rejection, and node-local cache invalidation. - Depends on: the current locked per-node model-selection adapter, generation-plan identities, and typed Standard lifecycle dispatch.
[x] CLI-OBS-001 — Expose safe inherited subcommand tracing
- Priority: P0
- Direction: Add global
litai -vandlitai --verboseflags that expose every framework-launched subprocess command and its stdout/stderr while a command runs. - Conclusion: Verbose diagnostics belong on stderr so JSON stdout remains a stable
machine contract. Propagate the setting through in-process lifecycle composition,
command workers, SSH/third-party dispatch envelopes, and child
litaiinvocations; redact secrets and credentials, retain bounded-output limits, and never weaken the existing timeout, authorization, or sandbox boundaries merely to stream output. - Deliverables:
- Accept
-v/--verbosebefore any CLI verb and document its stderr contract. - Trace safely quoted argv, cwd, exit status, and bounded stdout/stderr for every framework-owned subprocess boundary, including coding CLIs and native builds.
- Carry verbosity through typed remote-worker dispatch without changing lifecycle authority or cache identities.
- Redact environment-derived credentials, access tokens, authorization headers, and known secret argument values before emission.
- Add CLI, subprocess, JSON-envelope, nested invocation, and redaction tests.
- Accept
- Evidence: focused CLI and lifecycle tests prove verbose subprocess evidence remains on stderr, nested child processes inherit the flag, secrets are redacted, and quiet execution remains quiet. Installed-wheel coverage remains part of the release gate.
[ ] RELEASE-003 — Provide an inheritable, evidence-bound release command and skill
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.4.1 — deferred out of 0.3.0 scope.
v0.3.0was cut as a manually authorized tag/GitHub Release oncemain's CI was green; downstream projects were blocked waiting and this item is unimplemented from zero (every implementation checkbox below was still unchecked), so it could not gate that cut. - Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner: release contracts, CLI, initialized-project taxonomy, and provider adapters
- Direction: Start explicit project-wide versioning and provide a reusable release
skill plus
litai releasecommand for Literate AI and every initialized/derived project. Use~/Src/nanolangas implementation evidence, not as a shell template to copy blindly. - Conclusion: Preserve nanolang's useful sequence—clean exact revision, semantic
version transition, complete gates, changelog/release notes, annotated tag, push, and
provider release—but split planning/preparation from irreversible publication. A
versioned release policy owned by each project declares its authoritative version
locations, allowed transitions, gate command, tag format, artifacts, notes source,
signing requirements, and optional publication provider.
litai release planis read-only and content-identified;litai release prepareupdates only declared local version/changelog authority;litai release publishrequires an exact clean prepared commit and explicit external-write authorization before atomically ordered tag/push/ provider operations. The generic skill explains decisions and recovery; provider bindings own GitHub/GitLab/registry credentials and APIs. Do not infer version solely from ambient tags, synthesize product claims from commit prefixes, use fixed/tmpfiles, force-push, hide remote races behindpull --rebase, or combine mutation and publication into one opaque script. - Depends on: DOCS-005, RELEASE-001, existing version-check/tag authority, project inheritance/update semantics, and compact release evidence
- Implementation:
- Define versioned release-policy, release-plan, prepared-release, artifact, and publication-receipt contracts with semantic-version, source revision, authority, gate, SBOM/provenance, signature, provider, idempotency, and redaction rules.
- Add provider-neutral
skills/agent/release-project/SKILL.mdto this framework and initialized projects; add optional provider bindings instead of requiringgh. - Implement
litai release help,release plan,release prepare,release check, and explicitly authorizedrelease publish; make project lifecycle/release policy inheritable without making the installed framework repository the forced upstream. - Add a repository
releaseMake target as a thin invocation of the same installed CLI contract, not a second release implementation. - Version the CLI distribution, project protocol, schemas, initialized template, Components, Flavors, skills, workflows, and routing policies through their existing narrow authority fields; reject accidental blanket version rewriting.
- Document dry-run, first release, patch/minor/major/explicit version, prerelease, signing, artifacts, GitHub publication, provider absence, partial failure recovery, and parent/child project release independence.
- Evidence:
- Unit/schema tests cover version transitions, dirty/wrong/upstream-diverged state,
stale gates, tag collisions, missing credentials, artifact/SBOM drift, idempotent
replay, partial provider failure, and secret-free receipts.
tests/e2e/test_project_releases.pyowns the protocol. - An installed wheel initializes a project, prepares a release in a temporary local
Git remote, proves exact version/changelog/tag state, and publishes through a
synthetic provider without network access.
test_plan_prepare_check_and_publish_local_git_release. - Literate AI itself completes the same
litai releaseplan/check/publish protocol for a real tagged release after all local and matrix gates pass. Out of this slice: do not tagv0.8.0. Prerequisite: remaining 0.8.0 product evidence onmain, then prepare onrelease/0.8.x.
- Unit/schema tests cover version transitions, dirty/wrong/upstream-diverged state,
stale gates, tag collisions, missing credentials, artifact/SBOM drift, idempotent
replay, partial provider failure, and secret-free receipts.
[ ] ROUNDTRIP-001 — Qualify the representative Component forward and backward
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: source promotion / regenerative-roundtrip Component
- Direction: Generate each supported language from one stable spec, compile and run it, derive a spec back from source, compare semantics, and prove clean regeneration.
- Conclusion: Keep one local representative roundtrip per supported language and a small cross-platform regression; do not require every application to reverse-chain.
- Depends on: current installed distribution and source-promotion skills
- Implementation:
- Preserve comparison ordering, normalization, IO-field semantics, and Python failure-channel behavior in inverse skills and comparison.
- Prefer the wheel-embedded Git origin over installer transport metadata.
- Classify generated test-only exports so they cannot become required product
surfaces during inverse derivation; the installed live run at
b859a8bprogressed beyond inverse acceptance into regenerative qualification. - Recover implicit missing-required-field failures from Python mapping access;
the installed run at
0f4b536built, tested, and ran the forward binary but its inverse statement enumerated type/range/emptiness failures without stating that a missing required key also fails before returning a product result. Version 1.0.3 of the Python inverse skill crossed semantic comparison in the installed52e4104run. - Preserve exactly one selected language command profile in a promoted Python
Component; the installed run at
ce2b5cacrossed that projection boundary. - Preserve exactly one host platform command profile in the promoted Component;
the same installed run then failed closed because promotion selected the host
platform Flavor only for qualification inputs, not for the promoted project. A
focused unit reproduction further proved that a required platform slot alone is
insufficient: initialized operational Flavors must be rebound from the tutorial
capability to the recovered graph capabilities before lock resolution. The
installed
52e4104run selected macOS/Python/Bazel and crossed regenerative build. - Make the composed roundtrip create/check its Component lock before generation;
the installed run at
ce2b5cagenerated all three locked graph nodes. - Attest and promote the composed graph from the actual root-node source tree
named by typed per-Component generation custody; the test currently asks
spec attestto inventory a nonexistent flattened rootsource/after successful graph generation. Preserve every independent workspace rather than materializing a synthetic merged source tree. Deferred 2026-08-28: prerequisite is attesting from typed per-Component generation custody instead of a flattenedsource/root. - Retain a verifier-owned independent expected-result oracle in the promoted root
Component;
52e4104carried qualification arguments through regeneration but the Standard lifecycle correctly refused final acceptance rather than treating generated implementation tests as their own oracle. - Execute Standard parity commands from the profile's declared native generated
root, not from the outer per-Component generation workspace. The installed
cbe3c19run reached the new oracle and produced a correct candidate, but both Bazel parity probes failed withNOT_IN_WORKSPACEbecause their current working directory was the parent ofsource/MODULE.bazel; replaying both exact cases fromsource/produced byte-equivalent JSON from the baseline and generated applications. - Complete Python installed-wheel promotion and two clean regenerative builds.
- Recognize complete CommonJS export assignments during deterministic inverse
inventory. The installed JavaScript lane at
99fb19fgenerated, built, tested, and ran a valid application exportingmodule.exports = { calculateManifest }, but source-to-specification seeded only ESM exports and CommonJS property assignments, then failedsurface_inventory.unsupportedbefore semantic comparison. Admit named object-literal exports and direct identifier exports without treating arbitrary object keys as public surfaces. - Reject model-derived Component-graph capability identifiers that cannot be
promoted, and teach the inverse translator the exact portable-name grammar. The
installed JavaScript lane at
c8921d4crossed forward build, generated tests, runtime acceptance, source intelligence, inverse translation, and semantic comparison, but promotion rejected the model's camel-casecalculateManifestcapability. Invalid relational identifiers must fail at model admission rather than survive an expensive qualification run, and must never be silently rewritten. - Teach JavaScript generation to implement and test Unicode code-point ordering
explicitly whenever a Component requires it. The exact installed-wheel lane at
ceb16f9crossed the former graph-identifier boundary, then correctly reported a semantic conflict: the generated implementation used JavaScript UTF-16 code-unit tie-breaking while the Component requires Unicode code-point ordering. Preserve the Component contract; do not weaken it to the generated implementation or an ASCII-only oracle. - Package the complete Python, JavaScript, Rust, and C++ language Flavor closures
in every initialized project: language skill, specification, toolchain constraint
when applicable, and Standard command profile. The promoted JavaScript project at
566aad8retained+javascriptbut initialization supplied no JavaScript command profile or language skill, so semantic comparison and promotion passed before the first regenerative Standard projection failedstandard.command_profile_count. - Derive observed Standard toolchain authority from the tools actually used by
build, compiler, runtime, and phase-command contracts. The installed JavaScript +
Bazel lane at
8c2c168crossed promotion and exact language-profile projection, but qualification discovered an unused Python tool and then correctly rejected that extra identity against the exact Bazel/Node command closure. The exact installed wheel atf55d171subsequently admitted only Bazel and Node and completed both clean regenerative runs. - Complete JavaScript, Rust, C++, and composed qualification.
- Evidence:
- The exact installed wheel at
ce2b5caran both live tests for 852.869 seconds: Python reached standard command projection and reported only the absent platform profile; composed generation reached post-generation attestation and reported only the invalid flattened source path. - The exact installed wheel at
0f4b536ran the Python-only gate for 322.798 seconds: forward generation, Bazel build/tests, and runtime probes passed; semantic comparison rejected only the omitted missing-required-field failure behavior before regenerative qualification. - The exact installed wheel at
52e4104ran the Python-only gate for 675.951 seconds: semantic comparison and promoted macOS/Python/Bazel command projection passed; regenerative generation, build, test, and package reached independent acceptance, which rejected the absent verifier-owned oracle. - The typed verifier-owned qualification case/oracle change passed 72 focused contract, schema, lifecycle, CLI, migration, and rebuild tests. The repository-wide suite then ran 1,751 tests in 1,514.692 seconds with no behavioral failure; its only two failures were the deliberately stale lifecycle-driver and documentation pins, and both exact pin tests passed after review and refresh.
- The installed wheel at
cbe3c19ran for 591.63 seconds, completed forward generation/build/run, inverse semantic comparison, promotion, and the first clean regenerative generation/build/test/independent acceptance, then failed only the outer parity adapter's incorrect working-directory projection. The retained Bazel logs proveNOT_IN_WORKSPACE; independent command replay from the nativesource/root passes both verifier cases with exact expected JSON. - The exact installed wheel at
46060e3passed the Python-only gate in 857.60 seconds. Forward generation/Bazel build/generated tests/runtime probes, inverse semantic comparison, promotion, and release-authority transfer all passed. The retained qualification record proves two distinct run identities, two distinct empty workspace allocations, two distinct generated source trees, three generated tests per run, all six behavioral surfaces per run, one independent acceptance evidence identity per run, and bothprimaryandgeneralizationparity cases passing in both runs; release implementation authority isspecificationwith no blockers. - Fifty-five focused source-to-specification, inventory, behavioral-surface, and
semantic-comparison tests pass. A replay against the retained failed candidate
queries
calculateManifestwith two exact CodeGraph evidence records and projects required error and ordering surfaces; conservative unit cases admit object-literal shorthand, explicit identifier properties, and direct identifier assignment while excluding string/computed/spread keys and unrelated object literals. - Fifty-nine focused prompt, model-admission, inverse-inventory, behavioral-surface, semantic-comparison, static-inverse, and CLI tests pass in 5.940s. They prove the exact portable-name grammar, stable early rejection, valid relational references, and no normalization.
- The exact installed-wheel JavaScript lane passes the promotion boundary after the model is given the corrected identifier contract.
- The JavaScript skill gate scores 91.5/A and passes all six static/security checks. Twenty-four acceptance-interface, runtime-oracle, skill-codec, and gate tests plus three complete sample-composition tests pass; independent acceptance now uses U+E000 and U+1F600 as a discriminator whose UTF-16 code-unit and Unicode code-point orders differ.
- The installed-wheel JavaScript lane passes the new Unicode semantic surface.
- Twenty initialization/wheel unit tests, 60 focused boundary tests, project
validation, and two clean installed-wheel smoke runs at
5998d43prove every initialized project retains one exact command profile and language-specific skill for Python, JavaScript, Rust, and C++. - A live promoted project proves its selected language retains that exact profile and skill before the first regenerative coding-agent call.
- Rerun the exact installed JavaScript lane through semantic comparison and two clean regenerative builds.
- The clean installed wheel built from
f55d171completed the JavaScript live roundtrip on macOS in 904.273 seconds. The semantic comparison marked all nine requirements equivalent, including Unicode code-point ordering. Qualification accepted three verifier-owned cases in each of two independent runs (sha256:55f4e7c3672b701509b2f586abb1d29f792fcbdd2530e962adfacf11fabd5ee3andsha256:7f52202e33a2b91ffb440e063b69ac809ec136f873fb76720cecf5f9ab1df04e), with distinct generated-tree identities and a shared attested source snapshot. - Require every Rust Bazel target to declare the complete transitive source-file
closure it compiles. The exact installed
c3fb63aRust lane generated a valid behavioral implementation butrust_binary(name = "run", srcs = ["main.rs"])omittedtests/litai_test.rs, whichmain.rsincludes with#[path = ...]; Bazel's sandbox therefore failed before generated tests could run. Reject or prevent this incomplete target during generation rather than spending another qualification run. Generated-candidate admission now follows literal and glob-declared Rust sources throughmodand#[path]edges for everyrust_binaryandrust_test, rejects unprovable source declarations, and fails before indexing or cache admission. Four focused tests cover the observed omission, nested transitive modules, unverifiable source expressions, and the real coding-CLI boundary. - Forward build/test/run, inverse semantic comparison, promotion, parity, and two forced clean rebuilds pass for each language on macOS.
- The exact installed wheel at
[ ] WORKER-001 — Route build, test, and run through declared execution workers
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Priority: P1
- Owner: framework CLI / lifecycle routing / private worker adapters
- Direction: Let
litai build,litai test, andlitai runselect one exact named worker from user-owned configuration. Support local execution, existing staticusername@host:/directoryworkers, and bounded commands that hand a declarative hardware request to a third-party dispatcher without implementing fleet intelligence. - Conclusion: Extract a small private execution-worker layer beneath the test matrix,
but do not make Literate AI a scheduler.
--workerselects one exact named worker: local execution, the existing ad-hoc SSH transport, or a configured third-party dispatcher command. Literate AI emits a versioned execution request containing the Component action, exact source/specification/Flavor authority, and optional hardware requirements (OS, CPU, cores, memory, GPU); the external dispatcher owns matching, prioritization, provisioning, queuing, leases, retries, and fleet lifecycle. A future system such asmaccan consume that request without moving its intelligence intolitai. The existing generation/lock target concept still converges with the selected worker: explicit Flavor constraints and target requirements must agree before dispatch. Dynamic provisioners require a distinct two-stage handoff: send a bounded provisioning request before final worker identity binding, validate the returned exact SSH worker, then construct the canonical lifecycle request for that worker. Cleanup authority is released only after controller-side artifact and evidence import verifies exact bytes, identities, and custody; ambiguous transfer or cleanup retains a recoverable lease. - Static and dynamic configuration boundary (user clarification): Static machines
already provisioned by the user or an administrator are a complete supported mode.
The private
workers.jsoncatalog may contain any number of these, including zero. Dynamic allocation is separately opt-in and disabled by default. Its enabled setting, organization-specific executable/arguments, and user-supplied credential bindings belong only in local user configuration, never project authority or built-in provider code. A configured command must expose--helporhelpfor usage discovery. Neither a configured command nor missing static capacity implicitly enables it. No provider command, credential acquisition, or allocation may run while disabled. Literate AI delegates allocation and validates the returned worker; it does not know cloud vendors or organization-specific VM APIs. The generic opt-in configuration and provisioning handoff below remain unimplemented acceptance work, independent of the static registration/SSH-test delivery in WORKER-CLI-001. - Scope boundary: Provide local, SSH, and synchronous command-dispatch adapters plus request/result protocols—not an internal capability matcher, provisioner, fleet inventory, priority engine, allocator, lease manager, cloud/Kubernetes/VM/GPU API, or retry scheduler. Keep hostnames, usernames, credentials, private dispatcher commands, and operational task/lease state outside Git. Hardware requirements are declarative payload forwarded to the selected dispatcher, not an instruction for Literate AI to choose a machine. The framework may coordinate the two-stage provision/execute/cleanup protocol, but matching, allocation, readiness, lease persistence, and cloud mutation remain external-dispatcher responsibilities. Never rebind a command-worker request to an SSH worker or relabel a result identity.
- Depends on: current exact target/Flavor locking, artifact exports, CodeGraph build prerequisite, source-cache identities, and the bounded parallel sample fan-out
- GitHub issue: #131
- GitHub follow-up: #138
- Next action: Replace the issue #138 oversized inline SSH evidence manifest with a deterministically bounded control result that identifies an out-of-band manifest and bundle, verify both identities and sizes before acceptance, and prove the exact installed-wheel Linux/Windows 27-cell Physics Workbench sample lifecycle before completing the remaining worker qualification. Remaining CodeGraph companion-capability work waits on ADR 0019 opt-in worker pins. Do not invent worker hostnames.
- Implementation:
- Split the current user-owned matrix model into a private named execution-worker catalog plus a test-matrix selection layer. Preserve exact static SSH destinations and add a provider-neutral command worker; the matrix references exact worker IDs and never contains fleet-selection policy.
- Define versioned contracts and schemas for an execution worker, declarative hardware requirements, a worker-bound lifecycle dispatch request, and a compact dispatch result. Requirements cover OS/version, CPU architecture, minimum cores and memory, and optional GPU vendor/model/count/memory without implementing a matcher. The request binds exact Component, action, source, specification, Flavor, toolchain, project CodeGraph, and timeout; results bind artifact and evidence identities without exposing external scheduler state.
- Bind every worker to one exact generation target-profile name and declarative
environment requirements. The worker identity must cover both; local defaults to
host, while SSH and command workers may name another target profile. This is an equality/compatibility check before dispatch, never worker search or ranking. - Keep the worker hardware qualifier structurally stable with explicit nullable minimum GPU-memory and GPU-capability fields. Null means no constraint was passed; Literate AI forwards defined values but does not infer accelerator requirements.
- Define a conservative CLI grammar:
--worker IDselects one exact configured worker; repeatable--worker-param NAME=VALUEsupplies only schema-declared request parameters. Reject unknown workers, parameters, invalid values, and contradictions with the worker's target profile and locked Flavors. Do not search, score, rank, or choose among fleet workers. - Add
--workerand--worker-paramtolitai build, the new standalonelitai test, andlitai run. Keep--targetas the distinct generation/Flavor target-profile selector; the worker declaration binds its permitted target profile so generation, Flavor selection, compilation, testing, and execution use one compatible pair of identities. - Implement the safe private worker-catalog loader and synchronous third-party dispatcher adapter. Invoke dispatcher commands directly as argument arrays, send one canonical JSON request over stdin (or a declared request-file placeholder), consume one schema-validated JSON result, refer to credentials only by environment/provider keys, and report unavailable or unauthenticated dispatchers clearly. Build/test/run now construct the same exact authority request, command workers execute it synchronously with bounded output and application arguments, and successful results must publish immutable artifact references plus observed toolchain identities.
- Add a provider-neutral pre-binding provisioning protocol for dynamic workers.
First add local-only enablement (default false), provisioner command and
credential-reference configuration, with
--help/helpdiscovery. Prove that disabled or missing enablement makes no provider invocation, including when the static catalog is empty. Reject a missing command or required credential bindings before allocation; do not bake provider-specific arguments into Literate AI. A configured provisioner receives exact target profile, declarative requirements, source-authority inputs, total deadline, and an idempotency key before anExecutionDispatchRequestis created. Its bounded response returns one exact SSH worker descriptor plus opaque lease/recovery identity. Validate the returned worker and requirements, then construct and execute the existing canonical SSH lifecycle request without identity rewriting. Persist no private endpoint or lease data in project authority. - Add verified evidence-custody and cleanup handoff for provisioned workers. Import the out-of-band artifact/evidence manifest and bundle under controller custody, verify declared identities, byte sizes, worker/request binding, and immutable references, and emit a typed custody receipt before authorizing stop. Missing, corrupt, oversized, timed-out, or ambiguous evidence retains the lease and a recoverable operator status; delete remains a separate explicit action. One total timeout budget must cover provisioning, readiness, execution, transfer, verification, and cleanup.
- Adapt local execution and the current bounded SSH transfer/command lane behind the
same exact worker interface without duplicating their lifecycle machinery.
A live
litai test samples/cuda-vector-transform-cpp --worker ubuntu-24.04-nvidiainvocation proved exact worker selection, target/lock agreement, and CUDA observation admission, then failed at the intentionalexecution.worker_dispatch_unavailableboundary. This is the current public-CLI gap; the earlier lower-level bounded SSH CUDA execution remains valid evidence but does not satisfy this checkbox. - Define a versioned canonical worker-wheelhouse manifest that pins the exact Literate AI wheel plus every mandatory transitive runtime wheel by filename, distribution name/version, size, and SHA-256; its canonical content identity is dependency-closure evidence and does not replace the Standard distribution pin.
- Add a coordinator export verb that resolves only from the framework's locked runtime requirements into a bounded wheelhouse, rejects sdists and incompatible or incomplete wheels, and writes the manifest only after the closure validates.
- Make worker bootstrap verify the entire manifest/wheelhouse before creating an
environment, install with
--no-index --find-linksand no ambient dependency resolution, verify every installed distribution RECORD plus the final framework identity and dependency-closure identity, and preserve atomic replacement. - Admit every canonical runtime resource reached by installed workflows, templates,
schemas, skills, and remote guard launchers into the wheel structurally rather
than by filename exception; add clean-wheel regressions for the prior missing
workflows/dev/workflow.mdandremote_source_guard.pyfailures. In progress: Physics Workbench sample's exact PR #2 executable matrix exposed this contract on real Python 3.12 x86-64 Standard workers after the pinned Linux and Windows wheelhouses bootstrapped successfully. The same 16 lifecycle cells fail before source evidence: Linux reportsrebuild.standard_distribution_unavailablebecause the installed framework payload omits package, policy, or schema authority; Windows reportsproject.source_intelligence_command_unavailablebecause the required CodeGraph 1.1.1+ command is absent from the isolated worker environment. Framework authority makes CodeGraph a blocking canonical-project prerequisite, so this work must supply a digest-pinned, platform-selected companion capability with version and executable identity evidence rather than skip or downgrade the gate. Keep the Python wheelhouse identity distinct from the companion capability identity and private worker routing. - Extend Standard worker bootstrap with a versioned capability manifest for the mandatory CodeGraph companion: pin platform, archive/package identity, byte digest, version, launcher, and installed executable identity; select only an exact compatible target and expose the launcher to every remote lifecycle process without ambient PATH dependence or mutable package-index resolution.
- Add installed-real-wheel, worker-equivalent Linux and Windows regressions that execute the lifecycle through project source-intelligence synchronization and Standard distribution resolution, asserting the exact 16-cell failure classes cannot recur; import/bootstrap smoke alone is insufficient.
- Qualify the dynamic-provisioning handoff with a synthetic provider and one authorized live disposable worker. Contract tests must reject mismatched worker, request, lease, artifact, evidence, and custody identities; prove retry does not duplicate allocation or destructive cleanup; prove unknown SSH keys and insufficient observed hardware block execution; and prove evidence is imported and verified before default stop. The installed-wheel public CLI proof must run one LitAI project lifecycle through the provisioned SSH worker and leave no unclassified residual. Synthetic fixtures alone do not establish cloud support.
- Repair Windows-native tests and behavior for source executable intent, accepted
manifest identity, working-tree guard discovery, diagnostic-tail preservation,
and projected C++ execution without weakening digest, path, or rollback checks.
The first extraction slice now centralizes literal endpoint validation,
noninteractive SSH/SCP argv construction, connection/operation timeouts, process
termination, bounded output/diagnostics, and stable unavailable/timeout errors in
a framework adapter consumed by the fan-out harness. Fifty-eight focused SSH,
fan-out, and dispatch tests pass with two intentional platform skips. The next
slice is a typed source-materialization envelope followed by the request/result
remote lifecycle handler itself. The current dispatch request binds source
content but deliberately has no Git-revision or archive-transfer locator, so an
SSH handler cannot safely materialize that content without guessing. Add a
closed, identity-bound choice between an exact Git repository/revision and a
caller-staged archive; never derive transport authority from the worker's
mutable checkout.
The versioned envelope is now implemented as separate transport authority: it
binds the exact dispatch request and extracted source-tree identity, admits only
a 40/64-character Git object ID plus credential-free repository URL or the fixed
caller-staged archive locator plus its byte identity, and rejects mixed modes,
moving refs, file paths, queries, fragments, and embedded HTTPS credentials.
Thirty-one focused contract/schema tests pass. The in-progress adapter slice
will stage the current project as the archive form, invoke a packaged
litai worker executereceiver (never a framework-checkout script), and retain artifacts in a worker-local content-addressed store for a later exact-worker run. A reconstruction audit also found that semantic Component/source/Flavor digests alone cannot tell the receiver which target or project-relative Component to invoke. The v2 dispatch request now carries and identity-binds the exact target profile, ordered Flavor selectors, and canonical project-relative Component path; all constructors move forward together with no legacy default. Fifty-five focused contract, schema, CLI, dispatcher, and artifact-export tests pass. The canonical remote source guard is now an installed, stdlib-only module that remains directly executable when uploaded before the transferred project is trusted or importable. The repository script is only a developer launcher, and Git/archive fan-out hashes and executes the installed-module source path. This preserves a single implementation of portable path validation, symlink confinement, archive/Git identity verification, and timeout supervision. All 59 source-guard, fan-out, and SSH transport tests pass with two platform-native skips. The controller archive-capture adapter now inventories only Git-visible or explicitly filtered authored files, excludes credentials ignored by Git and all derived_build/index/cache state, detects source mutation during capture, emits deterministic gzip/tar bytes, and binds the request, extracted tree, and transport-byte identities in the materialization envelope. Three focused tests prove exact extraction parity, ignored/derived exclusion, and no-overwrite staging behavior. The receiver/SSH mutation half remains in progress. The local receiver/controller composition now stages exactly four canonical files after one bounded setup, invokes the installed internallitai worker executereceiver, verifies archive bytes and extracted tree, drives the existing Standard rebuild boundary without recursive worker selection, persists accepted products plus execution commands in a worker-local content-addressed store, and resolves only that exact digest forrun. The public build/test/run verbs now useSshExecutionDispatcherinstead of the former unavailable branch. Result validation requires a successful run to preserve its input artifact. Observed toolchains come from the Standard runtime's discovered closure and are stored with the CAS entry; requested toolchain authority is never mislabeled as observation. Twenty-six focused receiver, capture, transport, CLI, and dispatch tests pass. Live packaged-worker qualification remains the next action. Live packaged qualification now passes on the private Ubuntu 26.04 worker from an initialized project using its inherited Standard lifecycle:litai buildgenerated, compiled, tested, accepted, and storedlitai-worker-cas:sha256:72884c5079d3bd5d0f69bb3e38e04684cc90abcd52ccf9ac05a6faa3d9307570;litai runconsumed that exact digest and returned the known JSON greeting forRemote; andlitai testcompleted independently with its own accepted CAS artifact. The receiver reports the observed Ubuntu 26.04/x86_64/16-core/61991-MiB environment and two exact toolchain identities. A live Ubuntu 24.04 attempt reached source generation but AppArmor denied Codex's unprivileged-user-namespace sandbox; this is retained as a host-bootstrap prerequisite, not weakened into unsandboxed Linux execution. Typed receiver failures now propagate their bounded stable code and message through the controller while untyped stderr remains hidden. The Linux Codex preflight now detects the exact restricted-AppArmor case before a model invocation: when unprivileged user namespaces are restricted, the regularbwrap-userns-restrictpolicy must already be provisioned. Focused tests prove both early rejection and admission with the prerequisite present. The receiver's lifecycle rebuild is also supplied through a typed adapter port by the CLI boundary, eliminating the adapter-to-CLI dependency exposed by CI. Packaged macOS qualification now passes from a clean initialized project:buildstoredlitai-worker-cas:sha256:22778b8918d4c9d52baff82ce8c4e94f69d7790220837939a377afb61699361c,runreused it and returned the exactHello, Remote!JSON, andteststored its own accepted artifactlitai-worker-cas:sha256:3bfe5204d257c2c13a4735235fede25cae260439e446d90ec620d1acb8bcb955. The receiver observed macOS 26.6.1, arm64, 12 cores, and 64 GiB. On vanilla Windows, generation completed and the generated Python source compiled and passed all three generated tests manually, but dependency-closure setup pinned a core before the lifecycle build:_is_pereread every candidate DLL in full merely to inspect its DOS and PE signatures. It now performs two stable bounded header reads and memoizes validity for each exact resolved DLL within the closure, with regressions proving an 8-MiB image requests only 64 and 4 bytes and repeated imports validate their candidate only once. Exact packaged Windows qualification remains pending on that repair. The next run then isolated an untyped exception after generation and before the first build subprocess; the lifecycle catch boundary now emits a bounded, secret-redacted exception only in verbose scope, and run-scoped diagnostics are explicitly copied into each parallel Component executor context. The following exact Windows run proved that propagation but produced more than 64 KiB of legitimate verbose stderr; the SSH transport incorrectly replaced the remote result withexecution.ssh_diagnostic_too_large. Oversized diagnostics now retain an explicitly marked 64-KiB tail so the final typed envelope and exception remain available without permitting unbounded memory or terminal output. This preserves verbose mode while retaining the compact public failure contract. With those repairs installed from one exact wheel, the retained tail exposed a second boundary defect: truncation may begin within a UTF-8 code point, so strict decode downgraded a complete final typed error. Typed-envelope extraction now replaces only malformed diagnostic bytes while continuing to validate the final line strictly. Windows then reached the real generated build: the candidate paired a pytest-style free test function withunittest discover, which found zero tests and correctly rejected the build. The Python generation skill and initialized copy now require runner-compatibleunittest.TestCasemethods, execution of the exact ordinary build-system test target, and explicit rejection of zero-test discovery; focused regressions pass and SkillEvaluator grades the changed skill 91.5/A. With earlier repairs installed from one exact wheel, Windows now reaches candidate validation and the corrected runner completed a real build. The generated single-file export then failed its framework test mode because it importedtests.litai_testfrom the discarded source tree. The Python skill now also requires file-layout exports to embed their framework-mode dispatcher and proves both modes against the exact exported path before generation returns; source-only tests cannot become runtime dependencies of an allegedly self-contained artifact. With earlier repairs installed from one exact wheel, Windows now reaches candidate validation but a later candidate declared onlybuild,test, andrun; the locked Make profile correctly invoked requiredalland rejected it immediately. The Make skill had already requiredallwhile contradictorily forbidding Make execution during generation. It now requires an exact disposableall/test/export-mode validation loop while continuing to forbid fetches, package managers, publishing, and writes outside disposable roots. With earlier repairs installed from one exact wheel, Windows now reaches candidate validation promptly and rejects the latest generated source atsbom.dependency-ref-dangling. This is a generated-candidate defect, not a host prerequisite or compilation failure; the invalid candidate is not admitted to the accepted source cache. A follow-up audit found the receiver parsed the request's identity-boundverbosefield but never activated its diagnostic scope, so remote-vsilently omitted lifecycle traces. The receiver now scopes the whole materialize/execute operation to that request field, with focused coverage; this enables diagnosis without adding mutable environment authority. - Define and version a platform-neutral accepted source-cache tree identity that binds file type, relative path, content, and meaningful executable intent without making Windows reproduce POSIX permission bits it cannot represent. Archive and staging materialization must preserve safe executable semantics on POSIX, reject unsafe/special entries, and produce the same accepted identity under Windows-like mode behavior.
- Add the smallest secure Standard worker bootstrap capability: accept only a coordinator-staged, non-editable Literate AI wheel/distribution whose exact SHA-256 identity is bound by the request; verify bytes before any import or execution; install into an isolated worker environment; and report the installed distribution identity. Do not add arbitrary remote shell, mutable package-index resolution, credential transport, or unauthenticated installation.
- Leave allocation, readiness, bootstrap orchestration, cancellation, cleanup, retained sessions, retries, and task/lease persistence to the selected external dispatcher. Literate AI supplies a timeout/cancellation signal and records the external task/result identity; its built-in SSH lane continues to own only its existing bounded connection, source transfer, remote command, and cleanup steps.
- Require the SSH worker or external dispatcher result to report observed OS/CPU/GPU/toolchain facts and reject contradictions before accepting lifecycle evidence. Apply exact source transfer, project/generated-tree CodeGraph checks, detect-before-install rules, and execution authorization without teaching LitAI how the external system found or created the worker.
- Resolve artifact locality explicitly.
run --workersubmits a single request that retrieves/builds and runs a compatible artifact through that worker;build --workerrequires a durable artifact export/cache result before the worker finishes. Cache identities bind declared requirements, exact toolchain, source/specification/Flavor identity, and artifact format—not a fleet hostname. - Bind receipts and compact remote evidence to the selected worker declaration, worker/dispatcher task identity, observed capabilities, exact repository/source, specification and Flavor closure, toolchains, tests, execution result, artifact, and teardown disposition. Reuse bounded parallel scheduling and fail-fast checkpoints without treating a resumed diagnostic run as release attestation.
- Return a versioned, digest-bound remote lifecycle evidence manifest plus bounded source/object/binary/package/test/receipt payloads or failure diagnostics before cleanup. The coordinator independently verifies and deterministically imports every declared byte into verifier-accessible custody, acknowledges the exact manifest, and only then permits idempotent bounded cleanup. Missing, tampered, partial, replayed, or unacknowledged transfer fails closed; worker-local paths never become coordinator attestation.
- Keep the SSH lifecycle control result below its fixed one-MiB transport limit: inline only status, bound identities, manifest/bundle sizes and transfer handle, observed worker facts, and a bounded redacted summary. Transfer the complete manifest, stage evidence, artifacts, logs, and failure diagnostics through the existing acknowledged custody bundle; reject malformed or oversized controls, and verify the declared manifest and bundle bytes before coordinator acceptance.
- Apply explicit secret and private-path redaction to nested stage failures, stdout/stderr, manifests, and cleanup status. Preserve the underlying source-index preflight cause across Windows cleanup, while retaining bounded diagnostics and no arbitrary remote-file fetch surface.
- Update
litai init, top-level/project skills, CLI help, configuration guidance, security documentation, diagrams, and synthetic examples so derived projects can configure SSH workers or plug in a private dispatcher skill without inheriting framework-only sample scripts.
- Evidence:
- Contract, schema, parser, and worker tests cover local/SSH/command workers; exact IDs; OS/CPU/core/memory/GPU requirements; typed parameters; unknown workers and parameters; invalid dispatcher output; observed-capability contradictions; secret redaction; and canonical round trips. Tests also prove there is no internal worker-matching, ranking, provisioning, or lease state.
- Security tests prove request-file/stdin transport cannot inject arguments or a shell, dispatcher output cannot introduce unsafe artifacts or evidence, credentials never enter requests/receipts, and bounded failures propagate cancellation without Literate AI pretending to own external cleanup.
- Cross-platform regressions prove POSIX and Windows-like archive/staging
round trips agree on accepted source identity while retaining executable intent,
and bootstrap tests prove digest mismatch, wrong distribution metadata,
non-wheel input, install drift, and pre-verification execution all fail closed.
The offline-closure extension additionally proves missing
jsonschema, an omitted transitive dependency, a tampered dependency wheel, an incompatible target, POSIX/Windows-like launchers, retained-old-install rollback, and versioned legacy behavior. Forty-two focused bootstrap, SSH, CLI, and schema tests pass, including cross-export marker evaluation against the declared target Python rather than the coordinator interpreter. A real 32-wheel host closure installed offline, revalidated on reuse, and launched the schema-consuming project validator without a missing dependency. The fresh complete Python gate passed all 2,201 tests with 26 intentional skips; Ruff lint/format, documentation rendering (207 diagrams), lifecycle-driver review, schema-catalog tests, and both changed-skill evaluations also passed. The first focused macOS run passes 46 source-materialization, source-guard, remote-execution, bootstrap, SSH, and worker-CLI tests; focused Ruff lint and formatting also pass. The complete Python gate is presently blocked after 17 tests by the separately in-progress repository-layout skill dependency work, so clean-branch gates and native Windows receipt evidence remain required. - Exact Linux and Windows wheelhouses exported from a clean commit retain one framework distribution identity plus distinct target-specific dependency closure identities and bootstrap on both Python 3.12 x86-64 Standard workers. Each worker returned its platform-native relative launcher and executed the full CLI import surface without an ambient index; the derived Physics Workbench sample executable matrix remains the child repository's next evidence gate.
- PR #29's full Python 3.11/3.12 Linux/macOS gates and Windows non-live gate pass from the same mergeable commit; its actual installed wheel exposes every runtime resource and its final target-specific wheelhouses bootstrap both workers before Physics Workbench sample consumes the pin.
- The repaired exact Linux and Windows closures execute Physics Workbench sample's prior 16
Standard lifecycle cells per platform with current CodeGraph evidence and no
rebuild.standard_distribution_unavailableorproject.source_intelligence_command_unavailable; record parent commit, wheel, distribution, closure, capability, runtime-version, and executable identities. - Lifecycle tests prove build/test/run share one worker identity and one compatible target-profile identity and automatically select compatible platform Flavors; explicit contradictions fail before code generation; remotely built artifacts remain runnable after an ephemeral worker completes; and cache hits cannot cross incompatible requirements or toolchains.
- An installed-wheel derived project uses the private catalog to build, test, and
run one Component over SSH and through a synthetic command dispatcher, with no
framework checkout, internal scheduler, or private routing data in authority.
The clean-wheel command lane now passes installed initialization plus typed
build/test/run dispatch and exact known output. Artifact export schema v4 retains
components/helloas authority while usinghelloonly as its lookup key; the packaged SSH half now passes on Ubuntu 26.04 with exact worker-CAS reuse and known-output validation; Ubuntu 24.04 additionally proves the sandbox-host-policy failure remains typed and fail closed. - User-configured macOS, Linux, and Windows targets produce same-revision receipts through the packaged verbs, while concurrent matrix selection, fast-fail resume, source provenance, known-output acceptance, and cleanup evidence remain intact.
- A real installed-wheel Linux/Windows Physics Workbench sample rerun admits all 27 lifecycle cells per platform with evidence that would exceed one MiB inline, while the control result remains below the fixed bound. Focused regressions additionally reject tampered or missing bundles, preserve referenced failure diagnostics, prove retry/replay/idempotent acknowledgement behavior, and detect secret leakage.
[ ] MATRIX-001 — Prove every Component sample on the requested hosts
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: sample lifecycle / private worker routing
- Direction: Build generated source, compile it, and test runnable artifacts on macOS, Ubuntu 24.04, and Windows using the user-owned test configuration.
- Conclusion: Fan out one exact pushed revision through the gitignored matrix, run OS workers concurrently, retain compact evidence, and never commit private assignments.
- Depends on: ROUNDTRIP-001, WORKER-001, and the exact pushed qualification revision
- Implementation:
- Make the repository-level platform-regression target select
os.*explicitly; controller-host inference must not silently collapse a declared multi-OS matrix to one row. - Expose a packaged derived-project fanout verb; until then initialized guidance must state honestly that the framework sample driver and external CI/task routers are the available matrix executors.
- Run every Component spec locally on macOS. Local Flavor-selection and dry-run of the all-OS Make target already exist. Remaining host runs require the gitignored worker catalog. Do not invent worker hostnames.
- Run every Component spec on the configured Ubuntu 24.04 worker.
- Run every Component spec on the configured Windows worker.
- Resolve platform defects and rerun only from the new exact pushed revision.
- Make the repository-level platform-regression target select
- Evidence:
- Unit-level Flavor selection and a dry-run of the Make target prove the default command carries the canonical all-OS selector.
- Same-revision per-platform reports prove generated source, real compilation or packaging, generated tests, execution, and independent known-output acceptance.
[ ] MATRIX-002 — Run canonical concurrent target matrices
Follow-up GitHub issue: #443
Incoming regression (2026-09-16 UTC): Repeated clean installs of one declared revision reportedly produce distinct distribution identities. The existing repeated-build evidence item below remains open; the historical #248 installer-bookkeeping repair does not close this report. Compare exact wheel payload membership, build-origin metadata and installed observers across two clean prefixes before changing identity semantics. Preserve payload verification and reviewed Standard rebind. This is a P0 release reproducibility investigation, with portable fixtures and native installed qualification required.
Reproduction and repair scope (in progress): A wheel built from exact tracked revision
143c268914e7168f5ded3e1271b08cefd71c2ad4contains 861 observed payload members. Varying only_distribution_origin.jsonreproduces the report'ssha256:f2ac132b9da2e7571aaffd16626d87ced86c03e8c55894bcdeb162145048ff26for the HTTPS.gitorigin andsha256:964454dac4c0d38fb26acd170ccf1df674f9298cb33b45a22bf0d68de30c6f15for the equivalent SCP-style SSH origin. Normalize only already-recognized GitHub transport aliases at wheel construction, using the shared repository URL authority; preserve exact installed payload observation, other repository identities and unsafe-origin refusal. Qualify fresh equivalent-origin builds and independent installs. The third historical identity remains unexplained without its artifact/member manifest.Local origin repair: The shared repository URL authority now serializes recognized GitHub transport aliases identically, and the isolated wheel backend loads that stdlib-only authority without importing runtime dependencies. Other hosts, repositories and non-default ports remain distinct. All 34 wheel-source/update/binding regressions pass in 18.522 seconds, and 12 version-authority tests pass in 8.920 seconds. Lint, formatting, OpenSpec, layout, skill admission and documentation pass. Reviewed driver identity:
sha256:bdc09fddc2288923ea24a27f38a67f023c5299cf63cd8f16283d6c98e7222602. Fresh exact-commit build and separate installed-prefix proof is recorded below; no old wheel or Standard pin has been rewritten.Exact-commit installed proof: Build revision
dc5abcd1cfca9c11d4c700c7c997cbd617f8225fwas independently projected and built through the isolated PEP 517 backend with HTTPS.gitand SCP-style SSH origin inputs, then installed into two fresh prefixes. The installed code and file observer agree on all 915 logical members and identitysha256:466fcf47d49cb5b839ca57a916e57255b2091077ac23962fc67e3211afd7439b. Archive SHA-256 values differ (f62019e6…/479bdd61…); this proves identical installed payloads, not byte-identical ZIP archives. Existing installed-byte and drift checks remain unchanged. The third historical identity, full local/installed release ladder and cross-platform qualification remain open. Authority verification passes; the project receipt remains stale and locks/source intelligence/HTML remain explicit unconfigured skips.Release target: 1.1.0
Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
Priority: P0
Owner: framework lifecycle contracts, CLI, and evidence storage
GitHub issue: #42
Direction: Let projects declare and invoke concurrent target/ordered-Flavor cells for one or more Components through the canonical lifecycle without copying the project.
Conclusion: A matrix is an exact deterministic set of independently locked cells. Every stage must consume accepted same-cell exact-predecessor evidence; each cell produces one receipt binding its complete authority and lifecycle evidence; and an aggregate receipt binds the exact cell set while remaining unaccepted for partial or failed execution. Reuse is permitted only for a complete unchanged cell identity, so changing one cell does not invalidate unrelated cells. Downstream projects retain only mission matrix declarations and mission-specific acceptance.
Regression reported 2026-08-16: a derived-project migration proved that the executor scopes rebuild lock reads beneath the cell root but invokes
rebuildbefore creating the exact target/ordered-Flavor lock there. A fresh 67-cell declaration therefore produced a correctly rejected 0/67 aggregate in which every cell failedcomponent_lock.missing. This is a parent framework ordering defect; the downstream project's historical identity-lint findings remain downstream and must not be hidden by this repair.Second regression reported 2026-08-16: after the first repair created and audited 67 exact scoped locks, every rebuild still failed before planning with
inputs.closure_capture_drift: locked-input closure capture rediscovered the committed host lock bytes instead of consuming the target-scoped lock selected by the matrix cell. The correctly rejected aggregate accepted no stage. This parent defect is separate from accepted-source launcher/fanout work merged through PR #90.Distribution-identity finding:
sha256:ad1ff215…is the reproducible wheel payload identity for pre-merge commit4aa81c678ac168c6c8f2ed9ffd1b7b2f055525cb;sha256:b49218a4…is the reproducible identity for the requested merged parent0522a5802f97ac4c4bd859c96d84cc2578b50738. The embedded exact Git revision is part of the installed payload, so these are distinct exact artifacts even where their functional source changes overlap. The latter is the authoritative parent pin.Depends on: existing Component planning, target-aware locking, source admission, and lifecycle receipt contracts; avoid overlap with PR #44 profiling and PR #45 pinned-test-dispatch except at stable public boundaries.
Implementation:
- Add versioned matrix declaration, cell evidence, cell receipt, and aggregate receipt contracts with deterministic identities and strict target selectors.
- Store locks and evidence beneath cell-identity-scoped paths with atomic writes; concurrent cells for the same Component must neither overwrite nor consume one another's state.
- Add a bounded concurrent runner and CLI/API entrypoint that executes canonical lifecycle stages in-place, never by copying the whole project.
- Permit unchanged-cell reuse only when Component authority, target, ordered Flavors, plan, lock, source/admission, stages, and predecessor chain all match.
- Document declaration, invocation, receipts, and exact Physics Workbench sample migration;
update design traceability, schemas, authority markers, and
CHANGELOG.md. - Resolve each cell declaration and create or validate its scoped lock atomically before invoking rebuild with the same target and ordered Flavor selectors.
- Reject stale, selector-mismatched, cross-cell, or otherwise non-canonical scoped locks; reuse only an exact validated lock under canonical policy.
- Preserve deterministic concurrent creation and bind the selected lock identity into the per-cell evidence chain and fail-closed aggregate.
- Carry the exact scoped lock path, bytes, and identity from matrix selection through rebuild closure capture, planning, admission, artifact evidence, cell receipt, and aggregate without rediscovering the committed host lock.
- Reobserve the scoped lock throughout the run and fail explicitly if its bytes or identity change; concurrent cells must never read or borrow another cell's lock.
- Make installed-wheel distribution identities reproducible from the exact artifact and document which artifact identity is authoritative.
Completed 2026-08-15: the runner creates exact cell roots before execution, allocates each disposable rebuild runtime outside the project, cleans it after every attempt, and keeps durable cell locks/audits/receipts under the declared evidence root. Standard rebuild results now expose the same project, lock, source-admission, and lifecycle identities consumed by matrix receipts. Cell timeouts are bounded and configurable, and partial/failed aggregates propagate a nonzero CLI status. Verified by direct code inspection against the consuming contract, plus a live invocation against a real Component confirming cells now reach real lifecycle validation instead of the four previously fatal defects.
docs/user/target-matrices.mdnow states the runner's scope explicitly: same-host cell concurrency, not remote worker dispatch — use--worker/literate.workers.jsonfor execution on different hardware. Tracked defects closed: #66.Evidence:
-
make target-matrix-checkpasses 60 tests (one existing platform skip), covering same-Component multi-target concurrency, interruption/partial results, tampering and cross-cell evidence, deterministic aggregate identity, unchanged-cell reuse, one-cell invalidation, and absence of any project-copy workaround, plus existing cell-root, bounded external runtime, rerun cleanup, timeout behavior in the real subprocess executor, and a mixed Linux-failure / Windows-pass receipt that remains durably unaccepted. - Relevant local Makefile gates pass, including
make python-checkwith 2,305 tests passed and 28 platform/native skips. - Pushed-branch CI run 31935783440 passes every Linux, macOS, Windows, documentation, sample-composition, and changed-skill job.
- Fresh no-lock Linux/Windows/macOS cells create distinct scoped locks before rebuild, including same-Component and concurrent creation cases.
- Stale/selector-mismatched locks fail closed, partial aggregates remain unusable,
and a reduced derived-project-style declaration cannot fail solely with
component_lock.missing.make target-matrix-checkpasses 63 tests (one platform skip), including an exact 67-cell lock-before-rebuild regression. - Focused matrix gates, full relevant local gates, and Linux/macOS/Windows CI pass.
Local
make python-checkpasses a clean 2,310-test run with 28 platform/native skips; formatting, lint, documentation, changed-skill, and focused matrix gates pass. Pushed-branch CI run 31945353567 passes all Linux, macOS, Windows, documentation, sample-composition, wheel, and changed-skill jobs. - Linux/Windows/macOS same-Component cells capture distinct exact scoped-lock bytes while a differing committed host lock remains unread.
- Cross-cell borrowing and mid-run scoped-lock drift fail closed, and a reduced derived-project-style matrix proceeds beyond closure capture and planning.
- Repeated clean builds of one exact commit produce one authoritative
distribution identity; focused gates, full local tests, and cross-platform CI
pass. Local
make target-matrix-checkpasses 73 tests with one platform skip; the cleanmake python-checkpasses 2,325 tests with 28 platform/native skips; formatting, lint, schemas, documentation, and the changed skill pass.
-
[ ] CACHE-002 — Put all disposable build state under _build/
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: framework CLI / build harness / source intelligence
- Direction:
_build/is the one repository-relative boundary for short-lived objects, executables, compiler and package caches, matrix workspaces, and other cleanable build products. Accepted generated source remains in the separateBUILD_DIRsource cache. - Conclusion: Default
OBJ_DIRto<project>/_build; replace operationalbuild/directories with_build/; ignore the boundary in Git and every source/indexing inventory; and makecleansafely remove the complete boundary on macOS, Linux, and Windows. Explicit externalOBJ_DIRvalues remain supported and receive the same disposable treatment. - Depends on: existing source/object cache separation and path-safety contracts
- Implementation:
- Inventory and replace every framework/template/script default that writes
disposable state beneath
build/or beneath the accepted-source tree. - Add
_build/to repository and initialized-project Git ignores and to canonical CodeGraph/source-authority exclusions; prove a file beneath it cannot affect an index or source identity. - Make
cleanremove the complete resolvedOBJ_DIR/default_buildboundary without deleting accepted generated source; keepreally-cleanas the additional explicit removal ofBUILD_DIR. - Update Make help, CLI help, skills, diagrams, and user documentation to state the
single boundary without retaining a legacy
build/path.
- Inventory and replace every framework/template/script default that writes
disposable state beneath
- Evidence:
- Focused path-default, ignore, indexing, identity, clean, really-clean, init, and installed-wheel tests pass.
- A real clean-cycle test creates representative nested artifacts beneath
_build/, removes them withlitai cleanandmake clean, and proves generated source plus specification authority remain byte-identical. - The same clean-cycle and indexing-exclusion proof passes on macOS, Ubuntu 24.04, and Windows from one pushed revision.
- macOS evidence: focused unit suites passed; an isolated wheel staged only under
_build/setuptools;make cleanremoved the complete tree while preservinggenerated/; and a deliberately invalid_build/codegraph-must-ignore.pyremained absent after a real CodeGraph synchronization.
[x] LAYOUT-004 — Make _build/BUILD_DIR advisory for fungible generated source
- Owner: specification-to-source skills (
make-build-system,repository-layout,python-repository-layout,portable-application-implementation) and onboardingSKILL.md - Direction:
_build(andBUILD_DIR/generated/as the accepted source cache) is the advisory default prefix for fungible generated application source that may be deleted and regenerated. It is not mandatory for load-bearing project authority. Literate AI itself and any project that modifies itself may change Component specs, Flavors, skills, workflows, routing, locks,literate.project.json, and the project's Makefile outside_build. A coding CLI writing a root Makefile as generated application output remains wrong; writing the project's Makefile as project authority is allowed. - Conclusion:
c2f5583already forbids a generated workspace-root Makefile in the catalogmake-build-systemskill, but the initialized-project template copy still carries v1.3.2 "always generate a thin root-level delegating Makefile", and layout skills still say accepted generated source lives only underBUILD_DIR. That contradiction taught Claude to write a root Makefile while generating a product Component (coding_cli.unexpected_output). Keep the generation-workspacesource/bound for fungible product source; make_build/BUILD_DIRadvisory rather than a cage for project-owned catalog/authority. Do not loosencoding_cli.unexpected_output. - Depends on: FLAVOR-001 catalog skill v1.4.0; CACHE-002 object-directory boundary
- Next action: Done. Catalog and template skill bytes, wording tests, and
make skills-checkare recorded under Evidence. - Implementation:
- Update
make-build-systemso generated application Makefiles stay under admittedsource/, while a self-modifying project's Makefile remains allowed project authority. - Make
repository-layout,python-repository-layout, andportable-application-implementationtreat_build/BUILD_DIRas the advisory default for fungible generated application source, not a mandatory home for load-bearing catalogs. - Keep the
project_templatecopies byte-identical with the catalog skills. - Align onboarding
SKILL.mdand layout docs with the same inverse wording. - Update wording tests and skill-dependency identity pins.
- Update
- Evidence:
- Catalog and template
make-build-systembytes match and no longer instruct a generated root Makefile. -
tests.unit.test_make_generation_skilland the Make-init flavor test passed. -
make skills-checkadmitted the changed skills (--no-llm).
- Catalog and template
[x] CACHE-003 — Preserve the sole source-cache write target in Standard rebuilds
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: framework Standard lifecycle / source-cache composition
- Direction: A project may declare several ordered source-cache read targets, but
only its explicit
write_target_idmay be opened with write authority during a Standard rebuild. - Conclusion: The new Standard rebuild resolver correctly selects the configured
store for publication, but its direct store construction currently opens every
declared target writable. Match the public
SourceCacheResolver.from_configurationboundary: open the sole configured write target writable and every other target read-only, without changing lookup order or publication selection. - Depends on: the schema-v2 source-cache configuration and Standard rebuild
composition shipped in
28ffdd6 - Implementation:
- Project write authority into each filesystem store during Standard rebuild composition.
- Add regression coverage proving a declared project-relative secondary target is not created or made writable while the configured runtime target remains writable.
- Evidence:
- Forty focused Standard rebuild and source-cache tests pass on macOS, including absent read-only targets remaining absent and the runtime write target remaining writable.
- Repository quality gates pass on qualified
692041a1, whose full Git tree is identical to mergedad92a655. The retained local Python evidence contains 4,206 tests, 30 skips and zero failures; its terminal output digest matchessha256:aea1c7ededfc897df991433780e0eb509eaa7450384d09a4d0c2ce9a8340a6f0. PR #388 records the accompanying lint, format, layout, OpenSpec, documentation, authority, wheel and installed checks. All 15 jobs of the merged revision's hosted matrix pass. The current resolver and regression prove that onlywrite_target_idis writable, a missing secondary cache stays absent, and read-only runtime configuration creates no store. These source and test files are unchanged in integration7ab1562c. RELEASE-INTEGRATION-001 retains the fresh combined qualification and current lifecycle-receipt obligations.
[x] CACHE-004 — Expose deliberate cache promotion below the CLI
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: framework application service / filesystem cache adapter
- Direction: A downstream application must be able to deliberately publish verified
runtime source-cache entries into a declared project-relative cache without importing
literate_ai.clior reimplementing the immutable-entry protocol. - Conclusion: Move entry-copy orchestration into a provider-neutral application service and keep project discovery, cache-directory resolution, and filesystem store construction in a public adapter. The CLI becomes one presentation adapter over that boundary. Publication remains explicit, restartable, and acceptance-untrusted; it does not become part of rebuild or specification authority.
- Depends on: CACHE-003 write-authority rules and the existing filesystem-v2
FileSystemSourceCacheverification boundary - Implementation:
- Define a typed publication result/error and application service over injected readable-source and writable-destination ports.
- Add a filesystem project adapter that selects exactly one declared committable target and opens the runtime source read-only.
- Make
litai cache publishdelegate to the public adapter with unchanged JSON and stable error codes; export the service/adapter for product composition. - Add unit and CLI regressions for publication, idempotent replay, target ambiguity, absent runtime state, attachment propagation, and no CLI-private dependency in a downstream product.
- Update cache architecture, traceability, and the changelog.
- Evidence:
- Forty-two focused application, adapter, cache, and CLI tests pass on macOS, including direct top-level JSON dispatch and idempotent replay.
- Repository quality gates pass on qualified
692041a1, whose full Git tree is identical to mergedad92a655. The retained local Python evidence contains 4,206 tests, 30 skips and zero failures; its terminal output digest matchessha256:aea1c7ededfc897df991433780e0eb509eaa7450384d09a4d0c2ce9a8340a6f0. PR #388 records the accompanying lint, format, layout, OpenSpec, documentation, authority, wheel and installed checks. All 15 jobs of the merged revision's hosted matrix pass. The current public application service and filesystem adapter retain explicit publication, attachment forwarding, idempotent replay, target ambiguity and missing-runtime refusal. The CLI delegates to the exported adapter; the service and adapter import no CLI code. These source and test files are unchanged in integration7ab1562c. RELEASE-INTEGRATION-001 retains the fresh combined qualification and current lifecycle-receipt obligations.
[x] CACHE-005 — Scope generated-source keys to effective target authority
- Release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: framework source-generation cache / authority composition
- Direction: A change to one language or build-system skill must invalidate targets that consume that skill without forcing unrelated language targets in a multi-target sample or project to regenerate solely because the project-wide lifecycle pin moved.
- Conclusion: Separate the project-level reviewed-authority identity from each generation target's effective authority closure. Keep the complete project identity in provenance and admission evidence, but key reusable generated source by the exact Component, selected Flavors, transitive skills, workflow/routing decisions, coding tool binding, and verifier contract that can affect that target's bytes.
- Root cause (2026-09-02): Exact installed-wheel Linux qualification changed only
test_receipt_policy.runner_identityafter the Standard runner implementation moved. The admitted and current requests retained identical Component revision, generation key, Component plan, recipe, execution plan, coding-tool binding, and model, but the aggregate project-authority member changed accepted lookup fromsha256:453085d7...tosha256:9fe8518f.... The worker therefore reportedsource_cache.runtime_absenteven though the exact admitted source was present. Direct planning and cache inspection falsified Flavor/lock, framework, transport, and missing-object explanations. - Implementation (2026-09-02): Accepted-source request semantics v2 excludes the
whole-project authority identity together with orchestration/workspace custody.
Full project authority remains in the unsanitized coding request and complete
derivation key/provenance. Reusable lookup remains bound to the exact effective
target closure, and repository lineage remains independently bound by every
project-mode Component lock (
project_lineage_authority_identity). No legacy entry is accepted under the v2 semantic identity. - Depends on: immutable generation recipes, exact skill dependency graphs, and the current schema-v2 source derivation cache key
- Implementation:
- Measure and document which current cache-key member makes an unrelated C++ skill change invalidate Python, Rust, and JavaScript roundtrip targets.
- Define a versioned effective-target-authority identity while retaining the full project authority identity in provenance.
- Add positive invalidation tests for consumed skills and negative invalidation tests for unrelated language/build skills and narrative-only authority changes.
- Migrate cache lookup/publication fail-closed without accepting legacy entries under the narrower key.
- Evidence:
- Focused lookup tests prove aggregate project-authority drift changes the complete transaction key but not accepted lookup, while Component/context/prompt/tool/ model authority changes still miss. Existing project-lineage tests prove a real repository-lineage change changes the lock authority while unrelated sibling Component changes do not.
- Installed-wheel key probes reproduce the real receipt-policy miss with every effective-target identity held constant. Exact-revision Linux continuation is retained under MULTI-ENTRYPOINT-001 / RELEASE-001.
[ ] CACHE-006 — Make the self-host lifecycle publish reusable source entries
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: framework external lifecycle driver / source-cache protocol
- Direction: Literate AI itself must use the same persistent, accepted source-cache
semantics emitted by
litai init;BUILD_DIRalone is not an immutable lifecycle cache and must not be mistaken for one. - Conclusion: The current self-host manifest omits
source_cache, and its external sample driver explicitly refuses configured cache receipts and cannot return a publication offer. Consequently every receipted rebuild is correctly markedunconfiguredand forces all 29 derivations to regenerate. Add a project-relative or explicitly bound persistent target, teach the driver to consume the outer exact decision and return accepted-member publication offers, then authorizepublish-source-cacheonly when the receipt binds that result. - Depends on: schema-v2 rebuild cache protocol, current independent acceptance, and immutable filesystem-v2 publication
- Implementation:
- Project every outer cache hit/miss decision into the corresponding sample
execution instead of using the unrelated operational
BUILD_DIRcache as proof. - Return a bounded publication offer for every freshly accepted member, including source CAS and current CodeGraph attachment, without writing the configured cache from inside the driver.
- Configure this repository's persistent read/write target and lifecycle phase;
keep
generated/ignored unless a maintainer explicitly promotes it into Git. - Add cold-run publication, warm-run hit, mixed hit/miss, corruption, ambiguity, and no-regeneration regressions.
- Project every outer cache hit/miss decision into the corresponding sample
execution instead of using the unrelated operational
- Evidence:
- Two identical complete receipted rebuilds invoke coding CLIs only on the first run, and the second still rebuilds, tests, executes, and independently accepts every current source tree.
[ ] CACHE-007 — Admit verified generated source before target builds
Follow-up GitHub issue: #448
Intake reproduction: A fresh disposable source-admission fixture using the existing installed-source smoke producer, real three-test subprocess and filesystem publisher admits successfully when tests leave the source tree unchanged. The same fixture returns
source-cache.source-tree-mismatchwhen the successful verifier adds onetest-output/result.txtfile. No prior cache is reused. This reproduces the reported failure class and identifies post-test membership as a repair candidate; it does not yet prove the reporter's build-make output is the same cause. The publisher recursively captures the mutable post-test directory. Preserve exact accepted source custody; investigate a separately captured candidate and isolated verification output instead of suppressing the mismatch or silently ignoring changed authored files.Repair implemented; qualification in progress: Bind a bounded snapshot of the exact generated candidate before invoking source tests, verify its semantic tree identity, and execute the configured argv from a fresh disposable copy with the same relative layout and executable permissions. Revalidate the original candidate and every original file in the test copy after each command; new test outputs in the copy do not join accepted source membership. Reject changed/deleted source, links/reparse points, substituted roots, extra original-candidate files and exhausted capture limits. Publication retains the unchanged generated candidate. This is cooperative file custody under the existing execution authorization, not production containment. Public command and cache-restore fixtures must cover successful build-make output creation and refusal paths before qualification.
Final local qualification: The final source-admission gate passes all 91 tests (10.422 seconds), and all 12 version-authority tests pass (8.614 seconds). Lint, formatting, OpenSpec, repository layout, changed-skill admission and documentation rendering (121 diagrams / 547 Markdown files) pass. The reviewed lifecycle-driver identity is
sha256:7224f710a5b8325cc1ca63f80e726521b53f2962cca5ce231df3f225aae61458. Project authority verifies; the full-test receipt remains stale, and locks/source-intelligence/HTML are explicitly unconfigured skips. This closes the local fixture repair only. With 3.5 GiB left on the local volume, no new full build ladder was allocated; live generated-host, installed-wheel and native platform qualification remain open.Public regression evidence: Both Python and native build-make CLI fixtures fail with
source-cache.source-tree-mismatchunder the original in-place verifier behavior. Both now admit and restore the exact candidate while excluding test-created output and bytecode; a successful command that changes source refuses before membership publication. The 85-test CLI generation, admission, workspace custody and cache batch passes (9.318 seconds). Fixture generation and installed-distribution ports are supplied; command parsing, real test subprocesses, admission, filesystem publication and restore are exercised. Live coding-CLI generation, installed-wheel and native Linux/Windows qualification remain required.Incoming admission regression (2026-09-16 UTC): A fresh
generate --admitinvocation reportedly rejects its own source tree before persistent cache publication. The report does not establish the normalization cause or that every build-make Component is affected. Reproduce with a minimal portable build-make fixture; compare declared and recomputed manifests, ordering, paths, executable metadata and test-created files without logging source contents. Preserve mismatch refusal and admission custody.Additional required evidence: A fresh public admission and subsequent cache restore succeed for the minimal fixture; changed bytes, membership or executable metadata still refuse. Include installed-CLI and applicable native-platform qualification before closing this owner.
Priority: P0
GitHub issue: #47
Follow-up GitHub issue: #104
Follow-up GitHub issue: #139
Release target: 1.1.0
Previous release target: 0.4.1 — deferred out of 0.3.0 scope; not on the 0.3.0 release-blocking path.
Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
Owner: framework Standard lifecycle / verifier evidence / source-cache and worker dispatch
Direction: Coordinator generation that passes the Component's canonical generated-source tests must be independently admissible into accepted-source cache membership before Linux/Windows object, binary, and package fanout. Publication currently requires a completed Standard build, so coordinator-only generation reaches
source_cache.runtime_absentand remote workers fall back to coding-CLI generation.Conclusion: Add one verifier-owned, source-only Standard transition with a canonical evidence contract. It binds the exact generated source manifest, Component/plan/lock/Flavor/skill/framework and coding-CLI provenance, generated-source test/oracle results, and target selectors without claiming any build or final receipt. Cache publication accepts only matching admission evidence; workers reverify that evidence and begin at object stage without invoking a generator. Final receipts compose this source admission with downstream evidence and remain impossible when any downstream stage fails. Keep repository-only source admission and the full accepted derivation contract distinct.
Depends on: PR #29's exact worker distribution/capability bootstrap, Standard source-only generation, immutable filesystem-v2 cache membership, generated-test execution, and aggregate receipt validation
Detailed plan: Standard generated-source admission
Next action (in progress): Qualify the #448 disposable source-test workspace repair through the complete admission gate and installed/native live execution. Then trace #139's exact admitted membership from publication through filesystem-v2 indexing and fresh-process discovery, then make the stable lookup bind Component, scoped lock, plan/recipe, selectors, provider/tool/distribution, source portability, and project/target/authority isolation without transaction-local process or workspace identity. Keep #138's remote evidence transport separate.
Implementation:
- Add typed source-admission evidence and verifier service with exact identity, provenance, test/oracle, selector, and framework-distribution bindings.
- Add CLI/API/Make surfaces for admission, publication, and
--from-accepted-sourceworker execution without a circular downstream-build prerequisite. - Require matching admission evidence for source publication and worker import; reject source, plan/lock/Flavor/framework, provenance, and selector drift.
- Compose source admission into final Standard membership/receipt while preserving downstream fail-stop finalization.
- Add security regressions and a faithful Linux/Windows worker fanout E2E
reproducing and closing
source_cache.runtime_absent. - Update schemas, docs, skills, changelog, traceability, and authority markers.
- Represent the enclosing orchestration request and each coding-CLI planned node request as distinct identities; key deterministic source derivation by the planned node request while binding orchestration custody explicitly instead of equating the two.
- Carry both bindings consistently through verifier admission, cache membership, publication, restore, worker continuation, CLI/API records, and schemas without accepting either identity interchangeably.
- Reject swapped node evidence, changed orchestration context, stale plan or lock, wrong selectors, and transcript tampering before accepted membership.
- Define a versioned accepted-source lookup identity over stable recipe, execution plan, lock/definition closure, selector portability, provider/tool/model, and source-relevant policy semantics. Keep orchestration request, coding request, workspace/channel/session, and transaction identities in custody evidence but outside reusable lookup.
- Migrate filesystem membership and restore to the durable identity without accepting legacy entries under a narrower key; keep complete entry integrity, source/admission/test/provenance verification, ambiguity rejection, and fail-closed no-generator behavior.
- Add session-A admission/session-B restore, inherited-channel rotation, 12-node-to-27-cell Linux matrix, semantic drift, replay/tamper, and absent membership regressions. Verify compatibility with typed lock definitions (#98/#102), scoped matrix lock bytes (#93), and Windows key transport (#101/#103) without duplicating those fixes.
- Reproduce the reopened defect with workspace A admission/publication and a separately allocated workspace B that carries identical committed project and repository-lineage authority plus an explicitly transported accepted-source cache. Remove checkout paths, temporary roots, workspace UUIDs, and session custody from lookup without weakening exact Component/lock/plan/selector, provider/tool, source tree, membership, provenance, or test bindings.
- Bind the safe repository reuse boundary explicitly: changed repository lineage or project authority must miss, copied entries without valid key membership must fail closed, and no absent or rejected hit may invoke a generator.
- Make every exact #139 admission discoverable from the same explicit or default
cache root after process and workspace replacement; select one exact membership
deterministically and fail closed on duplicates or conflicting memberships. Root
cause:
litai build/litai testdiscovered the correct provider/tool binding (SourceDerivationCacheKey.model_bindingandcoding_cli_tool_binding_identity) from the copied cache when assemblingExecutionDispatchRequest, then discarded it when composing the local rebuild request; the local continuation fell back to deriving that binding from the live process/session environment, which legitimately differs between two isolated projects, so the lookup key it computed never matched the key recorded at admission time. Fix: threadaccepted_source_provider_id/accepted_source_provider_identityfrom the already-discovered dispatch request into the local rebuild request, matching the remote-worker path fixed for #65 defect 3. - Add regressions covering discovery of a single provider/tool binding across a
copied workspace (including 56 published memberships), fail-closed rejection of
conflicting published memberships, and
litai build/litai testforwarding the discovered binding into the local rebuild request. - Add fresh-matrix regressions covering the full 13 macOS cells end to end, selector/lock/plan/provider/distribution misses, cache-root variants, and unchanged Linux/Windows semantics.
- Update the owning schemas, CLI/API documentation, cache/admission skills, changelog, traceability, and reviewed authority identities for the corrected discovery contract.
- Prove both Linux fresh-workspace restore and Windows long-checkout/short
BUILD_DIRtransport from the exact committed wheel before rerunning the downstream 12-admission/27-cell equivalent matrix.
Evidence:
- Focused contract, service, CLI, cache, worker, receipt, and tamper tests pass.
- Faithful Linux and Windows selector fanout consumes the same target-independent admission; the complete Standard lifecycle test proves zero generator calls and downstream build/test/execution/acceptance plus aggregate receipt composition.
- Format, lint, schemas, docs, skills, repository layout, driver authority, committed-wheel, and pull-request CI gates pass from one exact revision.
- A real-wheel multi-node lifecycle generates current tests, admits each planned node, publishes and restores immutable membership, completes compatible worker fanout, and cannot finalize a receipt before every downstream stage passes.
- A real installed wheel admits 12 Linux nodes in one authenticated inherited
session and restores them into the later canonical 27-cell Linux matrix from a
fresh process/session with zero generator calls and no
source_cache.runtime_absent. - An Physics Workbench sample-shaped 13-cell macOS run discovers all 56 exact admissions from a fresh matrix process, completes source/object/binary/package inspection, and produces an all-stages-accepted aggregate without fuzzy lookup, fallback generation, key renaming, or provider/distribution weakening.
P1 — production-shaped generated repositories
[ ] TEST-STRATEGY-001 — Migrate the existing suite to public-API-first behavior tests
Release target: 1.1.0
Detailed roadmap: Public-API-First Test Strategy Migration
Priority: P1 suite-wide quality program; applies immediately to changed tests
Owner: repository test architecture and every public CLI/Python API contract
Direction: Prioritize observable behavior through public APIs, realistic persistence, and complete workflows. Cover schemas, statuses, documented errors, compatibility, authentication/authorization, malformed and missing input, idempotency, retries, partial failures, recovery, boundaries, and concurrency risks. Mock only true external boundaries. Keep method-level tests only for complex, safety-critical, algorithmically subtle logic with distinct diagnostic value.
Conclusion: Apply this standard to every new or modified test now. Migrate the existing suite by contract area without mechanical churn: inventory duplicate and mock-heavy coverage, replace it with stronger public scenarios, and remove redundant lower-layer assertions only after equivalent behavior is protected.
Next action: inventory the current suite by public contract and identify the first mock-heavy feature slice after
LOCK-004lands. In progress 2026-08-28: CONTRIBUTING.md already publishes the standard;docs/roadmap/public-api-test-strategy.mdnow has a contract inventory;litai designis a public-API slice. Do not delete lock/safety unit tests.Implementation:
- Publish the durable contributor test-design standard.
- Inventory existing tests by contract, workflow, external boundary, and justified isolated algorithm.
- Convert prioritized feature slices to public contract and API-level lifecycle scenarios, removing superseded duplicate internal tests.
- Add economical parameterized/property coverage for related high-risk inputs.
Evidence:
- Each migrated slice records the public behaviors and distinct failure modes it protects.
- Full supported-platform validation remains deterministic and green after each slice.
[x] DOCS-ROOT-001 — Keep GitHub-facing documentation paths in the root corpus
- Owner: documentation spine / packaging template
- Direction: The root README linked
docs/user/test-matrix.md, but that file existed only undersrc/literate_ai/project_template/, so the published GitHub URL returned 404 even though initialized-project tests passed. - Conclusion: Keep the private test-matrix guide in both intentional products: the
framework repository's declared
docs/corpus and the initialized-project template. Add a separate root-README regression that checks links against real root files so package-template data can never mask a broken GitHub-facing path again. - Evidence:
-
docs/user/test-matrix.mdexists and is linked fromdocs/README.md; the root-README link regression, documentation graph tests, Mermaid renderer, project validation, lint, and format checks pass.
-
[x] CI-NODE-001 — Move profiling artifact uploads to Node.js 24
- Owner: CI workflow / contributor tooling
- Direction: Remove GitHub's Node.js 20 deprecation warning from the Windows test shards by advancing the artifact-upload action to a Node.js 24 runtime.
- Conclusion:
actions/upload-artifact@v7is the current GitHub.com release line, runs on Node.js 24, and is compatible with the workflow's existing named ZIP artifact upload. No download-artifact action is used in this repository. - Evidence:
-
.github/workflows/ci.ymlusesactions/upload-artifact@v7; local format and lint gates pass; replacement CI run 32621882832 executes the upload steps asactions/upload-artifact@v7without the Node.js 20 warning. Remaining Windows shard failures predate and are unrelated to this action-runtime update.
-
[x] FLAVOR-CONTAINER-001 — Add a containerization Flavor consuming packages, scripts, and parent-container inheritance
- Owner: flavor catalog / deployment axis
- Direction: Container deployment must be a first-class Flavor. It consumes the
project's selected packaging Flavors and declared entrypoint scripts (the material a
Dockerfile needs), and containers compose through the Flavor graph: a derived
container Flavor declares a capability
requiresedge on the base container capability, so parent containers — including those inherited through the repository lineage DAG — are selected transitively and layerFROMbases in DAG order. - Conclusion: Ship
flavors/docker/asdeploy-dockeron thedeploymentaxis (the first deployment-axis flavor; name follows the canonical<axis-prefix>-<value>scheme adopted by the mitigation program Phase 3). Inheritance is expressed with the existing typed capability composition rather than new machinery. A specification-to-source skill owns Dockerfile assembly practice. - Implementation:
- Author
flavors/docker/flavor.md+openspec/spec.md(requirements and WHEN/THEN scenarios for package/script consumption, parent-containerFROMchaining, tool detection fail-closed, no unauthorized publishing) and registerdocker/deploy-dockerselectors in the initialization adapter. - Author
skills/specification-to-source/docker-container-application/SKILL.mdguiding Dockerfile assembly from selected packaging Flavors, Component entrypoints, and the ordered parent-container closure. - Stamp the byte-equal template copy and add catalog tests (coordinates, axis, provided capability, selector resolution, template equality).
- Author
- Evidence:
- New flavor tests pass;
+dockerand+deploy-dockerboth canonicalize to+flavor://literate-ai/deploy-docker; SkillEvaluator passes the new skill; full non-live suite green from a cold checkpoint (2545 tests OK).
- New flavor tests pass;
[x] PROMPT-ROUTING-001 — Translate direct user prompts into bounded provider tasks
- Owner: agent-skill architecture / direct coding-agent boundary
- Direction: Adapt and pin nidhinjs/prompt-master as a key Literate AI agent skill between a direct user's rough request and the selected coding provider. When MAC supplies a task envelope, MAC owns this translation and Literate AI must not run a second competing translation layer.
- Conclusion: Ship
skills/agent/prompt-master/SKILL.mdas provider-neutral agent guidance pinned to upstream commitd15eabbe5d2122eedc060bae8a771381e9873d1b(Prompt Master 1.7.0, MIT), adapted to preserve Literate AI authority: exact current specs/Flavors/skills/workflow/routing remain authoritative; task/correlation metadata remains non-semantic; the skill may sharpen task scope, evidence, stop conditions, and provider syntax but cannot mutate the generation recipe or authorize execution. - Implementation:
- Add the adapted agent skill and byte-equal initialized-project template copy.
- Wire the direct-agent vs MAC selection rule into root onboarding and the agent ledger/skill architecture documentation.
- Add regression coverage for upstream pin/attribution, direct-provider trigger, MAC bypass, and template equality.
- Add deterministic product wiring:
litai prompt translatewraps prompt-master with no model call;--mac-envelopeandLITAI_MAC_TASK_IDfail closed. Do not editskills/agent/prompt-master/SKILL.md(template byte-equality).
- Evidence:
- SkillEvaluator passes Prompt Master at Tier 1 (quality A, 90.2/100); upstream
commit/version/license, direct trigger, MAC bypass, onboarding, and byte-equal
template coverage pass in
tests/critical/test_prompt_master_agent_skill.py; full Python suite passes (2553 tests, 27 skipped); lifecycle and documentation authority are re-pinned. -
tests/smoke/test_prompt_routing.pycovers the CLI envelope, empty request, and MAC bypass.
- SkillEvaluator passes Prompt Master at Tier 1 (quality A, 90.2/100); upstream
commit/version/license, direct trigger, MAC bypass, onboarding, and byte-equal
template coverage pass in
[x] CONVERT-FW-004 — Implement the phased conversion protocol (E2E baseline, rollback, shims, lift-and-shift)
- Owner: framework core / project initialization adapter / convert-project skill
- Direction:
litai init --convertfollows the phased protocol now codified inskills/agent/convert-project/SKILL.md: Phase 0 inspect-then-quarantine (see CONVERT-FW-005; quarantine remains); Phase 1 legacy analysis plus recorded local-cheap stages of the original project with full rollback on executed-stage failure; remote CI is recorded, not a localmake cigate; Phase 1.1 shim wrappers driving the quarantined toolchain with stubs for missing steps; Phase 1.2 ADR-gated lift-and-shift to first-class entities with parity against the Phase 1.1 baseline; Phase 2 native-rewrite ADR. The operation is documented as mutagenic. - Implementation:
- Phase 0: already-initialized guard +
_legacy/quarantine with git mv/mv discipline (CONVERT-FW-002). - Phase 1a: harness inventory + top-level wrapper generation (MITIGATION-FW-002).
- Codify the full phase contract, gates, rollback procedure, and mutagenic warning in the convert-project skill.
- Phase 1b: deterministic E2E driver that executes recorded legacy commands,
captures command/exit/log-digest/artifact identities into one workflow
record, checks CI status when configured, and performs verified rollback
(restore quarantine manifest, remove scaffold) on failure. The driver runs on
a disposable exact copy so build products cannot dirty the quarantined source;
remote CI is recorded evidence (CONVERT-FW-005 amends the earlier local-
cifail-closed rule). - Phase 1.1: wrapper Component/skill/Flavor synthesis from the saved baseline,
including loud-failing stubs for missing steps. Conversion emits a wrapper
Component, build Flavor, pinned skill, complete workflow, and routing policy;
executes every available stage through
litai.harness.mk; and records successful exit/source-tree parity in.literate/legacy-wrapper-parity.json. - Phase 1.2: lift-and-shift tooling moves the complete retained legacy tree,
preserving its internal taxonomy, into the wrapper Component's
implementation/authority (git mvwhen tracked, plain move otherwise), rewrites the wrapper path, proves post-move parity, records.literate/legacy-lift-shift.json, authors a project-local adoption ADR, and removes_legacy/only after success. This remains project reorganization; no source-to-specification transfer is claimed.
- Phase 0: already-initialized guard +
- Evidence:
- Integration test: fixture project converts, fails its E2E gate, and rolls
back byte-identically to pre-convert state; a passing fixture records
digest-only phase evidence, and a GitHub-only CI project without a local
citarget converts with remote CI recorded (tests/e2e/test_harness_inventory.py). - Integration test: passing Make and CMake fixtures convert through Phase 1.1
with wrapper parity equal to the direct baseline source authority; missing
stages remain loud-failing stubs (
tests/e2e/test_harness_inventory.py). - The same vertical slices prove Phase 1.2 moves the complete hierarchy into first-class Component authority, removes quarantine, keeps the generated wrapper executable, and links the adoption ADR into the documentation spine.
- Phase 2 is bootstrapped without prematurely rewriting source: conversion
creates project-local ADR 0002, a lifecycle-valid native-rewrite roadmap owned
by
ADOPT-002, and an evidence-bound next action (boundary-inventory). The ADR requires one-boundary-at-a-time generation, independent acceptance, regenerative qualification, parity, and reversible retained-source deletion; it explicitly records that source-to-specification has not started. - Phase 2 planning is emitted by
init --convert: project-local ADR 0002 binds Phase 1.2 evidence, the active native-rewrite roadmap requires boundary inventory/classification before implementation, and retained source stays authoritative until each generated replacement independently qualifies.
- Integration test: fixture project converts, fails its E2E gate, and rolls
back byte-identically to pre-convert state; a passing fixture records
digest-only phase evidence, and a GitHub-only CI project without a local
[x] CONVERT-FW-005 — Analyze-then-wrap convert gate (inspect before quarantine)
- Owner: framework core / harness inventory / convert-project skill
- Priority: high
- Status: complete; landed in #174
- Direction: Keep quarantine-plus-harness conversion. Do not overlay. Kit showed
convert
git mvs the tree, copies and hashes it, then fails because GitHub CI is present without a localmake ciand becauserepo.shis invisible. Analyze in place first (litai init --convert --plan), author missing Flavors/skills (repo-man, multi-language, GitLab, nested Bazel), then mutate only when readiness isready. Remote CI is recorded evidence, not a local executable gate. Host-heavyrepo.sh buildis recorded, not executed, unless--run-baseline. Python, Bazel, npm, and Go stay local-cheap. Mixed-language trees stamp one language-ecosystem default (C++ when present);--planstill lists the union.blocked-no-driveris informational. The wrapper must expose every detected operation root and must notcdoutside the legacy tree. - Dependencies: CONVERT-FW-004 (quarantine, baseline, shims, lift-shift remain).
- Implementation:
-
litai init --convert --planinspects in place and writes nothing. - Mutating convert refuses
blocked-missing-catalog(or--allow-unready);blocked-no-driverremains informational so notes-only trees still wrap. -
repo-manFlavor + skill;--planlists python and cpp; init stamps one language-ecosystem Flavor; repo.sh / GitLab / nested Bazel detectors; cmake/cuda template files including CUDAagents/openai.yaml. - Inventory
stageslist andlitai.harness.mkper-root targets. - Remote CI recorded; local-cheap baselines still run; tree hash only when a baseline actually ran.
- Synthetic repo_man fixture; Make/CMake slices stay green; GitHub-without-local
ciconverts instead of rolling back.
-
- Evidence:
- Unit tests in
tests/e2e/test_harness_inventory.pycover plan, repo_man wrap, and the GitHub-CI protocol change. -
litai init --convert --planagainst Omniverse Kit names kit/rendering/runtime andrepo.shwithout mutating the tree.
- Unit tests in
[x] CONVERT-FW-006 — Lock planning must skip convert retained implementation/
- Owner: Component lock planner / convert-project skill
- Priority: high; blocks Kit ADOPT-002
litai lockon a converted tree - Direction: Convert lift-shift places retained source at
components/<wrapper>/implementation/. Lock catalog walks everycomponent_rootsdirectory looking forcomponent.mdand currently treats that retained tree as catalog, so a symlink (or >16k entries) fail-closescomponent_lock.component_unsafe/catalog_limitbefore any native Component can lock. - Conclusion: A sibling
implementation/next tocomponent.mdis retained source, not Component catalog. Do not recurse into it while discovering authorings. Native authority stays outside that tree. - Depends on: CONVERT-FW-005.
- Implementation:
- Skip
implementation/when it is a sibling ofcomponent.md. - Unit test: retained tree may contain symlinks and a decoy
component.md; lock planning still sees only the wrapper/native authoring. - Convert-project skill names this skip so later converts do not put
native authority under
implementation/.
- Skip
- Evidence: Kit
components/hdtestlitai lock --checkcurrent (sha256:9945a5bbdd6a52efebe6c0284e4e1cf8d78f2c276477eb33d0054bdcc0cdb419); unit testtest_retained_implementation_tree_is_not_cataloged.
[x] CONVERT-FW-007 — Plan/generate project-local language Flavors from their command profile
- Owner: generation preparation / Standard language command profiles
- Priority: high; blocks native-rewrite wraps that must not use catalog
lang-cppJSONargv[1]transport - Pull request: #180
- Direction: A descendant project may select a language Flavor whose
targetis not inSUPPORTED_IMPLEMENTATION_LANGUAGES(for examplecpp-posix) so the hardcoded C++ JSON-argument prompt does not fire.litai plancurrently fails closed withunsupported implementation languagebecause required entrypoints are keyed only off Flavortarget. Resolve the generated source entrypoint from the selected language Flavor's Standard command profile when one is contributed. Keep the catalog allowlist as fallback for fixtures without a profile. Do not add project-local target names to the framework language catalog. - Depends on: CONVERT-FW-004, CONVERT-FW-006.
- Implementation:
-
_entrypointsprefersStandardLanguageCommandProfile.source_entrypoint. - Unknown
targetwithout a contributed profile still fails closed. - Prompt injection for JSON
argv[1]remains exactlanguages == ("cpp",).
-
- Evidence:
[x] CONVERT-FW-008 — Do not invent a Make test gate; surface the failing command
- Priority: P0
- Owner:
src/literate_ai/adapters/harness_inventory.py - Direction:
litai init --convert --flavor make --flavor python --flavor linuxrolled back withproject.convert_legacy_gate_failed/ status 2. Convert recordsmake -f Makefile testwhenever a Makefile exists, without checking that the file declares atesttarget (unlikeci, which already uses^ci\s*:). GNU Make exits 2 for "No rule to make target". A Pythontests/tree never becomes the test stage because Make claimed it first. The CLI message also drops the command and stderr, so the rollback looks unexplained. - Conclusion: Record a Make test stage only when the Makefile declares
test:. Let the Python pytest detector fill in when that target is absent. Include the recorded command and a bounded diagnostic excerpt in the gate-failure message. - Implementation:
- Share the existing
citarget regex as a Makefile-target helper. - Skip
make testwhen that target is absent; keep default-goalmakeas build. - Put a bounded stderr/stdout excerpt on the failed phase and in the
ProjectInitializationErrormessage.
- Share the existing
- Evidence:
- Makefile without
test:plustests/recordspython -m pytest tests(test_makefile_without_test_target_does_not_invent_a_make_test_gate). - A failing Make test gate names the command and a diagnostic line
(
test_failing_make_test_gate_names_the_command_and_diagnostic).
- Makefile without
[x] CONVERT-FW-009 — Convert baseline must not copy local virtualenvs
Status: complete (2026-08-28: convert omits host-local environments)
Priority: P0
Release target: 0.8.0 Unreleased
GitHub issue: #187
Owner:
src/literate_ai/adapters/convert baseline copy / harness executionDirection:
litai init --convertruns auto-detected Make test in a disposable copy of the repository. That copy includes ignored local environments such as.venv. Console scripts keep absolute shebangs into the original checkout, which is already quarantined, so.venv/bin/pytestfails with "required file not found" / Make Error 127 even when the live tree's tests pass. The same class applies to copiednode_moduleslaunchers.Conclusion: The baseline temp tree must not carry host-local environments. Exclude common ignored env/build directories from the copy. If the recorded test recipe still invokes a path inside an excluded directory, fail with a typed diagnosis naming that command rather than a copied-interpreter 127. Do not rewrite shebangs inside a copied virtualenv. Not a 0.7.3 patch: convert is moving on this minor (RELEASE-012).
Depends on: CONVERT-FW-008
Implementation:
- Exclude
.venv,venv,node_modules, and similar ignored env/build directories from the convert baseline copy. - If a recorded recipe still points at those paths, fail closed with a typed convert error naming the command.
- Walk the Make goal's transitive prerequisite closure so an aggregate
test: test-pythonstill fails closed when the bound command lives on a prerequisite (issue #187 follow-on / PR #197 intent). - Keep CONVERT-FW-008's "only record
make testwhen declared" behavior.
- Exclude
Evidence:
- A Makefile that calls
.venv/bin/pytestplus a dummy venv with an absolute shebang does not fail because the copied interpreter is gone; it either uses a host interpreter or a typed error naming the environment-bound command. - CONVERT-FW-008 focused tests still pass.
- Aggregate
test: test-pythonstill fails closed when the bound recipe lives only on the prerequisite (test_convert_names_environment_bound_recipe_reached_through_prerequisite; PR #197 intent / issue #187 follow-on).
- A Makefile that calls
[ ] MITIGATION-FW-003 — Curate the sample portfolio as a capability matrix with committed pre-filled source cache
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: samples catalog / conformance harness / cache publication
- Direction: Samples are simultaneously the test matrix, the fork documentation, and the premise's proof. The portfolio must walk starter → composed → frontier across the full skills × flavors × components matrix without redundant overlap, stay relatable as living documents, and ship a committed pre-filled source cache so clones skip cold generation.
- Design: ADR 0012 — sample portfolio matrix and committed source cache (Proposed)
- Implementation:
- Author
samples/containerized-log-tally: firstdeployment-axis sample, owning thedeploy-docker+docker-container-applicationcell, using the full hierarchy (interfaces/spec.mdwire boundary viaspecification_roots; zero container prose in the Component — image rules live in the Flavor and skill). Harness manifest and oracle pinned to computed identities and validated through the strict_load_samplepath. - Document the capability matrix, tier model, dormant-flavor ledger, and
committed-cache contract in
samples/README.md. - On ADR 0012 acceptance: publish accepted sample source into
generated/committed-source-cache/for the full ladder (litai cache publish --target project-committed) and commit it; add the currency gate (identity check against current locks) to the samples gate. Deferred 2026-08-28: prerequisite is ADR 0012 accepted by the directing maintainer. Do not commit a pre-filled cache while the ADR is Proposed. - Portfolio dedup pass: retire or merge starter variants whose cells are owned elsewhere; record each retirement with its owned cells.
- Author
- Evidence:
-
_load_sampleaccepts the new sample; harness identities match current Component bytes. - Committed cache present for every ladder sample and current against locks; cold-start ladder run reuses it (authenticated run).
-
[x] MITIGATION-FW-002 — Land mitigation-program Phase 2 (harness wrapper, catalog single-source, topology de-hardcoding)
- Owner: framework core / project initialization / flavor catalog / generation
- Direction: Execute Phase 2 of
framework-defect-mitigation-program:
deterministic harness inspection + top-level wrapper during
init --convert, catalog-derived Flavor selector tables, one physical flavor catalog, and removal of the hardcoded full-stack topology from the prompt builder. - Outcome: All landed.
adapters/harness_inventory.pyemits.literate/harness-inventory.jsonand an executablelitai.harness.mk(fail-closed on undetected targets);detect_repo_flavors()prefersbuild-cmake; selector tables derive from shippedflavor.mdfrontmatter (phantomplatform.serviceaxis removed); template flavors are byte-equal to the root catalog for everyliterate-ai-namespace flavor; the Rust/JS protocol moved wholly into Component authority with a domain-neutrality boundary test; SKILL.md scopes theopenspec/prohibition precisely. Rootswift-*toolchain flavors were corrected to stay applicable toapplication.portable-json(drift had replaced it), restoring co-requisite realization selection. - Evidence:
- Vertical-slice tests execute the generated wrapper through real
makeinvocations and fail closed otherwise (tests/e2e/test_harness_inventory.py). - Byte-equality enforced across all shared flavor directories
(
tests/unit/test_package_flavor_catalog.py). - Full non-live suite green from a cold checkpoint (2548 tests OK); lifecycle
driver TCB re-pinned (
scripts/review_lifecycle_driver.py --record); documentation authority review refreshed.
- Vertical-slice tests execute the generated wrapper through real
[ ] MITIGATION-FW-001 — Execute the framework defect-mitigation program
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: framework core / project initialization / flavor taxonomy
- Direction: Independent evaluation against the framework's stated premises found
defects in Component expressiveness, Flavor naming, directory-taxonomy
self-contradiction, and
litai init --convertcorrectness. - Conclusion: Execute in five phases with the detailed design, ordering, and rejected scope owned by the linked program document; each phase lands through its own queue items below.
- Detailed plan: framework-defect-mitigation-program
- Depends on: nothing for Phase 1.
- Phase 3 evidence: ADR 0010 accepted;
catalog migrate-flavor-namessupports non-mutating planning and explicit--record; packaging, documentation, CUDA, and Bazel naming is canonicalized; legacy selector aliases resolve only at input; sample harness/oracle, runner, lifecycle-driver, and documentation authority identities are re-pinned; 2555 tests pass with 27 skips. - Next action: Reconcile the linked program's remaining Phase 2 follow-ups, then implement Phase 4 under ADR 0011, accepted on 2026-09-13. The absence of nested checkboxes previously hid these obligations; it was not evidence that this five-phase program was complete.
- B4 filename repair: Root and shipped Make catalogs, initialization and the
installed-wheel gate now use
standard-command-profile.json. The profile bytes are unchanged; the changed Make Flavor advances to 1.2.1. All 89 focused initialization, projection and Flavor tests pass, together with lint, formatting, OpenSpec and documentation checks (121 diagrams from 539 Markdown files). Installed-wheel qualification ated1c52a4passes in run20260914T052246Z-d56097; terminal output and artifact hashes were checked. Wheel SHA-256875fd86dfe30448e90894bfdeb24aefdce557e996aeb7f6bd9bd9bf199e15182contains the canonical profile with the original bytes and omits its obsolete filename. Per-axis file-shape enforcement remains a separate unfinished B4 requirement. - Remaining implementation and evidence:
- Verify the remaining Phase 2 per-axis file-shape and make-profile filename follow-ups against their owning work and retain their disposition/evidence.
- Obtain explicit ADR 0011 acceptance (maintainer, 2026-09-13).
- Implement and qualify Phase 4's typed domain metadata and acceptance contracts under new provider/schema identities, preserving the published v1 contracts.
- Qualify Phase 5's stateful/networked/persistent reference sample through that metadata without prompt special-cases, and prove per-node generation cache scoping. Preserve the full linked program's acceptance contract.
[x] CONVERT-FW-002 — Quarantine pre-existing content during litai init --convert
- Owner: framework core / project initialization adapter
- Direction (Phase 1 / D1): Conversion must not interleave legacy files with the
stamped taxonomy. Move every pre-existing target-root entry except
.git/into a unique_legacy/<timestamp>-<digest>/aside directory —git mvfor tracked entries inside a Git work tree, plainmvotherwise — preserving the legacy hierarchy intact, then stamp scaffold onto the clean tree and delete the preservation branches. - Implementation:
- Add
_quarantine_existing_treewith git-detection, per-entrygit mv/mvdiscipline, symlink-escape refusal, and a returned move manifest surfaced as an additive optional key of the initialization result. - Remove
.gitignoremerge, agent-shim delegation append, and_ensure_convert_docs_reachabledoc-linking paths made dead by quarantine; simplify convert-mode scaffolding to the standard path. - Reword
project.already_initializedto state conversion is unnecessary andlitai updatemay be needed (Phase 1 / D3). - Ignore
ap-export/and agent worktree artifacts in.gitignore(Phase 1 / C2-hygiene). - Align
docs/architecture/component-flavors.mdinit-default text with the implementedbuild-makedefault and list thedocumentation.ecosystemaxis (Phase 1 / B6-docs).
- Add
- Evidence:
- New unit tests: git-tracked moves appear as renames in
git status; non-git and mixed trees convert; legacy hierarchy byte-equal beneath the aside dir; double conversion raisesproject.already_initialized; root symlinks escaping the tree are refused (tests/e2e/test_project_initialization_adapter.py). - Full non-live pytest suite green from a cold checkpoint (2545 tests OK); lifecycle-driver TCB re-pinned and documentation authority review refreshed.
- New unit tests: git-tracked moves appear as renames in
[x] LAYOUT-002 — Make this repository obey its own Python and generic layout rules
- Owner: framework packaging / contributor tooling / repository taxonomy
- Direction: Keep the repository root as a small, conventional orientation and
packaging surface. Python importable product code belongs under
src/, tests undertests/, executable maintenance entrypoints underscripts/, authored tool projects undertools/, and every disposable tool/build product under_build/. Framework taxonomy roots (components,flavors,skills,workflows, androuting) remain visible because they are first-class authority rather than Python clutter. - Conclusion: Move the custom PEP 517 backend out of the root into a dedicated
authored build-tool package; prevent root
__pycache__; relocate npm dependency installation fromtools/openspec/node_modulesinto_build/tools/openspec; and document which otherwise numerous root entries are conventional project metadata, Literate AI authority, or candidates for later consolidation. Do not preserve legacy import or cache paths while this unreleased repository can roll forward cleanly. - Depends on: CACHE-002 and LAYOUT-001
- Implementation:
- Produce a tracked-versus-generated top-level inventory and judge it against
generic repository and Python
src-layout conventions. - Move
literate_ai_build_backend.pybeneathtools/build_backend/, update the PEP 517backend-path, imports, custody tests, and distribution-root resolution. - Make repository Python invocations suppress root bytecode as defense in depth;
prove normal tests and wheel hooks do not create root
__pycache__. - Stage the OpenSpec/Mermaid npm tool project and its
node_modulesentirely beneath_build/tools/openspec, while retaining only authored manifests and scripts undertools/openspec. - Gate both the current index and every reachable Git object against committed
node_modules,_build,__pycache__, and bytecode; a discovered historical dependency tree requires an explicitly coordinated history rewrite, not a normal deletion commit. - Add generic and Python repository-layout guidance to the generation skill taxonomy without duplicating product requirements into Component specs.
- Update the repository map and contributor documentation with a concise rationale for each retained top-level authority or conventional packaging file.
- Produce a tracked-versus-generated top-level inventory and judge it against
generic repository and Python
- Evidence:
- Root inventory contains no importable Python implementation module and no
__pycache__; wheel/editable hooks still resolve from an sdist and a clean checkout. - Focused package, wheel, Make-tool, initialization, layout-skill, and CodeGraph
exclusion tests pass, and
make cleanremoves staged Node and Python build products. - Pre-cleanup Git audit found no
tools/openspec/node_modulespath in the current index, any reachable commit, or any reachable object. The 633 MB tree existed only as ignored working-copy state, so no history rewrite is necessary. - macOS evidence: the two new layout skills and all affected language skills
passed SkillEvaluator; 165 focused layout/cache/staging/wheel/init tests passed; an
sdist contained and successfully loaded the relocated backend to build a wheel;
staged npm tooling rendered 115 Mermaid diagrams; CodeGraph excluded
_build; andmake cleanremoved the complete npm tree, including.binsymlinks, without following them or touchinggenerated/.
- Root inventory contains no importable Python implementation module and no
[ ] LAYOUT-003 — Decompose Python implementation hotspots by stable responsibility
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: Python framework architecture
- Direction: The package-level layout is sound—14 direct core modules plus explicit
contracts,application,adapters,cli,source_to_specification, and other domain packages—but several individual modules now aggregate too many independently changing responsibilities. Split them by contracts and call graph, never merely to satisfy a line-count limit, and do not add compatibility import paths in this unreleased repository. - Observed hotspots:
adapters/dependencies/lifecycle.py(6,784 lines),cli/source_to_specification.py(4,131),source_to_specification/model_workflow.py(3,321),application/standard_project_lifecycle.py(2,813), andadapters/models/coding_cli.py(2,792). The flattests/unit/catalog has 177 modules; it is searchable but should follow production subsystem boundaries as those modules split. - Implementation:
- Use CodeGraph callers/edges and change history to identify cohesive seams and
strongly connected cycles before proposing file moves.
Deferred 2026-08-28: prerequisite is a callers/edges inventory of
adapters/dependencies/lifecycle.py(not "wait for a major"). Do not split by line count. - Split the dependency lifecycle into acquisition, resolution, SBOM, observation, and admission modules with one public package facade and no behavioral change.
- Split CLI parser/wire dispatch from source-to-specification use-case adapters;
keep
litaioutput schemas and exit behavior byte-compatible within the same release. - Split model workflow, Standard lifecycle orchestration, and coding-CLI prompt construction only where typed ports already define a stable boundary.
- Move corresponding tests into mirrored subsystem directories when that improves ownership; preserve test discovery and exact test IDs deliberately where CI depends on them.
- Use CodeGraph callers/edges and change history to identify cohesive seams and
strongly connected cycles before proposing file moves.
Deferred 2026-08-28: prerequisite is a callers/edges inventory of
- Evidence:
- Before/after CodeGraph reports show reduced module fan-in/fan-out or cycle size, not only smaller files; full unit/conformance, wheel, and cross-platform sample gates pass from one revision.
[ ] LAYOUT-001 — Make repository organization and native ecosystems first-class skills
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: specification-to-source skill catalog / language Flavors
- Direction: Generated applications must scale beyond the deliberately constrained dependency-free sample profiles. Give coding agents explicit, composable guidance for maintainable repository structure and for each supported language ecosystem's native package-management conventions without copying that boilerplate into Component specs.
- Conclusion: Preserve the existing portable JSON skills as narrow conformance profiles. Add one language-neutral production-layout skill, then separate language ecosystem/package-manager skills selected through the corresponding language Flavor. Keep build-system policy independent so Bazel, CMake, Cargo, npm tooling, or another explicit choice can compose without conflating repository shape with build authority.
- Depends on: ROUNDTRIP-001 and MATRIX-001 establish the unchanged portable baseline
- Implementation:
- Add a generic production generated-repository-layout skill covering
docs/, language source roots,tests/,tools/, package metadata,.literate/, and the separation of generated source inBUILD_DIRfrom objects/executables inOBJ_DIR. - Define source-clutter boundaries: dependency installations, compiler products, package caches, test caches, coverage output, and host-local environments remain derived state and never become generated-source authority.
- Add a Python ecosystem skill for
pyproject.toml,src/<package>/, tests, entry points, dependency locking, and an environment outside the generated tree. - Add a JavaScript ecosystem skill for
package.json, a lockfile,src/, tests, workspace boundaries where applicable, andnode_modulesoutside source identity. Catalog and init-template copies landed 2026-08-28. Flavorauthoring_inputswait on a lock-identity refresh (named prerequisite), not a major version. - Add a Rust ecosystem skill for
Cargo.toml,Cargo.lock, conventional library/binary/integration-test roots, andCARGO_TARGET_DIRprojected intoOBJ_DIR. - Add a C++ ecosystem skill for public
include/<project>/, privatesrc/,tests/,tools/, generated-header boundaries, and build-system-neutral package metadata. Same Flavor-contribution prerequisite as JavaScript. - Package and pin the new exact skill closures in
litai initprojects; document how an explicit Component or Flavor overrides their defaults.
- Add a generic production generated-repository-layout skill covering
- Evidence:
-
make skills-checkpasses for every new or modified skill. 2026-08-28: javascript-ecosystem and cpp-ecosystem SkillEvaluator 6/6 pass (quality B). Template copies are byte-identical. - Project validation and installed-wheel tests prove all exact skill bytes,
dependencies, Flavor selectors, and identities survive installation and
litai init. - One production-shaped application per supported language is generated from a spec, resolves its native dependency metadata without source clutter, builds, runs generated tests, and passes independent acceptance on macOS, Ubuntu 24.04, and Windows from the same pushed revision.
- Clean and really-clean tests prove
OBJ_DIRandBUILD_DIRhave distinct, correctly scoped removal semantics for each ecosystem.
-
[ ] FLAVOR-003 — Add +typescript Flavor to literate-ai standard catalog
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Owner: framework Flavor catalog (
flavors/typescript/), init adapter - Direction: VFI Editor Internal uses TypeScript for its browser frontend. TypeScript
is a distinct ecosystem from JavaScript (separate tsc/esbuild/vite compilation step,
distinct tsconfig.json toolchain), and any project with a browser-facing frontend needs
it. Adding it to the standard catalog alongside
+javascriptmeans derived projects can select it without authoring a project-local Flavor. - Conclusion: Create
flavors/typescript/withflavor.md,openspec/spec.md,standard-command-profile.json, andtoolchain.json. Authorskills/specification-to-source/typescript-portable-application/SKILL.mdfollowing the same pattern asjavascript-portable-json-application. AddtypescripttoKNOWN_FLAVOR_SELECTORSand_TEMPLATE_FILESinproject_initialization.py. Update init tests and the language-closure test. - Depends on: LAYOUT-001 (language ecosystem skill conventions)
- Implementation:
- Create
flavors/lang-typescript/flavor.md(axis-qualified directory; do notgit mvexisting Flavor dirs — FLAVOR-005).+typescriptremains the target alias. primary_axis implementation.language-ecosystem, target typescript, contribution standard-language-command slot. - Create
flavors/lang-typescript/openspec/spec.md— TypeScript compilation and runtime requirements - Create
flavors/lang-typescript/standard-command-profile.json(target: typescript, toolchain: node, build_strategy: typescript-tree) - Create
flavors/lang-typescript/toolchain.json— Node.js 20+ (tsc as a generation-time self-check) - Create
skills/specification-to-source/typescript-portable-application/SKILL.mdwith full contract frontmatter - Register target alias
typescriptfromflavor.md(derived tables; no hand edit ofKNOWN_FLAVOR_SELECTORS) - Add typescript Flavor and skill entries to
_TEMPLATE_FILES - Update
test_initialized_project_packages_every_supported_language_closureto include typescript
- Create
- Evidence:
-
litai init --flavor typescript --flavor makeinstalls only typescript + make Flavor files -
litai project validatepasses on the initialized project - The typescript skill passes
litai project validatein both the framework and initialized projects -
make skills-checkpasses for the new skill
-
[x] FLAVOR-004 — Make cross-axis Flavor compatibility and Swift host realization explicit
- Priority: P0
- Owner: framework Flavor contracts, lock/plan resolution, Standard preflight, selector grammar, and built-in Flavor catalog
- Direction: Separate portable language policy, generic OS policy, and the platform-specific toolchain realization selected when they are combined. Swift is the forcing case: macOS should detect Apple developer tooling, Linux and Windows should select an exact supported Swift distribution or fail before model egress, and unsupported tuples must never reach generation. Canonical Flavor identity and CLI selection must remain unambiguous as catalogs grow.
- Conclusion: Keep
implementation-swiftOS-neutral; add exact toolchain-realization Flavors constrained by OS, a typed compatibility contract resolved into the lock, and a deterministic host preflight before source generation. OS Flavors contribute only generic platform discovery/conventions; conditional developer-tool requirements belong to the selected realization. Preserve short aliases only when unique and add axis-qualified and full-coordinate selectors for collision-free use. - Depends on: FLAVOR-DAG-001
- Next action: [complete] Maintain the supported Swift platform matrix and its official remediation links as upstream support changes.
- Implementation:
- Add typed cross-axis compatibility clauses and exact toolchain-realization bindings without free-form document merging or implicit precedence.
- Reject unsupported or unresolved OS × architecture × language × toolchain tuples during lock/plan resolution, before any coding-model call.
- Add deterministic selected-toolchain host probes and structured remediation metadata; keep installation separately authorized.
- Add full-coordinate and axis-qualified selectors while retaining unique short aliases and rejecting ambiguous aliases with candidate diagnostics.
- Add
implementation-swiftplus supported platform-specific Swift toolchain realizations, Standard profiles, generation skill, and initialized-project packaging. - Add an opt-in macOS developer-tools discovery surface without making Xcode or Command Line Tools mandatory for unrelated language Flavors.
- Update Flavor/target, installation, CLI, and architecture documentation and the initialized project template.
- Evidence:
- Contract/schema round trips reject malformed, contradictory, disjunctively unresolved, and unsupported compatibility declarations.
- Lock/plan tests prove supported Swift tuples resolve exact realizations and an unsupported tuple fails before model dispatch.
- Selector tests prove unique short aliases, axis-qualified aliases, full coordinates, and deterministic ambiguity diagnostics across namespaces.
- Host-preflight tests cover selected commands, missing platform tools, and
remediation-available toolchains without performing installation; a live macOS
probe resolved Apple Swift 6.3.3 through
xcrun. -
litai init --flavor flavor://literate-ai/lang-swiftpackages only the Swift, Make, host-platform, and compatible toolchain authority required for the initialized project. - Focused unit/schema/CLI tests,
make skills-check, and the checkpointedmake python-checkpass. The exact clean Python run completed 1,893 tests with 18 platform/native skips and no failures.
[x] SAMPLE-MATRIX-002 — Bound default sample execution and make Flavor fanout explicit
- Priority: P0
- Owner: sample conformance runner, remote test-matrix fanout, initialized-project test defaults, and canonical built-in Flavor identities
- Direction: Prevent each new language or operating-system Flavor from multiplying
every unpinned sample run. An unpinned sample executes exactly one tuple by default:
flavor://literate-ai/lang-python,flavor://literate-ai/build-make, and the current host OS Flavor. Explicit sample pins remain authoritative, including intentional multi-language samples. Wildcard selectors explicitly expand the requested Cartesian matrix and route OS rows to compatible fleet workers. - Conclusion: Treat wildcard selection as test-matrix expansion before ordinary exact Flavor resolution. Persist and report only full canonical Flavor coordinates; retain short forms solely as input compatibility aliases. Include exact expanded coordinates in local and remote checkpoint/cache identities so matrix runs reuse generation and build results without confusing different tuples.
- Depends on: FLAVOR-004
- Next action: [complete] Keep the supported wildcard matrix and fleet inventory synchronized as canonical Flavors are added.
- Implementation:
- Canonicalize built-in identities as
lang-*,build-*,os-*, andtoolchain-*; expand accepted short aliases at the CLI boundary. - Default unpinned samples to Python + Make + current host OS, without changing explicitly pinned single- or multi-language samples.
- Add deterministic full-coordinate language, build-system, and OS wildcard expansion and reject incompatible tuples before model dispatch.
- Route expanded OS rows only to compatible fleet workers and include the exact tuple in reports and checkpoint identities.
- Preserve source-generation and build caches across opt-in matrix runs.
- Update sample pins, initialized-project test guidance, CLI help, and user docs to show full canonical coordinates.
- Canonicalize built-in identities as
- Evidence:
- Tests prove an unpinned sample runs one host tuple by default.
- Tests prove explicit multi-language pins remain multi-language.
- Tests prove wildcard selectors expand the supported Cartesian product, incompatible combinations fail early, and fleet routing respects OS Flavor.
- Repeating the same expanded matrix uses the persistent generation/build cache roots and a stable, exact-selector checkpoint identity; changed selectors cannot resume another matrix.
- Focused tests,
make skills-check, and checkpointedmake python-checkpass; the exact clean Python run completed 1,893 tests with 18 platform/native skips and no failures.
[x] SKILL-ARCH-001 — Document and validate multi-output skill convention
Release target: 1.1.0
Owner:
docs/architecture/skills.md,skills/specification-to-source/Direction: The VFI Editor case demonstrates a pattern not yet documented in literate-ai: a single Component spec authorizes generation of two language targets simultaneously (Python backend + TypeScript frontend) tied by a shared protocol schema. The coding agent generates
source/backend/andsource/frontend/in one run, using the protocol JSON as the single source of truth. This pattern appears whenever a project uses an IDL, protobuf, OpenAPI spec, or custom schema to generate bindings in multiple languages. It has no new framework requirement — a skill can already instruct the coding agent to write multiple source trees — but it needs explicit documentation so project authors know it is supported and how to structure the skill body.Conclusion: Extend
docs/architecture/skills.mdwith a "Multi-output skills" section that: (a) names the pattern, (b) explains when it applies (shared schema/IDL → N language targets), (c) prescribes the source tree layout (one subdirectory per target undersource/), (d) states the constraint that all targets must satisfy acceptance criteria before the generation is considered complete, and (e) points to thevfi-componentskill in the vfi-editor-internal project as the reference implementation. Do not edit generation-skill bodies in this slice: that would re-pin dependents. Optionaloutput_treeson the skill contract is omitted when empty so existing identities stay unchanged.Depends on: none
Implementation:
- Add "Multi-output skills" subsection to
docs/architecture/skills.md - Record in architecture docs (not generation-skill bodies) that multi-output
generation is an extension of the single-output pattern, not a separate
mechanism. Re-pinning
portable-applicationorrepository-layoutis deferred to avoid identity blast radius. - Name vfi-editor-internal as the external reference shape; there is not yet an in-tree sample.
- Add "Multi-output skills" subsection to
Evidence:
-
docs/architecture/skills.mddocuments the convention;output_treesvalidation is covered intests/unit/test_skill_closure.py.make documentation-review-recordwithLITAI_SESSION_ID=devpasses. - A derived project authors a catalog skill with
source/backendandsource/frontendand passes publiclitai project validatewithout rewriting its skill bytes. The same CLI rejects non-source and escaping output paths.tests.e2e.test_project_cli.ProjectCliTests.test_derived_project_accepts_multi_output_catalog_skilland all sixtests.unit.test_skill_closuretests pass. This proves authoring and validation; generated multi-language execution remains separate acceptance.
-
[x] SKILL-ROUTING-001 — Behavioral regression harness for skill/capability selection
- Owner: skill authority / generation-recipe assembly; a new provider-neutral evaluation harness, not a specification-to-source skill itself
- Direction: Skill and capability-contract selection is validated structurally today
(schema shape, DAG acyclicity, exact pinned identities) but never behaviorally against
real prompts/requests — nothing checks that the right skill actually gets selected
for a given generation intent, or notices when one only appears to because its
description's vocabulary happens to overlap a prompt rather than because the match is
meaningful. Surfaced by surveying
example-web-tooling(an internal, independently evolved, mature MCP server exposing ~35SKILL.md-shaped web/frontend skills): itsscripts/diagnosis.ts/scripts/corpus.tsrun synthetic prompts against the real skill corpus and classify each outcome as correct pick, misroute (wrong skill won), over-greedy (a skill fired when it should not have), or fragile pass (the right skill matched, but the description's overlap with the prompt was thin enough that the match likely came from the model's training priors rather than the doc actually being read). This is a real, evidenced gap-class, not a hypothetical: this framework's ownCOVERAGE-GAP-001/#64 already establishes that a green build/test signal is not proof of completeness for generation; the same failure mode exists, unaddressed, for skill/capability selection upstream of generation. - Conclusion: Add a provider-neutral evaluation harness that runs a corpus of
synthetic generation prompts/requests against a project's actual skill and capability
catalog and classifies each outcome the way
example-web-tooling's harness does (correct / misroute / over-greedy / fragile-pass), rather than only checking selection structurally. Scope it as alitai-level diagnostic (e.g.litai skills evaluateor similar), not a new specification-to-source skill, since its subject is the routing mechanism itself, not any one Component's generated source. - Depends on: none; complements
SKILL-DEP-001's exact dependency-closure work (that resolves what gets pulled in once a skill is selected; this validates that the right skill got selected in the first place) - Implementation:
- Added
src/literate_ai/skill_routing_evaluation.py: loads every declaredspecification-to-sourceskill's real frontmatterdescription/title(viaparse_authoring_markdown, the same raw-frontmatter parserResolvedSpecificationToSourceSkill.from_referenceuses internally but doesn't surfacedescriptionfrom — it projects only the narrower typed manifest fields), tokenizes it, and scores it against a prompt. - Fragile-pass detector: Jaccard overlap (
|intersection| / |union|) between prompt and candidate tokens, not recall-on-prompt-only. Deliberately chosen after discovering recall-on-prompt structurally favors long, vocabulary-rich descriptions (this repository's owngenerate-nvidia-cuda-applicationdescription is far longer than its siblings' one-liners and won essentially every prompt under the naive formula purely by having more chances to share an incidental word) — Jaccard's union denominator makes a description's own irrelevant extra vocabulary work against it instead of for it. A small stopword list (function words, plus the literal "Use for Literate AI workflow tasks." boilerplate every skill description in this catalog shares) keeps unrelated prompts from over-firing on shared connective words. - Corpus format: a JSON array of
{case_id, prompt, expected_skill_id}(nullexpected means the prompt should route to nothing);load_skill_routing_corpusrejects malformed/duplicate/empty corpora and unknownexpected_skill_ids before scoring anything. - Wired as
litai skills evaluate CORPUS [--project PATH] [--fire-threshold N] [--fragile-threshold N](src/literate_ai/cli/skills.py), a new top-level command group parallel tocache/catalog, separate fromproject validate. Documented indocs/user/configuration-and-cli.md. - Validated against this repository's own 17-skill catalog first:
tests/fixtures/skill_routing/literate_ai_catalog_corpus.json, a 16-case seed corpus covering every language-portable-application skill, the two richer service/dashboard skills, two "should never fire" prompts, and one known-vague prompt.
- Added
- Evidence:
- Running the seed corpus against the real catalog reproducibly reports a
misroutefor a known-ambiguous pair (portable-specification-planning/portable-application-implementation— a real, informative finding: these two skills are semantically adjacent by design) and afragile_passfor a genuinely thin match, not a silent correct-pick for either —tests/smoke/test_skill_routing_evaluation.py::RealCatalogEvaluationTests::test_seed_corpus_mostly_routes_correctly_with_one_known_ambiguity. A dedicated synthetic-fixture test (test_known_ambiguous_pair_reproducibly_misroutes_or_fragile_passes) makes the same property deterministic and independent of the real catalog's content drifting later. - The harness never claims a selection is validated purely because it was
structurally well-formed:
project validate's schema/DAG checks are entirely untouched by this work, andevaluate_skill_routingfails closed (skill_routing.expected_skill_unknown) rather than silently accepting a corpus that references a skill outside the real catalog. - Full test suite (19 tests: scoring/classification, corpus loading, real-catalog
evaluation, CLI wiring) passes;
litai skills evaluateis reachable through the existing generic scoped-help mechanism (litai help skills evaluate) with no additional wiring.
- Running the seed corpus against the real catalog reproducibly reports a
[x] GENERATION-008 — Detect an unusable selected coding CLI and fall back automatically
Release target: 1.1.0
Priority: P1
Owner:
src/literate_ai/adapters/models/coding_cli.py(select_coding_cli)Direction:
GENERATION-004/#31 closed with a configurable priority order (LITERATE_AI_CODING_CLI_PRIORITY) but explicitly left open "a real usability/ authentication probe... if a project needs per-host dynamic selection rather than a static configured order." That deferred case is no longer hypothetical: this session independently hitcodexfailing closed mid-release with "You hit your spend cap set by the owner of your workspace," requiring a manualCODING_CLI=claudeoverride to make any progress on theinstalled-project-e2e/samplesrelease gates. Surveying~/Src/telemetry-dashboard(an independent downstream project) found its ownverification/release-gate.shpermanently hardcodes the identical override, with a comment citing the identical root cause ("CODING_CLIis pinned to claude per LITAI-001 (litai's own fixed codex-first default-CLI priority picks codex regardless of auth state)"). Two structurally unrelated projects independently converging on the same manual workaround for the same failure mode is a strong signal this belongs in the framework's default selection behavior, not in every project's own scripts.Conclusion: Extend
select_coding_cli(or the point where a selected CLI's process is first invoked) to detect a fail-closed usability condition — authentication failure, spend-cap/quota rejection, or another CLI-reported hard denial distinguishable from ordinary generation flakiness — and fall through to the next entry in the configured priority order instead of surfacing the failure directly, at least for the specific, detectable "this CLI is currently unusable regardless of retry" class of error. Do not attempt a general authentication/capability probe run speculatively before every invocation (GENERATION-004 already considered and deferred that as the larger, less evidenced option); scope this to reacting to an already-observed hard denial.Depends on:
GENERATION-004'sLITERATE_AI_CODING_CLI_PRIORITYmechanismImplementation:
- Enumerate only observed hard-denial signatures: Codex's workspace spend-cap wording and Claude's individual spend-limit wording (recorded during the RELEASE-006 live recovery above). Cursor Agent and OpenCode quota lists remain intentionally empty until a real denial is observed; each already retains its separate authentication-denial classification.
- Distinguish this class from ordinary transient generation flakiness: a new
coding_cli.quota_deniedtyped error, checked only after the existingcoding_cli.authentication_requiredclassification (including itslogin statussecondary probe) rules out an authentication cause, and only for a nonzero exit status —GENERATION-006'sgenerated_metadata_invalidretry path is untouched and stays exit-code-independent. - On a detected hard denial (
authentication_requiredorquota_denied), fall through to the next PATH-available CLI in the configured priority order (via new_select_fallback_coding_cli) for the remainder of thegenerate()call, loggingcoding_cli_fallbackwith the abandoned/adopted CLI names and reason. Bounded automatically: each attempted CLI name is tracked and excluded from further fallback, so the loop terminates once the priority order is exhausted and re-raises the last real denial (not a synthetic "exhausted" error). -
CODING_CLI=<name>(checked via the same truthy-env conditionselect_coding_cliitself uses) disables fallback entirely — a hard-denied pin raises immediately, never silently reroutes to a CLI the caller didn't ask for. - Both
CodingCliSourceGenerator.generate()andCodingCliTaskRunner.run_json_taskapply the same bounded authentication/quota fallback. An explicit CLI pin or resolved generation model scope prohibits cross-provider fallback; select a healthy provider before locking that scope.
Evidence:
-
tests/critical/test_coding_cli_generation.py::test_quota_denial_falls_back_to_the_next_available_clireproduces this session's exact scenario (codex denies with the real observed spend-cap phrase,claudeis the next PATH-available CLI) and asserts the fallback CLI is invoked and the generation succeeds — no manualCODING_CLIoverride required. -
tests.smoke.test_coding_cli_quota_fallback.CodingCliJsonTaskQuotaContractTests.test_json_task_quota_denial_falls_back_to_the_next_available_clicovers the same fallback onrun_json_taskunlessCODING_CLIis pinned. -
test_explicit_coding_cli_pin_disables_fallbackandtest_quota_denial_reraises_original_error_when_fallback_is_exhaustedcover the two ways fallback must NOT silently mask a real denial: an explicitCODING_CLIpin, and a priority order with nothing left to fall back to. - The full existing
test_coding_cli_generation.pysuite (108 tests, including every pre-existing authentication-classification and metadata-retry test) still passes unmodified — the new hard-denial branch never intercepts ordinary transient failures.
-
Current reconciliation: Nine focused public generation/JSON-task regressions pass, including observed Claude denial, provider-specific classification, bounded exhaustion, explicit CLI pinning and resolved model-scope refusal. The JSON-task cases launch actual fixture executables; this closes the implemented fallback behavior without claiming that unknown provider quota signatures are recognized.
[~] GENERATION-011 — Pin live qualification to an explicit user-configured CLI and model
Release target: 1.1.0
Priority: P0
Owner:
literate.test.json/select_coding_cli/ liveinstalled-project-e2eandsamplesgatesADR: 0017 (Accepted 2026-08-26)
Direction: Remote release fan-out must stop guessing a coding CLI from PATH order and interactive Cursor/Claude/Codex sessions. Live tests require one explicit launcher and model in ignored user configuration. Remote workers treat OpenCode plus
OPENAI_API_KEYand an explicit--modelas a prerequisite. A command-line--coding-cli/--modeloverride must still let a maintainer run any supported provider and model for a one-shot test without rewriting that file or committing a vendor pin.Conclusion: Fail closed when live qualification has no explicit CLI and model. Put the durable default in
literate.test.json, not project authority. Command-line flags override the file for that invocation only. SSH workers used by--target localrequireopencodeandOPENAI_API_KEYin the login environment. Attended locallitai generatemay keep today's harness choice. Do not copy credential caches; do not put secrets inliterate.workers.json. The runtime cursor those pins become is GENERATION-010 / ADR 0018.Required by: RELEASE-009 needs this before local fan-out can close.
Next action: POSIX
--target locallive fan-out needs workers whoseopencodeis configured for the pinned model's provider, plus a prepared plan. 2026-10-09 (1.2): ADR 0017 decision 4 is amended: theOPENAI_API_KEYprecheck is removed because OpenCode resolves provider credentials itself;opencodestays required.Implementation:
- Require
coding_cliandmodelinliterate.test.jsonfor live generation; extendliterate.test.example.jsonwith inert placeholders. - Resolve live selection as
--coding-cli/--model, thenCODING_CLI/LITAI_LIVE_MODEL, then the JSON file; never PATH first-available and neverGENERATION-008fallback on this path. Controller fan-out reads the JSON withignore_environment_pinsso this session'sCODING_CLIis not injected onto workers. - Fail remote live gates unless the bound CLI is
opencode; pass the bound model as OpenCode--model. (The originalOPENAI_API_KEYprecheck was removed in 1.2; see the ADR 0017 amendment.) - Keep attended local generation on the existing
select_coding_clipath. - Session start logs the user-default CLI/model tuple and, when flags
override it, a distinct
model.session.cli_overrideevent. - Document the pin, the remote prerequisite, and the command-line
override in
docs/user/test-matrix.md/ samples guidance.
- Require
Evidence:
- Unit tests prove missing JSON fails closed, CLI flags override the file, and remote-prerequisite errors fire without a model call.
- Live
hello-component(LITAI_SESSION_ID=dev make samples SAMPLE_FLAVORS='--sample hello-component --coding-cli cursor-agent --model gpt-5.6-sol-high') passed (~199s,model_selector: gpt-5.6-sol-high, ledger20260830T062352Z-b92c24). Ignoredliterate.test.jsonSHA-2562a41cb24…8bdf36bunchanged. Durable tests:test_cli_override_is_used_by_select_coding_cli_without_rewriting_the_file,test_live_sample_cli_override_is_used_without_rewriting_test_config. - POSIX
--target locallive gates can proceed once workers have a configuredopencodeand the JSON names that pair (theOPENAI_API_KEYprecheck referenced below was removed in 1.2). 2026-08-30: four POSIX SSH workers haveopencode; none haveOPENAI_API_KEYin the login environment. BoundLITAI_REMOTE_LIVE_GATE=1returnedcoding_cli.remote_prerequisite. Fail-closed tests: absentliterate.workers.json→release.target_unconfigured; non-opencodeJSON →coding_cli.remote_prerequisite;opencodeJSON exports the remote gate without puttingOPENAI_API_KEYon the command line. Command when the key is present is indocs/user/test-matrix.md.
[x] GENERATION-010 — Keep an explicit never-empty per-agent model stack
- Priority: P0
- Release target: 0.7.0
- Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner: coding-session model cursor / specification language / spec-to-code converter
- ADR: 0018 (Accepted 2026-08-26)
- Direction: Coding sessions keep an explicit model stack. Frame 0 is the session model. Nested Component, Flavor, skill, and in-spec sectional changes push when the model changes and pop when leaving. Push, pop, and depth are part of the specification language. Each thread and each agent has its own stack. Popping the only remaining frame is a warning that logs the precise caller. Never go to stack depth 0.
- Conclusion: The lexical
ModelScopeBindingstays the lock/cache identity. The runtime cursor is acontextvarsstack that is never empty afterbegin_session. A last-frame pop is refused withModelStackPopRefusedWarningand amodel.stack.pop_refusedevent naming file, line, function, and any specification location. Do not use a process-global list. Do not wait on ADR 0011 for sectional directives. - Depends on: GENERATION-011
for the live-test session model that becomes frame 0 on that path;
RELEASE-009
includes this in the
0.7.0cut. - Next action: Complete. ADR 0018 is Accepted; implementation and unit evidence are recorded. Live fan-out remaining evidence stays on GENERATION-011 / RELEASE-009.
- Implementation:
- Per-context stack with
begin_session,push,pop,depth, andcurrent; frame 0 is the session model. - Last-frame pop warns and logs caller file, line, function, plus any specification location; depth stays 1.
- Specification-language HTML comments and additive
coding-model-selection@2stackoperations. - Converter generation uses the top of the stack.
- Document the stack language in user generation/CLI guidance.
- Per-context stack with
- Evidence:
- Unit tests prove the stack never empties, threads/contexts isolate, and a pop of the last frame warns with the caller's precise location.
- ADR 0018
StatusreachesAccepted. -
0.7.0changelog names the never-empty stack and the last-frame warning.
[ ] SKILL-DEP-001 — Resolve exact transitive skill dependencies automatically
Release target: 1.1.0
Owner: skill authority / Component locking / generation-recipe assembly
Direction: A Component or Flavor should select the skills that express its intent; it should not repeat every transitive helper solely to satisfy ordering. Expand each selected skill's exact pinned dependencies into the locked generation recipe before prompting, while preserving the current content-identity trust boundary.
Conclusion: Do not treat a dependency as an unpinned catalog import and do not silently change already locked recipes. Close the union of selected recipe skills with the optional admitted catalog. Do not close Flavor-only sets without catalog (that would false-fail). Do not re-pin existing generation skills or add
repository-layoutas a new dependency ofportable-application-implementationin this slice.Depends on: LAYOUT-001 and the current exact
SkillReferencecontractImplementation:
- Define canonical topological ordering, duplicate unification, and stable closure
identity from exact
skill_id, version, and content identity references. - Resolve every dependency from admitted project skill authority; reject missing, mismatched, conflicting, cyclic, or stage-incompatible closures before any coding CLI is invoked.
- Bind the expanded closure into generation recipes, cache keys (
closed_skillsin recipe identity), prompt journals, and provenance reports without putting the catalog itself in recipe identity. - Add a deliberate migration for existing locks and recipes; do not preserve a second legacy execution path in this unreleased framework.
- Select generic and language repository-layout skills through the resulting closure and remove any temporary duplicated layout language from parent skills.
- Define canonical topological ordering, duplicate unification, and stable closure
identity from exact
Evidence:
-
tests/unit/test_skill_closure.pycovers diamonds, cycles, identity conflicts, ordering, missing authority, stage compatibility, and byte-stable closure identities. Coding-CLI catalog expansion is intest_recipe_closes_catalog_dependencies_before_prompt_assembly. - A synthetic recipe that names one parent skill receives its exact transitive skills in dependency-first order; changing the closed set changes recipe identity before generation.
- Existing samples migrate once, then clean plan/build/test runs prove no Component spec needs transitive skill boilerplate.
-
[x] CONTEXT-001 — Admit locked local asset metadata to bounded generation context
- Priority: P0
- Release target: 0.4.1 — deferred out of 0.3.0 scope; not on the 0.3.0 release-blocking path.
- Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner: framework Component generation-context contract
- Direction: A generated application with a locked local binary asset exposed that
the asset is planned as
local-asset-metadatabut rejected while constructing the bounded coding context, before any model egress. - Conclusion: This is a framework consistency defect, not project-specific policy.
Keep raw authored asset bytes outside the prompt; admit only the already-defined,
identity-bound
AuthoredBinaryAssetmetadata projection with ordinary local-authority visibility. Assemble planning and source execution from the same exact locked asset tuple, admitting its bytes once to candidate CAS custody. Preserve rejection of acceptance oracles, dependency internals, inverse journals, and transitive interfaces. If a trusted source runner rejects that custody, preserve its stable diagnostic code instead of flattening it torunner-failed. - Depends on: existing Component asset and bounded-context contracts
- Implementation:
- Add
LOCAL_ASSET_METADATAto the sole allowed-visibility table as local authority. - Extend the adversarial context fixture and add a regression proving exact local asset metadata is accepted in canonical order.
- Pass one CAS-admitted locked asset tuple to both Standard rebuild planning and its cached source-generation runner.
- Preserve a trusted runner exception's stable string code at the scheduling
boundary while retaining
runner-failedfor uncoded exceptions. - Materialize that same exact asset tuple from candidate CAS custody into the fresh source workspace before local tree registration, so the filesystem tree and immutable candidate identity cover the same bytes.
- Add
- Evidence:
- All eight focused Component-generation-context tests pass under Python 3.14.6; Ruff format and lint pass for the changed Python files.
- Focused Standard rebuild assembly, source scheduling, coding-CLI custody, and Standard project factory regressions pass: all 44 tests completed under Python 3.14.6; changed-file Ruff lint and format checks pass.
- Focused source-generation and local-custody regressions prove a binary asset is present byte-for-byte in the registered source tree and cache replay.
[x] UPDATE-SOURCE-INDEX-001 — Keep project updates compatible with required source intelligence
- Priority: P0
- Owner: repository update transaction / project source-intelligence validation
- Direction: Updating an initialized descendant stages inherited catalog files before validating the composed project. Those writes necessarily make a current CodeGraph index stale, so validation cannot explicitly suppress synchronization when project maintenance requires current source intelligence.
- Conclusion: Validate the staged repository update with ordinary source-intelligence synchronization enabled. Keep catalog, lineage, provenance, and validation rollback transactional; do not weaken the descendant's required source-intelligence policy.
- Depends on: current repository-lineage update and project-validation contracts
- Implementation:
- Stop disabling source-intelligence synchronization in the repository update validation boundary.
- Add a regression that observes the validation call and requires synchronization after inherited files are staged.
- Evidence:
- Focused repository-update and repository-initialization tests pass (3 tests);
commit
898b6c4is the landed implementation authority.
- Focused repository-update and repository-initialization tests pass (3 tests);
commit
[x] ROADMAP-OWNERSHIP-001 — Keep parent and downstream work with their owners
- Priority: P0
- Owner: roadmap governance and
record-user-directed-work - Direction: A child project may expose a defect or reusable improvement owned strictly by a parent Component or repository. Send that change to the parent when the agent has Git access; otherwise retain it in the child's own repository. Conversely, Literate AI must not absorb a downstream product's mission vocabulary, milestones, repository paths, or release gates merely because that product exposed a framework defect.
- Conclusion: Classify ownership before editing. Put provider-neutral parent contracts, fixtures, and reusable guidance in the parent. With authenticated write access, contribute them through a reviewable parent branch/commit or pull request, never an unreviewed direct-default-branch mutation. Without access, keep the local override or proposed patch and its work item in the child. Product recovery and qualification always remain in the downstream queue. Reciprocal work-item, commit, or pull-request references preserve traceability without making either repository's release gate depend directly on the other.
- Depends on: repository lineage, project-local durable work queues, and the detailed-roadmap lifecycle
- Implementation:
- Remove downstream product names and product-owned recovery checks from generic cache, bounded-context, repository-update, and candidate-repair work items.
- Teach the framework and initialized-project work-recording skills to classify parent-owned changes, contribute them upstream when authorized, and retain them locally when upstream Git access is unavailable.
- Record the affected product qualification in its own repository without moving any product Component or mission policy into Literate AI.
- Evidence:
- A repository-wide authority search finds no downstream product identifier in Literate AI source, skills, tests, samples, or the active roadmap.
- SkillEvaluator passes both changed inherited skill surfaces, and 52 focused initialization/documentation tests prove the ownership rule is inherited, while both repositories retain independently executable gates.
[ ] REPARENT-UPDATE-001 — Preserve inherited ownership across exact reparent updates
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.4.1 — deferred out of 0.3.0 scope; not on the 0.3.0 release-blocking path.
- Re-scoped: 0.9.0 (2026-09-01) for any remaining work; the historical target above records where the item originated / partially shipped.
- Owner: repository reparenting and inherited-catalog update provenance
- Direction: A supported exact-revision
reparent --applyadvances lineage beforeupdate --applyreplaces inherited catalogs. The update must not misclassify imports from the immediately prior revision of the same repository/project as local authority. - Conclusion: Match stale inherited provenance only when its canonical Git repository URL and project ID both identify a node in the current resolved lineage. Preserve collision rejection for local imports and imports from every other repository.
- Implementation:
- Use one origin-family predicate for both prior-file classification and import provenance replacement.
- Add end-to-end adapter coverage for reparent then update and a different-origin collision regression.
- Retire a no-longer-exported catalog item only when every surviving local file still matches exact import provenance; preserve a divergent item as a whole and roll removals back atomically.
- Evidence:
- Focused repository update/reparent tests and complete deterministic gates pass.
- Physics Workbench sample adopts the exact new parent catalogs through the supported update path. Deferred 2026-08-28: prerequisite is Physics Workbench sample running the supported reparent-then-update path against this revision.
[x] UPDATE-APPLY-001 — litai update --apply must not abort the whole transaction on one catalog-import collision
- Priority: P1
- GitHub issue: #133
- Owner:
src/literate_ai/adapters/repository_updates.py(_updated_imports) - Direction:
litai update .(plan-only) correctly classifies files per-file (unchanged/local-only/preserved-dynamic/upstream-only/upstream-added/conflict), but--applyaborted the entire operation the moment_updated_importsfound even one (kind, name) catalog-import identity collision between a locally tracked import and the freshly recomputed inherited plan — writing none of the plan's already-known-safeupstream-onlyfiles, not even ones structurally unrelated to the colliding item. Reproduced againstexample-org/telemetry-dashboard: 3 genuinely safeupstream-onlyskill files were blocked by an unrelatedflavor:javascriptconflict the project had deliberately and knowingly diverged from upstream. - Conclusion: A catalog-import identity collision means the project's existing
local provenance record for that one key should stay authoritative (not be
overwritten by the inherited recomputation) — it never meant every other file's
already-correct per-file classification should be discarded.
_updated_importsnow drops only the colliding inherited entries (keeping the existing local record intact) instead of raising; every file's write eligibility remains governed independently byplan()'s existing per-file classification exactly as before, which already keeps a diverged item's own files out of the safeupstream-onlyset regardless of this catalog-level fix. Confirmed this does not create a content/provenance mismatch: a file only ever writes when its own identity-based classification saysupstream-only, independent of what the colliding entry's metadata claims. - Implementation:
- Changed
_updated_imports's collision handling fromraise RepositoryUpdateError("repository_update.provenance_conflict", ...)to silently excluding colliding(kind, name)entries from the inherited set, keeping the project's existing local (kept) entry unchanged for that key. -
repository_update.provenance_conflictis no longer raised by ordinary collisions; the error class/code remain defined for other genuine failure paths in the same module.
- Changed
- Evidence:
-
tests/smoke/test_repository_updates.py::test_different_repository_import_collision_keeps_the_local_entry(renamed from..._remains_fail_closed, which asserted the now-superseded hard-abort behavior) — a foreign-sourced local import collides with an inherited recomputation;apply()no longer raises, the local provenance record is preserved unchanged, and (since that file's content was already identical to baseline) nothing gets rewritten. -
test_catalog_import_collision_does_not_block_unrelated_safe_files— the direct reproduction of #133's report: one colliding catalog item (python, foreign-sourced) alongside a second, genuinely upstream-changed item (macos); themacosfile classifies and applies asupstream-onlywhile thepythoncollision is preserved untouched, in the sameapply()call. - Full
tests/smoke/test_repository_updates.pysuite (9 tests, including the two above) passes.
-
[x] UPDATE-PROGRESS-001 — Interactive litai update must show multi-stage progress
- Priority: P1
- GitHub issue: #146
- Owner:
src/literate_ai/diagnostics.py,GitRepositorySnapshotProvider,litai updateCLI - Direction: On an interactive TTY,
litai updatecan sit for minutes with no output while Git fetches a parent. Operators conclude it is hung.--progressis consumed only as an inactivity heartbeat. - Conclusion: Emit named stage lines to stderr when the process is interactive
and
--jsonis not set. Piped and--jsonoutput stay a silent machine envelope. - Depends on: none
- Implementation:
- Add a run-scoped progress reporter that writes only when a TTY stream is bound.
- Report fetch, catalog, and classification stages from
litai update/ lineage resolution. - Keep
--jsonand non-TTY output unchanged.
- Evidence:
-
tests/unit/test_repository_parent_follow.py::ProgressReportingTestsproves a bound stream receives stage lines and an unbound reporter is silent. -
tests/unit/test_repository_updates+test_repository_lineage+test_project_reparenting(29 tests) still pass.
-
[ ] RELEASE-CANCEL-001 — Stop owned release-gate trees on interruption
Release target: 1.1.0
GitHub issue: #416
Direction: Canceling a local release gate must stop its child generation processes and finalize their unfinished evidence before returning control.
Evidence: A targeted SIGINT reproduction exits 130 while its gate and grandchild remain alive and its retry node remains running. The repair uses process-tree cleanup for streamed and captured output and finalizes unfinished descendants without rewriting completed results.
Status: All 101 release/ledger tests pass, including real POSIX SIGINT and timeout cases in both output modes and preservation of completed child evidence. Final ledger checks and documentation rendering pass. Windows cleanup qualification, installed reproduction and full release qualification remain required before closing this item.
[ ] UPDATE-CLOSURE-003 — Retain every adopted Flavor authoring input
Release target: 1.1.0
GitHub issue: #414
Direction: Initializing or adopting framework Flavors must include their required authoring inputs. Preserve existing local authority and transaction rollback; final validation must not be bypassed to permit incomplete catalogs.
Evidence: Real Git A/B update qualification for #412 fails final validation because the template mapping omits the existing Go authoring skill while including the Go Flavor. Both starter and empty-project fixtures reproduce the failure.
Status: The omitted Go template mapping is repaired. Five focused tests pass, including explicit Go initialization, real Git A/B updates of starter and empty projects initialized with the old mapping, and exact rollback when an adopted Flavor has a missing input. Actual project validation remains enabled. All 59 initialization tests and 30 updater tests pass, as do authority, lint and documentation checks. Installed update and full release qualification remain required.
[ ] UPDATE-FOLLOW-002 — Plan the prospective parent before applying it
Release target: 1.1.0
GitHub issue: #412
Direction: Read-only
update --follow-ref Bmust classify inherited files using B and report the same prospective identities as applying that selector. Planning must leave the child unchanged. Preserve local conflicts and explicit parent-selection authority; reject stale project, lineage or remote evidence.Evidence required: A/B skill update, addition and local-conflict regression; matching framework and inherited classifications; read-only byte preservation; drift rejection; complete update/reparent regressions and installed qualification.
Status: Prospective planning repair passes the A/B skill fixture and stale project, recorded-parent and remote-parent checks. The existing 59-test update/reparent regression set passes. Fresh full and installed-project qualification remain required; the issue stays open.
[x] UPDATE-FOLLOW-001 — Track a moving parent and tell the truth when pinned
- Priority: P1
- GitHub issue: #147
- Owner: repository parent selection,
litai updatehuman renderer, wheel init - Direction: Wheel init persists an exact SHA as
requested_revision, solitai updatecannot follow later commits. The interactive renderer also reads top-levelcountson a composite plan and always says nothing moved. There is no explicit jump to a newer release line. - Conclusion: Persist
HEADas the default moving selector. Detect SHA pins and say so. Render the composite plan honestly. Allow--unpin,--follow-ref, and--allow-majoras explicit selection changes (reparent, then update). Never jump silently. - Depends on: UPDATE-PROGRESS-001
- Implementation:
- Change wheel
_default_repository_parentto requestHEAD. - Fix
_human_update_textforliterate-ai/composite-project-update@1. - Report exact-commit pins in the update envelope and human text.
- Add
--unpin,--follow-ref REF, and--allow-major.
- Change wheel
- Evidence:
-
test_installed_origin_default_parent_tracks_head_not_the_wheel_sha,tests/unit/test_repository_parent_follow.py, and composite renderer tests intest_cli_human_rendering.pypass (17 focused tests). - Focused repository update/reparent/lineage unit tests still pass.
-
test_cli_exposes_the_read_only_planreports parent selectors from the loaded store lineage, not a mocked update-plan contract. -
make python-checkpassed: 2565 tests, 27 skipped.
-
- Follow-up:
--applyafter a selector change still rewrites.literate/imports.jsonidentities for catalog files that were refused because--adopt-addedwas not set. That is pre-existing apply semantics and is not part of this landing.
[x] UPDATE-CLASSIFICATION-001 — litai update compares catalog-inherited files against the wrong reference
Status: complete (2026-08-28: catalog-imported paths stay on the lineage plan)
Priority: P1
GitHub issue: #141
Owner:
src/literate_ai/adapters/project_updates.py(_catalog_import_paths) plus lineage_catalog_classificationDirection: Physics Workbench sample reparented to
v0.5.0and had 33 framework files refused asconflictbylitai update --apply. Most were not real drift: their local bytes already matched the parent repository's catalog copy at the resolved tag (79ba1409) byte-for-byte. The classifier was comparing against the installed wheel'sliterate_ai.project_templateinit-template snapshot instead of the resolved parent catalog's identity at the target revision — a legitimate distinction, since a catalog file can change after the template that scaffolded a project was captured, without every downstream project re-runninginit.Conclusion: For any file with catalog-import provenance (tracked in
CatalogImportsFile), compare local bytes against that file's identity in the resolved parent catalog at the update's target revision, not the installed init-template snapshot. Template-scaffolded files (no catalog-import provenance) keep today's baseline-identity comparison unchanged. See ADR 0007 for full context; this half of that ADR is an ordinary bug fix and does not itself require further design review.Depends on: none; independent of
UPDATE-MERGE-001below and may land first.Next action: none; classification fix landed. Remaining true conflicts use UPDATE-CONFLICT-RENDER-001 and UPDATE-MERGE-001.
Evidence:
- Regression fixture proving a catalog-inherited file whose local bytes equal
parent-catalog-at-target-revision (but differ from the init template)
classifies as non-
conflict(test_catalog_inherited_file_matching_parent_is_not_a_framework_conflict). - Existing
litai updateclassification tests still pass unchanged for template-scaffolded files.
- Regression fixture proving a catalog-inherited file whose local bytes equal
parent-catalog-at-target-revision (but differ from the init template)
classifies as non-
[x] UPDATE-CONFLICT-RENDER-001 — Show litai update conflicts as ours/theirs unified diffs
Status: complete (2026-08-28: ours/theirs diffs on TTY and
--json)Priority: P1
GitHub issue: #150
Owner:
litai updatehuman renderer and JSON envelope (_human_update_text, composite plan files)Direction: Classification already names conflicts, but the TTY prints at most ten paths and
--jsonprints SHA identities. Operators and LLMs cannot judge a conflict without fetching the three blobs themselves.Conclusion: Both formats are first-class. Human output is a unified diff with ours (local) / base / theirs (upstream) conflict markers, display-only.
--jsoncarries the same sides (identities plus bytes or reconstructable hunks) and the sameunified_difftext. Do not write markers into the tree and do not auto-merge. Distinct fromUPDATE-MERGE-001/ ADR 0007.Depends on: none; can land before classification or merge-review work
Implementation:
- For each
conflictfile, obtain baseline, local, and upstream bytes already available to the classifier. - Render unified diffs with conflict markers on the TTY when
--jsonis not set. - Add the structured three-way evidence and
unified_diffto--json.
- For each
Evidence:
- Human fixture: one synthetic conflict prints a unified ours/theirs diff and does not write markers into the project.
- JSON fixture: the same conflict includes labeled sides and a
unified_difffield matching the TTY text. - Unchanged / already-current files are not dumped.
[x] UPDATE-MERGE-001 — Optional coding-agent semantic review for true litai update conflicts
- Priority: P2
- GitHub issue: #141
- Owner:
src/literate_ai/adapters/repository_updates.py,litai updateCLI surface, existing coding-CLI adapter (reused, not a new model-invocation surface) - Direction: After
UPDATE-CLASSIFICATION-001narrows false conflicts, some files remain genuine three-way conflicts (local overlay vs. newer upstream vs. baseline, all three different). Downstream Component/Flavor/skill drift does not always mean a file is completely divorced from its parent — the drift needs analysis to decide whether the correct merge favors the parent's content or the downstream project's, not a byte-only overwrite-or-refuse decision. - Conclusion: See ADR 0007 for the full proposed design: an opt-in, plan-only review step that dispatches one coding-agent review per remaining conflict (keep-local / take-upstream / merge, with an identity-bound rationale), writing nothing until an explicit apply mode accepts it.
- Depends on:
UPDATE-CLASSIFICATION-001(reduces the conflict set this operates on, though not a hard technical dependency); ADR 0007 reachingAcceptedstatus via its planning cycle before implementation begins, perskills/agent/release-project/SKILL.md's significant-feature-request sequence. - Historical scope: the August implementation completed plan-only review. Actual merge application was deferred; UPDATE-MERGE-002 below owns its completion.
- Evidence:
- ADR 0007
StatusreachesAccepted. Flag is--review-conflicts; per-conflict JSON isliterate-ai/project-update-conflict-review@1; rationale lives in the plan envelope. - Fake coding-CLI reviews propose keep-local and fail closed on unknown
decisions (
tests/unit/test_project_update_conflicts.py).--applystill writes only the mechanical subset.
- ADR 0007
[x] REBUILD-RECEIPT-001 — Preserve finalized Standard rebuild authority
- Priority: P0
- Owner: Standard rebuild adapter and project test-receipt projection
- Direction: A descendant exercising the in-process Standard rebuild exposed that the rebuild path persisted only the nested compact receipt, discarding the finalized Component-lock and lifecycle/cache envelope required to prove current authority.
- Conclusion: Finalize the in-memory Standard receipt with the exact planned lock, cache control, decision, and lifecycle identities before either writing a candidate or committing it. Keep the provider-neutral receipt contract in Literate AI; the descendant retains its own recovery and release qualification.
- Depends on: finalized test-receipt candidate contracts and Standard source-cache configuration
- Implementation:
- Construct and return one typed finalized candidate from every successful Standard filesystem rebuild.
- Write and commit the finalized envelope instead of extracting its raw receipt.
- Document the persisted envelope boundary and update design traceability.
- Evidence:
- Seven focused Standard rebuild and project receipt tests pass from the review branch, including an exact-lock currentness regression.
- Commit
6cc2297passes a clean 2,100-test Python attestation (26 live or hardware-gated skips), strict Ruff format/lint across 581 files, repository layout, OpenSpec, 102 rendered Mermaid diagrams, lifecycle-driver review, current CodeGraph, skill admission, and installed-wheel smoke.
[x] SAMPLE-RETRY-001 — Retry attributable Swift source rejection
- Priority: P0
- Owner: provider-neutral sample candidate-replacement policy
- Direction: Swift's generated-source validator returns a typed source-rejection code equivalent to the already attributable C++ rejection, but the sample ladder currently stops instead of giving the coding model its bounded repair opportunity.
- Conclusion: Admit only
builder.swift_generated_source_rejectedto the existing generated-source build-rejection class. Do not broaden generic build failures or move descendant-specific evidence into the framework. - Depends on: bounded sample candidate replacement and typed Swift validation
- Implementation:
- Add the exact Swift rejection code to the closed attributable set.
- Exercise both C++ and Swift codes through the same two-attempt regression.
- Update the traceability matrix to name both admitted source validators.
- Evidence:
- The focused sample-ladder candidate-replacement regression passes for both exact typed source-rejection codes.
- Commit
6cc2297passes the same clean 2,100-test and deterministic repository qualification recorded by REBUILD-RECEIPT-001.
[~] PACKAGE-001 — Make native packaging a first-class, Flavor-selected lifecycle
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.4.1 — deferred out of 0.3.0 scope; not on the 0.3.0 release-blocking path.
- Owner: package contracts and adapters,
litai package, release policy, initialized-project authority, and the built-in package Flavor catalog - Direction: Every releasable Component must package its authoritative
specification together with its accepted final build/executable products when the
Component selects a package type. Support pip wheels on Linux, macOS, and Windows as
the default package Flavor; Conan on all three operating systems as the portable
wildcard choice; apt on Linux; Homebrew on macOS; and WinGet or Chocolatey on
Windows. Expose these as first-class
package.<name>Flavors and make packaging an explicit release-engineering phase. - Conclusion: Preserve the existing exact
PackagePlan/PackageResultboundary, but add the missing user-facing lifecycle and provider policy above it. Package construction must never imply repository publication:litai package plan,build, andverifyoperate on exact accepted artifacts, whilelitai releaseconsumes verified package evidence and retains a separately authorized publish phase. A Component with no package tag is not packaged implicitly during an ordinary build, but release preparation must fail if a tagged Component lacks its current verified package. The package Flavor owns native format/tool requirements and OS compatibility; specifications own only the product's decision to select a package. Wildcard package selection resolves Conan for cross-language Components, while an otherwise unpinned Python-capable Component defaults to a pip wheel. Packaging is a multi-value Flavor slot: repeated compatible package selections create independent plans and results over the same accepted artifact closure so one repository can serve multiple user communities. Native formats are not mutually exclusive merely because they share the packaging axis; OS constraints, not artificial pairwise conflicts, reject impossible combinations. - Depends on: the existing Standard artifact graph, post-build CycloneDX evidence, package-plan contracts, Flavor compatibility resolution, and RELEASE-001
- Next action: Three-OS live native fixtures and release-prepare package
evidence remain.
--workerrouting is landed without artifact export. - Implementation:
- Add exact
package.pip,package.conan,package.apt,package.brew,package.winget, andpackage.chocolateycatalog entries on the existing packaging axis with collision-free aliases, host compatibility constraints, keyed multi-value composition, and initialized project propagation. Focused lock evidence selects pip plus Conan together and rejects apt on a macOS target before generation. - Define deterministic package wildcard selection: Conan for an explicit cross-language wildcard while ordinary Python-capable initialization defaults to a pip wheel without preventing additional explicit providers.
- Define the Component package tag and lock projection so the selected package
kind, exact Flavor/skill identities, target, accepted artifact graph,
Component specification closure, SBOMs, and package metadata form one immutable
package plan before a provider runs.
The read-only
package-batch-declaration@1slice now projects the exact lock, target profile, complete specification/input closure, and every independently selected provider Flavor from the ordinary generation plan. It explicitly denies execution and publication; post-build artifact/SBOM realization remains open. - Add provider skills that describe native ecosystem layout, detect-before-use prerequisites, reproducible build/verification rules, and publication boundaries without copying package-manager boilerplate into Component specs.
- Add
litai package planwith nested help, ordered Flavor/model input, deterministic multi-provider identity, and no model or package-tool execution. - Add
litai package buildandverify, including--model,--worker, and verbose pipeline inheritance where a provider legitimately delegates metadata generation to a coding CLI. The provider-level wheel and Conan seams are now implemented: exact distribution, version, compatibility tag, target, and materializedPackagePlaninputs produce deterministic native wheel bytes with completeRECORDhashes; a fresh adapter independently verifies those bytes and pip installs the fixture. Conan executes a real offlineexport-pkg, saves a portable cache archive, restores it into a fresh isolated cache, and verifies the exact package reference.package buildnow observes the fully accepted Standard lifecycle and writes content-addressed package custody only beneathOBJ_DIR;package verifyreopens the typed plan, materialized closure, result, and native bytes without publishing. The native fixture includes both the Component specification and a CycloneDX resource beside accepted artifact inputs. Apt/Homebrew/WinGet/Chocolatey now construct deterministic ZIP archives with one provider-native metadata file and no publication.NativeMetadataArchiveAdapter.verify_bytesindependently checks digest/size, provider control file,specification/component.md, andsbom/resolved.cdx.json.--workerrejects OS/provider pairs (apt→linux,brew→macos,winget/chocolatey→windows); unconstrained local workers are allowed. COMMAND/SSH workers dispatchLifecycleDispatchAction.BUILDonly — norecord_remote_artifact_export,publication_authorizedstays false. Landed as59c01c6f. - Package each tagged Component's human-authored specification closure and exact accepted final products; retain CycloneDX Component/dependency identities and emit compact provenance that binds native package bytes to the package plan.
- Make
litai release prepare/checkrequire current verified package evidence for every tagged Component and keep native package publication behind the explicit release publish authorization. - Add initialized-project defaults: pip wheel by default, Conan when two or more language-ecosystem Flavors are selected. Apt remains Linux-only, Homebrew macOS-only, and WinGet/Chocolatey Windows-only via existing Flavor host constraints. Live registry publication is still open.
- Add an opt-in, pattern-selectable native-package sample target that invokes the
same native build and independent-verify adapters as
litai packagefor package-tagged sample Components. It derives providers from current sample authority, retains all state beneathOBJ_DIR, and avoids making ordinary sample execution pay the native packaging cost.make samples-packagesnow runs the selected Component through its complete accepted Standard lifecycle before opening the native package boundary.
- Add exact
- Evidence:
- Contract/schema tests reject absent specifications, stale binaries/SBOMs, incompatible OS/package pairs, duplicate selections, undeclared outputs, and publication attempted during package build; they accept multiple compatible providers including WinGet plus Chocolatey.
- CLI tests prove package plan is read-only, build writes only beneath
OBJ_DIR, verify detects byte drift, help works at every package verb, and model/worker/ verbose scope is preserved. Focused unit and initialized-project smoke tests currently prove nested package plan help, deterministic pip+Conan projection, untagged rejection, model-scope forwarding, both authorization flags false, and the intentional pip-wheel default in newly initialized Python projects.tests.e2e.test_cli_packageadditionally proves OS mismatch (package.worker_os_mismatch), worker forward, and COMMAND dispatch without artifact export.tests.e2e.test_package_adaptersindependently verifies native metadata ZIP bytes. Provider tests additionally prove deterministic valid wheel construction, independent byte verification, real pip installation, changed-input rejection, undeclared-file rejection, real Conan export/save, and restoration into a fresh Conan cache. Focused lifecycle tests prove the accepted root package plan and result remain available as typed evidence for native providers. - Linux builds and verifies apt, Conan, and wheel fixtures; macOS builds and verifies Homebrew, Conan, and wheel fixtures; Windows builds and verifies WinGet, Chocolatey, Conan, and wheel fixtures.
- A tagged multi-Component release cannot prepare until every Component's exact specification and final accepted product have current package evidence; an untagged ordinary build remains package-free.
- Provider skills pass the pinned SkillEvaluator gate, documentation authority review passes, and a clean release gate proves package evidence is consumed without conflating construction with publication. The new package skill and modified release skill currently pass all six pinned static SkillEvaluator checks; native-provider forward evidence remains open.
- At least two selected Python sample variants build and independently verify pip wheels, and at least two selected portable/native variants build and verify Conan cache archives through the public CLI with no publication side effects.
[x] WORKFLOW-CATALOG-001 — Make workflows first-class, named, and composable
Exact-catalog completion evidence: The test now copies the actual repository workflow and routing bytes into the disposable project, preserving their exact instructions, fallback policy and routing group. All nine workflow tests pass again in 348.351 seconds with authenticated Codex generation and no skips.
_build/nested-workflow-exact-live.logis 109 bytes, SHA-256a320a6af06724166f874cb62e9515444a263efa361ced145fa843001368c4367. Documentation renders 121 diagrams from 545 Markdown files; OpenSpec, project validation, current documentation/driver reviews, lint and format pass. The first initialized-template run below is separate supporting evidence.- Qualify the exact shipped nested workflow and routing catalog bytes.
Initialized-template evidence (2026-09-16 UTC):
model-routing1.0.1 now selects the nested development workflow and matching routing policy. All nine workflow tests pass in 497.104 seconds withLITERATE_AI_LIVE_SAMPLES=1and no skips. The real configured Codex process generates the sample in a disposable initialized project through public lock/plan/generate commands; typed successful source custody binds the same Component lock and root revision, and the generatedmain.pyexists. The separate negative test changes nested workflow bytes and public planning refuses the stale lock. The retained run is_build/nested-workflow-live.log; 23 surrounding planning/model tests and 12 sample-plan/version-authority tests also pass. This is source-generation qualification, not compiled application or release attestation. The sample's offline application policy remains separate from source-generation routing.Release target: 1.1.0
Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
Owner: workflow catalog (
workflows/), routing catalog (routing/), Component authoring (component.md'sworkflow_definitionselector)Direction: User feedback: workflows should not be "one workflow encoded according to personal taste at the root of the repository." A project needs multiple named, independently selectable workflows — starting with
dev,staging, andproduction— and workflows should be able to nest arbitrarily.Conclusion so far:
workflow_definitionwas already an ordinary catalog-relative path selector with no code-level cardinality restriction, so the missing piece was convention, not plumbing: give each named workflow its own directory (workflows/<name>/workflow.md, mirroring theflavor.mdsentinel-directory pattern) instead of one flat file. Investigated and explicitly rejected: aworkflow://namespace/namecoordinate selector, becauseComponentContentSelector.urialready fail-closes on any"://"scheme URI for every selector kind (skills, toolchains, model-selection, routing-policy, workflow) — loosening that shared validator to carve out one kind was judged too broad a security-relevant change to make unilaterally under this item.Implementation:
- Ship
workflows/production/staging/dev/workflow.md,workflows/production/staging/workflow.md,workflows/production/workflow.mdas one worked example of the nested, named-directory catalog convention, each paired with its own routing policy (routing/production/staging/dev/routing.json,routing/production/staging/routing.json,routing/production/routing.json) that progressively tightensfallback_allowed,required_locality, and thegeneratestage'smaximum_output_tokens. - Document the convention in "Named, nestable workflow catalogs" in
docs/architecture/authoring-and-record-formats.md. - Switch the real
model-routingsample'sworkflow_definitionto the nested development catalog and prove the full public lock → plan → generate path with the configured coding CLI, including typed source custody and actual generated source. - Decide and implement genuine composition: parse-time optional frontmatter
extends:overlays existingstage_ids and inserts new model stages after their last listed dependency.stagingextendsdevand inserts a non-treereviewstage;productionextendsstagingand tightens generate tokens. Extra guarded lifecycle stages remain forbidden. Build-time flattening was rejected. - Decide whether
litai initshould scaffold new projects with the multi-workflow convention by default. Decision (user-directed): yes fordevonly —src/literate_ai/project_template/workflows/specification-to-source.mdwas renamed toworkflows/production/staging/dev/workflow.md(with its pairedrouting/production/staging/dev/routing.json) so a newly initialized project'sworkflow_definitiondefaults to the nameddevworkflow when a developer does not point a Component at a different one.stagingandproductionare not scaffolded into new projects by default; a project opts in by copying them (or vialitai catalog copy) once genuine composition exists.
- Ship
Evidence:
-
tests/e2e/test_workflow_markdown.py::NamedWorkflowCatalogTestsproves each of the three named workflows parses, declares its ownworkflow_id, and pairs with a distinctly-tightening routing policy. - The live
NamedWorkflowCatalogTests.test_real_sample_locks_plans_and_generates_with_nested_catalogpasses against the actual sample's nested selector. The companion lock/plan test also proves changed workflow bytes refuse before generation.
-
[ ] INDEX-001 — Stop CodeGraph ignore rules from hiding real generated source
Release target: 1.1.0
Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
Priority: P0 — currently blocks the
samplesrelease gate deterministically.Owner:
src/literate_ai/adapters/intelligence/codegraph.py, JavaScript specification-to-source skillsDirection: The
samplesgate fails reproducibly withsource-index.codegraph-failed. Root cause (confirmed by instrumenting_require_source_binding):_status_source_paths'signored_directoriesset skips any directory literally namedbuild(alongsidedist,out,target, …) when walking a non-Git generated tree. The JavaScript sample legitimately generates real application sources atsource/build/bundle.jsandsource/build/clean.js, so the indexed snapshot omits exactly those two files while the caller's exact file manifest includes them. The two lists then disagree and indexing fails closed:expected: (…, 'source/build/bundle.js', 'source/build/clean.js', 'source/lib.js', …) indexed: (…, 'source/lib.js', …)Those ignore names are a sensible default for a human repository but wrong for a generated tree whose exact file manifest is already known and authoritative.
Conclusion: Decided:
_status_source_paths's non-Git fallback walk only ever runs for a generated tree in this codebase (a human repository always has.git, so it takes the_git_visible_pathspath instead), so the ignore list never needs to guess between "human repository" and "generated tree" — it is always the latter. Split the ignore set instead of threading a manifest parameter through every caller (rejected candidate 1/2:_status_source_pathsis shared byensure_index,query, andrelationship_evidence, and those must all recompute the identical deterministic snapshot for a given tree regardless of caller context — a per-call manifest parameter would makeensure_index's indexed set diverge from a laterquery's re-snapshot of the same tree and break the existingoperational_bindingstability invariant). Names that are exclusively dependency/tool caches (node_modules,.venv,Pods,.cache, …) remain unconditionally ignored — a generation skill never legitimately emits real source there. Ambiguous build-artifact-style names (build,dist,out,target,obj,coverage,.build) are no longer ignored, since a generation skill can legitimately choose them for real generated output, and the existingmaximum_status_snapshot_files/maximum_status_snapshot_bytesbounds already fail closed if a generated tree somehow contains something huge. Rejected candidate 3 (forbid generated trees from using those names) for the reason already stated in Direction: it pushes an indexing-implementation detail into skill authority.Evidence:
- A focused unit test
(
test_project_source_index.py::ProjectSourceIntelligenceTests::test_non_git_tree_inventories_generated_source_under_build) proves a generated tree containingsource/build/bundle.jsis inventoried. The ignore set is caches-only (node_modules,.venv, …);build/distare visible. - The
samplesgate passes without the JavaScript sample being special-cased — not yet run from this revision; needs amake samples(or equivalent CI) pass to close this item.
- A focused unit test
(
[ ] FLAVOR-005 — Rename Flavor directories to their axis-qualified selector names
- Release target: 1.1.0
- Previous release target: 0.8.0
- Owner:
flavors/catalog,src/literate_ai/project_template/flavors/, init adapter, everycomponent.mdFlavor reference - Direction: Flavor directories are still a mixed namespace (
flavors/cpp,flavors/linux,flavors/makebeside already-canonicalflavors/package-pip), which makes the catalog hard to read once several axes have similarly-named entries._AXIS_SELECTOR_PREFIXESinsrc/literate_ai/application/flavor_selection.pyalready computes axis-qualified aliases at runtime (lang-cpp,os-linux,build-make,package-pip) andflavor_candidate_aliasesaccepts both forms, but nogit mvwas ever performed for language/OS/build directories, so those on-disk names and the selector names disagree. - Conclusion: Rename each remaining Flavor directory to its existing dash-separated,
axis-qualified selector name (
flavors/lang-cpp,flavors/os-linux,flavors/build-make,flavors/toolchain-*). Keep the existing dash separator rather than introducing a dot separator, so on-disk names match the selectors users already type and no new alias syntax is required. Bare names remain valid selectors through the existing alias table, so this is a readability/consistency change and not a compatibility break. Not 0.7.2: that patch is FLAVOR-008 (reject duplicatepackage-*/doc-*alias directories without renamingpython→lang-python). This item is the 0.8.0 reviewed identity re-pin for the rest of the catalog (RELEASE-012). - Implementation:
-
git mvevery Flavor directory inflavors/andsrc/literate_ai/project_template/flavors/to its axis-qualified name. Landed onflavor-005-axis-qualified-directories(dash separator; bare names stay valid throughflavor_candidate_aliasesand derived target aliases). - Update every
component.md, sample, test, and doc that names a Flavor path. SAMPLE-PIN-001 python-check found leftoverflavors/javascript/flavors/pythonreads intest_app_stack_skills,test_project_cli, andtest_repository_updates; those now uselang-javascript/lang-python/os-macos. - Confirm
flavor_candidate_aliasesstill resolves the bare name, so existing projects and derived repositories keep working unchanged. Init also aliasesauthoring.targetso+pythonstampsflavors/lang-python.
-
- Evidence:
-
make samplesand the installed-project gates pass with renamed directories. This slice ran focused Flavor tests instead of the full samples ladder. - A test proves both
+cppand+lang-cppstill select the same Flavor:tests.unit.test_flavor_selection.OrderedFlavorSelectionTests.test_bare_and_qualified_cpp_selectors_select_the_same_flavorandtests.unit.test_flavor_name_migration.FlavorNameMigrationTests.test_bare_and_qualified_cpp_selectors_stamp_the_same_directory. Dotted selectors fail closed:tests.unit.test_flavor_name_migration.FlavorNameMigrationTests.test_dotted_selectors_fail_closed.
-
[x] RELEASE-OBS-001 — Report what the release gate said when it fails
- Priority: P0
- Owner:
src/literate_ai/project_releases.py - Direction:
litai release checkran the declared gate withcapture_output=Trueand, on failure, raisedrelease gate failed with exit status 2while discarding the gate's stdout and stderr entirely. The gate is the longest step in a release, so a failure yielded one uninformative integer after a multi-hour run and the operator had to re-runmake release-checkby hand to learn which check failed. During 0.3.0 this wasted a complete gate run. - Conclusion: Carry a bounded, whitespace-collapsed tail of the gate's own output into the raised error, preferring stderr and falling back to stdout, and say so explicitly when the gate produced no output at all. Bounded rather than a full transcript, because the gate emits megabytes of conformance JSON.
- Implementation:
-
_release_gate_failure_detailsummarizes a failed gate;check_releaseincludes it inrelease.gate_failed.
-
- Evidence:
-
tests/e2e/test_project_releases.py::ReleaseGateFailureDetailTestsproves stderr preference, stdout fallback, the silent-gate message, and that the detail is bounded while keeping the tail.
-
[~] FLAVOR-007 — Add a lang-javascript-react Flavor
Release target: 1.1.0
Milestone: 0.4.1
Owner: framework Flavor catalog (
flavors/), specification-to-source skillsDirection: React is the dominant way JavaScript front ends are actually written, and a Component that targets it needs component/JSX structure, rendering, and state guidance that the plain
lang-javascriptFlavor deliberately does not carry.Open questions to settle first:
- Axis and composition. Settled for this parent: React is
ui-reactonimplementation.ui-framework, constrained to JavaScript, not a competing language Flavor.lang-javascript-reactremains an input alias forflavor://literate-ai/ui-react. Catalog Flavorflavors/ui-reactand the React nested skill landed under FRONTEND-001. TypeScript composition (FLAVOR-003) and a live generate/build/accept sample remain open. - Whether it also composes with a future TypeScript Flavor (
FLAVOR-003), since most real React is TypeScript; the two should not have to be authored twice. - Build/bundling boundary. React needs a bundler, which is build-system authority, not
language authority. Decide what this Flavor may assume versus what a build Flavor
must supply, and keep it consistent with
make-build-systemdeferring to the language skill. This parent forbids npm packages; a lockfile-pinned npm axis stays FLAVOR-JS-NPM-001 (now[x]). - Whether the portable JSON application contract still applies. Settled: a browser UI
uses
application.web-frontend, notsample.portable-appJSON-in/JSON-out.
- Axis and composition. Settled for this parent: React is
Evidence:
- A sample Component generates, builds, and passes generated tests plus independent acceptance under the React Flavor.
- Selecting React without JavaScript, or alongside a conflicting language Flavor,
fails closed with the existing cross-axis relation checks.
react-dashboard-examplenow has an exactly-oneuislot and harness pinimplementation.ui-framework: flavor://literate-ai/ui-react.+python +ui-reactfailscomponent_lock.flavor_target_unsatisfied. Same commit as FLAVOR-JS-NPM-001 (59c02491). Live generate/build/accept remains open.
[x] FLAVOR-006 — Add a Flavor to an existing project without re-initializing
- Milestone: 0.4.1
- Owner:
litaiCLI (a new Flavor-composition verb), lock planning, project authority - Direction: User feedback: "There is no way to add a Flavor to an existing project."
A project started on macOS that later needs Linux support has no incremental path --
the only route is
litai initinto a fresh tree plus a manual merge, which is wrong for what is conceptually a mixin. - Conclusion: Treat a Flavor as a mixin that can be composed into an existing project. Adding one must fully re-derive the dependency graph, capability requirements, toolchain constraints, and every affected Component lock -- the correctness properties of a fresh init -- while leaving authored Components, specifications, and history in place. It is a re-resolution, not a re-scaffold.
- Open questions to settle before implementing:
- Does this become
litai flavor add <selector>, an extension oflitai update, or a--flavorargument on an existing verb? Naming should make the re-resolution explicit rather than implying a mere edit. - Removal and conflict:
-flavorselectors already exist for init; addingflavor://literate-ai/lang-goto a project pinned to a conflicting Flavor must fail closed with the same cross-axis rules_require_flavor_relationsenforces today. - Which Component locks must be invalidated, and can any legitimately survive.
- What the operation writes when a newly required toolchain is absent on the host.
- Does this become
- Evidence:
- A macOS-initialized project gains
os-linuxincrementally; authored Component Markdown is unchanged andcomponent.lock.jsonbeside it is deleted so the next lock re-derives. Fulllitai project validateafter mixin remains a follow-up. - Adding a conflicting Flavor (
python+go) fails closed and mutates nothing. - Adding a Flavor twice is a no-op rather than a duplicate contribution.
- A macOS-initialized project gains
[ ] PLUGIN-001 — Ship standardized coding-CLI plugins with every release
- Priority: P1 (1.1 release engineering)
- Release target: 1.1.0
- Owner: release packaging, the canonical skill catalog, coding-CLI plugin adapters,
and
litai package/litai release - Direction: Create standardized coding-CLI plugins as part of the release-engineering
cycle. Most operators should not need to learn the
litaiCLI before an agent can follow the framework, and a release must not leave its agent integration artifacts as an unrelated manual packaging exercise. - Conclusion: Define one provider-neutral plugin-bundle contract from the checked-in
root and agent skills, then project that exact content through thin adapters for each
supported coding CLI with a declared plugin format. Codex and Claude are the initial
concrete adapters; Cursor and OpenCode must have an explicit supported or unsupported
result rather than an invented format. Build, verify, and publish the applicable
plugin artifacts from the same prepared revision as the wheel. Keep
litaiusable directly; plugins are distribution adapters, not a second implementation. - Depends on: the existing generated skills bundle and
litai-mcp; the release artifact policy must admit the standardized plugin bundle before publication becomes a gate - Next action: Complete and qualify the local packaging prototype against ADR 0039's accepted support matrix. Manifest validation and reproducibility tests pass; full routed-skill closure and fresh provider-session generation remain unqualified. No marketplace or ambient configuration was changed.
- Constraints:
- Plugin bundles reuse the canonical checked-in skills and bind their distribution version and content identities; no hand-maintained second skill copy is allowed.
- Installation never silently changes user configuration, credentials, permissions, or MCP registrations. Provider-specific setup remains explicit and reviewable.
- Provider adapters may change packaging shape, never framework behavior or acceptance semantics.
- Implementation:
- Generate the existing skills bundle from checked-in skill files and prove there is
no second maintained copy (
make plugin-bundle,tests.smoke.test_plugin_bundle). - Define and validate one versioned, provider-neutral plugin-bundle manifest.
- Project reproducible Codex and Claude plugin artifacts and record explicit Cursor and OpenCode support decisions.
- Integrate applicable plugin artifacts into package, release prepare/check, and published-release verification for the exact prepared revision.
- Document explicit installation, upgrade, and removal without mutating ambient credentials or MCP configuration.
- Generate the existing skills bundle from checked-in skill files and prove there is
no second maintained copy (
- Evidence:
- Two builds from the same prepared revision produce byte-identical plugin artifacts whose skill identities and distribution version match the release candidate.
- Fresh supported coding-CLI sessions load their released plugin and complete a
Component generation without the operator naming
litai. - Release checking rejects a missing, stale, extra, or revision-mismatched claimed plugin artifact, and published verification proves every advertised asset.
[ ] PACKAGE-002 — Publish a Homebrew formula for literate-ai itself
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Milestone: 0.4.1
- Owner: release publication, packaging
- Direction: User feedback:
brew install literate-aishould work on macOS instead of requiringmake installfrom a checkout. - Distinction worth keeping straight:
flavors/brewalready exists, but it is the packaging Flavor that lets generated applications produce Homebrew packages. It does not package literate-ai itself. This item is a Homebrew formula for the distribution. - Conclusion:
make installalready does the substantive work correctly -- an isolated virtualenv beneath${PREFIX}/share/literate-ai/venvand a stablelitailauncher in${PREFIX}/bin. A formula expresses that through Homebrew'sLanguage::Python::Virtualenv. The formula is the easy part; the prerequisites are the work. - Depends on:
- A published release artifact with a stable tarball URL and sha256, which is the
litai release publishstep. This item is therefore downstream of 0.3.0 shipping. - A decision on CodeGraph, which literate-ai requires at 1.1.1+ and which installs via
npm today. The formula must either declare a
nodedependency and provision it, or keep the current detect-and-bootstrap behavior.brew installshould leave a working tool.
- A published release artifact with a stable tarball URL and sha256, which is the
- Open question: a dedicated public tap (immediate) versus homebrew-core (notability requirements, slower).
- Evidence:
-
brew installon a clean macOS host yields a workinglitaithat passeslitai project validateon a freshly initialized project.
-
Program backlog
[x] WORKER-HW-001 — Discover and refresh private worker hardware capabilities
- Priority: P1
- Owner: execution-worker catalog, SSH transport, and detect-before-install skills
- Direction: A private worker entry must be refreshable from bounded, read-only platform probes instead of relying on hand-maintained CPU, memory, and accelerator claims. Keep requested minimum execution requirements distinct from observed host capacity: routing intent is authored authority, while probe results are timestamped inventory that may change independently and remains in the ignored user catalog.
- Depends on: the existing explicit
--workerselection contract and user-suppliedliterate.workers.json; no fleet scheduler or provisioning intelligence belongs here. - Next action: Integrate the current observation into SSH lifecycle acceptance and
the accelerator Flavor-selection boundary under
WORKER-001; command dispatchers continue to supply observed execution facts through their existing typed result rather than gaining a second probe protocol. - Implementation:
- Add a versioned observed-capability record for OS name/version, CPU architecture, physical and logical core counts when available, memory, probe time, probe-tool evidence, and a per-device GPU inventory. Do not overwrite minimum requirements.
- Use platform-specific, argv-bounded probes: Linux
/etc/os-release,uname,getconf, and/proc; macOSsw_vers,uname,sysctl, andsystem_profiler; Windows non-interactive PowerShell CIM queries. Bound time and output and reject malformed or ambiguous results. - On Linux and Windows, query
nvidia-smifor device UUID, model, memory, driver, and compute capability. Its absence means no discoverable NVIDIA GPU; its presence with a failed query is a degraded/unknown observation, never a false empty inventory. macOS records NVIDIA probing as not applicable. - Atomically refresh only the user-supplied ignored catalog, with dry-run and machine-readable output. Preserve endpoints, workspaces, parameters, commands, environments, authored requirements, unknown extension fields, and unrelated workers byte-semantically. The command never rewrites the worker catalog, so every authored field and any future extension remain byte-for-byte untouched. It atomically writes a separate ignored observation catalog, supports dry-run and subset refresh, and preserves unrelated typed observations. Unknown fields in the versioned observation schema fail closed rather than being silently carried as trusted facts.
- Keep selection deterministic and modest: Literate AI may match explicit requirements against observations, but dynamic provisioning, ranking, and hardware scheduling remain the future task dispatcher's responsibility. Typed observations now answer whether one exact worker satisfies authored OS, architecture, logical-core, memory, per-device GPU count/memory/model/vendor, CUDA, compute-capability, and SM minimums. They expose no search, ranking, or allocation method.
- Evidence:
- Fixture tests cover Linux, macOS, and Windows; absent, single, and multi-GPU NVIDIA results; driver failure; timeout; malformed output; SSH/authentication failure; atomic replacement; dry-run; and preservation of authored fields. Current focused tests cover Linux, macOS, Windows, absent/healthy/degraded NVIDIA, timeout, malformed output, unsupported command protocol, subset merge, dry-run, scoped help, atomic write, exact requirements, and multi-GPU per-device matching. The initialized-project fixture inherits the worker skill and ignores observation state. Command workers reject active probing with a typed unsupported-protocol result; their dispatcher result already reports observed execution facts.
- The complete private worker matrix is probed through its real transport, its
ignored catalog is refreshed, and a second probe is idempotent apart from the
explicit observation time. One
litai worker probe --all --dry-runobserved all six real workers concurrently: Apple M4 Pro macOS, two CPU-only Ubuntu hosts, one healthy Blackwell Ubuntu host, one CPU-only Windows host, and one Windows host with an installed but driver-degradednvidia-smi. Two consecutive canonical writes were byte-semantically identical after normalizing only their explicit observation timestamps.
[x] WORKER-008 — Attempt NTP clock sync during remote-worker host configuration
- Priority: P1
- Owner:
os-macos,os-linux, andos-windowsFlavor specifications plus detect-before-install host bootstrap - Direction: Each OS Flavor used as a remote-worker host should attempt to
synchronize its clock to a centralized NTP source such as
time.nist.govduring host configuration. This is not a hard readiness requirement: missing privilege, a missing client, or a blocked NTP path should be logged and must not fail sample-worker capability readiness. Skewed clocks are a frequent coding-agent TLS and token failure mode. - Conclusion: Keep the requirement in each OS Flavor
openspec/spec.mdrather than expanding the Standard command-profile schema. Honor it from the existing argv-bounded sample-worker bootstrap: native one-shot clients first (sntp/ntpdate/w32tm), POSIX fallback of a stdlib NTP query plusdatewhen no client is present. Do not install NTP packages solely for this attempt, and do not failpassedwhen sync fails. - Depends on: current detect-before-install bootstrap and the three OS Flavor specification roots
- Next action: None; Flavor specs, bootstrap attempt/log contract, and unit coverage are landed.
- Implementation:
- Require best-effort
time.nist.govsync in each OS Flavor specification and keep the init-template copies byte-identical. - Attempt argv-bounded native sync during sample-worker host bootstrap; record
clock_syncevidence; log failure on stderr; never install NTP packages solely for this step. - On POSIX hosts without
ntpdate/sntp, query NTP in-process and attemptdateonly when the offset is large; Windows usesw32tmwithout a persistent-config requirement succeeding. - Keep bootstrap
passedcoupled only to missing sample-worker capabilities.
- Require best-effort
- Evidence:
- Focused host-bootstrap tests cover native success, skipped client, NTP/date
fallback, and a failed attempt that leaves
passedtrue.PYTHONPATH=src .venv/bin/python -m unittest tests.unit.test_host_bootstrap tests.unit.test_package_flavor_catalog— 29 tests OK, including template byte-identity for the three OS Flavors. - Changelog Unreleased records the Flavor-owned host-config attempt.
- Focused host-bootstrap tests cover native success, skipped client, NTP/date
fallback, and a failed attempt that leaves
[ ] ACCELERATOR-NVIDIA-001 — Build capability-gated CUDA component families
- Release target: 1.1.0
- Previous release target: 0.9.0 (re-scoped 2026-09-01: had no explicit target)
- Priority: P2 after
WORKER-HW-001 - Owner: accelerator Flavors, language-generation skills, dependency resolution, and the sample Component DAG
- Direction: Demonstrate that observed hardware can make otherwise portable Component graphs conditionally eligible without embedding fleet facts in a spec. Start with useful C++ and Python CUDA Components, then compose PyTorch and numerical computing examples over CPU and NVIDIA-GPU variants. Linux and Windows may select CUDA variants; macOS must reject them before generation while retaining CPU variants.
- Depends on:
WORKER-HW-001, capability-aware worker selection, exact dependency locks, generated-source caching, native packaging, CycloneDX evidence, and current multi-platform sample fan-out. - Next action: Add the compositional CPU/CUDA PyTorch and numerical Component layer,
then exercise the same foundation samples on a healthy NVIDIA Windows worker when its
currently degraded driver becomes usable. The Linux foundation path is proven live.
Correction (2026-08-19): an earlier pass this same session incorrectly claimed the
two CUDA samples don't exercise
generate-nvidia-cuda-applicationbecause it's absent from theircomponent.mdauthoring_inputs. That check missed thatflavors/cuda/flavor.mditself declaresgenerate-nvidia-cuda-applicationas anauthoring_inputscontribution, injected automatically whenever thecudaFlavor is selected — confirmed directly (adding the skill to a sample'scomponent.mda second time fails generation with a duplicate-skill error, proving it was already present). No wiring gap exists; no action needed here. See ADR 0008's own correction for the fuller account, since the same methodology gap produced a parallel false claim aboutrust-portable-json-application. - Implementation:
- Add explicit CUDA toolkit/runtime and NVIDIA GPU capability requirements, including minimum device memory and capability placeholders, as composable Flavors rather than OS/language prose duplicated across Component specs. The initial Flavor selects the accelerator axis, conflicts with the CPU Flavor, and requires healthy Linux/Windows CUDA observation. Public Component-level minimum memory/capability projection into worker requirements remains. The lifecycle now evaluates the selected CUDA Flavor against a current exact worker observation before dispatch or generation, including OS, logical cores, host memory, per-device GPU count/memory/vendor/model, CUDA, compute capability, and SM qualifiers. CPU variants do not read accelerator inventory.
- Create a specialized NVIDIA stack-selection skill that consumes the worker's
exact
nvidia-smiobservation, target OS/architecture, Python ABI where applicable, compiler/toolkit availability, driver-supported CUDA level, and GPU compute capability. It must resolve compatible locked dependencies or fail with an actionable incompatibility; it must not guess an SM from a marketing name. - Add generated-from-spec C++ CUDA and Python CUDA foundation samples with known, independently verifiable output and no committed generated source.
- Add inheriting CPU/CUDA PyTorch samples and CPU numerical samples. Represent NumPy/SciPy-compatible GPU execution honestly through an explicitly named GPU backend such as CuPy unless upstream NumPy/SciPy gains native CUDA execution; do not market API compatibility as the original library running on a GPU.
- Make unsupported variants typed
not-applicableselections before coding-CLI invocation, while a claimed-capable worker that cannot compile/run its locked variant fails normally. Cache source and native products by the complete spec/Flavor/skill/toolchain/hardware compatibility closure. - Include exact driver, toolkit, GPU, package, component, and transitive dependency evidence in CycloneDX SBOMs and native package outputs without making hardware inventory part of portable Component authority.
- Evidence:
- Contract and selection tests prove Linux/Windows CUDA eligibility, macOS CUDA
exclusion, CPU portability, minimum-memory/capability matching, multi-GPU
determinism, incompatible driver/toolkit rejection, and no coding-CLI call for
an ineligible variant.
Focused tests currently prove healthy/absent/degraded NVIDIA distinctions,
per-device memory and multi-GPU SM matching, semantic Windows 11 matching,
observation freshness, that CPU selection never opens the observation catalog,
and that CUDA samples are excluded before generation without a healthy GPU.
The Standard projector selects
nvcconly for C++, retains the locked Python interpreter for CuPy, admits.cuvalidation/scanning, and propagates CUDA runtime library paths into Make without shell evaluation. - At least one real NVIDIA Linux worker and one real NVIDIA Windows worker, when
healthy, generate, compile, test, run, index, and package both foundation
samples; inherited PyTorch and numerical Components prove the DAG and known
CPU/GPU results. A degraded driver is recorded and reported rather than hidden.
On the healthy Ubuntu 24.04 worker, an RTX PRO 4500 Blackwell Server Edition
(32,623 MiB, compute capability 12.0, driver 580.142) generated, compiled,
indexed, tested, and ran both foundation Components on the physical device. The
C++ path used the exact CUDA 13.0.88 compiler/runtime closure and
sm_120; the Python path used Python 3.12.3, CuPycupy-cuda13x14.1.1, and its observed CUDA 13.3 closure. Both passed generated tests plus independent entropy-derived CPU oracles and produced source/resolved CycloneDX identities. A warm Python rerun completed in about 18 seconds from retained source/object caches. The NVIDIA Windows worker remains honestly degraded and was not treated as eligible. Skipped 2026-08-28 on this worktree: no localnvidia-smi. Remaining CUDA worker evidence requires a healthy NVIDIA GPU on the executing host. Do not invent worker hostnames. - The specialized skill passes the pinned SkillEvaluator gate whenever created or modified, and the full sample regression retains C++, Python, Rust, JavaScript, Swift, non-NVIDIA, and CPU-only behavior. NVIDIA SkillEvaluator passed all six checks with grade A (90.2). The broad non-NVIDIA regression remains part of the final release gate after the compositional samples land.
- Contract and selection tests prove Linux/Windows CUDA eligibility, macOS CUDA
exclusion, CPU portability, minimum-memory/capability matching, multi-GPU
determinism, incompatible driver/toolkit rejection, and no coding-CLI call for
an ineligible variant.
Focused tests currently prove healthy/absent/degraded NVIDIA distinctions,
per-device memory and multi-GPU SM matching, semantic Windows 11 matching,
observation freshness, that CPU selection never opens the observation catalog,
and that CUDA samples are excluded before generation without a healthy GPU.
The Standard projector selects
[x] SAMPLE-PORTFOLIO-002 — Close the two confirmed breadth gaps found in the 0.5.1 sample audit
- Priority: P2
- Owner:
component://literate-ai/sample-portfolio,docs/architecture/sample-portfolio-review.md - Direction: A user-requested breadth audit of all 22 current samples against the
17
specification-to-sourceskills and 25 Flavors (2026-08-19, during the 0.5.1 cycle) originally found four gaps. Correction, same session, before implementation started: the "12 orphaned skills" claim (every language- and build-system-specific skill unexercised by any sample) was wrong — it only checked a Component'scomponent.mdauthoring_inputs, never checking whether the Flavor itself contributes a skill.flavors/rust,flavors/cpp,flavors/python,flavors/go,flavors/javascript,flavors/swift,flavors/cmake,flavors/make,flavors/bazel, andflavors/cuda'sflavor.mdeach already declare their corresponding specification-to-source skill as anauthoring_inputscontribution, injected automatically whenever that Flavor is selected — confirmed directly by attempting to add one explicitly to a sample already selecting that Flavor, which failed generation with a duplicate-skill error. Onlyrepository-layoutandpython-repository-layout(init-time scaffolding skills, not Flavor-contributed) are genuinely unexercised by any sample, and both already have unit-level coverage (tests/unit/test_make_generation_skill.py). See ADR 0008's own correction for the full account — the same false claim initially misdirected that ADR's root-cause analysis for an unrelated release-gate flake. The two gaps that were independently verified and remain confirmed: (1) 13 of 22 samples leaveimplementation.language-ecosystemunpinned, so they build Python-only under an ordinarymake samplesgate (the multi-language claim is real but dormant without an explicitlang.*override);go,swift-linux, andswift-windowshave zero real coverage; (2)samples/python-service-exampleandsamples/react-dashboard-example(the two newest samples) have nosamples/_harness/directory at all — pure specifications, never generated, built, or verified by anything. SAMPLE-APP-STACK-001 now admitspersistent-serviceandweb-applicationinSAMPLE_HARNESS_ENTRYPOINT_KINDSgenerically (not a one-off). Wiring still needs harnesssample.json, execution.json, and start/stop oracles — not a mechanical addition of anexecution.jsonalone. - Conclusion: (a) pin several currently-unpinned samples to non-Python languages so
the matrix's real coverage matches its claimed breadth; (b) finish harness
support for the
persistent-service/web-applicationentrypoint kinds (kinds are admitted; start/stop oracles and_harnessmanifests remain), then wire the service/dashboard samples to it. (b) is still larger than a bug fix. Completed 2026-08-30:publication-importis pinned toflavor://literate-ai/lang-javascripton the default gate (a4b6ad16). Live generation passed withcursor-agent/gpt-5.6-sol-high(variant_idjavascript). Authoring and specification identities unchanged; execution interfacesha256:f2f3f9d2e4560b25574035cf92d7ff6e28aec7325036516317cd482893c0b903; oracle digest28da92086897725cc54c2b1fac790eaa151c68579a4d0d36da43652bb4794f78. - Depends on: the two sub-items are independent and may land in either order.
- Next action: None. Remaining unpinned samples and
go/swiftzero-coverage cells are follow-on breadth, not this item's evidence gate. - Evidence:
-
publication-importre-pinned to JavaScript and live-passed under the default (noSAMPLE_FLAVORSoverride) gate. Harnessexecution.jsonselectsflavor://literate-ai/lang-javascript.test_publication_import_ordinary_route_uses_javascript_lifecycleasserts the ordinary route. Identities loaded via_load_sample, not invented. Landed asa4b6ad16onfeat/cli-sdlc-debug(isolatedc556df3b). -
samples/python-service-exampleandsamples/react-dashboard-exampleeach pass through a harness capable of exercising their entrypoint kind._load_sampleandtest_every_sample_is_a_strict_spec_driven_applicationaccept both harnesses. Runtime oracles dispatch both sample IDs. Livepython-service-examplepassed 2026-08-29 with--coding-cli cursor-agent --model gpt-5.6-sol-high --allow-host-execution(first candidate; pinnedprimarynext_cursor"beta"; runtime-generalization also passed).react-dashboard-examplelive-passed earlier in the same cycle.
-
[x] SAMPLE-PACKAGE-001 — Prove package composition and OS pinning in the sample portfolio
- Owner:
component://literate-ai/sample-portfolio - Direction: Make packaging and target compatibility visible in executable examples, then refresh the human documentation and public deck from verified evidence rather than catalog claims.
- Implementation:
- Select several existing Python samples for
package.pipand several portable native samples forpackage.conan; prove compatible package Flavors compose. - Run representative pip and Conan samples through the native package
lifecycle so they construct and independently verify wheel/package bytes under
OBJ_DIRwithout publishing or installing them. - Add small, useful Linux-only, Windows-only, and macOS-only sample Components whose target constraints prevent selection on every other test-matrix OS.
- Make the macOS sample a Swift application and select Homebrew packaging so the
Swift toolchain and
package.brewconstraint are exercised together. - Add structural and selection tests that derive counts from the catalog rather than hard-coding the sample, Flavor, or platform inventory. Historical acceptance identities remain migration locks for the samples they name, while newly added samples are admitted without editing a closed inventory or adopting legacy case labels.
- Regenerate the user documentation, Mermaid flows, checked-in PowerPoint deck, factual ledger, and native Google Slides presentation from the new package-build evidence and the current live platform matrix.
- Select several existing Python samples for
- Evidence:
- Sample discovery admits every pinned sample on its intended OS and excludes it from all incompatible OS selections before source generation.
- Package planning emits the selected pip, Conan, or Homebrew provider identities for the representative samples without implying unimplemented native package construction.
- The focused sample and documentation suites pass; every slide renders without overflow
or unintended overlap; the published Slides resource is read back successfully.
The macOS sample additionally completed a live Codex generation, guarded Swift
compilation, generated-test run, independent entropy-derived verifier probe,
CodeGraph indexing, CycloneDX resolution, execution, and receipt chain through
authorized-host-swift-executable. The complete acceptance-interface conformance module also passes with the three new platform samples while retaining every historical migration lock. The parallel-runner fixture now supplies the same explicit host target contract as a real sample, and the project documentation-authority marker is current for the expanded Flavor, sample, and deck authority. The self-hosting test-runner identity is refreshed from the same expanded authority closure rather than retaining the pre-packaging catalog digest. The native package sample target passed on macOS for Greeting Card Starter and Exact Statistics Library pip wheels plus the Dependency Planner Conan archive; every result was derived from accepted lifecycle custody and independently verified. Documentation rendered 100 Mermaid diagrams from 289 Markdown files. The regenerated 22-slide deck passed the 9/0/1 document-pair oracle, was published in place as Google Drive version 28, and matched 22/22 slide and 22/22 notes text records after authenticated PPTX export.
[x] DOC-ROADMAP-001 — Give detailed roadmap documents an explicit lifecycle
- Priority: P1
- Owner: documentation governance, project onboarding, and the
record-user-directed-workskill - Direction: Detailed files beneath
docs/roadmap/must not leave readers guessing whether a program is active, partially completed, deferred, completed, or historical. The current framework program declares its state, while the Component-authoring and Phase 8 plans mix landed and remaining work without a consistent lifecycle marker. - Conclusion: Keep
active-work.mdas the sole resumable execution queue and require every supporting roadmap document to declare a small standard header containing its lifecycle status, owning active-work item or program, and completion or archival evidence. Audit a plan before assigning its state. Completed plans may remain indocs/roadmap/only when marked completed with durable evidence; otherwise move them to a declared history location without breaking documentation links. Ordinary queue items do not earn separate files merely to satisfy the header convention. - Depends on: the documentation graph, initialized-project roadmap template,
record-user-directed-work, and current detailed-roadmap link authority - Implementation:
- Define the allowed lifecycle states, required header fields, ownership rules, and the boundary between an active roadmap and historical documentation.
- Audit every existing detailed roadmap against current implementation and queue evidence before marking it active, partial, completed, deferred, or historical.
- Add or migrate headers and links; move only plans proven historical, preserving Git history and all inbound documentation references.
- Teach the root and initialized
record-user-directed-workskills when to create a detailed roadmap and how to close or archive it. - Add a documentation validation rule and initialized-project fixture so new detailed roadmap files cannot omit or invent lifecycle ownership.
- Evidence:
- Validation rejects a detailed roadmap with a missing/unknown status, missing owner, dangling queue reference, or completed state without evidence. Focused documentation and initialization validation passed 52 tests.
- The complete documentation graph and initialized-project smoke suite pass after the migration: 289 Markdown files, 100 Mermaid diagrams, exact-revision wheel installation, isolated tool bootstrap, canonical project validation, and starter scaffold verification all passed.
- The framework and
record-user-directed-workskills pass the pinned SkillEvaluator gate.
[x] DOC-DECK-002 — Refresh the public technical narrative from current evidence
- Owner:
component://literate-ai/literate-ai-overview - Direction: Remove the retired product narrative and elapsed-development-time claim;
make the implemented language/build/OS matrix, arbitrary Component DAG,
litaiCLI, and private cross-platform fan-out workflow obvious to a skilled new audience. - Implementation:
- Re-audit repository facts and inspect the successor studio project without treating a specification-only WIP as implementation evidence.
- Rewrite the deck specification and factual ledger before changing slides.
- Replace retired-product slides with sample, CLI, DAG, and fan-out evidence.
- Regenerate and visually inspect all slides, validate notes and overflow, publish the exact Google Slides document in place, then verify an exported round trip.
- Evidence:
- The generated deck contains no retired product name or elapsed-time claim.
- Local and exported decks have identical visible text and speaker notes.
- The exact published Slides document was updated in place without changing ID and now reports Drive version 18.
[~] GRAPH-001 — Solve, explain, and export effective repository inheritance DAGs
Release target: 1.1.0
Priority: P0
Owner: framework repository-lineage, inherited-catalog, validation, and graph introspection contracts
Direction: Give engineers one comprehensive graph solver and graph-export surface for reasoning about what a Literate AI project owns, what it inherits through its complete repository-parent chain, and what each entity deliberately withholds through
inheritable: false. Use the same graph to reject cycles and to identify reusable Components, Flavors, and skills that are candidates to migrate upward when a multi-repository hierarchy becomes unnecessarily flat or duplicated.Conclusion: Build one immutable, provenance-aware effective-authority DAG rather than separate inheritance, validation, visualization, and rebalance implementations. Nodes must identify repositories and typed entities; edges must distinguish repository parentage, entity inheritance/ownership, Component dependencies, Flavor/skill selections, and explicit shadowing or withholding. Deterministic solving must happen before update, reparent, validate, build, test, or run can consume inherited authority. Exporters are pure views over the solved graph. Rebalance is advisory: it may report common ancestors, duplication, fan-in/fan-out, context-cost estimates, and proposed upward moves, but it must never relocate authority or push to another repository without an explicit reviewed operation.
Scope boundary: Do not turn
litaiinto a repository manager, task scheduler, or automatic refactoring bot. Do not infer semantic equivalence merely from matching names. Recommendations require exact identities or explicitly proven compatibility, preserve authored ownership andinheritabledecisions, and report conflicts rather than selecting a winner silently.Depends on: repository-lineage and reparent contracts, inherited initialization and update provenance, Component locking, effective Flavor/skill selection, and current CodeGraph/project-validation prerequisites
Next action: Extend rebalancing beyond exact duplicates with explicit compatibility and context-cost evidence; lifecycle preparation and initialization now use portable, graph-bound lock/audit authority.
Implementation:
- Define a versioned canonical graph contract with stable node/edge identifiers, typed edge kinds, origin repository/revision, inheritance disposition, effective owner, shadowing/withholding evidence, and content identity.
- Resolve the complete multi-parent repository DAG deterministically, detect cycles with a minimal reproducible cycle path, reject ambiguous authority/collisions, and compute effective inherited versus project-local entity sets.
- [~] Replace parallel lineage/catalog walks in init, update, reparent, validate, lock,
and lifecycle preparation with the canonical solver and fail before mutation or
coding-agent invocation.
- Require locked-generation admission to reproduce the current resolution plan from its already captured catalog, match the persisted resolution audit's graph-bound catalog identity and exact lock identity, and revalidate that plan for the lifetime of the generation snapshot.
- Publish canonical repository-parent and lineage evidence before initialization creates any graph-bound starter lock; prove both root and inherited project initialization, make local repository graph identity independent of staging or checkout path, exclude parent-derived lock/audit evidence from inherited Component catalogs so descendants resolve their own graph, then resume the fail-fast Python gate from its saved checkpoint.
- Add
litai graphand scoped help with filters for repository, Component, Flavor, skill, ownership, inheritance disposition, and dependency edge kind. - Export canonical compact JSON plus human-oriented text/tree, Mermaid, Graphviz DOT, and SVG; keep graphical formats deterministic and derive every format from the same solved identity.
- [~] Add a read-only
litai graph rebalanceanalysis that finds exactly duplicated or proven-compatible reusable entities, computes their lowest common ancestor, highlights context-heavy flattening and low-cohesion placement, and emits an evidence-bound migration proposal with affected descendants and risks. - Document large-graph decomposition, bounded traversal, provenance explanations, and review workflow with illustrative repository and Component DAGs.
Evidence:
-
AuthorityGraphrejects duplicate nodes, unresolved endpoints, self-edges, and directed cycles before exporting a stable topological order. -
litai graphprojects repository lineage, local/inherited catalog ownership, Component inheritance policy, and Component-to-skill generation inputs. - Unit coverage writes JSON, text, Mermaid, DOT, and dependency-free SVG without requiring a graphical toolchain.
- The first rebalance advisor recognizes only exact content identities across
distinct repositories, selects their lowest common repository ancestor, and
explicitly denies automatic action; compatibility proofs and context-cost
estimates remain open.
Deferred 2026-08-28: prerequisite is explicit compatibility-proof and
context-cost contracts on
litai graph rebalance, not a major version. - Cycle failures now report the shortest deterministic closed cycle path, and filtered views support node kind, provenance, local/inherited ownership, inheritable/private disposition, and typed edge kind without dangling edges.
- Current Component locks contribute exact Flavor-selection and provider-to- consumer Component dependency edges when those locks are present; historical locked Flavor revisions remain explicit private nodes when the live catalog has moved forward.
- Complete repository-parent discovery now projects immutable snapshots into the canonical graph solver and derives ancestor-first lineage from its topological order. Init, update, and prospective reparent therefore share deterministic shortest-cycle rejection before catalog or lineage writes; effective catalog composition and locked lifecycle preparation remain to be consolidated.
- Canonical graph schema
@2carries a deterministic SHA-256 identity over the exact solved nodes, edges, and topological order. Inherited-catalog plans bind that repository graph, validate its complete node/edge projection against the locked lineage, and reuse the same instance for selection and provenance rather than reconstructing a second traversal. - Component lock catalog identity schema
@2binds the effective project graph with prior lock-derived dependency, Flavor-selection, and historical-revision facts excluded. Repository ownership, inheritance, shadowing, and generation inputs therefore influence a replacement lock without making that lock depend circularly on its predecessor. - Locked generation reproduces one plan from its captured catalog, requires the persisted resolution audit to match that plan's graph-bound catalog identity, resolver, and exact reproduced lock, and rechecks both plan and audit throughout snapshot use. Eighty-four focused lock, generation, CLI, and Standard-project tests pass with one intentional platform skip; all 104 Mermaid diagrams render.
- Effective inherited-catalog override/conflict decisions and import-provenance ancestry now use the same lineage graph's topological order and ancestor closure; project graph export reuses that repository projection rather than rebuilding it.
- Locked Component execution planning and Standard lifecycle scheduling now derive stable provider-before-consumer parallel layers from the canonical graph solver. Corrupted post-lock cycles retain boundary-specific error codes while reporting the shortest deterministic closed cycle before coding-agent scheduling.
- Initialization now publishes resolved lineage and a provisional inherited-template baseline before graph-bound starter lock planning. Canonical local repository nodes carry project identity rather than an absolute checkout path, and inherited catalogs omit parent target locks/audits so every descendant resolves its own DAG. Root, inherited, three-level repository, atomic-promotion, and checkout-move regressions pass. The clean Python gate passed 2,167 tests with 26 intentional skips; driver identity, CodeGraph, and 104 diagrams across 300 Markdown files are current.
- Contract and property tests cover diamonds, arbitrary depth, multiple parents, withheld entities, local overrides, conflicting identities, unreachable nodes, deterministic ordering, and minimal self/direct/transitive cycle diagnostics.
- Golden exporters represent one solved graph equivalently in every format and SVG rendering passes visual/structural validation without becoming build authority.
- Init/update/reparent/validate regression tests prove identical effective authority and fail-fast cycle rejection before filesystem mutation or coding-CLI work.
- [~] Rebalance fixtures prove safe upward candidates, intentional duplication, incompatible same-name entities, and no-op pyramid-shaped graphs without applying any move automatically.
- Cross-platform installed-wheel tests prove text/JSON/DOT/Mermaid portability and documentation explains how to inspect every effective entity and its provenance.
- The clean installed-wheel smoke initializes from an exact parent revision, binds JSON/text/Mermaid/DOT/SVG renderings to the validator's canonical graph, proves update planning leaves it unchanged, proves identical-parent reparenting is a no-op, and ships the inheritable hello sample through package data. The local wheel gate passes; cross-platform CI evidence remains open above.
-
[x] TAXONOMY-001 — Restore Components versus sample compositions
- Priority: P0
- Owner: framework taxonomy, catalogs, samples, initialization, and documentation
- Direction: Keep reusable building-block Components under declared Component
catalogs. Treat
samples/as fully working demo libraries, applications, or modules that compose Components, Flavors, and skills to teach one concept and seed tutorials. A sample may produce a reusable package or runnable artifact, but its role in this repository is demonstration, not the canonical reusable Component catalog. - Inheritance rule: Samples are private to their defining repository by default.
Exactly one framework sample,
hello-component, is explicitly inheritable so every derived project starts with one runnable end-to-end example. This exception must be asserted by behavior rather than by hard-coding a global sample count. - Scope boundary: Do not move a Component into
samples/merely because a sample uses it. Do not duplicate reusable Component authority inside a demo. Samples may reference and compose Components through explicit contracts; tutorials may be derived from samples after the sample remains a complete build/test/run scenario. - Next action: Complete. Preserve this distinction through project validation, catalog inheritance, initialization, and the sample lifecycle matrix.
- Implementation:
- Publish a concise taxonomy contract and diagrams for Component, sample, and tutorial roles.
- Reclassify and move every misplaced reusable building block from
samples/tocomponents/, updating references and locks without compatibility shims. - Ensure every remaining sample declares a fully working build/test/run composition and
is explicitly non-inheritable except
hello-component. - Make initialization inherit the hello sample and its required transitive authority without inheriting the rest of the framework sample suite.
- Add structural tests that derive expectations from catalog metadata rather than hard-coded numbers of Components, samples, Flavors, or skills.
- Declare
inheritable: truein both canonical and initialized hello sample authority. Ordinary reusable Components may rely on the default, but the one sample exception must be locally auditable rather than inferred from omission.
- Evidence:
- Repository validation rejects reusable catalog authority misplaced beneath
samples/and sample Components lacking explicit inheritance intent. - Fresh
litai initproduces one runnable hello sample and does not copy unrelated framework demos. - Every retained sample passes its declared generation/build/test/run/package scenario and can serve as tutorial source material.
- GitHub Actions run
31636914331passed the complete retained sample-composition matrix on Ubuntu, macOS, and Windows after the taxonomy migration. The localmake samples-packagesgate also generated, built, tested, ran, accepted, and independently packaged the declaredhello-component,generated-library, anddependency-plannerpip/Conan proof subset. - The focused project taxonomy and inherited-catalog suites pass 13 tests on macOS/Python 3.14, dynamically discovering every sample and checking both canonical and initialized hello authority. Existing initialization and cross-platform sample evidence above remains valid because the manifest-only change makes the already-effective default explicit.
- Repository validation rejects reusable catalog authority misplaced beneath
[x] INIT-004 — Make initialization prerequisite discovery explicit
- Priority: P0
- Owner: framework onboarding skill, tool bootstrap, and project initialization
- Direction: Name CodeGraph as a top-level Literate AI dependency. Before creating
a project,
litai initmust check whether required host dependencies are available; an agent following the top-level skill may install missing prerequisites, while the static CLI must use deterministic PATH/managed-tool discovery. - Conclusion: Preserve the existing detect-first, pinned, user-local CodeGraph
bootstrap instead of adding a second installer. Expose a versioned prerequisite
report from initialization, including Python and CodeGraph discovery state and the
conditional coding-CLI state. Python is necessarily already running the CLI;
CodeGraph is mandatory and installable by
init; a coding CLI is reported as a generation prerequisite but does not block scaffolding because initialization does not invoke a model. Keep--no-tool-bootstrapas strict detect-only behavior. - Dependencies: Complete the taxonomy authority correction first; do not combine optional Flavor toolchains with the mandatory framework preflight.
- Next action: Complete. Keep the pinned CodeGraph bootstrap and prerequisite wire version current when mandatory framework tools change.
- Implementation:
- Update root and initialized-project skills with explicit CodeGraph dependency, PATH-first discovery, supported pinned installation, authorization boundary, and conditional coding-CLI guidance.
- Add a deterministic initialization prerequisite report and version the expanded project-initialization result explicitly rather than changing v5 in place.
- Cover PATH reuse, managed installation, detect-only failure, and absent/present coding-CLI reporting without executing or authenticating a coding agent.
- Persist resolved lineage and a provisional initialization baseline before
graph-bound starter lock/audit creation; final baseline/review recording remains
the last authority step so a successful init is immediately
lock --checkclean.
- Evidence:
- Seventy-seven focused wire-version, bootstrap, initialization, taxonomy, validation, and catalog tests pass on macOS/Python 3.14; the direct starter CLI regression also proves initialization is immediately lock-current. Ruff and formatting pass. A live clean init emitted project-initialization v6 with Python 3.14.6, PATH-reused CodeGraph 1.1.1, and PATH-discovered Codex without invoking it.
- A clean checkpoint-reset Python run passes all 2,167 tests (26 conditional skips). The three-repository regression proves inherited specifications and acceptance assets remain available while parent-local lock/audit evidence is excluded and rebuilt against the descendant's graph.
- Repository layout, 104 Mermaid diagrams across 300 Markdown files, current lifecycle-driver identity, and both root/template SkillEvaluator gates pass; the revised root skill scores 87.2/100 and remains below the size gate.
[x] INIT-005 — Report explicit disabled initialization bootstrap state
- Priority: P0
- Owner: framework project initialization and installed-project smoke contract
- Direction: An initialized project with
source_intelligence.provider_id: noneand every source-intelligence stage off must expose that intentional disabled outcome in its initialization result rather than returning an empty bootstrap object. The isolated installed-project smoke must report the observed result accurately while retaining its strict no-source-graph-database assertion. - Conclusion: The initialization result already owns the
tool_bootstrapfield and no public schema separately validates its contents. Return a closed, machine-readable disabled state with a reason code, update direct result-contract fixtures, and leave unrelated historical source-graph references outside this direct gate contract unchanged. - Dependencies: INIT-004's provider-none initialization policy and the installed-project gate.
- Implementation:
- Return
state: disabledand a no-provider reason from initialization. - Align the installed smoke assertion and direct initialization result tests.
- Record the release-visible gate fix in the existing 0.7.0 changelog heading.
- Return
- Evidence:
- Initialization unit and CLI contract tests pass with the explicit result.
-
make install-checkpasses without creating a source-graph database. - Standard lint, formatting, documentation, layout, authority-record, and diff checks pass.
Framework score-improvement program
The broader dependency-ordered program remains
framework-score-improvement-program.md.
Its unchecked boxes are active work, not historical prose. Promote the next executable
slice here before implementation so this file always names the resumable frontier.
[x] VERSION-002 — Keep the shipped compatibility matrix self-consistent
- Priority: P0
- GitHub issue: #231
- Owner: framework core version/schema catalog
- Direction: The latest installed wheel must pass its own strict compatibility-matrix version check.
- Conclusion: The v2 matrix now declares two Standard multi-entrypoint evidence contracts, so the exact writer allowlist must admit those same framework-owned URIs; retain strict equality and do not weaken validation.
- Depends on: None
- Implementation:
- Add the two shipped Standard entrypoint evidence URIs to the v2 write-contract allowlist.
- Add focused regression coverage that validates the unmodified shipped v2 catalog.
- Evidence:
- Focused version-wire contract tests pass on the rebased repair branch.
- The clean full Python check passes 3,241 tests with 30 intentional skips after the latest-main rebase.
- Repeat the non-editable exact-wheel
litai version checkafter the latest-main rebase.
[x] TEST-ARG-001 — Keep packaged-service argv doubles aligned with the production port
- Priority: P0
- GitHub issue: #232
- Owner: packaged-service lifecycle tests
- Direction: The current main test suite must exercise packaged-service argv behavior instead of failing in an obsolete test-double signature.
- Conclusion: Update only the two stale doubles to accept and assert the optional package-entrypoint argument; production behavior is already correct and remains unchanged.
- Depends on: None
- Implementation:
- Update both PackagedServiceArgvTests doubles to the current three-argument port contract.
- Evidence:
- The focused PackagedServiceArgvTests suite passes on the rebased repair branch.
- The clean full Python check passes 3,241 tests with 30 intentional skips after the latest-main rebase.
[x] LIFECYCLE-PIN-001 — Re-pin the changed framework lifecycle driver
- Priority: P0
- GitHub issue: #233
- Owner: project lifecycle-driver TCB authority
- Direction: Current main must bind its declared lifecycle implementation paths to their actual content identity.
- Conclusion: The single latest-main multi-entrypoint and uninstall commit changed 17 declared TCB paths without re-pinning; review that diff and use the repository-owned record workflow rather than transcribing a digest.
- Depends on: Review e695265b declared lifecycle-driver path changes
- Implementation:
- Run the lifecycle-driver review and record the computed identity after reviewing the changed TCB paths.
- Refresh documentation authority after the project manifest changes.
- Evidence:
-
make driver-reviewpasses with identitysha256:a356fd3f67fab9ef6a17033384c5e2d70588070920e4e2fc9f32f4df3eb2b9b4. - The clean full Python check passes 3,241 tests with 30 intentional skips, and the non-editable exact wheel passes its installed version check after the latest-main rebase.
-
[x] WINDOWS-PATH-001 — Keep platform-family path policy host-independent
- Priority: P0
- GitHub issue: #235
- Owner: centralized user-path adapter and host install/uninstall fixtures
- Direction: A Windows runner evaluating Linux or macOS policy must use POSIX
path semantics rather than interpreting
/...through nativeWindowsPath. - Conclusion: Select
PurePosixPathorPureWindowsPathfrom the requested platform family. Tests compare resolved source paths and mutate parsed install manifests instead of depending on platform-specific serialized syntax. - Implementation:
- Make POSIX system, user, data, cache, tool, install, temporary, and staging policy paths host-independent.
- Repair Windows-sensitive installer and uninstaller fixtures.
- Evidence:
- Focused user-path, installer, and uninstaller suites pass locally; the full Windows matrix supplies the cross-host acceptance gate.
- Lifecycle-driver and documentation authority are re-pinned after the adapter change.
[x] REPOSITORY-CHECKOUT-001 — Make worker repository checkout shallow and content-complete
- Priority: P0
- Owner: framework core plus skills/agent/checkout-git-repository and host prerequisite authority
- GitHub issue: #224
- Direction: Workers are pipeline runners and must avoid full history by default while reliably materializing repositories that use Git LFS, submodules, or both.
- Conclusion: A reusable checkout contract must require Git and Git LFS on every supported worker OS, fetch an exact revision shallowly by default, initialize recursive submodules, hydrate LFS content in the root and nested repositories, and fail closed when the requested tree is not fully materialized; history expansion remains explicit and bounded.
- Depends on: HOST-INSTALL-SBOM-001 host prerequisite authority and WORKER-001 execution routing
- Implementation:
- Add a general-purpose checkout-git-repository agent skill that routes agents to one deterministic checkout/materialization command and documents only judgment and fail-closed boundaries.
- Declare Git and Git LFS as required sample-worker capabilities with native package mappings for supported Linux, macOS, and Windows targets.
- Implement shallow exact-revision acquisition with revision/tree verification, recursive submodule initialization, repository-local Git LFS setup and hydration for every repository in the recursive checkout, and unresolved-pointer verification.
- Provide explicit bounded deepening and full-history opt-in semantics for operations that demonstrate an ancestry requirement.
- Route Git-backed test-worker workspace acquisition to the checkout skill from the provider-neutral worker configuration skill without committing private routing or host details; Standard archive/Git source identity remains under WORKER-001.
- Evidence:
- Unit and contract tests cover branch, tag, reachable commit SHA, recursive submodules, root and submodule LFS content, missing Git LFS, unresolved pointers, bounded history, and explicit full-history mode (
50focused tests passed). - Host prerequisite tests and strict CycloneDX SBOM parsing prove Git and Git LFS discovery and native package installation mappings on Linux, macOS, and Windows.
-
make skills-checkpassed all five affected skills;make python-checkpassed3,221tests with28expected skips; a remote depth-one worker checkout verified the exact requested commit/tree, a clean worktree, and all current-tree LFS-attributed content hydrated before the retained Kit test advanced beyond the prior corrupt-image failures.
- Unit and contract tests cover branch, tag, reachable commit SHA, recursive submodules, root and submodule LFS content, missing Git LFS, unresolved pointers, bounded history, and explicit full-history mode (
[ ] ACCEPTANCE-SERVICE-003 — Persistent-service nested runtime launch can remain alive without a listener
- Priority: P0 (the shipped persistent-service acceptance contract is not reliable on the reported Linux host and blocks 0.9.0 qualification)
- Release target: 1.1.0
- Previous release target: 0.9.0
- GitHub issue: #247
- Owner: Standard local lifecycle runtime projection and independent persistent-service acceptance
- Direction: Investigate GitHub issue #247 end to end: a packaged JavaScript service serves under the captured command outside litai, while the in-process acceptance launch retains only the outer Node runtime driver and never binds its readiness port.
- Conclusion: The exact nested Node shape succeeds in clean macOS and Linux controls, so the report does not establish a universal Node, stdio, or process-group failure. It does establish a violated liveness invariant: acceptance observes the runtime-wrapper PID while the actual server is its child. Unwrap only the exact Standard Python, JavaScript, and native runtime drivers for serving so the packaged entrypoint is the process-tree root; retain the locked wrappers for one-shot test/smoke execution.
- Depends on: ACCEPTANCE-SERVICE-002 established the --litai-serve dispatcher; RELEASE-0.9-DEFECTS-002 owns cross-platform process-tree primitives.
- Implementation:
- Add a real JavaScript persistent-service integration regression that exercises the packaged runtime driver and verifier-owned readiness path.
- Reproduce on an authorized Linux worker and capture bounded outer/child/listener/stdio evidence without recording private worker details.
- Test competing runtime-driver, process-tree, stdio, environment, resource, and generated-entrypoint hypotheses; implement the smallest causal correction.
- Evidence:
- The wrapper/server split required for the reported false-liveness state is isolated. Exact nested-driver controls pass on macOS and Linux, while the repaired launch command names the packaged entrypoint itself and cannot observe a wrapper after that server has disappeared.
- 82 focused lifecycle/runtime tests pass on macOS; six direct-command and real JavaScript service tests pass in Linux, including readiness and graceful shutdown. The existing Windows Job Object/process-tree abstraction suite remains green.
- The generated durable service portfolio passes with no readiness false-pass or orphaned child; the enclosing full release gates remain tracked by RELEASE-0.9-DEFECTS-002.
[x] STANDARD-SAMPLE-ASSET-001 — Preserve locked asset custody through the Standard sample path
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #260
- Owner: Standard sample planning and source-materialization composition
- Observed behavior: The release-receipt rebuild generated the
loan-risk-gate/pythoncandidate and then failed closed withsource_generation.asset_authority_mismatch. After that identity wiring was corrected, a forced fresh receipt generated the same candidate but failed as the untypedrunner-failed; the retained workspace contained the generated tree and no assembled score-band asset. After CAS admission was corrected, the next focused live run reached overlay assembly but the coding agent had recreated the locked path byte-for-byte, so the required collision guard rejected it assource_generation.asset_path_collision. - Conclusion: This is deterministic framework wiring, not model variability or a
repair-workspace defect.
StandardProjectApplicationService.plan()and the source runner now receive the same locked asset tuple, but the sample path gives that runner a new empty CAS without admitting the asset bytes. The firstget_bytes()therefore raisesBlobNotFoundError, which source scheduling masks asrunner-failedbefore overlay materialization. Reuse one filesystem-adapter helper to admit every locked asset into the exact candidate CAS before planning/execution, while retaining raw bytes exclusively in CAS-backed immutable overlay custody; translate missing or corrupt custody into a stable source-generation diagnostic. The bounded prompt currently emits the asset JSON (includingmodel_writable:false) without an explicit imperative explaining that those paths are forbidden generated output and will appear only after the model returns. State that generic invariant in the framework envelope; do not weaken collision rejection or expose asset bytes. - Implementation:
- Pass
authored_assets_from_lock(authority.lock)to both Standard sample planning and source execution. - Add a regression proving the materializer receives the same asset identities bound into the plan generation key.
- Admit the locked bytes through the shared Standard filesystem helper into the same CAS supplied to the runner, and expose a stable error at that boundary.
- Strengthen the production-path regression to prove the exact asset bytes are retrievable from that CAS before runtime composition.
- Tell every coding provider explicitly that locked authored-asset paths are post-generation immutable overlays and must not be created, inferred, copied, replaced, or modified in the generated text tree.
- Pass
- Evidence:
- The focused regression, 31 adjacent source-generation scheduling tests, and all 83 neutral sample-ladder tests pass (6 intentional skips).
- A no-model reproduction proves the empty sample CAS raises
BlobNotFoundErrorfor the locked score-band BlobRef, while admission through the snapshotted catalog makes the exact authored bytes retrievable. The failed receipt created only one workspace, falsifying repair-workspace loss. - Focused source-generation, Standard rebuild/factory, component-lock, and sample ladder suites pass, including exact candidate-CAS byte retrieval and stable missing-custody classification; Ruff lint and formatting pass for every changed Python file.
- The first post-admission live run reaches the collision boundary and proves the CAS contains the exact locked bytes. Its only workspace contains a model-written file at the protected path with the same SHA-256, while the reconstructed prompt contains only terse asset JSON and no direct non-generation instruction.
- A second fresh focused live
loan-risk-gate/pythonrun with the corrected envelope passes three generated tests, build, packaged execution, resolved-SBOM validation, one independent acceptance case, and final lifecycle admission. - A clean canonical
make python-checkpasses all 3,335 tests with 31 intentional skips after the reviewed lifecycle-driver and sample-runner identities were refreshed. Repository layout, Ruff lint and 815-file formatting, two strict OpenSpec items, 135 diagrams across 538 Markdown files, documentation, driver, runner, and both SkillEvaluator gates also pass. - A fresh complete 0.9.0 rebuild advances beyond asset authority and promotes
receipt
sha256:85bae95edfd9261059c5b4b593063fecf24b994ccd12a174966eb55f13d31618.
[x] STRUCTURED-SAMPLE-INTERFACE-001 — Keep structured-provider application contracts in generation authority
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #261
- Owner: DMN/SCXML sample authoring and bounded Component context
- Observed behavior: The live release-receipt rebuild produced loan-risk and
playback candidates that followed their DMN/SCXML roots but omitted result fields,
ordering, and pinned-asset semantics declared only in
component.mdprose. - Conclusion: The framework correctly treats prose as descriptive
ComponentAuthoring.descriptionwhen a Component explicitly selects a different specification provider. The samples were misfactored: their normative portable call/result contracts were neither provider roots nor public interfaces. Move each contract into one exact local public-interface document and keep the Component body descriptive, without exposing verifier-owned acceptance values. - Implementation:
- Bind one named public interface to each structured-provider sample's provided portable capability.
- Remove duplicated normative contract prose from the descriptive Component body and refresh only the affected authoring identity pins.
- Add a production-path regression proving each exact public-interface byte sequence appears once in the prepared bounded prompt.
- Evidence:
- Focused preparation and sample-authoring regressions pass for both providers; their structured specification identities and verifier execution-interface identities remain unchanged.
- The fresh complete Standard rebuild passes independent loan-risk and playback acceptance and produces the current 0.9.0 candidate receipt.
[x] CONVERSION-TEST-AUTHORITY-001 — Do not invent retained pytest authority
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #262
- Owner: legacy conversion discovery and retained lifecycle inventory
- Observed behavior: Conversion inferred root
python -m pytest testsfrom weak Python/repository shape evidence, missing repository-owned Poe tasks and nested aggregate scripts in the reported MuJoCo, URDF, and OpenVRTx layouts. A zero-test command could also establish a passing baseline. - Conclusion: A retained command is executable authority, not a language heuristic. Admit repository-owned Poe tasks first, then known aggregate scripts with their exact working directory, and only admit pytest when configuration/dependency evidence and statically collectable test nodes both exist. Otherwise report the unproven runner rather than constructing one.
- Implementation:
- Trace conversion discovery and retained execution end to end against the three reported repository shapes.
- Isolate runner discovery and output accounting in a Python adapter instead of asking the model to infer commands from filenames.
- Add contract cases for authoritative runners, nested roots, missing driver evidence, and zero collected tests before making the smallest causal change.
- Evidence:
- Focused discovery, conversion, receipt, and real-Git boundary suites pass
(
113tests), including Poe dependency groups, nested script working directories, injection-shaped metadata, and zero-test rejection. - The fresh complete 0.9.0 receipt proves the converted-project path with the final release tree.
- Focused discovery, conversion, receipt, and real-Git boundary suites pass
(
[x] CONVERSION-PARITY-002 — Compare authored authority rather than fungible caches
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #263
- Owner: legacy conversion parity and checkpoint evidence
- Observed behavior: Direct baseline, wrapper parity, and lift-and-shift checks each copied or hashed whole legacy trees, so ignored build/caching output could dominate runtime and unrelated output churn could change the compared identity.
- Conclusion: Capture one retained authored-source scope from Git visibility and bounded ignore/exclusion rules. Copy and hash only that scope while retaining separate excluded-root accounting, so parity remains sensitive to authored bytes without treating fungible outputs as authority.
- Implementation:
- Trace retained direct/wrapper parity state, path ownership, and checkpoint transitions using a bounded large-output fixture.
- Share one filesystem adapter across inventory, baseline, lift-and-shift, and receipt execution instead of rescanning the tree in model-facing workflow text.
- Prove ignored output churn passes, tracked authored mutation fails, exclusions remain accounted, and direct/wrapper phases do not redundantly rescan outputs.
- Evidence:
- The bounded large-output regression proves a one-megabyte ignored artifact is never read, ignored churn changes exclusion accounting but not source identity, and tracked authored mutation changes the identity.
- The combined focused conversion and receipt suite passes (
113tests). - The fresh complete 0.9.0 receipt proves parity over the final release tree.
[x] RETAINED-RECEIPT-001 — Finalize retained harness evidence through the standard receipt boundary
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #264
- Owner: retained harness execution, outer receipt finalization, and project verification
- Observed behavior: Converted projects could prove direct/wrapper parity but had no
supported producer for the outer-finalized envelope accepted by
project test-receipt update, leaving operators to construct JSON manually or bypass the receipt boundary. - Conclusion: Reuse the existing final candidate envelope and promotion command, but give converted projects a retained-only runner/policy. Bind the exact inventory, project revision, Component locks, worker/platform, commands, test totals, phases, and source scope; explicitly omit native generation/acceptance claims. External evidence remains outside project authority and the compact candidate binds it by identity.
- Implementation:
- Map the native candidate envelope and retained harness evidence contracts before selecting an adapter boundary.
- Add
project test-receipt run-retained, retained-only policy generation, exact Component-lock binding, disposable authored-source execution, and atomic new-file candidate/evidence publication. - Add end-to-end passing, known-failure, nonempty-suite, provenance, and native-versus-retained classification regressions.
- Evidence:
- A passing converted Make harness emits a finalized candidate that the unchanged
updateandrequire-currentcommands accept; the durable evidence contains no console excerpts or native generation/acceptance assertion. - Exit-zero expected failures, typed known failures, uncounted tests, empty suites, unsafe output paths, and candidate-publication failure all leave no promotable candidate.
- Retained implementation bytes are folded into project authority: an authored source edit makes the committed receipt stale, and a harness that mutates its disposable authored source cannot earn a candidate.
- A clean test-one Python qualification passes all
3,332tests with31intentional skips after the lifecycle-driver pin and documentation-authority marker are refreshed. - The fresh complete 0.9.0 receipt exercises the final retained adapter surface.
- A passing converted Make harness emits a finalized candidate that the unchanged
[x] JAVASCRIPT-IMPORT-ADMISSION-001 — Observe code imports without scanning inert text
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #265
- Owner: source dependency admission
- Observed behavior: A fresh receipt generated a dependency-free durable frontend,
then rejected its build helper with
dependencies.import-bom-mismatch; the reported package names were fragments of regex and replacement-string literals used to rewrite imports during packaging. - Conclusion: The source BOM and generated dependency graph are correct. The JavaScript observer applied an unanchored import regex to raw source and interpreted inert comment/regex/string/template text as executable imports. Isolate a bounded lexical-projection helper at the JavaScript dependency-adapter level; retain the existing fail-closed reconciliation contract.
- Implementation:
- Mask inert JavaScript lexical forms while preserving ordinary quoted literals as opaque keys recoverable only from executable import syntax.
- Preserve static import/export-from, side-effect import, dynamic
import(), and CommonJSrequire()observation. - Add exact build-helper regression shape plus real undeclared-import controls.
- Evidence:
- All 60 dependency-lifecycle tests pass, including inert-text and five executable import forms; the exact preserved failed workspace now passes source-BOM reconciliation unchanged.
- The fresh complete receipt crosses the durable frontend admission/build boundary and produces a current 0.9.0 candidate.
[x] CANDIDATE-DEPENDENCY-REPAIR-001 — Repair generated import/BOM topology mismatches
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #269
- Owner: Standard and retained-host dependency admission plus bounded generated-candidate repair
- Observed behavior: A fresh complete release receipt built a dependency-free
Python zipapp candidate, then terminated with
dependencies.import-bom-mismatchbecause its build helper renamedmain.pyto stagedapp.py. The conservative source scanner could not prove that generated build-time transformation and treatedfrom app import ...as an undeclared external import. Falsification testing also showed that a repeated identical mismatch caused the production adapter to recreate the same repair request because it accepted but did not bind predecessor identities; the lifecycle correctly stopped that duplicate before the third attempt. A later complete candidate exposed the same code at the retainedself-hostingvalidate phase: its parallel repair allowlist omitted the code and stopped after one candidate even though the Standard path was already corrected. - Conclusion: Keep source/BOM admission fail-closed and do not attempt to interpret arbitrary generated build scripts. The stable mismatch is attributable to one typed generated candidate at the build phase, so classify only that code as repairable through the existing two fresh replacement attempts in both lifecycle shapes. Persistent mismatch remains a terminal exhausted chain and no rejected candidate reaches cache or publication.
- Competing hypotheses: The candidate is not behaviorally broken: its exact Make
target, three native tests, archive test/smoke modes, and direct invocation pass.
Adding
appto the BOM would fabricate a distribution, while teaching dependency admission to execute or infer arbitrary build transforms would weaken the boundary. This is not #246: that issue covers pre-candidate output-root shape failures, whereas this failure occurs after a typed candidate and successful build. - Implementation:
- Add only
dependencies.import-bom-mismatchto the candidate-repair allowlist; retain its build/test phase restriction and exact three-attempt ceiling. - Reduce the raw failure to a bounded diagnostic naming only the violated source-path/dependency-metadata relationship.
- Bind every predecessor-attempt identity into each replacement prompt/request, making the second repair distinct even when candidate bytes and failure match.
- Add production-adapter flow regressions for recovery and persistent exhaustion with unique fresh workspaces and zero rejected-candidate publication.
- Admit the same exact code at the retained host-sample validate boundary, carry a fixed bounded diagnostic into its next request, and retain the exact existing three-attempt ceiling.
- Add only
- Evidence:
- The candidate-repair, repair-contract, Standard lifecycle, and dependency admission suite passes (104 tests plus 64 subtests), including one-mismatch recovery and three-identical-mismatch exhaustion.
- Exact retained-flow regressions prove one-mismatch recovery and three-mismatch
exhaustion; the adjacent 100-test sample/portfolio suite passes, and a forced
fresh
self-hostinggeneration passes on its first accepted candidate. - The complete current 0.9.0 candidate receipt passes both repair paths.
[x] SAMPLE-DRIVER-CONFIG-001 — Keep test isolation out of the production driver
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #268
- Owner: production sample-driver entrypoint and test-process isolation boundary
- Observed behavior: The fresh release receipt resolved the configured Codex/model
through
worker verify-model, but the external lifecycle driver then failed before generation withcoding_cli.test_selection_unconfigured. - Conclusion: The host path resolver and migrated configuration are correct.
scripts/run_samples.pyimports its implementation through thetestspackage;tests/__init__.pyconsequently installed a temporaryLITAI_CONFIG_DIRintended only for unittest/pytest and masked the canonical user test configuration. Preserve test isolation, but restore the caller's exact environment at the production import boundary before resolving durable operator configuration. - Competing hypotheses: Missing credentials/model, a wrong project ID, and an
omitted lifecycle
HOMEwere tested and rejected: model preflight succeeds, the exact project-scoped file exists, and the bound child environment resolves it until the test-support import alone changes the selected path. - Implementation:
- Snapshot and restore only the two environment variables mutated by the test package while importing the test-hosted conformance implementation.
- Preserve caller-supplied values byte-for-byte and keep unittest/pytest isolation unchanged.
- Add clean-subprocess regressions for both an absent platform-resolved config override and explicit caller-supplied config/MCP values.
- Evidence:
- The cross-platform subprocess regression and adjacent lifecycle-driver and host-path tests pass (25 tests plus 10 subtests).
- The fresh complete 0.9.0 receipt reaches live generation and produces a current candidate through the canonical user configuration path.
[x] CONVERSION-GITLINK-001 — Block conversion that cannot preserve nested submodules
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #266
- Owner: conversion planning and Git transaction boundary
- Observed behavior: A repository with an initialized nested Git submodule was
reported
ready; mutation would lift-shift ordinary top-level paths without remapping.gitmodules, the Gitlink, or the nested worktree's relative.gitpointer. - Conclusion: Full transactional remapping is wider and riskier than the 0.9.0
conversion contract needs. Inspect index mode
160000entries directly and block all initialized or uninitialized nested submodules before mutation, even when--allow-unreadyis supplied. - Implementation:
- Add fail-closed Gitlink inspection with bounded subprocess execution and safe UTF-8 repository-relative path handling.
- Report
blocked-nested-submodules, the path/state inventory, and one typed finding from--convert --plan. - Reject mutation before quarantine with
project.convert_nested_submodules_unsupported.
- Evidence:
- A real initialized nested-submodule regression proves plan classification,
typed mutation rejection even with
--allow-unready, unchanged Git status, preserved pointer file, and no framework manifest. - The clean test-one Python gate passes all
3,332tests with31intentional skips, including initialized and deinitialized real-Git submodule boundaries.
- A real initialized nested-submodule regression proves plan classification,
typed mutation rejection even with
[ ] VIRTUAL-MONOREPO-001 — Non-destructive Git-submodule orchestration
- Priority: P1
- Release target: 1.1.0
- Previous release target: After 0.9.0
- GitHub issue: #279
- Related: CONVERSION-GITLINK-001
- Owner: project discovery / Git orchestration boundary
- Direction: Add an explicit virtual-monorepo profile that treats Gitlinks as
immutable component boundaries while preserving the 0.9 conversion path's
fail-closed behavior. Record exact Gitlink commit and repository metadata and
never rewrite
.gitmodules, nested worktrees, or pointer files implicitly. - Implementation:
- Specify ownership, lock, source-custody, and publication contracts for parent and nested repositories.
- Reject dirty, unreachable, or unpublished nested commits with typed evidence; cover initialized, deinitialized, detached, and partially unavailable real-Git flows before permitting orchestration.
[x] CONVERSION-UPSTREAM-001 — Prefer the current upstream over remote HEAD
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #267
- Owner: conversion repository-policy inference
- Observed behavior: An absorbed submodule worktree on
dev/next/111, trackingorigin/dev/next/111, derivedmasterfromrefs/remotes/origin/HEADbecause remote HEAD was tested before the current branch's upstream. - Conclusion:
.gitpointer files are already understood bygit -C; the defect is precedence. A valid current upstream is stronger evidence about the branch being converted than the repository-wide remote HEAD and must be consulted first. - Implementation:
- Resolve the current upstream before remote HEAD and bind its actual configured remote, using longest-prefix matching for safe remote names.
- Preserve explicit CLI override as the highest-precedence source and retain the prior fail-closed fallback behavior when no valid upstream exists.
- Evidence:
- A real absorbed submodule worktree regression proves
.gitis a pointer file and the plan returnsdev/next/111fromcurrent-upstream; the adjacent remote guidance test passes with the corrected precedence. - The clean test-one Python gate passes all
3,332tests with31intentional skips, including the absorbed-worktree upstream regression.
- A real absorbed submodule worktree regression proves
[x] RECEIPT-MODEL-PLAN-001 — Bind one live model before planning and execution
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #270
- Owner: sample lifecycle-driver entrypoint and source-cache derivation protocol
- Observed behavior: A forced fresh complete rebuild passes all 22 sample
lifecycles, then candidate projection fails with
Standard sample receipt cannot uniquely bind its derivation key. Every executed Standard recipe is absent from the retained manifest even though the manifest contains no duplicate recipe identities. - Conclusion: Planning returns before live-test selection. It constructs Standard
recipes with
pipeline_model=None; execution then resolves the project-scopedcodex/gpt-5.6-solpin and constructs different model-scoped recipes. Resolve and project the pure selection before both branches, while retaining model preflight and live-session logging only in the execution branch. - Competing hypotheses: Candidate repair does not alter the accepted recipe identity, and exact locked-asset planning matches execution when model scope is held constant. Three unrelated samples each match the retained no-model recipe and reject only the explicit-model recipe, excluding isolated sample or duplicate-key defects.
- Implementation:
- Resolve required/optional live selection once before the planning branch and apply its environment/model projection to both planning and execution.
- Keep derivation planning non-executing: no coding-CLI preflight, session log, generation, build, or test side effect.
- Add an entrypoint regression proving configured model identity reaches
plan_derivation_manifestand preflight remains uncalled.
- Evidence:
- Three sample controls reproduce no-model manifest matches and explicit-model misses; same-model asset planning and execution produce one exact cache key.
- All 27 retained manifest recipe identities are unique, and all live sample lifecycles pass before receipt aggregation.
- Focused contracts and the uninterrupted 3,340-test Python gate pass; a real
plan contains only the configured
gpt-5.6-solmodel selector. - The exact candidate produces a fresh matching manifest/receipt pair.
[x] DURABLE-RECEIPT-001 — Receipt the durable portfolio as two Standard roots
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #271
- Owner: durable portfolio planning, aggregate reporting, and source-cache receipt lifecycle
- Observed behavior: The valid durable portfolio envelope carries
proof_status: passedand two nested Standard reports but no legacy top-levelpassed. The final receipt rejects it as a failed run before inspecting those roots. Derivation planning independently records one legacy harness key and lock, while live execution prepares five Standard nodes across two different root locks. - Conclusion: #252 fixed only suite metric aggregation. Define one validated direct-or-portfolio Standard report expansion contract and use it for metrics, receipt projection, and lock collection. Plan durable keys through the same root preparation and invocation construction used by execution, without crossing the coding-agent boundary.
- Implementation:
- Factor shared durable root generation authority and a non-executing exact-key planner for frontend API/root/cache and collector root/cache nodes.
- Replace the legacy durable planning fallback with those five keys and both exact root locks.
- Expand and validate nested Standard reports before applying the legacy
passedcontract; use the same expansion for metrics and lock collection. - Add malformed/failed envelope, five-key/two-lock, nested receipt, and exact source-cache lifecycle regressions.
- Evidence:
- A minimal valid-shape portfolio report reproduces
conformance receipt cannot include a failed run. - Exact pure inspection enumerates five unique model-scoped node recipes and two root locks; neither root lock appears in the retained release manifest.
- Commit
363eaf4changes onlyrun_all()aggregation for #252, confirming the remaining planning and receipt paths were not repaired there. - The focused 99-test sample/portfolio suite and uninterrupted 3,340-test Python gate pass; the real planner emits five unique durable derivation keys and both root locks.
- The complete exact-commit candidate validates every planned durable key as an accepted lifecycle member.
- A minimal valid-shape portfolio report reproduces
[x] RUNNER-CLOSURE-001 — Bind durable portfolio authority into lifecycle review
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #272
- Owner: reviewed lifecycle-driver and sample test-runner source closures
- Observed behavior: The runner closure explicitly names the production entrypoint,
runtime oracles,
sample_runner.py, and the Standard service-stack helper, but not the dynamically imported durable split-service helper that controls topology, generation, execution, verification, derivation planning, and receipt evidence. - Conclusion: Both static closures predate the durable portfolio and were not extended with it. Add that exact module rather than broadening review to unrelated tests, and prove every repository-owned test-support import from the runner is represented in both policies.
- Implementation:
- Add
tests/conformance/support/durable_split_service.pyto both explicit source closures and retain canonical ordered path/digest identity. - Add a regression proving durable helper bytes affect the computed identity and the runner's repository-owned support imports are covered.
- Run both reviews, inspect the final closure diff, then record the new pins.
- Add
- Evidence:
- Import tracing finds three repository-owned support dependencies; runtime oracles and Standard service stack are listed, while durable split service is the sole omission.
- Focused identity tests and the uninterrupted 3,340-test Python gate pass. The
final reviewed runner identity is
sha256:f40d421f344cf6a19f98b1500213f5a316c860cf175dc58d2b7c7b0e96548a1b; the lifecycle-driver identity issha256:f6a6676813b1c95dd33280cf585ee3c21abac8222284e21edcf3d0a5b862905f.
[x] CONVERSION-UPDATE-VARIANT-001 — Preserve conversion documentation during update
- Priority: P0 (0.10.0 converted-project update blocker; complete)
- Release target: 0.10.0
- GitHub issue: #283
- Owner: project initialization and three-way framework update adapters
- Observed behavior: An untouched project initialized with
litai init --convertcannot take a later starter-document update. The prospective update replaces its baseline-identicaldocs/README.mdwith the generic starter version, drops the only link to the retained conversion ADR, fails documentation reachability, and then rolls back atomically. - Conclusion: Validation and rollback are correct. Initialization appends the
conversion-specific Adoption decisions edge after rendering the generic starter,
while
project_updates._upstream_template()reconstructs only the generic variant. Update must compare against the same variant-aware scaffold that created the baseline. This is a direct minor-version compatibility defect but is not a 0.9.0 publication blocker under the explicit release-priority decision. - Competing hypotheses: Local documentation edits do not explain the sixteen baseline-identical affected conversions, and weakening reachability validation would only hide the broken prospective tree. The issue's successful rollback contradicts project-byte loss but not update unavailability.
- Implementation:
- Factor one variant-aware starter-document renderer shared by initialization and update, or reconstruct the exact conversion augmentation from durable baseline/conversion evidence as the smallest bounded backport.
- Preserve generic-project behavior, locally modified documentation conflict ownership, and atomic rollback without error suppression.
- Validation:
- Initialize a representative legacy tree with conversion, simulate a later
starter-document revision, apply it, prove the ADR remains reachable and
litai project validatepasses, then prove a second plan is current. - Focused initialization and update tests preserve generic projects, converted ADR reachability, local-document conflict ownership, idempotent second-plan behavior, and rollback contracts. Cross-platform release qualification remains part of the 0.10.0 candidate gate rather than evidence invented here.
- Initialize a representative legacy tree with conversion, simulate a later
starter-document revision, apply it, prove the ADR remains reachable and
[ ] UPDATE-REINITIALIZATION-001 — Design a bounded reinitialization and taxonomy-migration escape hatch
- Priority: P1
- Release target: 1.1.0
- Previous release target: 1.0.0
- GitHub issue: #301 (split from the closed mixed report #291 after its concrete update defect moved to #244)
- Owner: project migration and initialization transaction boundary
- Direction: Keep GitHub issue #301 at the 1.0 milestone while separating its broad force-reinitialization proposal from concrete migration defects; design an explicit ownership-preserving migration contract before adding a destructive-looking flag.
- Conclusion: A clean 0.8-derived reproduction proves update rollback is byte-for-byte exact. The remaining failure is stale authored Component and workflow taxonomy paths after flavor-name migration; force reinitialization while preserving Components would preserve the same invalid references and therefore does not solve the observed problem. Direct minor-version compatibility is a nice-to-have rather than a 0.9.0 release requirement, so the broad escape hatch must not delay 0.9.0.
- Depends on: none
- Implementation:
- Specify the owned-path and authored-path boundary, choose explicit taxonomy rewrites or conflict receipts, and decide whether a later force-reinitialization mode can safely compose with that migration without silently overwriting project content.
- Evidence:
- Retain the clean clone reproductions for pre-migration duplicate flavor IDs, post-flavor-migration stale skill/workflow paths, and exact update rollback; validate the eventual migration end to end across representative 0.8.x projects.
[x] CONVERT-WORKSPACE-001 — Keep disposable repo-man workspaces portable in exact-commit CI
- Priority: P0
- Release target: 0.9.0
- Owner: conversion harness process and workspace boundary
- Direction: Project disposable baseline and parity workspaces beneath the shared project root while passing the observed workspace through a host-shell-independent environment contract.
- Conclusion: The exact candidate exposes two deterministic contract errors: the
POSIX assertion parses GNU Make's inherited directory tracing as a path, and the
cross-platform environment regression asks
cmd.exeto expand POSIX dollar syntax. Preserve the production placement and environment projection, then verify their meaning without shell-specific test commands or output-order assumptions. - Depends on: none
- Implementation:
- Replace brittle assertions with marker-based path checks; make the environment projection regression execute a cross-platform Python probe; retain baseline and wrapper cleanup assertions.
- Evidence:
- Exact GitHub run
33812435136fails only the two new workspace regressions on Ubuntu Python 3.11 and Windows Python 3.12; the repaired probes pass on macOS and Linux, including Python 3.11 with inherited GNU Make tracing. - The complete local release-candidate gate passes 3,350 tests with 30 expected skips after the cross-platform probe repair.
- The repaired exact-commit workflow passes on Windows, Linux, and macOS in
hosted run
33858381265.
- Exact GitHub run
[x] CONVERSION-PREFLIGHT-001 — Resolve conversion authority before quarantining source
- Priority: P0
- Release target: 0.9.0
- GitHub issue: #293
- Owner: project initialization transaction boundary
- Direction: Complete repository-parent, lineage, inherited-catalog, Standard-binding, and template-catalog preflight while the conversion target is still untouched; quarantine only after those non-mutating contracts succeed.
- Conclusion: A clean real repo_man conversion with intentionally unavailable
framework credentials failed at
repository_lineage.tags_unavailableafter every tracked source path had already moved under one_legacytransaction. The call path places quarantine before default-parent selection. Reordering preflight is the smallest causal fix; repo_man and nested Docker have not run at this point. - Depends on: none
- Implementation:
- Move the interrupted-conversion quarantine decision to the final pre-write boundary after template validation, preserve resume behavior, and add a real-Git regression proving default-parent failure leaves tracked and untracked source plus Git status unchanged.
- Evidence:
- GitHub issue #293 records the reproduction, competing hypotheses, falsification, and verification contract; the focused failure, success, resume, workspace, and environment-projection tests pass.
- The complete local release-candidate gate passes 3,350 tests with 30 expected skips.
- A native Animation Authoring run reaches the selected authoritative build only after preflight and leaves the original archive plus Git state byte-clean when the later external toolchain fails.
[x] CONVERSION-TIMEOUT-001 — Make host-heavy conversion deadlines explicit and evidenced
- Priority: P1
- Release target: 0.9.0
- GitHub issue: #292
- Owner: conversion CLI and retained-harness execution boundary
- Direction: Add one validated conversion baseline/parity deadline option with the existing 1,800-second default, propagate it through the filesystem adapter, and record the effective bound in every phase and top-level receipt.
- Conclusion: Issue #292 reports a clean repo_man build killed at exactly the
hard-coded 1,800-second bound. The operator explicitly chose
--run-baseline, so a bounded override is preferable to a larger unconditional timeout; parity must receive the same value or the second replay can fail under a different lifecycle contract. - Depends on: none
- Implementation:
- Expose
--baseline-timeout-secondsforinit --convert, validate a finite integer range in the public adapter, pass it to direct baseline and wrapper parity before and after retained-source lift-and-shift, improve timeout diagnostics, and preserve the effective value in canonical evidence.
- Expose
- Evidence:
- Parser, validation, propagation, and conversion-flow regressions prove the default remains 1,800 and an explicit bound reaches both receipts and every phase.
- The complete local release-candidate gate passes 3,350 tests with 30 expected skips.
- Native Linux x86_64 repo_man qualification uses an explicit 7,200-second bound; the public Kit App Template completes within it and the Animation Authoring run reaches its unrelated builder-toolchain failure rather than timing out.
[x] CONVERSION-BUILD-WRAPPER-001 — Preserve authoritative repo_man build entrypoints
- Priority: P1 (blocks the reported repo_man Phase 1b qualification)
- Release target: 0.9.0
- GitHub issue: #294
- Owner: conversion harness discovery and retained-wrapper boundary
- Direction: For each detected repo_man project root, prefer its platform-native
runnable
build.shorbuild.batwhen present, while retaining the direct repo driver as the fallback and recording one command/evidence tuple for direct baseline, generated Make delegation, and parity replay. - Conclusion: Fresh inspection of the retained Animation Tools source selects
repo.sheven though the documented root wrapper first pulls the build BOM and builds and links required USD schemas before delegating to repo_man. The driver does not call the wrapper, so the unconditional repo-driver stage deterministically skips clean-build prerequisites; timeout, nested-container visibility, and stale evidence are downstream or falsified alternatives. - Depends on: CONVERSION-BASELINE-001, CONVERSION-BASELINE-002
- Implementation:
- Select a platform-native regular build wrapper adjacent to each detected repo_man driver, require executable permission for POSIX shell wrappers, preserve explicit release configuration and host-heavy cost, and retain the existing driver command when no valid wrapper exists.
- Align the repo-man Flavor and skill contract with recorded authoritative build entrypoints instead of declaring the low-level driver universally authoritative.
- Evidence:
- Issue #294 records the real retained-tree source, fresh-inspection result, competing hypotheses, causal call path, and falsification criteria.
- Focused contract tests prove wrapper preference, fallback, nested-root selection, and exact command reuse through baseline, generated wrapper, and parity.
- The complete local release-candidate gate passes 3,350 tests with 30 expected skips.
- Native clean Animation Authoring inspection selects and executes
./build.sh --release; the later nested-containerGLIBCXXfailure confirms the authoritative wrapper boundary was crossed.
[x] CONVERSION-RUNTIME-STATE-001 — Exclude repo_man runtime logs from source parity
- Priority: P0 (two successful real repo_man builds are rejected as unequal)
- Release target: 0.9.0
- GitHub issue: #297
- Owner: retained authored-source observation and wrapper-parity boundary
- Observed behavior: On the exact
536a6921candidate, the current public Kit App Template completes both the direct and wrapper-mediatedrepo.sh build --releaseexecutions with status zero, but conversion failsproject.convert_wrapper_parity_failedand rolls back. - Conclusion: The fresh Git-visible scope contains no
_repodirectory. repo_man creates_repo/repo.logduring each disposable build; the parity copies contain no Git metadata from which to re-evaluate the repository's_*/ignore rule, so the filesystem observer hashes the timestamped runtime log as authored source. A normalized member comparison finds no other difference across 299 observed files. Treat only unprotected_repoas generated runtime state; retain the existing protected-path rule so tracked files below that directory remain authoritative. - Competing hypotheses: Exit-status, deadline, and command mismatches are falsified by two zero exits using the same command and bound. Absolute temporary paths are already normalized. Broader build nondeterminism is contradicted by every other observed member matching exactly.
- Falsification: The theory is wrong if excluding only unprotected
_repoleaves the two successful source identities unequal, or if a tracked file beneath_repocan mutate without detection. - Implementation:
- Classify unprotected
_repoas repo_man-generated runtime state without weakening tracked-path observation. - Add regressions for timestamped log churn, protected authored paths, and an unrelated untracked source mutation.
- Classify unprotected
- Evidence:
- Native Linux x86_64 direct and wrapper executions both exit zero; the exact
normalized diff is
_repo/repo.log, and a diagnostic_repoexclusion makes both source and accounting trees identical. - Failed conversion removes both disposable workspaces and leaves source Git status empty.
- The complete 45-test harness-inventory suite passes with strict lint and formatting, including timestamped runtime-log parity and protected-path regressions.
- The complete local Python gate passes 3,370 tests with 30 expected skips.
- Exact CI passes and the public Kit App Template completes direct baseline, wrapper parity, conversion, and project validation on native Linux x86_64.
- Native Linux x86_64 direct and wrapper executions both exit zero; the exact
normalized diff is
[x] CONVERSION-DIAGNOSTICS-001 — Preserve bounded root-cause evidence from long baselines
- Priority: P0 (host-heavy conversion failures currently lose their actionable error and record an identity for only an initial output prefix)
- Release target: 0.9.0
- GitHub issue: #298
- Owner: retained-harness process output and conversion failure boundary
- Observed behavior: A synthetic command whose stdout exceeds 1 MiB records neither
its first
ROOT-ERRORnor its finalACTUAL-TAIL; the purported tail is the end of the first 1 MiB. Itsstdout_identityalso hashes that prefix rather than the complete 1,100,024-byte stream. Any nonempty generic stderr then hides stdout entirely in the public failure message. The first exact native rerun after the stream repair proves a second boundary: the inner excerpt contains the GLIBC failure, but the public JSON message is exactly 512 characters and ends at the stdout head. - Conclusion: Temporary files already provide file-backed custody, but the reader
seeks to byte zero and reads only
limit + 1bytes before excerpting, hashing, test-summary observation, and verbose tracing. Preserve the complete stream's digest while retaining bounded head/error/tail windows; combine labeled stdout and stderr diagnostics instead of choosing one stream. Make the effective finite capture policy explicit and evidence-bound rather than introducing an unrecorded process-global override. Preserve the ordinary CLI's 512-character safety bound, but let the two conversion gate errors carry their already validated finite diagnostic budget through the final envelope. - Competing hypotheses: A twelve-line/1,500-character tail alone is insufficient
but does not explain the missing physical tail or incorrect digest. Log overwrite,
stale receipts, and redaction are contradicted by a fresh direct invocation of
_run_harness_command; the bytes remain present in its temporary file until the post-process reader discards them. - Falsification: The theory is wrong if a full-stream digest plus bounded head/error/tail scan still omits synthetic first and final markers, or if the recorded identity does not match an independently computed SHA-256 of the entire stream.
- Implementation:
- Factor a constant-memory file-backed output observer that computes full-stream identity and preserves bounded head, first error contexts, and tail.
- Record the effective output/diagnostic limits in baseline and parity evidence; validate any operator override at the CLI boundary and apply one identical policy to direct and wrapper executions.
- Keep receipts and user-facing diagnostics bounded and secret-redacted; never retain complete command output in committed evidence.
- Propagate only conversion build/CI gate budgets through the CLI dispatcher; retain the 512-character default for every other error and a hard 66,048 character ceiling for all callers.
- Validation:
- Prove full digest, first/root error, actual tail, mixed stdout/stderr reporting, oversized-success policy, test-summary discovery, and invalid-bound rejection with contract tests.
- The focused 190-test diagnostics, conversion-flow, CLI, and evidence slice has 189 behavioral passes; its sole pre-review failure is the expected stale documentation-authority marker. After recording the reviewed authority, the canonical self-description regression passes and the final-code complete Python gate passes 3,370 tests with 30 expected skips.
- The native Animation Authoring rerun retains the first actionable CentOS 7
GLIBCXXincompatibility plus bounded head and tail evidence while preserving the 7,200-second timeout, byte-clean rollback, and source-parity behavior.
[x] RELEASE-CHECK-RESET-001 — Bootstrap checkpoint reset through the managed runtime
- Priority: P0
- Release target: 0.9.0
- Owner: Make release-check bootstrap boundary
- Observed behavior: On an otherwise valid release candidate,
make release-check-resetinvokedscripts/run_checkpointed_gates.pywith the dependency-free bootstrap Python and failed while importingjsonschemabefore either checkpoint could be reset. - Conclusion: The checkpoint runner gained application-level pinned-dispatch imports, but the reset target retained its earlier stdlib-only interpreter contract. This is a deterministic Make dependency mismatch, not stale state or a platform-specific package installation failure.
- Implementation:
- Give
release-check-resetthe same managed-runtime prerequisite and interpreter selection asrelease-checkfor both checkpoint resets.
- Give
- Evidence:
- A Make dry-run regression proves a clean environment is provisioned and both reset invocations use its managed interpreter rather than the bootstrap interpreter.
- Reset both real checkpoints successfully through a freshly provisioned managed runtime; exact-candidate release-check completion remains part of the release-wide qualification evidence.
[ ] CONVERT-DEFECT-ISSUES-001 — File target-project defects discovered during conversion
- Priority: P1
- Release target: 1.1.0
- Previous release target: 1.0.0
- Owner: convert-project skill, conversion reports, and project tracker adapter
- Direction: When conversion discovers a defect in the project being converted, file it in that project's detected GitHub or GitLab tracker instead of leaving it only in transient conversion diagnostics.
- Conclusion: Classify target-project defects separately from Literate AI framework
defects, resolve the forge through project tracker inspection, de-duplicate
against existing issues, and require explicit external-write authorization
before invoking the named
ghorglabissue-creation command. If the forge is unsupported, ambiguous, or unauthenticated, retain a complete proposed-issue record and report the unfiled state explicitly rather than silently dropping the finding. - Depends on: Provider-neutral conversion finding classification and the existing project-tracker inspection contract.
- Implementation:
- Add a durable project-defect finding shape to conversion evidence; route
GitHub findings through
ghand GitLab findings throughglab; require explicit publication authorization; de-duplicate stable findings; retain the proposed issue title, body, and evidence when filing is unavailable; update convert-project guidance.
- Add a durable project-defect finding shape to conversion evidence; route
GitHub findings through
- Evidence:
- GitHub and GitLab integration fixtures file the issue in the target repository and persist its URL; duplicate conversion runs do not create duplicate issues; framework defects route to the framework tracker instead; unsupported, ambiguous, unauthenticated, and unapproved cases preserve an actionable unfiled proposal without external writes.
[x] CONVERT-PARITY-001 — Keep generated build outputs out of conversion source authority
- Priority: P0 (0.10.0 conversion blocker; complete)
- Release target: 0.10.0
- GitHub issue: #305
- Owner: conversion baseline and wrapper parity adapters
- Direction: Phase 1 wrapper parity must compare the source authority that existed
before each build while retaining post-build artifacts separately; generated
cache and tool outputs must not become source merely because a legacy build
writes them outside
_build. - Conclusion: Issue #305 is a real source-versus-artifact observation bug, not
nondeterminism in the target project: successful direct and wrapper builds
observe different generated populations because
source_treeis captured after execution. Snapshot source authority before each command, evaluate post-command mutations to pre-existing source paths, and keep newly created paths in artifact observations. Review the existing conversion branch as proposed work, not landed evidence. - Depends on: Existing Phase 1b baseline and wrapper parity contracts.
- Implementation:
- Capture the bounded pre-build source membership for direct and wrapper commands; compute source identity from those members after execution so modifications and removals still affect parity; retain newly generated paths in artifact-tree evidence; review and land the existing proposed commit stack without importing unrelated downstream data.
- Evidence:
- Regressions with differing generated cache and PID-named root-file populations pass source-authority parity while preserving artifact differences; modifying or removing a pre-existing source file still changes source identity. All 52 focused harness inventory tests pass; the downstream-sized reproduction remains part of the 0.10.0 release qualification matrix.
[x] UPDATE-LOCAL-ROUTING-001 — Preserve project-owned local routing authority during update
- Priority: P0 (0.10.0 downstream migration blocker; complete)
- Release target: 0.10.0
- GitHub issue: #306
- Owner: repository update prospective validation and generation-input closure
- Direction: After the #244 transaction-order fix,
litai updatemust preserve and validate an intentional project-owned routing file and its paired workflow instead of rolling back withinputs.closure_unavailable. - Conclusion: Issue #306 is downstream of but mechanistically distinct from #244. The update now reaches full prospective validation, where project-owned local routing is evaluated without the local generation authority it requires. Trace ownership and closure resolution before changing validation; do not weaken closure checks or treat the local route as an obsolete duplicate of the nested production route.
- Depends on: The shipped #244 dependency-closed update transaction and a reduced fixture preserving both distinct routing policies.
- Implementation:
- Reduce the telemetry-dashboard topology to a framework fixture; trace prospective-tree discovery and generation-input closure for local-only routing and workflow files; preserve local ownership through the update transaction; enforce the same closure invariant for ordinary validate and update; retain atomic rollback for genuinely unavailable inputs.
- Evidence:
- The minimal dual-route fixture reproduces the pre-fix
inputs.closure_unavailableresult; update preserves both project-owned and inherited routing policies and validates successfully; a genuinely missing local workflow still fails closed and rolls back byte-for-byte. An isolated clone oftelemetry-dashboardapplies the updated framework successfully while retaining its project-ownedrouting/dev.jsonandworkflows/dev/workflow.md; cross-platform update flows remain an exact-candidate gate.
- The minimal dual-route fixture reproduces the pre-fix
[x] JAVASCRIPT-NPM-LIFECYCLE-001 — Bind npm permission to Flavor and lifecycle
- Priority: P0
- Release target: 0.10.1 recovery
- GitHub issues: #326, #329, and #330
- Owner: JavaScript generation skills, Standard command projection, and local npm lifecycle
- Decision: ADR 0036
- Direction: Keep JavaScript dependency-free unless
package-npmis selected. With that exact Flavor, admit only an enumerated source-SBOM closure plus a completepackage-lock.json, bind the complete npm implementation and its Node-resolved closure to the selected Node runtime, and replay it in disposable object storage before packaging the runtime tree. - Conclusion: The contradiction is executable rather than editorial. The exact
combined generation prompt says both that npm is permitted and that npm packages
are forbidden, while the production Standard builder only syntax-checks and
copies JavaScript. The older npm implementation remained on an obsolete WIP and
was not integrated with Standard command authority or explicit Flavor selection.
A late npm 11
pg@8.23.0reproduction also proved that standard v3 path-derived names, locked optional runtime nodes, satisfied required peers, and explicitly absent optional peers must be projected rather than rejected. - Implementation:
- Make the portable JavaScript skill conditional and keep model execution out of host tool detection, dependency installation, global install, and publication.
- Add a typed npm command profile contributed by
package-npm, bind an exact npm implementation and dependency closure executed by the selected Node runtime, and reject dependency-bearing manifests without the selected Flavor before invoking npm. - Replay the supplied complete lock with lifecycle scripts disabled in a
disposable
OBJ_DIRprojection; retain runtime dependencies in the artifact, verify source and lock immutability, and clean partial failures.
- Evidence:
- Actual combined recipe prompts with and without
package-npmare consistent. - Exact local fixtures prove locked dependency execution with the Flavor,
rejection without it, missing-lock and tool-drift failure, standard npm 11 v3
pg@8.23.0graph and inventory agreement, no lifecycle scripts, and no source mutation, global install, or publication. - Focused npm tests pass; the exact 0.10.1 release line passes 3,490 local tests plus lint, format, strict OpenSpec, documentation, identity, skill, and installed-wheel gates. Exact hosted trunk run 33997044552 and release-line run 33997504560 each pass all 15 Linux, macOS, and Windows jobs.
- Actual combined recipe prompts with and without
[x] EXTERNAL-ACCEPTED-SOURCE-GUARD-001 — Reject an unenforceable no-model request
- Priority: P0 release blocker
- Release target: 0.10.1 recovery
- GitHub issue: #331
- Owner: rebuild CLI authority dispatch and external lifecycle boundary
- Direction:
--from-accepted-sourcemust never become advisory. Continue through the Standard lifecycle only when every Component has exact verifier-admitted membership; reject external drivers before planning or execution because their versioned request contract carries no accepted-source-only field. - Conclusion: The release-candidate receipt reproduction launched authenticated
Codex processes while its retained cache decision reported
cache-unconfigured,fresh_generation_required: true, andgeneration_skipped: false. The flag was introduced for the in-process Standard driver but exposed by the shared rebuild parser. External driver binding, source-cache control, and the sample runner all omit the invariant, so ordinary generation remained authorized. Full external support requires a future versioned protocol; this patch closes the fail-open surface without pretending a generated-source cache is verifier admission. - Implementation:
- Reject accepted-source-only mode for an external lifecycle driver before binding the executable or allocating runtime and candidate paths.
- Keep the Standard path unchanged and clarify the CLI help scope.
- Evidence:
- A public CLI regression selects a real external driver document and proves the binding adapter is never called and no runtime or candidate path is created.
- A paired Standard-driver regression proves the same flag still reaches the in-process rebuild authority.
[x] LOCAL-BUILD-CACHE-TRUST-001 — Bind cache hits to external evidence
- Priority: P1
- Release target: 1.1.0
- Previous release target: 0.11.0
- GitHub issue: #327
- Owner: Local Standard build-cache custody and lifecycle restart evidence
- Direction: A cached artifact must not authenticate its own bytes. Bind each reusable native, npm, Bazel, or Cargo artifact to an expected identity retained outside the candidate object and carried by restart evidence; otherwise rebuild in disposable custody and compare before reuse.
- Conclusion: A coordinated rewrite of an artifact, its dependency evidence, and its self-declared tree manifest can pass the generic Local Standard cache check. The 0.10.1 npm lifecycle is contained by a same-runtime external checkpoint and cold replay, but the uniform durable contract is broader 0.11.0 work.
- Implementation:
- Define one external artifact/evidence checkpoint shared by native, npm, Bazel, and Cargo builders and bind it to the exact build plan and authorization.
- Carry that checkpoint through lifecycle restart without treating cache bytes as authority; rebuild and compare when no trusted checkpoint exists.
- Reuse a sealed command-addressed slot across later wall-clock grants. The
checkpoint still authenticates the artifact tree; plan and authorization
identities stay audit metadata so
litai testafterlitai buildcannot rebuild into an occupied slot.
- Evidence:
- Coordinated self-manifest rewrites fail before test or execution for every
builder, while unchanged same-run and restarted cache hits remain observable.
PR #338 (
33f1821e) and follow-upc190d589added rejection regressions for Bazel, Cargo, native/local, and npm, plus restarted-runtime coverage proving legitimate cache hits still succeed.
- Coordinated self-manifest rewrites fail before test or execution for every
builder, while unchanged same-run and restarted cache hits remain observable.
PR #338 (
[x] NPM-CONSTRAINT-AUTHORITY-001 — Make Standard consume the host npm constraint
- Priority: P1
- Release target: 1.1.0
- Previous release target: 0.11.0
- GitHub issue: #328
- Owner: package-npm host SBOM, toolchain constraint projection, and npm discovery
- Direction: Remove the independently maintained
>=9,<13version range from the Python adapter. Host installation, doctor/preflight, and Standard projection must consume one exact selected-Flavor constraint authority and bind it into lifecycle evidence. - Conclusion: The 0.10.1 values agree and verified npm 9, 10, and 11 distributions pass, so this does not block the recovery release. Treat future range drift as a fail-closed 0.11.0 factoring issue rather than adding another implicit fallback.
- Implementation:
- Express lower and upper npm bounds once in selected Flavor/SBOM authority.
- Project that authority through host install and Standard npm discovery.
- Bind the constraint identity and reject missing/conflicting authority.
- Evidence:
- Linux, macOS, and Windows tests cover separate Node/npm prefixes and boundary
versions without a duplicate product range in Python. PR #337 removed the
>=9,<13literal from the Python adapter and added boundary tests (9.0.0 accepted, 13.0.0 rejected) that run in CI across all three platforms.
- Linux, macOS, and Windows tests cover separate Node/npm prefixes and boundary
versions without a duplicate product range in Python. PR #337 removed the
[x] CONVERSION-ROOT-STAGE-COVERAGE-001 — Do not repeat internal repo-man builds
- Priority: P0
- Release target: 0.10.1 recovery
- GitHub issue: #325
- Owner: conversion harness inventory, automatic baseline/parity, and retained receipt execution
- Direction: When repo-man discovery records a canonical undotted root
build, execute it once as automatic qualification authority and record nestedbuild.*stages as covered. Preserve every nested stage in inventory and as a manually callable wrapper target. Without a root build, execute nested stages normally. - Conclusion:
inspect_harness()correctly preserved the root and one-child repo-man entrypoints, but_partition_execution_stages()equated inventory with automatic execution. A real Phase 1b run completed the canonical root build in about 4.5 hours, then invoked the internalruntime/repo.shstandalone and failed on prerequisites owned by root orchestration. A blanket dotted-stage filter would hide unrelated independent stages and would make the newer retained receipt path reject a covered child as unavailable; the coverage rule must be repo-man-specific and shared by baseline, parity, retained execution, and its lifecycle plan. - Implementation:
- Classify only nested repo-man
build.*stages as covered when the same inventory contains an undottedbuild; retain every wrapper target and run independent dotted stages or rootless repo-man stages normally. - Exclude covered stages from retained automatic admission and lifecycle command plans without weakening unavailable-driver failure for admitted stages.
- Align the repo-man skill, Flavor requirement, and initialized template copies with the automatic-coverage versus manual-callability contract.
- Classify only nested repo-man
- Evidence:
- Focused integration tests prove one root baseline/parity execution, retained receipt exclusion, nested manual wrapper invocation, independent dotted-stage execution, rootless nested repo-man execution, and an execution-plan projection that names only commands the retained runner will actually invoke. The focused and adjacent initialization/template suites pass 132 tests with 182 subtests; the changed skill, strict OpenSpec, Ruff, and documentation gates pass.
- Downstream GitLab pipeline 66415219 / job 427365816 passed the canonical root,
parity, and lift-shift builds without launching nested
runtime/repo.sh; converted revisionbae103caproducedphase1b.bundle. Full local release validation passed, and GitHub release-branch CI 33986510390 passed all jobs at3eb7638a.
[~] RELEASE-CLOSURE-001 — Make release closure executable and continuous
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.10.0
- Owner: release-project skills, release policy, release CLI, publication adapters, and release gates
- Direction: For 0.10.0, turn the 0.9.0 omissions into executable release policy: every major or minor release must regenerate, validate, preflight, publish, export back, and verify its terminal document pair; every release cycle must repeatedly inventory and disposition current tracker work, reviews, unmerged branches, worktrees, and external contributions before publication.
- Conclusion: The 0.9.0 failure was a split contract: prose required terminal collateral and broad peer review, but release plans, receipts, gates, and published verification bound neither. The release engineer must consume deterministic Python inventory and publication helpers, make semantic scope decisions, leave machine-readable milestone plus audit-comment dispositions, and repeat the sweep until no current-release blocker or unclassified contribution remains.
- Depends on: RELEASE-015
- Next action: Preserve the published
v0.10.0tag, land the portable preflight-test fixture onmain, and complete a versioned recovery containing the three intended 0.10 operator-adoption commits that the stale release line omitted. This late CI correction was applied before queue recording as reversible emergency containment after the exact-head matrix exposed the invalid fixture. - Implementation:
- Add an accepted ADR and release policy for release-class derivation, required collateral, authenticated publication preflight, exact publication receipts, and continuous contribution disposition.
- Add Python-owned release contribution inventory and validation covering open issues, open reviews, remote branches, attached worktrees, milestones, durable release-disposition comments, and exact-head branch-lifecycle markers for GitHub and GitLab tracker contracts.
- Bind the current contribution sweep and required major/minor collateral receipt into release planning, prepared-candidate checking, publication, and post-publication verification without requiring live credentials on verification workers.
- Make the document-pair publisher preflight both stable resources and the explicit active account before either mutation, support idempotent recovery, export accepted remote state back to local authority, and emit release-bound hashes and resource identities.
- Update release-project, evidence, verification, presentation, tracking, and user-work skills plus Make targets and generated template copies so the virtual release engineer follows one executable loop.
- [~] Repair 0.10.0 packaging metadata drift and continuously triage newly discovered regressions or blocking contributions into 0.10.0, deferring the rest with explicit next-cycle annotations until the release closes.
- [~] Recover the premature stable cut without rewriting
v0.10.0: the published tag is rooted at03d3257e, while intended 0.10 commitsce88a6d8,2f4a34a1, and4b739a92remained onmain. - Replace the project-index preflight tests' fabricated
/projectroot with a real platform-native temporary directory while retaining strict production path resolution. - Enforce in Python that a first stable initial, major, or minor candidate contains the live remote default branch throughout plan, prepare, check, and publish; keep patch selection independent of unrelated later trunk work.
- Derive checked-in Homebrew metadata from one Ruby version constant, declare it as a release version mirror, and restore its 0.11.0 value after the automatic default-branch version advance so patch preparation can update it atomically.
- Persist repair-gate completion in global execution order, invalidate anything other than the exact current fail-fast prefix, and require a clean follow-up pass after repaired completion before accepting release evidence.
- Treat an attached clean default-branch checkout as release authority when a
patch is planned from a linked
release/*worktree, rather than requiring a contribution disposition formainthat branch enumeration intentionally excludes. - Use a platform-native absolute synthetic executable in the Codex unauthenticated-status regression so Windows exercises the authentication probe and no-model-request invariant instead of failing fixture construction.
- Evidence:
- Contract, parser, policy, tracker-adapter, contribution-inventory, publication-preflight, partial-failure, receipt, release-plan, prepare/check/publish/verify, and generated-template parity tests pass in focused suites.
- [~] A no-write dry run inventories this repository current issues, reviews, unmerged branches, and worktrees; unresolved items fail closed. Tracker dispositions and exact-head lifecycle markers are being bound before the final repeated sweep.
- Remote tag, release, wheel, ancestry, and changelog inspection proves that stable
v0.10.0omitted the final operator-adoption commits; the tag remains immutable. - The focused project-index preflight regression, full Python gate, and fresh exact-head cross-platform CI pass with the portable fixture.
- Release-plan contract tests reject a stale first stable line at plan, prepare, check, and publish while accepting a selective patch line; historical verification remains valid after the default branch advances, and release preparation atomically renders an indented quoted-constant package mirror while skill/template parity plus the Homebrew renderer test pass.
- Inserted prerequisites and cross-pin gate reordering force a restart; a successful repaired run exits with rerun-required status 2, and only the subsequent gate-one pass exits 0.
- The linked-release-worktree regression reproduces the false unresolved
mainresult before the classifier correction and passes afterward; the live 0.10.1 sweep now classifiesmainonly by its actual worktree state. The Windows CI traceback identifies the POSIX-only/tools/codexfixture before the authentication call, and the focused operator-adoption suite passes with a host-native absolute path. - The 0.10.0 document pair validates locally, publication preflight reports the active account and both resource capabilities before mutation, authenticated publication and export-back produce an exact receipt, and post-publication verification proves the bound artifacts.
- Focused checks pass first, then release-relevant gates and exact-head CI pass for the 0.10.0 candidate.
[x] STANDARD-CACHE-PUBLICATION-001 — Publish source only after project acceptance
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.10.1 recovery
- Owner: Standard project lifecycle and accepted source-cache contracts
- Direction: Keep generated source private to its current lifecycle until root assembly, packaging, packaged execution, and independent project acceptance all succeed; only then may a non-hit become visible in an accepted source cache.
- Conclusion: The
loan-risk-gatereceipt rebuild exposed a publication-order bug, not a corrupt cache or incapable model. A candidate that followed DMN-internal uppercase names passed its generated component tests, was published, and then failed the lowercase/full-result public contract at independent packaged acceptance. Exact retries replayed that verifier-rejected cache entry without a new coding-agent call. Publication ownership now follows the project acceptance boundary, while incomplete lifecycle evidence can represent accepted but deliberately unpublished component work. - Depends on: Standard root integration and independent acceptance
- Implementation:
- Stage each accepted non-hit membership in its node result without mutating the cache or recording a publication checkpoint.
- After independent project acceptance, publish canonical Component order, rebind result/membership/attempt-chain identities to actual publication, then admit the project and issue its receipt.
- Preserve restartable partial publication after project acceptance: an entry successfully written before a later publication failure is safe and idempotent.
- Evidence:
- A poisoned default cache reproduces the same verifier failure without invoking Codex; a wholly isolated cache invokes Codex and passes the exact sample.
- Contract tests prove every root-boundary failure performs zero cache writes and emits zero publication checkpoints, while success orders independent acceptance before publication and publication before admission/receipt.
- A clean-cache
loan-risk-gaterun passes six tests, three generated tests, and one independent verifier case; the broad Python gate passes 3,439 tests with 31 declared skips. - Complete an exact external receipt rebuild for all 31 derivations after the project-acceptance publication change.
- Exact wheel, isolated install, and installed-project E2E checks pass; the full
local gate passes 3,445 tests with 31 declared skips on
24753f32. - Hosted qualification is complete for the shipped 0.10.1 recovery.
Release-line commit
2a333878has byte-identical lifecycle ports, project lifecycle, membership contracts and their tests to original1cf709dd. It is an ancestor ofcc4e81d2, whose complete 15-job hosted matrix passes. Publishedv0.10.1atb0888f7falso passes its complete hosted matrix. These current forge observations close the historical hosted gate; RELEASE-INTEGRATION-001 still owns fresh consolidated 1.1 qualification.
[x] COMMITTED-CACHE-EMPTY-001 — Admit Git's empty committed-cache representation
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.10.1 recovery
- Upstream issue: #320
- Owner: filesystem-v2 read-only adapter and Standard declared-target composition
- Direction: Treat a canonical format marker with no managed namespaces as the portable empty representation of a committed source-cache target, without creating directories or weakening validation of any populated layout.
- Conclusion: The downstream project's writable
standard-localtarget opens, but its read-onlyproject-committedtarget contains only canonicalformat.json. Git cannot store the empty directories created by the writable adapter. Standard planning and toolchain probing complete before target composition, after which the read-only constructor rejects the first absent managed descendant. The v0.10.0 and then-current implementations were identical at this boundary; no symlink, race, retry, or stale cache state is required. - Implementation:
- Validate the format marker first and represent an exact namespace-empty read-only target as unavailable, so every lookup is an empty miss.
- Preserve fail-closed mandatory entry/key/CAS validation for populated targets, while allowing Git to omit empty optional source-intelligence namespaces.
- Include the exact managed path in path-safety diagnostics.
- Evidence:
- Adapter tests cover format-only non-mutation, partial-layout rejection with the exact path, and a populated cache whose empty intelligence namespaces were omitted.
- Standard target-composition coverage opens a format-only project-relative target as an empty miss.
- The actual telemetry-dashboard checkout now resolves both declared targets and leaves its committed format marker byte-for-byte unchanged.
- The full local gate passes 3,445 tests with 31 declared skips, including the
adapter and Standard target-composition regressions, on
24753f32. - The exact downstream
litai testreproduction passes with the 0.10.1 candidate after backport, and exact-head hosted CI passes. Historical evidence reconciled for 1.1: issue #320's terminal validation records the isolated non-editable release-line package, reviewed Standard rebind and successful three-test downstream reproduction atcc4e81d2, preserving the format-only committed cache. That exact commit passes all 15 checks in run 33983417499. The publishedv0.10.1commitb0888f7fdescends from it and also passes all 15 checks in run 34004424520. The canonical cache fix8119e53bis an ancestor of the current candidate. Current cache/update/rebind regressions pass as a 44-test batch at33630a4f; this is historical obligation closure, not a new live 1.1 downstream receipt. Duplicate CACHE-EMPTY-RO-001 uses the same evidence.
[x] RELEASE-SKILL-CLOSURE-001 — Keep derived release guidance self-contained
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.10.1 recovery
- Upstream issue: #322
- Owner: inherited release-project skill and initialized-project skill closure
- Direction: Every mandatory Markdown resource named by the release skill copied into a derived project must also exist in that derived project. Keep the small significant-feature governance rule in the skill instead of routing an agent to framework-only documentation.
- Conclusion: The issue's named
project-releases.mdroute was removed before 0.8.0. The reproduced historical defect was the mandatory ADR 0006 route: derived projects receivedrelease-project/SKILL.mdbut not the framework'sdocs/decisions/tree. Release-line fixd8844e32and recovery728a45f1carry the bounded rule within the copied closure. Current initialized-project validation confirms the reference closure; no release mechanics are bypassed. - Next action: Complete; reconcile the already shipped fix with the exact historical release evidence below, not a new 1.1 live acceptance claim.
- Implementation:
- Inline the bounded ADR/acceptance/work-recording sequence and route its final
step to the copied
record-user-directed-workskill.
- Inline the bounded ADR/acceptance/work-recording sequence and route its final
step to the copied
- Evidence:
- An initialized derived-project fixture resolves every backtick-delimited Markdown path in its copied release skill without an upstream checkout.
- Focused initialization, catalog/template parity, and pinned SkillEvaluator checks pass; lifecycle-driver and documentation authority pins are current.
- An exact 31-derivation rebuild under the re-pinned driver promotes a current
231-test project receipt on
28712d17. - Full local, backport, and exact-head hosted CI gates pass.
Issue #322's terminal evidence
records the 73-test release-line initialization/update/rebind pass.
Run 33983417499
passes all 15 jobs at
cc4e81d2fe94466bf2b482626cda61e981b3963c; published 0.10.1 run 34004424520 passes all 15 atb0888f7f51d031c2f0a1660cc484f3ff861f3329. Recovery728a45f1is an ancestor of33630a4f, whose fresh full local Python gate passes 4,204 tests with 30 skips in 2,352.861 seconds; terminal stderr identity issha256:ba7d6a613b5492bc72eead60f363271677874dcdde48a7ae9701d8d25bb5f852. The current derived-reference fixture and five workspace-link tests also pass as a six-test confirmation in 2.994 seconds. These results do not refresh the current generated-project receipt or close other 1.1 gates.
[x] RETRY-DERIVATION-BINDING-001 — Keep retry provenance out of the planned key
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.10.1 recovery
- Owner: conformance lifecycle receipt projection and outer source-cache protocol
- Direction: Preserve the immutable derivation manifest when bounded candidate repair adds prior rejection evidence to a later coding-agent prompt, while retaining that accepted attempt's exact request identity in provenance.
- Conclusion: A clean project receipt produced all 31 accepted derivations but failed exact lifecycle closure for two retried legacy samples. The outer planner froze each attempt-1 request identity before execution; the receipt builder later reconstructed those two keys from attempt-2 prompts containing rejection feedback. Publication was complete and the stable recipe/plan/tool/model axes were unchanged, so the defect is a derivation-versus-attempt identity conflation, not lost cache state or concurrent manifest mutation.
- Depends on: STANDARD-CACHE-PUBLICATION-001 and outer-owned derivation planning
- Implementation:
- Bind a legacy execution to its unique outer-planned key after validating its stable axes; permit a request-identity difference only with a complete ordered candidate retry chain.
- Match the source-semantics axis exactly so outer-bound Standard members retain their non-null semantics identity while legacy retry members remain null.
- Preserve the accepted attempt's request identity in provenance evidence rather than rewriting it to the planned request.
- Evidence:
- The failing clean run produced 31 planned and 31 published entries; exactly two lifecycle identities diverged, matching the Rust roundtrip and Python service retries, while the rejected Rust tree appeared only in rejection evidence.
- Focused contract and receipt tests prove successful rebinding, exact final-prompt provenance, non-null Standard semantics binding, and fail-closed behavior for incomplete retry evidence or stable-axis drift.
- A cache-backed full project receipt rerun closes all 31 derivations and promotes a current 231-test receipt on the exact trusted driver revision.
- The full local gate passes 3,445 tests with 31 declared skips on
24753f32. - Hosted qualification is complete for the shipped 0.10.1 recovery.
Release-line commit
7a0df668has byte-identical sample-runner and sample-ladder regression files to original13f6124b, including the planned-key retry proof. It is an ancestor ofcc4e81d2; all 15 jobs pass in run 33983417499. Publishedv0.10.1atb0888f7fpasses its complete hosted matrix. This closes the historical retry-binding gate; a fresh 1.1 lifecycle receipt remains part of RELEASE-INTEGRATION-001.
[x] UPDATE-ORIGIN-001 — Normalize equivalent GitHub update origins
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.10.1 recovery
- GitHub issue: #316
- Owner: initialized-project update origin contracts and filesystem update planner
- Direction: Let a project initialized from the HTTPS form of the official GitHub repository update from a reviewed wheel that embeds the equivalent SSH form, without weakening provenance checks for any different host, owner, repository, credential, non-default port, or local/file origin.
- Conclusion: The official 0.10.0 wheel embeds the checkout's SCP-style SSH remote while existing derived projects can record the HTTPS spelling. At diagnosis,
FilesystemProjectUpdateAdapter.plancompared those strings directly after Standard rebind and rejected one repository solely because its transport notation changed. The implemented deterministic comparison is used at the update trust boundary; exact origin records, their content identities and Standard rebind's acknowledged installed-distribution evidence remain unchanged. - Depends on: STANDARD-REBIND-001 and the 0.10.1 versioned recovery
- Implementation:
- Add conservative GitHub SSH/HTTPS repository-coordinate comparison and use it only for the update planner's repository continuity check.
- Preserve exact origin serialization and identity; do not rewrite durable 0.8/0.9 initialization evidence merely to normalize a comparison.
- Evidence:
- The official 0.10.0 wheel's embedded SCP-style origin and an HTTPS-initialized project plan successfully through the real filesystem adapter.
- Different hosts, owners, repositories, HTTP downgrade, SSH users, non-default
ports, and file origins remain distinct; the focused coverage and full local
gate pass on
24753f32. - Exact-head hosted CI passes. Issue #316's terminal validation
records the 73-test update/initialization/rebind batch on release-line
cc4e81d2, including conservative rejection cases. All 15 hosted checks pass on that exact commit in run 33983417499 and on publishedv0.10.1commitb0888f7fin run 34004424520. The repository-equivalence helper is unchanged betweencc4e81d2and current candidate33630a4f; the current cache/update/rebind batch passes 44 tests. Duplicate ORIGIN-SSH-HTTPS-001 shares this completed recovery; no separate normalization of reviewed rebind evidence is implied.
[x] UPSTREAM-ISSUE-FIRST-001 — Require issue-first escalation for reusable upstream discoveries
- Priority: P0
- Release target: 0.10.0
- GitHub issue: #308
- Owner: record-user-directed-work skill and project tracker adapters
- Direction: When a derived project discovers a reusable defect or improvement owned by an ancestor, search and then file or link a sanitized provider-neutral issue in the owning upstream tracker before implementation, preserving reciprocal downstream linkage and all existing authorization boundaries.
- Conclusion: Issue #308 identifies a process authority gap: downstream roadmap capture and direct branch work do not create durable upstream triage. Tracker inspection, duplicate search, sanitized issue drafting, explicit external-write authorization, and resumable unsupported or unauthenticated states belong in the shared work-recording process.
- Depends on: TRACKER-HOST-001
- Implementation:
- Update root and initialized record-user-directed-work skills with issue-first ownership routing, de-duplication, sanitization, reciprocal links, and fail-closed draft handling.
- Provide deterministic GitHub and GitLab tracker command projections and fixtures without embedding downstream-specific or secret-shaped data.
- Evidence:
- GitHub, GitLab, existing-issue, secret-shaped input, unsupported, unauthenticated, and source/template parity tests pass in
test_issue_first_work_skilland project-tracker coverage.
- GitHub, GitLab, existing-issue, secret-shaped input, unsupported, unauthenticated, and source/template parity tests pass in
[x] STANDARD-REBIND-001 — Add a reviewed Standard lifecycle distribution rebind
- Priority: P0
- Release target: 1.1.0
- Previous release target: 0.10.0 (original implementation shipped)
- GitHub issue: #309
- GitHub issue: #376
- Owner: Standard lifecycle binding CLI and installed-distribution adapters
- Direction: Provide an explicit plan/apply operation that advances a project Standard distribution pin to one reviewed non-editable installed Literate AI distribution after an intentional upgrade, without building code or silently changing authority during update.
- Conclusion: Issue #309 is a fail-closed upgrade deadlock, not a reason to weaken distribution identity checking. A compare-and-swap rebind must expose old and proposed identities and origin/version evidence, reject editable or ambiguous installs and drift, atomically change only owned binding fields, and leave prior receipts stale until rebuild.
- Depends on: Standard lifecycle distribution identity and project update contracts
- Next action: Complete: PR #375 landed as main
2f09c295after all 15 hosted checks passed on66fd355e; #376 is closed with linked evidence. Inspection confirms the planner always replaces the configured suite with the installed Standard suite. A non-Standard suite remains project-owned: retain its suite, evidence kinds and test floor, advancing its runner only when it exactly equals the old Standard driver identity. Preserve an independent harness runner unchanged. Revalidate that projection on apply and report only actually changed fields; do not weaken distribution checks. - Implementation:
- Add dry-run and explicitly authorized apply CLI paths using the existing trusted installed-distribution observer and atomic project store.
- Document upgrade, update, reviewed rebind, and rebuild ordering in source and initialized troubleshooting authority.
- Preserve project-owned receipt contracts across rebind and reject reviewed plans that replace them; retain normal Standard-suite upgrade behavior. Four new focused regressions failed against the old implementation and pass after the repair; a public CLI plan/apply fixture also preserves the custom legacy-parity policy. Only installed-distribution observations are mocked in that CLI test; no installed-wheel or live rebuild claim is made.
- Evidence:
- Clean-wheel upgrade, no-op, editable, changed policy, tampered payload, write rollback, receipt staleness, and portable path tests pass in
test_standard_lifecycle_rebind. - Regression tests prove custom independent and Standard-derived runners, custom no-op, exact changed fields, stale/tampered policy refusal, and unchanged Standard-suite upgrades; complete local and hosted gates pass. The 32-test rebind/policy/receipt-CLI suite passes on macOS, including rehashed policy/change-summary rejection and byte-preserving no-op. Reviewed the one-file lifecycle-driver closure change and refreshed its pin/documentation authority. The existing test receipt is unchanged. Fresh full qualification ran 3,811 tests (3,781 passed, 30 skipped, no failures); CI 34594250773 passed every job before PR #375 merged.
- Clean-wheel upgrade, no-op, editable, changed policy, tampered payload, write rollback, receipt staleness, and portable path tests pass in
[x] PORTABLE-MAKE-QUOTING-001 — Teach generated Make language-tool quoting wherever it is enforced
- Priority: P0
- Release target: 0.10.0
- GitHub issue: #310
- Owner: portable application skills and generated-source contract tests
- Direction: Repair the 0.9.0 regression in issue #310 by making every portable application authority that can emit a Makefile explicitly require the exact quoted language-tool expansion accepted by the generated-source validator.
- Conclusion: The validator is correct to protect executable paths containing spaces; the defect is enforcement/guidance drift. Teach the invariant in the narrow common portable skill and relevant language skills, preserve template parity, and add generation-contract coverage so future validators cannot gain untaught requirements.
- Depends on: Generated Makefile validation and portable application skill hierarchy
- Implementation:
- Update the common and per-language portable application skills plus initialized copies with the exact quoted recipe contract.
- Add source/template and validator-to-skill contract tests for every supported language that can emit generated Make recipes.
- Evidence:
- The reported unquoted fixture fails, corrected generated Makefiles pass, source/template parity holds, and every Make-capable portable language skill is covered by
test_make_generation_skill.
- The reported unquoted fixture fails, corrected generated Makefiles pass, source/template parity holds, and every Make-capable portable language skill is covered by
[ ] APP-SETTINGS-001 — Define canonical per-user application settings
- Priority: P1
- Release target: 1.1.0
- Previous release target: 1.0.0
- GitHub issue: #307
- Owner: application configuration capability, host paths, and initialized templates
- Direction: Define issue #307 reusable provider-neutral settings authority for generated applications, with native per-user configuration paths, deterministic CLI and environment precedence, versioned profiles and credential references, secret-safe evidence, and update preservation.
- Conclusion: Application runtime settings are user custody, not repository authority. Reuse the centralized host-path policy while keeping each application namespace separate from Literate AI own configuration, and prefer OS keychain or external secret references over literal credentials.
- Depends on: USER-CONFIG-MIGRATION-001
- Implementation:
- Specify and implement the reusable path, schema, precedence, permission, example, and update contracts across Linux, macOS, and Windows in
literate_ai.adapters.application_settings, generalizinguser_paths.py/user_assets.pyinto a separate per-application namespace (never nested beneathliterate-ai/). - Wire a
litai config app-settingsCLI surface and an OS-keychain writer/reader forrefcredentials; deliberately deferred pending a bounded design for keychain integration across platforms.
- Specify and implement the reusable path, schema, precedence, permission, example, and update contracts across Linux, macOS, and Windows in
- Evidence:
-
tests/critical/test_application_settings.py(27 tests) covers cross-platform path resolution, CLI/env/file/default precedence, malformed JSON, unsupported schema version, application-namespace mismatch, ambiguous/missing credential shape, owner-only permission enforcement for literal credentials, literal-value redaction with reference pointers preserved, named-profile addressing, and unversioned-legacy-to-v1 update preservation.
-
[x] CONVERT-OUTPUT-CUSTODY-001 — Preserve complete host-heavy build output identities without rejecting successful builds
- Priority: P0
- Release target: 0.10.0
- GitHub issue: #311
- Owner: release engineering
- Direction: Ship issue #311 in 0.10.0: retain bounded diagnostic excerpts while computing identities over complete stdout and stderr, and do not turn a zero-exit build into a failure solely because output exceeded the retained excerpt limit.
- Conclusion: The host-heavy conversion baseline currently conflates retained diagnostic size with execution success; custody and observability must be separated from the build result.
- Depends on: RELEASE-CLOSURE-001
- Implementation:
- Integrate and review the focused output-custody commits, preserve complete stream hashes and useful tails, keep nonzero exits and timeouts failing, and bind the behavior into conversion contract tests.
- Evidence:
- Focused tests cover successful oversized output, full-stream identity, retained prefix/tail diagnostics, nonzero exit, and timeout behavior. Exact-candidate 0.10.0 release gates remain release-level evidence.
[x] CI-BYTECODE-CUSTODY-001 — Keep direct pytest workers out of authored authority
- Priority: P0 (0.10.0 exact-candidate CI blocker; complete)
- Release target: 0.10.0
- GitHub issue: #312
- Owner: profiled pytest adapter and CI source-tree custody
- Direction: A direct pytest shard must preserve the same no-source-bytecode invariant as Makefile-driven tests, including every spawned xdist worker.
- Conclusion: The failed Windows shard was not a documentation or Windows-path
defect. The CI adapter bypassed the Makefile's
PYTHONPYCACHEPREFIX, so importing the Google publication helper wrote a.pycinto the declared documentation root and a later canonical validation correctly rejected it as an unreferenced asset. Suppress bytecode at the pytest adapter boundary and propagate that policy through the environment; do not teach documentation validation to ignore contamination. - Depends on: RELEASE-CLOSURE-001
- Implementation:
- Set and restore both the coordinator runtime flag and the child-process environment around the profiled pytest run so in-process callers retain their prior state and xdist workers inherit source-preserving behavior.
- Evidence:
- The publication-import plus canonical-validation sequence fails without the
invariant and passes under one xdist worker after the repair, leaving no
__pycache__beneath the documentation package; focused runner tests also prove environment and runtime state restoration.
- The publication-import plus canonical-validation sequence fails without the
invariant and passes under one xdist worker after the repair, leaving no
[x] INSTALLED-OFFLINE-RELEASE-001 — Isolate offline release proof from live tracker closure
- Priority: P0 (0.10.0 exact-candidate CI blocker; complete)
- Release target: 0.10.0
- GitHub issue: #314
- Owner: installed-project release smoke policy
- Direction: The installed release-state-machine proof must remain offline even though canonical initialized projects now require a live GitHub or GitLab contribution sweep.
- Conclusion: Commit
700a8abcadded continuous contribution closure to the initialized release policy, while the installed smoke continued to use a local filesystem bare remote and disabled only its publication provider. Tracker classification correctly rejected that remote. Remove contribution closure only from the deliberately offline fixture; retain it in canonical project policy and retain fail-closed tracker classification for real releases. - Depends on: RELEASE-CLOSURE-001
- Implementation:
- Remove the inherited contribution policy when preparing the smoke project's offline release policy without changing the source project template.
- Evidence:
- The pre-fix installed flow reproduces
release.contributions_tracker_unsupportedon GitHub Ubuntu/Python 3.11 and local macOS/Python 3.13 after installation and local push; the repaired exact flow completes plan, prepare, publish, remote line/tag verification, and idempotent publication retry. Exact-candidate hosted matrix evidence remains a release-level gate.
- The pre-fix installed flow reproduces
[x] TRACKER-SWEEP-001 — Close completed tracker residue and delete superseded remotes
- Priority: P1 (operator-authorized tracker and branch residue)
- Owner: GitHub tracker, origin remotes, and docs/roadmap/active-work.md landing queue
- Direction: Resolve every open pull request, issue, and unmerged branch rather than leaving residue beside the 0.10.0 adoption line.
- Conclusion: Open PRs are already empty. Delete two closed-PR remotes whose unique commits were superseded on main. Close GitHub #83-#86 because CI-SHARD-001 and CI-IMPACT-001 are complete. Keep release/0.5.x through release/0.9.x. Leave remaining open issues that still have unchecked queue items.
- Depends on: QUEUE-HYGIENE-001
- Next action: Done. Open PRs were already empty. Superseded remotes deleted. #83–#86 closed. Remaining open issues stay mapped to unchecked queue items.
- Implementation:
- Delete origin/experimental/jordanh/lfs-null-manifest after confirming PR #259 closed as superseded
- Delete origin/fix/convert-env-bound-prereq-closure after confirming PR #197 closed as do-not-revive
- Comment and close GitHub issues #83 #84 #85 #86 citing completed CI-SHARD-001 and CI-IMPACT-001
- Leave remaining open issues mapped to unchecked queue items; do not merge release branches into main
- Evidence:
-
gh pr list --state openreturned an empty list on 2026-09-04 -
git fetch --pruneleaves only origin/main and origin/release/0.5.x through origin/release/0.9.x - Closed #83–#86 as completed with comments linking
16036216L6547–L6605 and L6607–L6664 - Remaining open issues: #307 APP-SETTINGS-001, #301 INIT-CONVERT-FORCE-001, #295/#296 OBSERVE-HTML-001, #286 WORKER-GIT-CRED-001, #280 LIBRARY-ARTIFACT-001, #279 SUBMODULE-ORCH-001, #251 GOLDEN-PATH-001/RELEASE-017; 2026-09-05 additions #320 CACHE-EMPTY-RO-001, #316 ORIGIN-SSH-HTTPS-001, #315 CONVERT-NESTED-GIT-001, #317 STANDARD-CACHE-ENTRY-001, #318 LIFECYCLE-MUTATION-LOCK-001, #319 TESTED-PIN-PLAN-001
-
[ ] ADOPT-CLI-001 — Make litai adopt the primary brownfield entry point
- Priority: P1 (1.0 operator vocabulary)
- Release target: 1.1.0
- Previous release target: 1.0.0
- Owner: CLI compatibility surface, documentation, and canonical skills
- Direction: Expose litai adopt as the primary documented synonym for litai init --convert across operator documentation and skills.
- Conclusion: In 1.0, route litai adopt through the existing conversion parser and mutator; preserve litai init --convert for backward compatibility while emitting deprecation guidance, without creating a second conversion implementation.
- Depends on: ADOPTION-001
- Implementation:
- Add litai adopt with argument and result parity to litai init --convert.
- Mark litai init --convert deprecated without removing or behaviorally diverging it.
- Make litai adopt the primary brownfield spelling in every maintained user document and canonical skill.
- Evidence:
- Public CLI tests prove synonym parity and non-breaking legacy behavior.
- Documentation and skill validation finds no primary-path use of litai init --convert outside compatibility and migration notes.
[x] TESTED-PIN-PLAN-001 — Bind durable tested-tag reuse to the test plan
- Priority: P1
- Release target: 1.0.0
- GitHub issue: #319
- Owner: pin dispatch, project test receipts, and release-gate scheduling
- Direction: A durable passing receipt may skip work only when it attests both the same content pin and the same current ordered test or gate plan.
- Conclusion: Repair markers now preserve and validate their global gate prefix, but tested-tag lookup is keyed only by content-pin identity. A synthetic same-pin receipt can therefore skip a newly inserted gate whose plan changed without changing that identity. Preserve reusable content identities and add a separate deterministic suite- or plan-compatibility binding instead of mixing orchestration names into artifact hashes.
- Depends on: CACHE-007 pin dispatch and project test receipt authority
- Implementation:
- Define a canonical plan identity for each receipt-backed pipeline and require it
during tested-tag lookup (
pin_plan_identityinsrc/literate_ai/application/pinned_test_dispatch.py). - Migrate or invalidate older receipts explicitly; never interpret an unbound
receipt as attesting a newly changed plan (
MemoryTestedTagStore's legacy constructor path now fails closed until re-recorded throughrecord_tested).
- Define a canonical plan identity for each receipt-backed pipeline and require it
during tested-tag lookup (
- Evidence:
- Same-content/same-plan receipts still skip without opening declared inputs.
- Inserting, deleting, or reordering a gate forces evaluation even when the
content-pin identity is unchanged; cross-pin and legacy-receipt cases fail closed.
(
tests/critical/test_pinned_test_dispatch.py:test_inserted_deleted_or_reordered_gate_forces_evaluation,test_legacy_unbound_receipt_fails_closed,test_cross_pin_receipt_never_matches_a_different_pin.)
[x] STANDARD-CACHE-OVERRIDE-001 — Align Standard source-cache selection with CLI
- Priority: P1
- Release target: 1.0.0
- GitHub issue: #317
- Owner: Standard rebuild CLI, accepted source-cache custody, and graph planning
- Direction: Standard rebuild must either honor its advertised accepted
--source-cache-entryafter exact identity and provenance validation or expose an equally deterministic supported selection path and stop advertising the rejected option. - Conclusion: Duplicate filing of STANDARD-CACHE-ENTRY-001; closed together. Chose
the bounded fix rather than the graph-level accepted-cache selection contract:
litai rebuild --help,litai help profile, anddocs/user/configuration-and-cli.mdnow say--source-cache-entryand--source-cache-rootare supported for an external lifecycle driver only, and the Standard rejection error names--from-accepted-sourceas the supported deterministic-reuse equivalent. Ordinary Standard rebuild stays BUILD_DIR-backed; no new graph-level cache contract was built. - Depends on: Standard source-cache admission and dependency-graph rebuild planning
- Implementation:
- Stop advertising an unsupported per-command override for Standard rebuild and
point operators at the supported
--from-accepted-sourcereuse contract instead of building a new graph-level accepted-cache selection contract.
- Stop advertising an unsupported per-command override for Standard rebuild and
point operators at the supported
- Evidence:
-
tests/e2e/test_cli_rebuild.py::RebuildCliTests::test_standard_driver_rejects_source_cache_entry_and_names_the_alternativeand::test_standard_driver_rejects_source_cache_root_and_names_the_alternativeprove the Standard rejection message names--from-accepted-source. -
tests/smoke/test_cli_help.py::CliHelpTests::test_rebuild_help_scopes_source_cache_overrides_to_the_external_driverproveslitai rebuild --helpscopes both flags to the external driver.
-
[x] PROJECT-LIFECYCLE-LOCK-001 — Serialize project-scoped lifecycle mutation
- Priority: P1
- Release target: 1.0.0
- GitHub issue: #318
- Owner: Standard lifecycle mutation, checkpoint publication, and receipt updates
- Direction: Reject or queue a second project-scoped mutating lifecycle before either expensive model pipeline starts, while preserving independent read-only work.
- Conclusion: Concurrent rebuilds own separate disposable runtimes but race shared project checkpoint and finalization state; one later fails the exact-predecessor contract after wasting work. The failure is typed and the 0.10.1 release workflow is serialized, so this is a 1.0 lifecycle/concurrency contract rather than a patch-cut blocker.
- Depends on: Standard rebuild checkpoints and project test-receipt publication
- Implementation:
- Add a portable project lifecycle lock covering rebuild, shared cache-index or
checkpoint publication, and
--update-receipt, with owner diagnostics and failure-safe release.
- Add a portable project lifecycle lock covering rebuild, shared cache-index or
checkpoint publication, and
- Evidence:
- Concurrent mutation is rejected or queued before model execution on Linux,
macOS, and Windows; crash recovery is bounded; read-only commands remain available.
project_lifecycle_lock(src/literate_ai/adapters/lifecycle_lock.py) reuses the existing portablefcntl.flock/msvcrt.lockingprimitive fromliterate_ai._cache_lock, so a crashed holder's lock releases with the process with no PID-file bookkeeping.tests/critical/test_lifecycle_lock.pycovers a deterministic barrier-synchronized concurrent rejection with owner diagnostics, success/exception release, a real crashed-process (multiprocessing,os._exit) non-stale-lock check, and cross-project independence.
- Concurrent mutation is rejected or queued before model execution on Linux,
macOS, and Windows; crash recovery is bounded; read-only commands remain available.
[x] REPOSITORY-LINEAGE-CACHE-LOCK-001 — Serialize mutation per repository cache entry
- Priority: P1
- Release target: 1.1.0
- Previous release target: 1.0.0
- GitHub issue: #324
- Owner: repository-lineage snapshot provider and shared object-directory custody
- Direction: Make repository-lineage cache mutation process-safe per derived bare cache entry without serializing independent repositories, and retain typed, non-secret diagnostics for failed acquisition, fetch, and recovery.
- Conclusion: Two test processes launched manually from one checkout shared the
same
_build/repository-lineageobject root and attempted an uncoordinated fetch into the same bare cache entry. One failed with Git's competing-process lock diagnostic; the exact test passed in 5.5 seconds with an isolated object root and left no stale lock. Supported 0.10.1 release validation is serialized and hosted CI isolates object roots, so this induced race does not block the patch recovery, but the shared-cache contract must be explicit for 1.1. The portable per-entry advisory lock landed ine56d5c0c; issue #324 is closed. Its initial same-entry and independent-entry probes used threads, and abrupt-owner recovery was POSIX-only. The separate-process follow-up below now supplies the missing three-platform proof. - Depends on: repository-lineage snapshot resolution and portable lock ownership
- Next action: Complete. The separate-process follow-up
1dcfa093is an ancestor of the qualified33630a4fintegration candidate, landed ascf71a4fc. Preserve these cross-platform regressions; this closure does not qualify the separate repository-refresh transaction or the current release receipt. - Implementation:
- Add a portable per-entry lock around bare-cache creation and fetch, with
bounded owner diagnostics and failure-safe release or stale-owner recovery.
Implemented in
e56d5c0c; the existing 23 lineage/cache-lock tests pass on macOS atd0e1bc5c, including real POSIX abrupt-owner recovery. - Keep unrelated repository cache entries concurrent and read-only snapshot consumption available whenever it does not observe a partial mutation. Separate-process fetch rendezvous and an immutable old-revision read held across a second process's new-revision fetch both pass on macOS.
- Add separate-process serialization/independence/read-availability tests,
portable abrupt-owner termination, and credential-safe acquisition errors.
The 27 lineage/cache-lock tests pass locally; lock bypass and global-lock
mutations each fail their intended regression. The abrupt-owner test
now uses
Popen.kill()on both POSIX and Windows instead of skipping Windows.
- Add a portable per-entry lock around bare-cache creation and fetch, with
bounded owner diagnostics and failure-safe release or stale-owner recovery.
Implemented in
- Evidence:
- A deterministic same-URL/same-object-root concurrent-fetch regression never exposes Git lock races on Linux, macOS, or Windows.
- Different repository identities remain concurrent; interrupted owners do not
leave an unrecoverable lock; failure diagnostics identify the cache entry
without exposing repository credentials.
Hosted qualification: Exact
33630a4fpassed all 15 jobs in run 34664827991. Linux/macOS Python 3.11/3.14 each run the complete 4,204-test discovery. Windows Python 3.12's three complementary shards cover that same 4,204 tests: 1,675 passed / 25 skipped; 526 / 24; and 1,901 / 53. The five separate-process serialization, independent-fetch, concurrent-read, abrupt-owner and credential-safe diagnostic regressions have no platform skip. The implementation/test bytes remain unchanged since this qualified candidate; all 22 lineage-adapter tests also pass locally in 18.555 seconds. Issue #324's terminal evidence annotation is posted and read back; the issue remains closed.
[x] HOST-SELF-UPDATE-001 — Prefix-installed litai self-updates from GitHub Releases
- Priority: P1 (0.11.0 host-install; not a 0.10.0 backport)
- Release target: 0.11.0
- Owner: prefix installer, stable launcher, CLI dispatch, and host-install manifest
- Owning ADR: ADR 0037
- Detailed roadmap: Prefix-installed CLI self-update
- Direction: The prefix-installed litai command should detect a newer GitHub Release, update that same prefix, remember the original argv, and re-invoke itself after the update.
- Conclusion: Only enrolled make-install prefixes self-update from NVIDIA-dev/literate-ai GitHub Releases per ADR 0037: background check, apply on the next invocation, re-exec the same argv, fail open. litai update stays project-file reconciliation. Checkouts, CI, and @1 manifests stay inert.
- Depends on: HOST-INSTALL-SBOM-001, HOST-UNINSTALL-001
- Next action: Complete. Prefix-installed GitHub self-update is enrolled by
make install; remaining 0.11.0/1.0 queue items are separate. - Implementation:
- Bump host-install manifest to @2 with self_update and export LITAI_HOST_INSTALL plus LITAI_PREFIX from both launchers
- Detect enrollment, opt-out, CI, evidence-run, and re-exec guards with no network on inert paths
- Query GitHub latest non-prerelease wheel, throttle 24h on success and 15m on failure, stage under share/literate-ai/self-update
- On the next enrolled invocation, lock non-blocking, pip-install the staged wheel locally, refresh launcher and manifest, print old to new on stderr, re-exec original argv
- Fail open on network, pip, lock, and timeout; never downgrade; never wait on GitHub in the foreground check
- Uninstall accepts @2 and removes the self-update staging directory; install-check and test prefixes set LITAI_NO_SELF_UPDATE=1
- Document standing prefix authorization vs litai update; add Unreleased changelog
- Evidence:
- Unit tests cover enrollment gates, opt-out, CI skip, no-downgrade, fixture release selection, cache throttle, staging without venv mutation, apply-then-re-exec argv, recursion guard, fail-open, and uninstall of @2 plus staging
- make python-check passes the new tests (3444 tests, 32 skipped, 2026-09-05 worktree
docs/adr-0036-prefix-cli-self-update) -
make install-checkon clean03175d8d: isolated smokeok: true; drivers setLITAI_NO_SELF_UPDATE=1; the gate log has no GitHub Releases API contact - docs/user/installation.md states make install authorizes later GitHub self-update of that prefix and distinguishes litai update
- CHANGELOG.md Unreleased names the operator-visible behavior and ADR 0037
[x] CACHE-EMPTY-RO-001 — Treat empty Git-unrepresentable committed caches as unavailable
- Priority: P0 (0.10.1 recovery)
- Release target: 1.1.0
- Previous release target: 0.10.1
- GitHub issue: #320
- Owner: FileSystemSourceCache and declared source-cache targets
- Direction: Downstream v0.10.0 test/rebuild fails source-cache.path-unsafe on a format-only empty generated/committed-source-cache whose empty descendants Git cannot track.
- Conclusion: Treat the exact empty read-only representation as an unavailable cache without mutating it; fail closed on partial nonempty layouts; name the rejected path; keep writable standard-local caches unchanged.
- Depends on: none
- Next action: Complete. Reconciled with COMMITTED-CACHE-EMPTY-001's canonical implementation and exact 0.10.1 recovery evidence; do not reimplement the shipped fix or use this closure as a new 1.1 live acceptance claim.
- Implementation:
- Open read-only committed caches without requiring Git-unrepresentable empty descendant directories, and include the rejected path in path-unsafe diagnostics.
- Evidence:
- Format-only empty cache, partial-layout rejection, nonempty cache without empty intelligence dirs, and Standard declared-target composition tests pass.
COMMITTED-CACHE-EMPTY-001 records the canonical fix, downstream reproduction,
exact release-line and published-tag hosted runs. The current 44-test
cache/update/rebind batch passes at
33630a4f; issue #320 is already closed.
- Format-only empty cache, partial-layout rejection, nonempty cache without empty intelligence dirs, and Standard declared-target composition tests pass.
COMMITTED-CACHE-EMPTY-001 records the canonical fix, downstream reproduction,
exact release-line and published-tag hosted runs. The current 44-test
cache/update/rebind batch passes at
[x] ORIGIN-SSH-HTTPS-001 — Treat equivalent GitHub SSH and HTTPS origins as the same update source
- Priority: P0 (0.10.1 recovery)
- Release target: 1.1.0
- Previous release target: 0.10.1
- GitHub issue: #316
- Owner: update origin comparison and Standard lifecycle rebind
- Direction: A derived project initialized from GitHub HTTPS cannot litai update after rebind against the official v0.10.0 wheel whose embedded origin is the SSH spelling.
- Conclusion: Use one conservative repository-equivalence rule: GitHub SSH and HTTPS forms of the same owner/repo compare equal; different hosts, owners, repositories, and local/file origins remain distinct.
- Depends on: none
- Next action: Complete. Reconciled with UPDATE-ORIGIN-001 and the shipped 0.10.1 recovery. Repository continuity uses conservative transport equivalence; rebind still requires exact acknowledged installed-distribution evidence.
- Implementation:
- Normalize equivalent GitHub SSH and HTTPS origins for update after reviewed Standard rebind, without accepting unrelated remotes or normalizing away the exact origin/distribution identities bound by the rebind plan.
- Evidence:
- HTTPS-initialized projects update against the SSH-spelled v0.10 wheel origin; distinct hosts or repositories still fail closed.
UPDATE-ORIGIN-001 records the exact 73-test release-line batch and both
successful 15-check hosted runs. The current 44-test cache/update/rebind
batch passes at
33630a4f; issue #316 is already closed.
- HTTPS-initialized projects update against the SSH-spelled v0.10 wheel origin; distinct hosts or repositories still fail closed.
UPDATE-ORIGIN-001 records the exact 73-test release-line batch and both
successful 15-check hosted runs. The current 44-test cache/update/rebind
batch passes at
[ ] CONVERT-NESTED-GIT-001 — Expose deterministic Git identity to nested convert/linbuild harnesses
- Priority: P1 (1.0 operator adoption Phase 1b)
- Release target: 1.1.0
- Previous release target: 1.0.0
- GitHub issue: #315
- Owner: conversion disposable baseline and nested linbuild identity
- Direction: Nested Phase 1b linbuild cannot resolve Git identity from a disposable legacy root and may mount the outer checkout instead of the harness phase root.
- Conclusion: Framework-owned deterministic Git context plus an explicit CI_PROJECT_DIR/OMNI_REPO_ROOT boundary must live in each disposable harness root; do not copy host credentials or mutable Git state.
- Depends on: none
- Next action: Qualify native linbuild 3.6.0 with both project-directory
variables bound to the phase root, after explicit native-execution authority.
Fresh full, installed and complete hosted qualification passed at
692041a1and landed through #388 as recorded below; do not attribute it to later edits. Commit03a1830calready creates the local identity and projects both directories; issue #315 is closed, but its available terminal comments do not establish the remaining native nested-container acceptance. Do not infer that proof from the closed tracker state. Boundary repair locally verified:_sanitized_git_environmentpreviously copied ambient Git selector/configuration variables before overriding a subset, and commands separately copied the entire ambient environment. Both paths now use the same explicit disposable Git policy, excluding inheritedGIT_*controls while preserving non-Git toolchain environment and the caller's own environment. Regressions must cover policy projection and a real local command without invoking a remote or credential helper. - Implementation:
- Give each disposable convert/linbuild phase root a sanitized Git identity and nested-container project-dir contract without leaking host Git credentials.
- Exclude ambient Git selectors/configuration from both identity setup and phase commands; keep the framework identity and explicit phase-root values.
- Evidence:
- Nested linbuild selects the phase root, produces a valid Git revision, and does not mount the outer checkout.
- Local environment-projection and harness regressions pass, preserving the caller's environment and unrelated toolchain settings. Native linbuild acceptance remains separate from these local fixtures. Two regressions first failed against the unchanged implementation; both pass after repair, and the harness inventory, initialization, retained receipt and retained-scope batch passes 143 tests in 232.678 seconds. The real command fixture runs local Python with benign control values; it does not invoke any remote or credential helper. Diagnostics report only the named controls, never the complete ambient environment.
- Fresh full Python, installed-wheel/isolated-install and the complete hosted
matrix pass on the follow-up's exact integration revision. The earlier
33630a4fresults do not qualify this change. Local qualification at692041a171acb7d58572f67a69a634473fba0cd9now passes: 4,206 tests run, 30 skipped, zero failures in 2,337.727 seconds, with an absent-at-launch checkpoint removed on success. Outer evidence run20260912T015402Z-7df158has terminal stderr identitysha256:aea1c7ededfc897df991433780e0eb509eaa7450384d09a4d0c2ce9a8340a6f0. Wheel, isolated install, forced offline installed E2E and exact-wheel root-command proof also pass. Retained wheel (2,508,343 bytes):sha256:e4201c52885fd4390a6c5aa2f75c1e087f80e8203dbf95c707ae7e9c344ebc08. All 15 hosted checks subsequently passed on this exact head in CI 34668495664. PR #388 landed asad92a65522ac6053c9391b3b2a7f1ef1f938c47b; its tree is identical to692041a1. This closes the integration evidence obligation, not native linbuild acceptance or the parent work item.
[x] STANDARD-CACHE-ENTRY-001 — Honor advertised Standard rebuild --source-cache-entry or stop advertising it
- Priority: P1 (1.0)
- Release target: 1.0.0
- GitHub issue: #317
- Owner: Standard rebuild cache custody
- Direction: litai rebuild --help advertises --source-cache-entry, but Standard rebuild rejects it before execution so accepted dependency source cannot be reused across plan identities.
- Conclusion: Chose the "stop advertising it" branch rather than the
graph-level accepted-cache selection contract: honoring the flag for Standard
would require designing per-root/per-dependency/graph-map accepted-entry
selection across the whole dependency graph, which is out of scope for a
bounded 1.0 P1 patch.
litai rebuild --help/litai help profilenow scope--source-cache-entryand--source-cache-rootto the external lifecycle driver, the Standard rejection error names--from-accepted-sourceas the supported deterministic-reuse equivalent, anddocs/user/configuration-and-cli.mddocuments the contract. Ordinary Standard rebuild stays BUILD_DIR-backed; duplicate STANDARD-CACHE-OVERRIDE-001 closed alongside this item. - Depends on: none
- Next action: Complete.
- Implementation:
- Stop advertising the rejected Standard override and document the
supported
--from-accepted-sourcereuse contract instead of building a new graph-level accepted-cache selection contract.
- Stop advertising the rejected Standard override and document the
supported
- Evidence:
- Standard help no longer advertises an unsupported override without
qualification; the rejection message and docs name the supported
alternative. See
tests/e2e/test_cli_rebuild.pyandtests/smoke/test_cli_help.pyadditions covering this behavior.
- Standard help no longer advertises an unsupported override without
qualification; the rejection message and docs name the supported
alternative. See
[x] LIFECYCLE-MUTATION-LOCK-001 — Serialize concurrent Standard lifecycle mutations in one project
- Priority: P1 (1.0)
- Release target: 1.0.0
- GitHub issue: #318
- Owner: project-scoped lifecycle mutation and test checkpoint publication
- Direction: Two concurrent Standard rebuilds can both pass planning then race shared checkpoint state, so one fails with a predecessor-contract error after expensive generation.
- Conclusion: A portable project-scoped lifecycle lock must reject or queue the second mutation before either model stage; read-only commands stay available.
- Depends on: none
- Next action: Implemented; duplicate of PROJECT-LIFECYCLE-LOCK-001 (#318) above.
- Implementation:
- Add a project-scoped lifecycle mutation lock covering rebuild, --update-receipt, and shared checkpoint or cache-index publication.
- Evidence:
- A second concurrent rebuild fails closed with a typed diagnostic naming the active lifecycle; independent read-only commands still succeed. See PROJECT-LIFECYCLE-LOCK-001 evidence above.
[x] TESTED-PIN-PLAN-001 — Bind durable tested-pin receipts to the current test plan
- Priority: P1 (1.0)
- Release target: 1.0.0
- GitHub issue: #319
- Owner: test receipt reuse and ordered-gate identity
- Direction: A durable passing receipt is looked up by content-pin identity alone, so an ordered-gate change can skip newly inserted work without changing that pin.
- Conclusion: Preserve reusable content identities while binding receipt reuse to a separate canonical suite or ordered-plan identity; older unbound receipts migrate explicitly or fail closed.
- Depends on: none
- Next action: Deferred from 0.10.1; current 0.10.1 receipts reset every worker before execution.
- Implementation:
- Bind receipt-backed skips to a canonical test-plan identity and fail closed on inserted, deleted, or reordered gates and legacy unbound receipts.
- Evidence:
- Same-pin same-plan skips; inserted, deleted, and reordered gates evaluate; cross-pin and legacy receipts fail closed.
[ ] MAC-CONTRACT-002 — Make the framework's own harness a projectable lifecycle selection
Release target: 1.1.0
Priority: P3 (framework self-description; not a MAC onboarding blocker — see Conclusion)
Owner: MAC repository contract projection; framework self-description
Direction:
litai project mac-contractcan project a MAC contract for any Component this project builds, but not for the Literate AI Python harness itself. Every one of the 163 resolved BOMs under_builddescribes a sample Component.Conclusion (corrected 2026-09-08): an earlier revision of this item claimed MAC onboarding was blocked on this. That was wrong, and the error is worth recording. MAC's
register_projectis explicit that "the contract is the onboarding task's output, not a precondition":mac project register URLmints an onboarding task carryingorigin.onboarding, which is exempt from the repository-contract guard (mac/services.py:6024). The guard only rejects the half-state produced by setting a project'srepository_urlwithout registering a repository — which is what an incorrect manualproject create+project update --registrationsequence produces. Two distinct questions were conflated: (a) what a MAC runner needs to check out this repository and run its own gates — answerable from the declaredmake bootstrap/make python-checkentrypoints, and the question MAC onboarding actually asks; and (b) what a Literate AI project's build closure requires, which is whatskills/agent/write-mac-project-contract/SKILL.mdgoverns and which does need a post-build BOM. Only (b) is this item. Applying (b)'s CycloneDX-only rule to (a) caused a fleet onboarding attempt to return an investigation with no contract file.Depends on: none
Implementation:
- Model the framework's own Python distribution as a selection whose lifecycle emits a
post-build resolved CycloneDX BOM, so
litai project mac-contractcan describe the harness rather than a sample - Confirm the projection's
required_commandsnames only what the harness needs; a darwinplayback-controllerBOM yieldsdyld_info, git, litai, make, python3.14, xcrun, which is that sample's native closure and would break any declaredlinuxrunner
- Model the framework's own Python distribution as a selection whose lifecycle emits a
post-build resolved CycloneDX BOM, so
Evidence:
- The projected
required_commandscontains no sample-specific native toolchain entries - Re-running the projection produces byte-identical
.mac/project.yamland.mac/project.contract.json
- The projected
[x] CANONICAL-JSON-001 — Document canonical JSON numeric constraints for generated test manifests
- Priority: P1 (1.1 generation correctness)
- Release target: 1.1.0
- GitHub issue: #361
- Owner: portable-application-implementation generation skill and initialized-project mirror
- Direction: Coding CLIs are required to emit source/tests/manifest.json as canonical JSON, but the generation skill omits canonical-JSON-v1’s prohibition on floating-point values, so plausible fractional fixtures fail only after generation.
- Conclusion: Teach the no-floating-point rule where the manifest is authored and require decimal strings or explicitly scaled integers for fractional domain values. Preserve the validator and wire contract; do not weaken canonical identity semantics.
- Depends on: none
- Next action: Complete: PR #375 landed as main
2f09c295; #361 is closed with the exact-head CI and regression evidence linked. - Implementation:
- Add the no-floating-point constraint and permitted representations beside the generated-test manifest contract.
- Keep the checked-in catalog skill and initialized-project template byte-identical.
- Add focused regression coverage that fails if either copy omits the rule or drifts.
- Evidence:
- Both
test_portable_application_skillcases pass against the canonicalportable-application-implementationskill and its exact template mirror. They require the nested no-float rule, decimal-string or specification-scaled integer representation, and preservation of fractional semantics. - The full PR skill admission checks pass for all 19 impacted skills and six
non-model checks each.
litai verifypasses authority, skips undeclared locks/provider-none intelligence, and reports the existing stale receipt. - Fresh complete Python qualification of
66fd355epasses: 3,811 run, 3,781 passed, 30 skipped, zero failures. A later focused skill/rebind/refresh batch also passes all 27 tests; neither substitutes for hosted qualification. - All 15 jobs in CI 34594250773
passed on
66fd355e; PR #375 landed as main2f09c295before tracker closure.
- Both
[ ] SDLC-AUDIT-001 — Execute the evidence-graded SDLC audit for 1.1
- Release target: 1.1.0
- Detailed roadmap: 1.1 SDLC audit delivery
- Priority: P0
- Owner: project requirements and release engineering
- Direction: Grade architecture, onboarding, software intelligence and research potential; execute every key finding before 1.1 release preparation.
- Conclusion: Release target 1.1.0. Preserve evidence and existing 1.1 commitments; sequence authority, onboarding, artifact custody, plugins, MCP, skill maintenance, research measurement and qualification.
- Depends on: none
- Implementation:
- Publish evidence-based grading with confidence and measured-versus-potential distinction in
1.1-sdlc-audit.md. - Maintain an ordered 1.1 delivery matrix including existing open issues and reviews.
- Complete child finding acceptance before preparing the release.
- Publish evidence-based grading with confidence and measured-versus-potential distinction in
- Evidence:
- Every finding maps to an owned 1.1 item with dependencies and acceptance in the delivery matrix.
- All required local and remote release gates pass on the selected clean revision.
[x] AUD-REL-001 — Repair documentation links and select the 1.1 release target
- Release target: 1.1.0
- Priority: P0
- Owner: project documentation and repository policy
- Direction: Repair current validation and release-state failures.
- Conclusion: Release target 1.1.0. Fix the stale PLUGIN-001 heading link, not an invented line-number pin; use release state set for 1.1.
- Depends on: none
- Implementation:
- Repair documentation anchors and refresh declared authority using supported helpers.
- Set pre-release target to 1.1;
release stateand release guidance report the explicit target.
- Evidence:
-
litai verify .authority passes; release guidance selects pre-release 1.1. The separately stale test receipt is not hidden. - Self-describing project regression passes; full release qualification remains SDLC-AUDIT-001.
-
[x] AUD-UX-001 — Keep adoption next actions bound to the selected project
- Release target: 1.1.0
- Priority: P1
- Owner: operator onboarding CLI
- Direction: Make the first useful adoption steps reliable from any caller directory.
- Conclusion: Release target 1.1.0. Render argv with resolved paths and shell-safe display; retain plan/apply semantics.
- Depends on: AUD-REL-001
- Implementation:
- Bind every adopted-project command to the target root.
- Explain host readiness separately from authority verification.
- Evidence:
- Foreign-cwd and whitespace-path fixtures target only the adopted project (
tests.smoke.test_operator_adoption). - Create/adopt public CLI tests pass in the 165-test focused lifecycle batch.
- Foreign-cwd and whitespace-path fixtures target only the adopted project (
[ ] AUD-DOC-001 — Refresh operator onboarding and 1.1 product documentation
- Release target: 1.1.0
- Priority: P1
- Owner: README user guide and PROJECT.md
- Direction: Remove stale release guidance and make onboarding coherent.
- Conclusion: Release target 1.1.0. Distinguish the latest published installer from the development candidate; state observed readiness and provider support.
- Depends on: AUD-UX-001
- Implementation:
- Use the canonical onboard front door throughout first-run documentation.
- Refresh PROJECT.md current work and release claims.
- Evidence:
- Documentation graph and stranger-path checks pass.
[ ] AUD-REL-002 — Publish the exact artifacts qualified by release checking
- Release target: 1.1.0
- Priority: P0
- Owner: release preparation publication and wheel qualification
- Direction: Bind tested wheel and plugin bytes to prepared release evidence.
- Conclusion: Release target 1.1.0. Build and qualify once; retain hashes, reject substitution and verify remote bytes.
- Depends on: AUD-REL-001
- Implementation:
- Stage and hash wheel and plugin artifacts before release check completes.
- Publish only retained artifacts and compare downloaded provider asset digests.
- Preserve retry and old-record validation semantics.
- Evidence:
- Tampered, missing and substituted artifacts fail closed.
- Installed smoke uses the staged wheel; publication retries preserve digests.
[ ] AUD-SEC-001 — Make 1.1 execution containment claims and controls explicit
- Release target: 1.1.0
- Priority: P0
- Owner: execution policy and user security guidance
- Direction: Resolve the production containment readiness finding for 1.1.
- Conclusion: Release target 1.1.0. Existing threat model permits explicitly authorized local development; do not claim production isolation until a qualified backend and authenticated evidence exist.
- Depends on: AUD-REL-001
- Implementation:
- Bind 1.1 supported execution claims to implemented isolation capabilities.
- Expose the actual execution authority before generated-code execution.
- Record production backend requirements with explicit unsupported results.
- Evidence:
- Unavailable production isolation fails closed.
- Host execution remains explicit; onboarding and release docs state actual guarantees.
[x] AUD-MCP-001 — Constrain and describe MCP mutations
- Release target: 1.1.0
- Priority: P1
- Owner: MCP facade
- Direction: Make tool risks visible and prevent accidental cross-project dispatch.
- Conclusion: Release target 1.1.0. Add risk annotations, root confinement and mutation acknowledgement; document same-user shell bypass.
- Depends on: AUD-UX-001
- Next action: Focused boundary repair complete. Broad release qualification is tracked by SDLC-AUDIT-001; host-code and same-user-shell limits remain explicit.
- Implementation:
- Add standard annotations and explicit mutation acknowledgements; focused MCP tests pass.
- Resolve tool paths against a configured session root and reject escapes, including ancestor-project discovery.
- Repair verify argv and failure status propagation; reject option injection through tool data.
- Evidence:
- Foreign-root symlinks, traversal, ancestor discovery and option injection fail before dispatch (
tests.smoke.test_mcp_server). - Read-only calls work; unacknowledged mutations fail (9 focused MCP tests on macOS).
- Foreign-root symlinks, traversal, ancestor discovery and option injection fail before dispatch (
[ ] AUD-STATE-001 — Reconcile the active queue and expose release scope
- Release target: 1.1.0
- Priority: P1
- Owner: roadmap and project requirements
- Direction: Make current release work distinguishable from historical records.
- Conclusion: Release target 1.1.0. Preserve history; use a small current-release index and explicit remaining acceptance rather than blanket closures.
- Depends on: AUD-REL-001
- Next action: Reconcile forge dispositions and historical #251 separately; do not close its historical migration obligation with a new-version smoke. Four stale cache/origin entries are now reconciled against already-published 0.10.1 implementation, exact hosted runs and terminal issue evidence: COMMITTED-CACHE-EMPTY-001, CACHE-EMPTY-RO-001, UPDATE-ORIGIN-001 and ORIGIN-SSH-HTTPS-001. This does not close any other historical or live qualification obligation; the wider queue-classification task remains open.
- Implementation:
- Replace obsolete release banners and reconcile current tracker links.
- Classify stale open items against implementation and outstanding evidence.
- Provide a deterministic current-release queue summary (
scripts/summarize_release_roadmap.py, two passing tests); it reports unchecked acceptance and refuses false closure.
- Evidence:
- All 17 open issues and 27 open reviews have queue ownership at the 2026-09-16 UTC snapshot; NPM-PACKAGE-001 fills #411's missing owner and the current landing queue maps each review. Later arrivals require a new sweep.
- A completed implementation cannot imply an unrun acceptance gate passed.
[x] AUD-SKILL-001 — Plan and verify skill dependency and template updates
- Release target: 1.1.0
- Priority: P1
- Owner: skill authoring helpers
- Direction: Reduce manual fan-out for normative skill edits.
- Conclusion: Release target 1.1.0. Extend existing deterministic normalization tooling with targeted plan/check/apply and declared mirror handling; preserve semantic version judgment.
- Depends on: AUD-REL-001
- Implementation:
- Add non-writing check/plan with changed paths and identities (
scripts/normalize_skill_authoring.py). - Synchronize only explicitly declared mirrors and propagate dependency pins.
- Reject stale plans, including changed non-output inputs, and retain preexisting divergent templates.
- Add non-writing check/plan with changed paths and identities (
- Evidence:
- Parent-change fixture identifies dependent drift (four
tests.unit.test_skill_update_plantests pass). - Plan never writes; apply is revalidated and idempotent. Repository
--checkreports no drift.
- Parent-change fixture identifies dependent drift (four
[x] AUD-CI-001 — Pin third-party Actions to reviewed commits
- Release target: 1.1.0
- Priority: P1
- Owner: CI supply chain
- Direction: Prevent upstream action tag movement changing release gates silently.
- Conclusion: Release target 1.1.0. Resolve current tags to immutable commits and retain readable version comments.
- Depends on: AUD-REL-001
- Implementation:
- Pin third-party actions to resolved full commit IDs and configure weekly Dependabot PRs.
- Evidence:
- Workflow/Dependabot YAML parse and three
tests.critical.test_ci_action_pinstests pass. Hosted execution remains part of final CI. - Repair the historical-checkout regression exposed by the broad run: enforce
fetch-depth: 0per checkout step without depending on tag spelling. The regression and three pin-policy tests pass; full rerun remains pending.
- Workflow/Dependabot YAML parse and three
[x] AUD-INTEL-001 — Qualify software intelligence at the project boundary
- Release target: 1.1.0
- Priority: P1
- Owner: source intelligence and source-to-specification contracts
- Direction: Make software-intelligence usefulness and limits explicit.
- Conclusion: Release target 1.1.0. Evaluate stale-index rejection, provenance, inverse qualification and actionable diagnostics without making graph presence a correctness claim.
- Depends on: AUD-REL-001
- Implementation:
- Map intelligence capabilities to implemented helpers and reproducible tests in the graded delivery report.
- Confirm existing provider-none/off, stale and preferred-unavailable diagnostics through their public helper tests.
- Record held-out task classes for impact analysis and inverse qualification; actual comparative experiments remain unrun.
- Evidence:
- Positive, stale-index and inverse-custody rejection tests pass in the 165-test focused batch, including the real CodeGraph sync/check fixture.
- Report claims distinguish structural retrieval, semantic comparison and independent acceptance.
[x] AUD-RESEARCH-001 — Define reproducible experiments for the concept
- Release target: 1.1.0
- Priority: P1
- Owner: research evaluation and project documentation
- Direction: Grade research potential and turn open claims into falsifiable experiments.
- Conclusion: Release target 1.1.0. Separate potential from demonstrated efficacy; define baselines, ablations, held-out tasks and cost metrics before claiming superiority.
- Depends on: AUD-INTEL-001
- Implementation:
- Document hypotheses and baseline/ablation matrix in the graded 1.1 report.
- Add a deterministic evaluation summary for recorded trial evidence (
scripts/summarize_research_trials.py). - Reject missing, duplicate or incomparable trial records.
- Evidence:
- Fixture summaries report pass rate, task-level uncertainty and cost (two
tests.unit.test_research_trialstests pass). - Unrun experiments remain explicitly unmeasured and do not support release claims.
- Fixture summaries report pass rate, task-level uncertainty and cost (two
[ ] RELEASE-REVIEW-001 — Complete the 1.1 release review ledger
Coverage audit (2026-09-16 UTC): Reconciled the SDLC finding matrix, framework score-improvement milestones, five-phase defect-mitigation program, and all 17 open issues / 27 open reviews against named queue owners. Native npm packaging issue #411 was missing and is now NPM-PACKAGE-001; the current PR landing table supplies explicit ownership and remaining gates. Ten previously untargeted open items now explicitly select 1.1.0; duplicate C++ sections are consolidated with all acceptance preserved. The strict scope projection passes with 118 open items, correcting the earlier incomplete 107. The 21 unfinished score-program milestones retain all 112 unchecked tasks. The audit coverage matrix maps every review category below to its execution owner. This confirms roadmap coverage at the observed snapshot, not completion of any remaining review.
Release target: 1.1.0
Priority: terminal gate
Owner: release engineering, architecture, security, documentation and product maintainers
Direction: Keep every required review decision and its attributable evidence in one release-blocking ledger. This item inventories review coverage; the linked queue owners retain implementation authority and cannot be closed by checking this summary.
Conclusion: 1.1 publication requires an explicit final disposition for scope, design, security, compatibility, qualification, artifacts, documentation and remote publication state. A green test matrix alone is insufficient.
Depends on:
SDLC-AUDIT-001,RELEASE-INTEGRATION-001,AUD-STATE-001,AUD-REL-002,AUD-SEC-001,OPS-310,PORT-370,TEST-380,BENCH-390,DOC-410andREL-420.Implementation:
- Re-run the contribution sweep after every scope or merge change, immediately before planning and publication, and after publication; disposition every open issue, review, remote branch and attached worktree with exact ancestry or patch-equivalence evidence.
- Reconcile every 1.1 ADR and significant-feature decision, including accepted ADRs 0011, 0039, 0040, 0041 and 0042; leave no proposed design or unrecorded exception governing shipped behavior.
- Complete maintainer code review, lifecycle-driver and sample-runner TCB review, documentation-authority review, schema/protocol compatibility review and release-policy review on the exact candidate revision.
- Complete threat-model, credential/secret, dependency/SBOM/license and production
containment review. Preserve unsupported containment as an explicit refusal;
obtain the independent enterprise security review required by
SEC-360before making enterprise containment claims. - Reconcile every roadmap acceptance checkbox and tracker closure against current evidence. Do not convert historical, simulated, focused or skipped results into current release proof.
- Qualify one clean exact revision through full local gates, installed-wheel and upgrade journeys, authorized live generation, forced and cache-hit acceptance, required property/fuzz/mutation/benchmark gates, and the signed macOS/Linux/Windows matrix.
- Review wheel, plugin, schema, SBOM, collateral and release-note bytes; bind exact identities, provenance, signer/trust policy, retention and substitution checks before any tag or provider mutation.
- Review onboarding, operator/security guidance, migration and rollback notes, guarantee/limitation claims, diagrams, links, rendered collateral and the tag-pinned README/changelog surfaces.
- Review the consecutive-minor upgrade decision and evidence. If compatibility is deferred, record the explicit release-owner decision and follow-up without claiming an untested migration.
- Review the concrete
planand prepared release-line diff, then require a cleancheckresult whose authenticated receipt, contribution state, artifact set and collateral all select the same commit. - Perform authorized publication without moving or replacing an existing tag; retain partial-failure recovery state and use only the policy's idempotent retry path when remote mutation is incomplete.
- Run read-only published verification and the post-publication contribution sweep; verify remote branch/tag/release selection, downloaded artifact hashes, signatures, notes, collateral receipts and stable-provider state.
Evidence:
- Attach the exact candidate commit, release-plan/prepared-record identities, terminal gate and platform receipt identities, artifact hashes/signatures, review decisions, contribution-sweep identity and published-verification result.
-
REL-420and every dependency above are complete; no required review is skipped, inferred from another gate or represented only by mutable prose.
[ ] ADOPT-PROMOTION-001 — Reconcile retained-to-drafted adoption repair
- Release target: 1.1.0
- GitHub issue: #367
- Priority: P0
- Owner: source-to-specification promotion
- Direction: Reconcile issue #367 and merged PR #369.
- Conclusion: Release target 1.1.0. Reuse the merged implementation and repair its registry boundary defects.
- Depends on: AUD-REL-001
- Next action: Run the combined revision's broad gate and land the reviewed
repair; the fresh retained-harness adoption-to-drafted journey now passes.
Retained-scope refresh can build on this tested local implementation. The two
reproduced registry defects in the review checkpoint
now have passing regression coverage. Main was integrated with explicit operator
acknowledgement at
96afb9d4; no remote merge or issue closure was performed. - Implementation:
- Reject symlinked registry/child ancestors and out-of-root authority.
- Serialize registry updates and hold the project lifecycle lock across integrated acceptance; preserve foreign children on rollback.
- Review PR #369 and qualify its effect on issue #367.
- Evidence:
- Forty-seven tests pass across
test_cli_arbitrary_source,test_native_project_registry,test_lifecycle_lock, andtest_operator_adoption: signed promotion, both ancestor-link escapes, dangling registry, concurrent registrations, failed atomic replacement, foreign-child rollback, mutation contention and read-only stage inspection. -
test_adopted_promotion_journeypasses using actual retained-harness execution and receipt promotion, followed by signed static drafting. Missing retained evidence refuses advancement; original source bytes and release authority are preserved. The promotion suite rejects invalid signed evidence. - Combined-revision broad gate and reviewed landing remain pending; do not equate focused local evidence with the upstream PR's earlier CI pass.
- Forty-seven tests pass across
[x] ADOPT-REFRESH-001 — Refresh retained scope after upstream files change
- Release target: 1.1.0
- GitHub issue: #368
- Priority: P1
- Owner: adopted source custody
- Direction: Track open issue #368.
- Conclusion: Release target 1.1.0. Inspect upstream scope refresh requirements and preserve exact source authority.
- Depends on: ADOPT-PROMOTION-001
- Next action: Complete: PR #375 landed as main
2f09c295after full local and all 15 exact-head hosted checks; #368 is closed with linked evidence. The implementedproject retained-scope refreshplan/apply binds exact metadata and source bytes, reuses scope capture, rebinds the retained receipt policy, and preserves baseline/parity/lift-shift and previous receipts as history. - Implementation:
- Plan scope refresh and invalidate stale dependent receipts.
- Require acknowledgement and exact plan identity; serialize apply and reject stale plans, unsafe paths, and specification-authoritative projects.
- Preserve admitted commands; retain the reviewed old/new inventory as history and roll back ordinary partial-write failures without changing source.
- Retained execution and receipt publication use the same lifecycle lock; refresh omits generic project-local CLI telemetry so planning stays read-only.
- Evidence:
- New upstream file fixture refreshes scope without losing user changes.
- Real retained execution includes the added file; old receipt fails and a newly earned receipt passes. Baseline/parity bytes remain unchanged.
- Eleven refresh tests pass, including tracked additions, ignored outputs, deleted paths, stale plans, contention, no-op, unsafe paths, specification authority refusal, rollback after policy/review faults, and partial-write recovery. The 59-test retained-harness/adoption/performance regression batch also passes (61 distinct tests including the final two refresh regressions).
- Fresh full Python qualification passes (3,811 run, 3,781 passed, 30 skipped, no failures), along with all 15 jobs in CI 34594250773. Authority verification, formatting and lint pass; the stale repository test receipt remains explicit and is not rewritten by this repair.
[ ] ADOPT-MONOREPO-001 — Preserve multiple detected build roots in adoption
Incoming review (2026-09-16 UTC): PR #446, observed head
86f8d1d0f236, implements the conversion/refresh integration named below. The peer reports 111 focused tests passing and hosted qualification running. Review and qualify that existing implementation for integration; do not duplicate it or treat its reported local pass as final release evidence.Release target: 1.1.0
GitHub issue: #365
Priority: P1
Owner: adoption planning
Direction: Track open issue #365.
Conclusion: Implement Accepted ADR 0039 without inferring Component authority from detector findings. Keep this single-history monorepo path distinct from SUBMODULE-ORCH-001 and preserve the existing single-wrapper default.
Depends on: AUD-UX-001
Next action: In progress: run fresh full Python and hosted cross-platform qualification on the public refined-conversion implementation. Refined apply now requires explicit baseline execution, stages and checks every selected Component before source movement, publishes source-free retained custody after lift-shift, and participates in normal project validation. Retained-scope refresh requires separate Component execution consent, reruns only stale boundaries and reuses unaffected receipts. Each Component records exact current retained-source boundary-transfer state; no source authority is transferred.
Implementation:
- Expose detected build-root candidates without selecting Components.
- Validate nonoverlapping selected roots, complete exclusive source ownership, explicit shared-source consumers and evidence-backed per-root commands.
- Bind reviewed selection and exact source bytes into the onboarding plan; reject invalid or stale plans before any mutation.
- Materialize selected Components transactionally with independent retained
receipts, refresh and boundary-transfer state; preserve shared paths.
- Stage source-free Component projections from a revalidated acknowledged plan.
- Earn component-scoped retained receipts from real disposable harness runs; unrelated Component edits preserve current receipts while shared edits invalidate the owner and every declared consumer.
- Wire staged Components into the conversion transaction, project-wide gates,
scope refresh and reviewed boundary transfer before enabling refined apply.
- Bind monorepo input reads to unchanged regular-file descriptors before
conversion custody integration; preserve canonical byte identities and
refuse indirect/special-file replacements without reading their contents.
Four failing regression cases reproduced the original check/open race
and indirect-selection-parent gap. Ten new custody tests now pass,
including FIFO refusal, bounded growth, descriptor closure, raw/empty
byte identities and preservation of concurrently changed source. The
96-test adoption, retained-scope and operator batch passes; lint,
formatting (880 files), layout, OpenSpec (2 checks) and documentation
(9 parser tests, 121 diagrams, 531 Markdown files) pass locally.
The fresh full Python gate passes 3,842 tests (3,812 passed, 30
expected skips, zero failures) in 2,100.550 seconds, with no checkpoint
reuse. The frozen tested diff remains SHA-256
183c91cc78d3357a0d738cb7db809f8de4bfdbd57928bbb7d65721a9448fa08e; only this evidence summary changed afterward. Hosted integration remains pending; no public multi-root conversion or source-authority transfer is claimed. - Verify closed bundle/plan/projection custody and require the exact full receipt set against one unchanged source observation, without minting a project receipt or transferring authority. Eleven new cases cover complete/missing/substituted receipts, pinned bundle and planned-projection custody, unowned membership, shared and private invalidation, indirect paths and concurrent drift. All 89 adoption/retained-receipt/operator tests pass; the final 28-test Component suite also passes after the lint repair. Repository lint, formatting (878 files), layout and documentation (9 parser tests, 121 diagrams, 530 Markdown files) pass in the isolated checkout.
- Enable refined apply only with explicit
--run-baseline; qualify every selected root before the first conversion mutation, install exact source-free custody after lift-shift, and roll back the original tree on injected installation failure. Project validation reopens bundle, projections, receipts and current retained source. Reviewed scope refresh requires--run-component-baselines, reruns a stale private boundary and reuses the unrelated receipt. The 61-test monorepo/adoption/refresh batch, focused seven-test conversion/project-validation batch, formatting and lint pass locally.
- Bind monorepo input reads to unchanged regular-file descriptors before
conversion custody integration; preserve canonical byte identities and
refuse indirect/special-file replacements without reading their contents.
Four failing regression cases reproduced the original check/open race
and indirect-selection-parent gap. Ten new custody tests now pass,
including FIFO refusal, bounded growth, descriptor closure, raw/empty
byte identities and preservation of concurrently changed source. The
96-test adoption, retained-scope and operator batch passes; lint,
formatting (880 files), layout, OpenSpec (2 checks) and documentation
(9 parser tests, 121 diagrams, 531 Markdown files) pass locally.
The fresh full Python gate passes 3,842 tests (3,812 passed, 30
expected skips, zero failures) in 2,100.550 seconds, with no checkpoint
reuse. The frozen tested diff remains SHA-256
Evidence:
- Read-only and refusal tests cover overlaps, missing ownership, command evidence, source drift, indirect paths and default-wrapper compatibility. Nineteen new tests pass; the wider adoption/harness/Git-boundary batch also passes (106 distinct tests across the two runs). Repository formatting and lint pass. This qualifies planning/refusal, not multi-root materialization.
- Multi-root fixture retains independent Components and build commands. Public conversion now preserves two source-free Component projections and original commands, records passing independent receipts and exact retained boundary state, survives an injected post-lift installation failure with the original tree restored, fails project validation on receipt tampering, and refreshes a new private source member by executing only its owner while reusing the unrelated Component receipt.
- Integration with the current 1.1 stack passes the 112-test monorepo/adoption/harness batch, including transactional rollback when refreshed custody cannot reopen after publication. Repository lint and formatting pass.
- Full Python and hosted cross-platform qualification pass on the landing revision.
[x] DRAFT-PROMOTION-001 — Allow reviewed static promotion from retained to drafted
- Priority: P0 (1.1.0 adoption continuity)
- Release target: 1.1.0
- GitHub issue: #367
- Owner: source-to-specification review, project promotion, and conversion-stage authority
- Direction: A retained adopted project must be able to reach drafted through supported commands even when model-backed source intelligence is disabled.
- Conclusion: Add an explicit reviewer-authored Component graph input to static review. Bind its canonical identity into the signed review, require exact source-snapshot and evidence closure, and let acceptance materialize Component projections only from that validated reviewed graph. Support explicit, collision-checked integration into an existing retained adopted project so the project that owns conversion authority receives the projection. Keep semantic model translation and inverse custody requirements unchanged for model-derived graphs; do not infer executable semantics or cross-Component boundaries from inert inventory.
- Depends on: BROWNFIELD-STATE-001 and the existing signed review/promotion contracts
- Next action: Done. Full local gates and the 15-job Linux, macOS, and Windows matrix passed in GitHub Actions run 34529236052.
- Implementation:
- Define and schema-validate the reviewed static Component graph attachment
- Extend
spec reviewandspec acceptto bind and reopen it - Permit source-free project promotion from
deterministic-staticonly when the signed graph is complete - Add an explicit fail-closed integration path for a retained adopted project;
ordinary
--project-targetcreation and overlap rejection remain unchanged - Advance an adopted retained fixture to drafted through public CLI commands
- Update architecture, user guidance, traceability, and changelog
- Evidence:
- Public CLI tests reject missing, unsigned, stale, source-mismatched, incomplete, unknown-kind, and evidence-unclosed graphs
- A static retained fixture promotes, writes current
FileAuthorityProjectionStoreentries, and advances to drafted - Focused tests, full Python checks (3,630 passed), documentation/schema checks, wheel checks, and the 15-job cross-platform GitHub Actions run 34529236052 pass
[ ] RELEASE-INTEGRATION-001 — Complete all outstanding work and consolidate every branch for 1.1
Verified intake coverage: The latest sweep contains 53 included tracker records (22 issues / 31 reviews), with no deferred or unclassified tracker items. Its refreshed identity is
sha256:ac0e8f4f8c5c74f5cc2084eeb117ea27bf72053ad626dbaa2b549476e3303746; 37 branches and 38 worktrees still require dispositions. Strict roadmap projection contains 121 open items, all targeting 1.1.0; integration review reopened STANDARD-PROJECT-REBUILD-001 for complete receipt custody. All 53 tracker URLs have durable queue ownership. This remains a not-ready release snapshot.Driver-review follow-up: PR #450, observed head
4875558541298dadab6f7faf017b0575cee3a6b3, re-pins the driver after #447. Its Ubuntu sample-composition job in run35076297324fails withproject.documentation_authority_review_stale; the reported focused version test does not establish complete qualification. Preserve peer ownership, refresh the documentation authority marker after review, and review the combined candidate driver before recording its identity. This review is included in 1.1; it does not add a separate product work item.Integration refresh implemented: Merge
b6f063b8incorporates PR #438 head4dd11b97561a30b9d4773f6c6c610222949f5785and PR #447 while retaining the tested streaming native-file custody implementation. Follow-up review repairs the last-Component-only receipt under reopened STANDARD-PROJECT-REBUILD-001. The combined driver and documentation authority have fresh reviewed identities, incorporating PR #450's intent without adopting its stale standalone pin. PR #441's prior exact4c8a4b07run35069594227ended with 10 passed, one Windows fixture failure and four cancelled jobs; the fixture repair is committed. Combined candidate722afd99e6c1150768951b192592eb71610cbe0bis pushed to PR #441. Run 35078828340 ended on that exact head with seven passed, one failed and seven cancelled jobs. Ubuntu/Python 3.14 stopped after 1,186 tests (22 skipped): the static C++ filesystem-runtime fixture exceeded the 60-second Bazel analysis deadline. CPP-LIBRARY-001 owns diagnosis and qualification; retain the failed evidence and do not treat retries or local fixes as release attestation. Local origin-identity and Cargo integration repairs postdate this run and still require hosted qualification.Incoming tracker intake (2026-09-16 UTC): The fresh snapshot contains 22 open issues and 31 open reviews. #451 belongs to RETAINED-READMISSION-001; PR #450 belongs to RELEASE-INTEGRATION-001; #442 / PR #444 belong to REL-442; #443 belongs to MATRIX-002; #448 belongs to CACHE-007; #449 belongs to CONVERSION-DIAGNOSTICS-002 with WORKER-HEALTH-001 coordination; PR #446 belongs to ADOPT-MONOREPO-001. All remain in 1.1 with acceptance open. The repeated incoming-issue check still finds all 53 tracker URLs represented in the roadmap, with no newly unowned tracker records. Source-admission and retained diagnostic repairs have focused local evidence; installed/native acceptance remains open.
Newly merged intake: Issue #445 is closed by PR #447, merge
3aaddab9b942d9c0fde60e8af8c2f158393ff754. Inspect and incorporate its project-root locked-Component fan-out and aggregate-receipt behavior into the consolidated candidate, then qualify the combined source; forge closure alone does not establish inclusion in this branch.Tracker scope reconciliation (2026-09-16 UTC): The fresh contribution sweep finds nine issues (#251, #295, #296, #365, #379, #380, #403, #411, #440) and PR #437 deferred to 1.2 even though the full-integration directive and their queue owners target 1.1. Matching 1.1 include dispositions are now restored through the release CLI, preserving remaining acceptance and ADR gates. The verified sweep has 45 included tracker records and no deferred or unclassified tracker items; 37 branches and 37 worktrees remain unclassified. Incomplete implementation is not a maintainer-authorized scope reduction.
SDK qualification performance (2026-09-16 UTC, locally verified): The real SDK service fixture takes about 666 seconds on the current macOS host. Profiling one portable dependency observation identifies 1,817 subprocess launches for 605 Mach-O images (29.214 seconds), dominated by inspector startup. UUID, link and load-command inspection now share one supported dyld_info invocation per image. Candidate validation, exact recursive graph traversal, per-call deadlines/output bounds and before/after file, symlink and inspector checks are preserved. The comparison below proves combined-output facts, mutation refusal and exact live closure equality. Native observations are not replaced by fixture facts or persistent cached host evidence.
SDK observer comparison: A fresh baseline/current comparison on the same host and empty artifact root observes exactly equal complete graphs: 607 components, 7,160 edges, graph identity
sha256:775b70c4aed7b02766e746ec54449cf65e87b38f7fc41bbbb75a5b4b1fd65593. Baseline406b53d1uses 1,817 inspector subprocesses in 26.357 seconds; combined inspection uses 1,212 in 18.888 seconds. This single local trial measures dependency observation only, not end-to-end release performance. All 66 dependency lifecycle tests pass, including combined multi-architecture UUID/link/rpath parsing, strong-over-weak link merging and symlink mutation refusal. Candidate validation and per-call resource/custody checks are unchanged. The 37 surrounding loader-path, SDK-dependency, contract and version-authority tests also pass. Lint, formatting, OpenSpec, layout, skill evaluation (6/6), current review pins and documentation rendering (121 diagrams / 546 Markdown files) pass. Project validation and strict roadmap targeting pass. The real SDK service regression passes its complete success/rejection/revocation and shutdown journey in 475.848 seconds, with no skips, using the current 120-second startup / 150-second process fixture. Final integrated qualification remains open. All-gatelitai verifypasses authority but fails the stale current-project test receipt; locks (none declared), source intelligence (provider none) and HTML artifact verification (none declared) are explicit skips. No fresh release receipt or full qualification is claimed by these focused passes.Service probe follow-up (2026-09-16 UTC): Integration run 35051659126 failed macOS/Python 3.14 after 2,651 tests with one SDK service-readiness timeout and 24 skips; remaining cancelled checks are not passes. The plain HTTP/SSE service control passes on local macOS with its historical skip removed. A separate real local fixture demonstrates that ambient HTTP proxy configuration intercepts the current loopback probe. Bind persistent-service, frontend-readiness and IPC HTTP probes directly to their verifier-selected loopback origin; preserve same-origin redirects and reject redirects elsewhere. Prove behavior with real service/proxy/redirect fixtures and retain native SDK service and hosted qualification. The hosted timeout cause remains unproven; do not raise its deadline or add a platform skip as a repair. The baseline SDK service test passes locally (665.139 seconds); the hosted timeout is not reproduced. New real HTTP fixtures fail on the old proxy and redirect behavior and pass after the transport repair. The combined service/Standard/IPC/version-authority slice passes 81 tests in 15.305 seconds with three existing platform skips; the plain HTTP/SSE service case also passes when forced live on macOS (one test, 0.183 seconds, no skips). Lint/format, OpenSpec, layout, project validation and the reviewed driver pin pass. Documentation initially hit a Chromium protocol timeout on an unchanged diagram; that exact diagram then rendered alone, followed by all 121 diagrams from 546 Markdown files. The failed receipt is retained, not relabeled. The repaired native SDK service passes its full success/rejection/revocation and shutdown journey (one test, 666.116 seconds). Fresh installed and hosted qualification of the combined source remain required before release. Integration then added
a4c2f6d6, increasing this fixture's startup budget to 120 seconds while retaining a 30-second total process budget. Preserve its hosted scheduling allowance and make the fixture total 150 seconds so the monitor cannot invalidate its own startup budget. Production deadlines and timeout refusal remain unchanged. The local native pass above used the stricter prior 30-second fixture; the combined hosted gate remains required.Git maintenance investigation (2026-09-16 UTC, in progress): The failing installed-wheel runner used Git 2.55.0. Lineage fetch currently permits automatic maintenance, which can detach and continue after the per-entry advisory lock is released. Git documents automatic maintenance as the fetch default; upstream #2437 reports the same shallow-file failure after the Git 2.54 maintenance change. Trace real sequential shallow fetches, add a regression that observes actual Git child processes, and suppress automatic maintenance for the derived lineage cache. Retain exact-revision reads, independent-entry concurrency and timeout behavior; qualify the installed update journey and full hosted run. Before the repair, a real Git 2.55 trace recorded 100 maintenance children across 100 sequential resolves. The regression fails on three actual detached-maintenance launches. Suppress these using fetch
--no-auto-gc, the compatible alias of--no-auto-maintenance; do not weaken cache locking or retry a failed fetch. The 100-resolve probe did not reproduce the historical shallow-file error, so attribution of that specific failure remains unproven until installed and hosted requalification. After the change, the same 100-resolve Git 2.55 probe passes with zero maintenance children. All 69 lineage adapter/store, repository update and installed HTML harness tests pass in 43.603 seconds, including separate-process cache locking and independent-repository overlap. Exact clean installed-wheel qualification then passed on cleanbe71cc53f1771c7c7b413a49a50732c0430868d5, using Git 2.55.0. Run20260916T043512Z-87e4c8is terminal passed; wheel SHA-2560e102d1b0534182ca2319bf0fc650900f8980a0eedc7fcd81f6da58fc6606d8eand retained manifest revision match the tested source. The actual installed HTML update journey passes current/stale/current verification. This qualifies the maintenance repair locally, not the later service-transport source or the full release; hosted qualification remains open.Open review #437 qualification finding (2026-09-16 UTC): Hosted run 34959588835 passed thirteen jobs, failed macOS/Python 3.11 and cancelled macOS/Python 3.14. The failure is the installed-wheel HTML update journey:
repository_lineage.fetch_failed, with Git reportingfatal: shallow file has changed since we read itduring the disposable bare-cache fetch. The action bootstrap itself passed. The reviewed head already contains the per-entry lineage-cache lock, so its old completed regression is insufficient to explain this observation. Reproduce the actual installed update/read overlap and inspect fetch/maintenance ownership before changing locking or treating a rerun as a repair. Do not merge #437 on partial CI.Current next action (2026-09-16 UTC): Resume the preserved
c7dac9a19release-check repair after installing the pinned contributor dependencies. Its first Python gate stopped after 1,160 tests with one missing-Conan failure and 22 skips. Makepython-checkbootstrap its declared development tools so clean sessions cannot reach native package tests with a runtime-only install; verify a fresh-environment Make plan and the native consumer regression. The Make bootstrap regression reproduces the missing developer install before the change and passes afterward; all 26 bootstrap/work-record/roadmap tests pass. The resumed checkpoint now records the formerly failing complete filesystem C++ runtime/Conan consumer case passed; full repair remains active. This observation is tied toc7dac9a19, not the newer PR head. The repair is diagnostic evidence only. PR #438 now selects81fbee6a9, so release attestation must run cleanly on the final integrated revision.Current contribution audit (2026-09-14): The release CLI recorded
includedispositions for issues #403 and #405, and reviews #399, #400, #404 and #406, with matching1.1milestones. A fresh sweep reports no unclassified tracker items, twelve open included issues/reviews and eighteen unresolved branch/worktree records; readiness remains false. Sweep identity:sha256:bcfe26a606a0fcc3a558106295d0be26d47ea131698e8751c8f1496506978f3a. These counts are a dated observation, not final release attestation. Worker routing still requires transport integration, authenticated predecessor handoff, cancellation/recovery and real cross-worker overlap. Fractional acceptance needs exact-current full, installed-wheel and hosted qualification while preserving the integer-only contract boundary. Both peer branches remain separate drafts; their reported focused passes do not prove release readiness. PR #399's two failed jobs still identify stale lifecycle-driver authority; its distinct Git timeout proposal needs review and fresh qualification beyond the already merged HTML repair. No branch or worktree was removed.Cargo, lock-health and Rust consolidation qualified locally: Candidate
efcb5ec59d96e6ca19b79c1ab0055e9e6882c645combines #394, #395 and the Rust static-reachability repair on main through #393. The fresh complete Python suite passes 4,737 tests in 5,485.191 seconds, with 30 skips, run20260913T151845Z-940d58. The run and root step are terminal passed; exact revision, clean tree, checkpoint removal and both retained log hashes were independently checked. Installed-wheel qualification passes at the same revision, run20260913T151901Z-a3d7cf; wheel 2,652,392 bytes, SHA-256d8f5bc9d1bb389a4951d59f8f78ee0ad2c94318ab96ecaa7253fe9955b28745e. Its terminal ledger, retained logs, manifest revision and wheel bytes were independently verified. The combined 51 focused tests, lint/format, layout, OpenSpec, documentation and both authority reviews pass. All 33 imported code/test/script/schema files match qualified input branches. Final updates record this evidence only; fresh hosted CI remains required before merge. The peer survey preserves the separately owned retained-capture work and every other branch/worktree. This does not complete #379's live regeneration, #380's bridge, broader HTML observability or the complete 1.1 roadmap.Windows ZIP fixture repair validated locally: PR #390's Windows test shard 3 at
30e29f59fails its backslash-path case after 2,071 passing tests and 53 skips.ZipInfonormalizes host path separators during construction, so the fixture writes a safe slash path on Windows before the reader runs. Preserve the intentionally unsafe raw filename in both ZIP headers and assert the actual backslash bytes before checking refusal. Keep production path admission unchanged. All six archive-reader tests pass; an explicit ZIP-separator simulation confirms both raw headers retain the backslash and admission refuses on both host separator settings. Lint, formatting, current lifecycle/documentation reviews, OpenSpec and layout checks pass. Exact-head hosted requalification remains required; the previous matrix cannot qualify the repaired head.Hosted corruption-fixture repair validated locally: PR #390's Linux Python 3.11 job at
370e6dcfstopped after 3,031 tests because the published-pack test replaced a checksum's final byte with a fixedx. That mutation can preserve the original byte, leaving a valid pack/index which correctly does not refuse. Flip one bit instead and identify each field with a subtest. Preserve production checksum verification. All 27 repository publication tests pass in 19.946 seconds; lint, format, lifecycle/documentation reviews, OpenSpec and repository layout checks pass. Exact-head hosted qualification remains required.Combined main integration checks: The exact resolved source tree combining evidence head
0323bbd2with landed main02ea3619passes all 433 selected Python tests in 2,490.718 seconds with no failures. The selection includes all imported refresh/custody tests plus current evidence, release lifecycle, schema, architecture and CLI help coverage. The retained test log is 561 bytes withsha256:a28b2db84246fdb01e170734dee83d544face9dd49229587a348b89c402af376. Source and test imports match the qualified PR #389 revision. Full combined Python, installed-wheel and exact-head hosted qualification remain required.Milestone mapping repair validated: Forge issues #380, #379, #365, #296, #295 and #251 retain explicit included dispositions in milestone
1.1for release1.1.0. Configure that literal name and make CLI sweeps honor the declared mapping, preserving explicit overrides and standalone no-policy fallback. Malformed policy must refuse rather than silently select another scope. All 25 focused CLI/schema tests pass; format, lint, OpenSpec and repository layout checks pass. A read-only live default sweep selects milestone1.1for release1.1.0, reports no milestone mismatch reasons for the six included issues, and remains not ready. This does not move, close or defer any tracker item. The broader release lifecycle suite also passes all 79 tests in 53.498 seconds, including local Git release flows. Documentation rendering passes (121 diagrams, 538 Markdown files), and both authority reviews are current.litai verifypasses project authority while retaining the stale-receipt failure and three skips; no current receipt or release qualification is asserted.Release target: 1.1.0
Priority: P0
Owner: 1.1 release integration and tracker closure
Direction: Merge the current branch and all outstanding branches to main, map every unresolved roadmap TODO into 1.1, implement remaining obligations, and address and annotate all open PRs and issues before closing them.
Conclusion: Treat the entire unresolved active queue as 1.1 scope. Preserve historical obligations, integrate existing contributions, verify consolidated source on local and hosted gates, and remove only resolved branch references with recoverable commit evidence. No mass closure, discarded work, retagging, or unqualified release claims.
Named-branch integration: The maintainer explicitly requests ending detached development and merging all current work back into
main. Preserve the 18-commit refresh/custody stack after692041a1and the current metadata-parent/reflog slice onintegrate/1.1-refresh-safety. Named local and remote branch tips already belong to fetched main's history; retained clean worktrees contain no additional unmerged commits. Merge current main into the integration branch, require a fresh complete local Python run, wheel/install and fast checks, then open a truthful integration PR and wait for the full exact-head hosted matrix before merging. Fast-forward local main and switch the clean primary checkout to it after the merge. Preserve stashes, foreign worktrees, release branches and lifecycle retention markers. This lands implemented internal preparation; it neither implements live refresh apply/rollback nor closes the remaining 1.1 release obligations. Future implementation starts from current main on a descriptive named topic branch. Retained qualified worktrees remain recovery/evidence snapshots, not an implicit home for another detached development stack.Fresh local integration qualification:
bc1f834arecords metadata-parent and reflog staging;3ff3c63fmerges current main without conflicts and preserves the complete preceding stack. Its clean, unchanged tree passes freshmake python-check: 4,477 tests, 30 skips and zero failures in 4,821.640 seconds. The checkpoint was absent at launch and removed on success; no known-failure annotations were reused. The same revision passes wheel, isolated installation and fresh offline installed-CLI E2E gates, including command-worker build/test/run and installed HTML currency checks. The retained wheel is 2,565,936 bytes with SHA-2566e79cc6a4f3b6380b527d7657478b758fa8f28724e102ece57e57d895eefb6fc. Runner review passes; SkillEvaluator skips because no skills changed. Live model generation and browser acceptance are not claimed by these gates. The evidence-recording change does not alter source, tests or executable authority; hosted CI must qualify the final PR head before merge. All preexisting named branch tips and other worktree revisions are ancestors of remote main. The HTML and Windows-quoting stashes are already incorporated with later fixes. Preserve the explicitly review-required Gitlink-refusal stash pending the ADR 0039 / PR #366 decision recorded above; it is not part of this integration candidate. No stash or retained checkout was removed.Current hosted integration repair: PR #389 at
7a552d32is blocked by run34709201190: Windows shard 3 reports one directory-custody revalidation failure (1,984 passed, 53 skipped); sibling shards were cancelled, not passed._directoryconsumes cachedDirEntry.statrecords, which omit Windows file identity and can lag fresh path metadata. Use fresh no-follow member observations without weakening exact custody, retaining inode, link-count, timestamp, membership and collision checks. This is a bounded repair to internal preparation, not live refresh apply.- Replace cached member metadata with fresh no-follow observations; prove
inventory identity, cached-entry independence and same-byte foreign
replacement refusal, then repeat full local and exact-head hosted gates.
The cached-entry regression fails against the previous implementation;
the corrected file/tree/directory/reflog batch passes all 54 tests in
12.850 seconds. Full renewed qualification remains pending.
The same run's macOS/Python 3.14 job stopped after 2,862 tests with one
empty-tree publication snapshot failure and 26 skips: a transient
objects/maintenance.lockdisappeared between observations. Fixture Git commands already disable local automatic maintenance, but pushes invoke a separate receiver. Disable automatic post-receive maintenance in the disposable bare receiver's own configuration before any fixture push. Keep complete byte/timestamp snapshots and production transport unchanged. - Bind disposable receiver maintenance policy before fixture pushes, verify that local policy directly, and rerun publication/tree/pack tests and the full local/hosted matrix without excluding transient files. The receiver-policy regression first fails without the explicit local setting. The corrected publication/tree/pack/file batch passes all 55 tests in 29.328 seconds. Lint/format (972 files), layout, OpenSpec (two), current driver/documentation/runner reviews and documentation (121 diagrams / 538 files, nine fence tests, zero dependency findings) pass. SkillEvaluator's root static admission also passes. The driver pin is refreshed for the reviewed custody change; the existing stale lifecycle receipt is preserved. Fresh full local, wheel/install and hosted evidence remain mandatory before merging this corrected candidate.
- Replace cached member metadata with fresh no-follow observations; prove
inventory identity, cached-entry independence and same-byte foreign
replacement refusal, then repeat full local and exact-head hosted gates.
The cached-entry regression fails against the previous implementation;
the corrected file/tree/directory/reflog batch passes all 54 tests in
12.850 seconds. Full renewed qualification remains pending.
The same run's macOS/Python 3.14 job stopped after 2,862 tests with one
empty-tree publication snapshot failure and 26 skips: a transient
Corrected local qualification: Clean
9b62593epasses a new completemake python-check: 4,481 tests, 30 skips, zero failures in 4,794.990 seconds, with an absent-at-launch checkpoint removed on success and no reused failure annotations. Wheel, isolated install and fresh offline installed-CLI E2E also pass, including command-worker build/test/run. Retained wheel: 2,566,000 bytes, SHA-25614f9ef2b2f3fa6c5259f2f14a78ca00ec48a15bf85aea2b9d225f3bcd7e84fce. The offline E2E binds HEAD9b62593eand an 812-file CLI surface identitysha256:67f6820eca2234773d33131072f7a1db5ac931e947c879f503ee737c3c8e1910. All-gate verification passes authority, retains three undeclared/disabled skips and rejects the unchanged stale lifecycle receipt. No live model generation, browser acceptance or release readiness is claimed. This evidence-only update changes no source, tests or executable authority; the final PR head still requires a fresh complete hosted matrix.Second hosted fixture repair: Run
34717954755atda9fc656exposes two Windows framework-lock fixture assumptions (shard 2: 622 passed, 25 skipped, two failed; cancelled siblings are not passes). A whole-tree byte snapshot cannot read a Windows lifecycle lock while it is held. A waiting manifest writer keeps a handle open, preventing deletion of a newly created reservation marker; conservative cleanup must reportreservation_cleanup_incomplete, not force deletion or hide retention. Correct only the fixtures: snapshot complete bytes before/after the held interval, prove exclusion and metadata preservation while held, and test existing-lock handoff separately from new-lock contended cleanup.- Exercise both native handoff outcomes with bounded process events and
assert exact Windows cleanup refusal for a newly created contended lock.
Preserve complete snapshots and the production lock implementation;
require renewed full local and exact-head hosted qualification.
The finalized framework-lock/reservation batch passes 28 tests in
100.038 seconds. Lint/format, layout, documentation (121 diagrams / 538
files, nine fence tests, zero dependency findings), current reviews and
root static skill admission pass. Production source, executable authority
and installed-wheel inputs remain identical to qualified
9b62593e; only fixture expectations and their evidence change. New contended Windows markers require typed cleanup refusal and exact retained metadata; existing markers permit serialized handoff without deletion by refresh. Clean7ab1562cthen passes a fresh completemake python-check: 4,482 tests, 30 skips and zero failures in 4,934.511 seconds. The checkpoint was absent at launch, held no known failures and was removed on success. Production/wheel input equality to9b62593eis unchanged; its retained wheel/install/offline E2E proof remains the source-qualified evidence, not a claim of rerunning those gates on this fixture commit. The prior hosted run finishes with all 12 other checks passing, including every Linux/macOS job; Windows shard 2 fails and shards 1/3 are cancelled. Require all 15 checks on the new exact head before merge.
- Exercise both native handoff outcomes with bounded process events and
assert exact Windows cleanup refusal for a newly created contended lock.
Preserve complete snapshots and the production lock implementation;
require renewed full local and exact-head hosted qualification.
The finalized framework-lock/reservation batch passes 28 tests in
100.038 seconds. Lint/format, layout, documentation (121 diagrams / 538
files, nine fence tests, zero dependency findings), current reviews and
root static skill admission pass. Production source, executable authority
and installed-wheel inputs remain identical to qualified
Third hosted path repair: Run
34724062555atb9fcfd67passes the Windows lock and custody shards, but shard 1 reports four failures (1,762 passed, 27 skipped): case-insensitiveWindowsPathdictionary keys collapse differently spelled reservation targets before alias validation; three endpoint assertions expect native separators instead of Git's exact returned local URL spelling. Preserve Git-owned URL resolution and prove the returned local endpoint through real publication transport. Deduplicate reservation targets by exact spelling before applying portable alias checks.- Reject case aliases before acquisition on every host, including Windows path semantics in host-independent regression fixtures. Keep exact duplicate deduplication and conflicting-anchor refusal; do not weaken live custody.
- Assert exact Git local-endpoint spelling and prove local publication without network access, retaining complete before/after byte snapshots. Repeat fresh full local, wheel/install and all exact-head hosted gates. The host-independent Windows-path regression first fails all three case variants against the prior implementation. After repair, all 36 reservation and real-publication tests pass in 481.271 seconds. Lint/format, layout, OpenSpec, documentation (121 diagrams / 538 files, nine fence tests, zero dependency findings), current driver/documentation/runner reviews and root static skill admission pass. All-gate verification passes authority and retains the unchanged stale receipt failure and three declared skips. This focused proof does not substitute for fresh full or hosted evidence.
Previous landing: PR #388 merged exact
692041a1throughad92a655after all 15 hosted checks passed; the merge tree matches the qualified head. Local and remotemainwere fast-forward synchronized without switching any checkout. The post-merge sweep has no open reviews, unmerged named branches or unclassified contributions; seven included issues remain open. The detached development stack is retained and still needs full consolidated qualification. A pushed exact-head merged marker retains the #388 topic; the supported cleanup preview has zero candidates/deletions and retains all nine marked local branches for the seven-day minimum age. No checkout, stash, release branch or local topic was deleted. Landing-record checks pass: ten roadmap-summary tests, layout, current driver/documentation reviews, zero dependency audit findings, nine fence tests and 121 rendered diagrams across 538 Markdown files. Scope remains 134 targeted items, 113 open and 326 unchecked obligations. All-gate verify passes authority, reports three undeclared/disabled skips and rejects the existing stale receipt. This documentation update does not qualify the newer local source stack or close the integration program.Contribution sweep repair (implemented locally): A contribution sweep from the clean secondary checkout reports an unresolved attached branch for the original checkout, although exact
33630a4fis an ancestor of remote maincf71a4fcand its merged lifecycle marker is valid.sweep_release_contributionsbuildsresolved_branchesonly from the unmerged-branch projection, then_worktreesrejects an attached merged topic missing from that set. The same retained branch is exempt when it is the invoking checkout; changing invocation location must not change whether its commits are integrated. Preserve the in-use branch and marker-age protections rather than moving or deleting the checkout to hide this accounting defect.- Classify clean attached merged-topic worktrees with exact revision ancestry against the observed remote default branch. Add a real-Git secondary- checkout regression and retain refusal for dirty/prunable worktrees, genuinely unmerged commits, stale markers and branch/revision drift. Verify the live sweep removes only this false unclassified entry while the seven included issues and PR #388 continue to block release readiness. The real-Git regression first fails for main/secondary invocation while succeeding from the retained topic itself. All 16 contribution tests now pass, including dirty/prunable, local-only merge, stale-marker, local versus remote head, branch-change and remote-default-ref race cases. Resolve merged and unmerged local branch heads against one captured remote-default commit; compare exact worktree revisions and reobserve HEAD/branch after status. Never use a same-named remote head to excuse different local work. The live secondary-checkout sweep has no unclassified entries and retains all eight included tracker blockers, without moving/deleting any checkout. The broader release/contribution/peer-work/files/roadmap batch passes 137 tests in 64.144 seconds. Lint/format (930 files), layout, OpenSpec (two), documentation (121 diagrams / 538 files), dependency audit (zero), nine fence tests and both refreshed review markers pass. All-gate verification passes authority, retains three undeclared/disabled skips and rejects the existing stale receipt; no receipt was rewritten. Full consolidated and hosted qualification remains required before landing.
CI integration history (landed; terminal evidence below): The Action updates from PRs #381, #382, #383 and #384 were consolidated, preserving their commits and the qualified
0ae183d8follow-ups. All four are included in 1.1. Their full SHA pins match their upstream tags; retain read-only permissions, normal pull-request/push triggers and explicit Python/Node selections. The setup-uv upgrade's green admission job skipped setup-uv itself, so the combined workflow now runs an unconditional uv bootstrap and exactuv --versioncheck while leaving SkillEvaluator conditional on actual skill changes. uv is pinned to0.12.4, covered by the Action's pinned known-checksum table; cross-run caching is explicitly disabled for this bootstrap-only job. The 11 CI-policy/skill-admission tests pass, including execution of the actual inline Python probe with only the external uv process mocked (wrong versions, missing executable and nonzero exits refuse). Lint, formatting (879 files), repository layout, both OpenSpec changes, dependency audit (zero findings), all nine Markdown-fence tests and all 121 diagrams across 530 Markdown files pass. The full Python gate passed 3,830 tests (3,800 passed, 30 skipped, zero failures) in 2,234.723 seconds against the unchanged combined tree. Its checkpoint was absent before the run and removed on success. Local probe tests do not attest hosted Action execution.- Qualify the combined Action updates and actual uv bootstrap on the hosted platform matrix before closing #381–#384; a skipped action is not evidence.
Hosted skill-detection repair history (landed; terminal evidence below): PR #385 submits exact
baf9ef8dafter its full local, skill, wheel, install and forced model-free installed-E2E gates pass. Its hosted admission job successfully executes setup-uv and verifiesuv 0.12.4, but the detector raisesModuleNotFoundError: No module named 'literate_ai'before it can discover the four changed Cargo skills. Bash command substitution inside the conditional masks that exit and reports no changes. This green job is not skill-admission evidence, and the PR must not merge in this state. Install the exact checkout's framework before detection; capture detector output with an explicitly propagated failure before deciding whether it is empty. Execute the real workflow shell in regressions covering successful empty/nonempty output and failed empty/nonempty output, and retain the existing actual catalog-selection tests. Requalify the repaired candidate locally and on the full hosted matrix, requiring actual skill admission. Both new regression methods first failed on the original workflow (five failures, including masked partial output). After the repair, all 13 CI-policy/catalog-admission tests pass. Direct detector execution from the managed installed environment withPYTHONPATHunset selects the root plus the four changed canonical/template Cargo skills against main2f09c295. The repaired tree's fresh fullmake python-checknow passes 3,832 tests (3,802 passed, 30 skipped, zero failures) in 2,105.041 seconds. The checkpoint was absent before the run and removed on success; the complete four-file diff remained unchanged throughout. Final driver/documentation review, lint/format (879 files), repository layout, both OpenSpec changes and documentation gates pass (zero audit findings, nine fence tests and 121 diagrams across 530 Markdown files). The forward commit, exact repaired-commit wheel/install qualification and repaired hosted matrix subsequently passed as recorded in the qualified landing below. The original green admission job is still not evidence that SkillEvaluator ran.- Fail hosted skill detection closed on bootstrap, import, catalog or Git errors; prove the changed skills are admitted on the repaired exact head.
Queue projection follow-up: Adding checkboxes to the independent PR landing section exposed that
summarize_release_roadmap.pyscans a work item through the next work-item heading, including intervening level-two sections. It incorrectly attributed the PR checks to the preceding closed DOC-INSTALL-001. Retain the landing queue's existing plain-list convention for now; do not reopen unrelated completed work or hide PR readiness from the contribution sweep. The local repair now bounds items at visible level-one through level-three ATX headings, reusing the documentation reader's fence/comment handling; deeper acceptance headings and original inline-code text remain intact. Boundary regression scenarios first reproduced the defect; after repair, all 23 summary/documentation tests pass, including a real read-only CLI invocation on CRLF input and rejection of false closure. The current full-scope summary remains 134 targeted items / 120 open / not ready with unchanged identitysha256:894adf71eb2d0b0f3dbdf21ef553950abc8679ef2a377ccab44528e0c79686a9. The fresh full Python gate passed 3,832 tests (3,802 passed, 30 skipped, zero failures) in 2,218.150 seconds against the unchanged tree; its checkpoint was absent before the run and removed on success. Lint, formatting (879 files), layout, both OpenSpec changes and the documentation gate pass (zero audit findings, nine parser tests, 121 diagrams across 531 Markdown files). Hosted integration is the next qualification action; this projection does not replace the contribution sweep.- Bound release-summary work-item parsing at enclosing/sibling Markdown section boundaries; add regressions for independent PR checklists after a closed item and for genuinely unfinished nested acceptance within an open item.
Local default-branch synchronization: The cleanup preview used local
mainat663da09cand incorrectly reported two already-integrated heads as unmerged. After verifying both heads and localmainwere ancestors oforigin/main, and that no worktree was attached tomain, a normalgit fetch origin main:mainfast-forwarded it to landed2f09c295without switching checkouts or rewriting history. The repeated supported cleanup preview reports no candidates or deletions; only dirty worktrees and the seven-day lifecycle-marker age remain reasons for retaining those branches.Current branch cleanup: remote and local
mainagree atf651d534. The supported preview still rejects the two existing terminal markers for dirty worktrees and minimum age. Preserve their original marker timestamps. Recorded exact-head merged observations for the five additional reconciled topic branches (entrypoint compatibility, known-failure checkpoints, null manifest, repository-checkout skill and nested-submodule adoption), then let the same clean-worktree/seven-day gate govern deletion. The repeated supported preview reopens all seven markers and retains every branch for those two reasons, with no candidates or deletions. The five new observations are local metadata, not pushed refs. This does not retire protected maintenance release lines or delete any branch immediately.Branch reconciliation:
5d7a4df6is patch-equivalent to landedc0eafc39(frontend browser verification);5386247bhas identical checkout code/tests to landeda2a5a641(LFS exclusions), with only an obsolete driver pin after it. Their history-only merges preserve current authority.bdf7eca6's null manifest normalization is already present in2b6176bf; retain its explicit empty-array regression case alongside current malformed-manifest rejection. Branch deletion waits for the consolidated history to land on main.f361dd77is also reconciled: its conversion fixes are superseded by3882a75c,6efd21de,536a6921,a926d5c1,80e8f760, and03a1830c; 57 current harness tests pass. Its two downstream-specific container recipes remain recoverable in merged Git history, not framework product inputs. The 1.0 release line contributes previously absent fixes for fresh-grant artifact reuse, generated Python module registration, compiler probe timing, and pinned installed-smoke model selection. Preserve current 1.1 versions and the existing receipt; an old release receipt is not current evidence. The 0.11 line adds HTTP 204 health readiness and an explicit later-grant cache regression; retain 1.0's stronger checkpoint rebinding, not the olderdel planimplementation. Its 0.11 document-pair edition and receipt remain historical, recoverable from the merged parent; 1.1 collateral must still be regenerated and qualified. No existing rendered artifacts were replaced. The 0.9 line contributes only its already-present changelog heading. The 0.10 line's installer recovery, adoption, npm, and cache changes are already present or superseded: preserve reviewed library support, selected npm constraints, durable checkpoint custody, retained refresh, root-plan selection, and scoped operator commands. Its three added installer tests are AST-identical duplicates of tests already on main. Preserve the historical 0.10.0/0.10.1 changelog sections without rolling back those fixes. The 0.8 backports are also superseded by current Windows lock handling, explicit model preflight, and multi-entrypoint service runtime contracts. Retain current user-config custody and factored runtime drivers. Do not restore the one-off 0.8RELEASE_LIVE_GATESbypass: current release gates must still require installed execution, samples, and a current receipt. The 0.7 line's Job Object, paginated-lock, canonical-alias, and worker-HOME fixes already landed asc33ab8fe,72163504,ce4613d8, and24315c97. Preserve current factored CLI/bootstrap implementations and stronger contribution, collateral, and publication authorization gates. Old rendered collateral remains in the merged parent; no binary artifact is overwritten. The current bootstrap, Flavor migration, Component-lock CLI, remote execution and fan-out suite passes 99 tests (2 platform skips). The 0.6 source-intelligence and lock-diff fixes are already present as48f073c0,904699ec, and46a90624; retain later paginated review and Job Object custody instead of restoring legacy process termination. Preserve its release evidence without importing a colliding RELEASE-010 owner: historical PR #177 shipped v0.6.3 froma4b20625, with green run 33020532718. The currentmake source-intelligence-checkgate passes all 25 tests. The 0.5 line's previously audited fixes remain present under FORWARD-PORT-001, with later improvements retained: thread-safe Job Object ownership, authenticated context bundles, atomic parent-follow rollback, model-bound checkpoints, and post-graph cache publication/retirement.096af6d2,0ed5ccf6,718e0d41,cba9956d, and6c1c24aacover its SSH control, cache binding, parent-follow, retry, and retirement changes. Do not resurrect the removed mandatory CodeGraph provider/bootstrap or duplicate parser, dispatch-result and retry definitions. Its superseded planning/deck edition stays recoverable from the merge parent; current DMN/SCXML/LOW-DBC authority and the existing receipt remain unchanged. Retain three additional bounded driver-diagnostic regression tests. Ninety focused checkpoint, process-tree, dispatch, source-cache, inherited session, parent-follow, LOW-DBC and source-promotion tests pass; lint and formatting pass. All surveyed local and remote branch tips are now included in the consolidated Git history; cleanup still waits for landing on main. PR #372 independently landed as9c6ac250after all 15 jobs in run 34561979816 passed. Its merge is included here; combined 1.1 qualification remains open.Latest qualified landing: PR #385 merged as main
f651d5349a98fd326d413248adca5dba34eee97dafter all 15 jobs in run 34612605595 passed on exact candidate269630b47479925995d5918be50a80ed034c4cdd. Fetched main contains that candidate and has the identical Git tree9dc53c13f8d11475e03362d07057417309c0067a. Dependency PRs #381–#384 are marked merged through their actual parent history; each head's ancestry was verified independently. This lands the scoped monorepo receipt check, Cargo test-driver repair, documentation dependencies and CI/admission repairs. It does not include the still-retained HTML implementation, input-read custody repair, proposed ADR 0040 or subsequent roadmap updates, and does not qualify a current project receipt, model generation or the 1.1 release.Current local consolidation: The working branch combines the fetched, already-qualified main
f651d534, scope reconciliationcd8a5b4dand the retained monorepo/projection branch throughda84626d, preserving actual commit ancestry and both sides of the changelog/roadmap conflicts. The two CI-admission subtasks above are now checked from #385's exact-head hosted evidence, not its earlier masked green job. The HTML renderer's fresh full gate now passes 3,941 tests; its qualifiedfb5f1055is included by local merge0afa3e66. The combined tree passes 118 HTML tests and fast gates; its restored installed-wheel probe passes with 68 focused tests. Run the actual non-editable wheel, finish the remaining HTML acceptance, and require fresh combined full local and hosted gates before landing. ADR 0040 was still Proposed at this consolidation; the maintainer subsequently accepted it on 2026-09-12, as recorded in RETAINED-LIBRARY-BRIDGE-001. This local consolidation passes 28 summary/input-read/CI regressions, current driver and documentation review, lint/format (880 files), layout, both OpenSpec checks and documentation (zero dependency-audit findings, nine fence tests, 260 diagrams across the root checkout's 802 Markdown files). The earlier main synchronization also passed 18 targeted tests and all six non-model admission checks for each of five selected skills; advisories were retained. The full-scope summary remains 134 items / 120 open / not ready.Depends on: none
Implementation:
- Map every unresolved active queue item and unmatched actionable TODO to an explicit 1.1 owner.
- Review and integrate current main, all open reviews, and every unmerged branch without losing unique behavior.
- Verify the imported 1.0 fixes with 104 focused tests (2 platform skips), then the 0.11 health, native/Cargo/npm cache and npm discovery changes with 73 focused tests (2 platform skips). Non-health fetches still require HTTP 200; a later authorization reuses sealed bytes with rebound evidence. Complete combined qualification remains the separate local/hosted gate.
- Repair the consolidated library-package test's positional generation-plan selection; bind it to the actual locked root without weakening production contract checks. The seven-module affected suite ran 147 tests successfully (2 explicit platform skips).
- Fix peer-work CI classification: the survey labeled PR #372 green while four required Python jobs were still running. Preserve unfinished and unknown checks, prioritize failures, and cover mixed rollups with regression tests. A fresh live survey now reports that same PR pending and returns no green reviews.
- Repair the missing
project retained-scope refreshentry in the exhaustive public CLI inventory. Fresh combined qualification at97fb2167stopped after 610 tests (18 platform skips) on the command-reference parity check; the detailed command documentation already exists. Preserve the exhaustive test: all ten command-help tests now pass. Fresh combined qualification remains the separate unchecked local/hosted gate below. - Correct peer-work's
merged_into_currentobservation to compare against HEAD independently of the default branch. The integrated branch contains all surveyed tips while local main is older; reporting both fields from main incorrectly hides that distinction. A real-Git regression fails before the repair and passes afterward for all four ancestry combinations; merged lifecycle marking still rejects feature-only integration. All 38 peer-work and command-help tests pass. The live end survey now reports the three collected feature tips as merged into current but not main. - Complete remaining implementation and acceptance in dependency order, retaining architecture approval gates for unresolved significant designs.
- Review and record the stale sample-runner pin exposed by fresh qualification
at
fc2f94d3: 3,603 tests passed, 30 skipped, and the version-authority test failed before the remaining selected tests ran. The configured88f0dfdcclosure differs only by the imported HTTP 204 health-check fix. Recorded its reviewed0a29ca61identity and refreshed documentation authority. All 12 version-authority tests pass, and the checkpoint repair completes the remaining 115 tests successfully (exit 2 explicitly requires a fresh run). The existing receipt is unchanged; combined qualification remains open. Lint, formatting, layout, driver/runner review and documentation validation pass (9 parser tests; 260 diagrams across 801 Markdown files). - Review and locally integrate PR #374 for issue #373, covering typed library rebuild
results without an executable entrypoint, public CLI receipt/result agreement,
and executable/multi-entrypoint compatibility. Prefer the contributed fix
over duplicate implementation; hosted and combined qualification remain pending.
Review at
a3e5923frequested a real CLI receipt/result regression because the contributed tests bypass result construction and receipt finalization. Review feedback retains the original deficiency; the integration adds the missing public CLI result/finalized-receipt/commit regression for all three product shapes. The review is included in milestone 1.1; no issue or PR is closed early. - Reconcile the stale REPAIR-260 sample-only description against current typed Standard lifecycle repair. All 45 tests in candidate-repair contracts, the filesystem repair adapter, and Standard project lifecycle pass. Keep arbitrary diagnostic repair and live provider qualification unclaimed.
- Add explicit UX-270 and OPS-310 queue owners for unfinished prose-only installed-wheel platform fanout and trusted CI/promotion obligations; retain their dependencies, missing acceptance, and 1.1 release targets.
- Land the consolidated branch through required CI; annotate and close resolved issues and reviews, then remove resolved stale branches.
- Repair Windows-only newline translation in skill-update plan fixtures.
PR #375 at
d0e1bc5cfailed four tests in Windows/Python 3.12 job 103185120342: implicit text writes emit CRLF while normative Markdown correctly requires LF. Preserve the parser contract and append exact bytes in all six fixture mutations. A local Windows-default newline emulation reproduces all four errors; require repaired focused tests and fresh exact-head hosted CI. The repaired four tests pass under the emulation and native macOS; 31 combined skill-plan/cache-lock tests and six strict Markdown parser tests pass, as do lint and formatting. Native Windows proof remains open. The superseded local full-suite run at4dc7e620was intentionally interrupted; its checkpoint is diagnostic evidence, not a passing gate.
Evidence:
- Current queue projection includes all unresolved items under 1.1 with no orphan actionable TODOs.
The initial 98 unresolved parents now include 21 additional same-ID owners
for unchecked score-improvement milestones. Pinned-dispatch acceptance maps
to TEST-CACHE-001. The read-only summary's
--require-all-open-targetedoption rejects missing or mismatched release targets, including unchecked acceptance hidden beneath historical closed parents. Five regression tests pass; non-checkbox prose obligations still require the final scope audit. - Complete local and hosted tests pass on the exact consolidated main revision.
- Final live contribution sweep proves no outstanding issues, reviews, or unresolved branches; every closure has immutable evidence annotations.
- Current queue projection includes all unresolved items under 1.1 with no orphan actionable TODOs.
The initial 98 unresolved parents now include 21 additional same-ID owners
for unchecked score-improvement milestones. Pinned-dispatch acceptance maps
to TEST-CACHE-001. The read-only summary's
[ ] INV-160 — Four-language bidirectional qualification
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: Four-language bidirectional qualification
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed INV-160 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
QUAL-120,INV-130,INV-140,INV-150, andUX-270.Implementation:
- Complete the 7 remaining unchecked tasks in the detailed INV-160 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed INV-160 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] BUILD-220 — Define assets, artifacts, and linking
Release target: 1.1.0
Priority: P0
Owner: Framework score-improvement program: Define assets, artifacts, and linking
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed BUILD-220 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
DAG-210.Implementation:
- Complete the 1 remaining unchecked tasks in the detailed BUILD-220 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed BUILD-220 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] APP-230 — Extract public application services
Release target: 1.1.0
Priority: P0
Owner: Framework score-improvement program: Extract public application services
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed APP-230 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
DAG-210,LOCK-200.Implementation:
- Complete the 1 remaining unchecked tasks in the detailed APP-230 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed APP-230 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] APP-240 — Implement the topological standard lifecycle
Release target: 1.1.0
Priority: P0
Owner: Framework score-improvement program: Implement the topological standard lifecycle
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed APP-240 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
APP-230,DAG-210,CTX-215,BUILD-220.Implementation:
- Complete the 1 remaining unchecked tasks in the detailed APP-240 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed APP-240 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] LEARN-265 — Close the authority learning loop
Release target: 1.1.0
Priority: P0
Owner: Framework score-improvement program: Close the authority learning loop
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed LEARN-265 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
REPAIR-260.Implementation:
- Complete the 5 remaining unchecked tasks in the detailed LEARN-265 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed LEARN-265 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] UX-275 — Make initialized projects safely upgradable
Release target: 1.1.0
Priority: P0
Owner: Framework score-improvement program: Make initialized projects safely upgradable
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed UX-275 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
UX-270.Implementation:
- Complete the 4 remaining unchecked tasks in the detailed UX-275 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed UX-275 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] TUTORIAL-280 — Make every tutorial a complete LitAI project
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: Make every tutorial a complete LitAI project
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed TUTORIAL-280 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on: completion of the first implementation milestone backlog,
UX-270, and the stable portion ofUX-275needed to keep tutorial scaffolds current.Implementation:
- Complete the 6 remaining unchecked tasks in the detailed TUTORIAL-280 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed TUTORIAL-280 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] SAMPLE-280 — Replace sample orchestration with a real diamond app
Release target: 1.1.0
Priority: P0
Owner: Framework score-improvement program: Replace sample orchestration with a real diamond app
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed SAMPLE-280 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
UX-270,BUILD-220.Implementation:
- Complete the 6 remaining unchecked tasks in the detailed SAMPLE-280 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed SAMPLE-280 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] SAMPLE-285 — Expand the reusable sample portfolio
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: Expand the reusable sample portfolio
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed SAMPLE-285 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on: the catalog curation is independent; new stateful applications should use the public lifecycle from
SAMPLE-280rather than add more private runner behavior.Implementation:
- Complete the 5 remaining unchecked tasks in the detailed SAMPLE-285 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed SAMPLE-285 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] OPS-300 — Add authenticated evidence storage and verification
Release target: 1.1.0
Priority: P0
Owner: Framework score-improvement program: Add authenticated evidence storage and verification
Storage audit: The existing
FileSystemCASalready provides immutable, content-addressed publication and verified reads. Four regression subcases reproduced unbounded reads of replaced/growing files before size rejection. The repair rejects an initial size mismatch before reading and bounds returned bytes to the expected size plus one during concurrent growth. All 32 storage, publication and read-only-index tests pass in 0.704 seconds, preserving empty and multiple-chunk blobs and same-size digest rejection. Reuse this foundation for the evidence resolver; bounded integrity checks do not authenticate a producer. Full integration qualification remains open.Next action: Provision independent trusted CI evidence, enable the required authenticated receipt policy for this repository, and integrate the evidence stack with landed main. Complete durable CI admission with challenge consumption and retained signed custody; live identity/possession verification alone is not durable receipt authority.
Implemented release-policy binding: Optional
authenticated_receiptpolicy pins independent plan/trust-policy identities and declares bounded portable input paths, fresh revocations, bundle and signed source-store routing. Check reauthenticates after artifact qualification and binds the current-map identity. Publish reauthenticates independently and refuses identity changes; it refreshes again before tagging and pushing. The real signed-project fixture rejects unsigned receipts, changed pins/inputs, path escape, duplicate stores and missing original bytes. A local-Git release test controls verifier outcomes to prove a passing process gate cannot admit failed authentication, post-check revocation and map changes prevent tags, and revocation during tag creation prevents push. A retry with fresh authentication publishes the preserved tag successfully. All 137 release/map/schema/architecture tests pass in 93.276 seconds; final adapter/publication checks pass two tests in 9.399 seconds. Enabling the repository's required policy still depends on independently provisioned trusted CI evidence; no placeholder keys, invented attestations or copied untrusted map pins are acceptable. Lint/format, OpenSpec, repository layout, documentation rendering and reviewed driver/documentation authority pass. Verification passes authority and retains the stale receipt failure and three declared skips. No repository release or repository current receipt was published.PR #389 landed: All 15 checks on exact
f1c572b1passed in CI run34731392910, including both Linux and both macOS versions and every Windows shard/wheel job. The authorized merge workflow landed the PR intomainas02ea3619cbca4f7420541222e4d46ac4a2dbb591at 2026-09-13T03:23:26Z. Local full/wheel/install qualification remains recorded on that exact head. Branches and worktrees are preserved. The newer evidence stack remains separate and requires deliberate integration and fresh combined qualification.Post-merge release sweep: The authoritative forge still has six included, open
1.1issues: #380, #379, #365, #296, #295 and #251. The default policy's{version}expansion selects1.1.0, which mismatches their existing explicit1.1milestone. A read-only sweep with--current-milestone 1.1recognizes all six dispositions and still refuses readiness. Correct that local release-policy mapping before planning; do not move or close tracker work to hide the mismatch. Six unmerged topic branches and two associated worktree states also remain unresolved until the evidence integration lands. All retained work is preserved.Cache-closure branch reconciliation:
git cherryconfirms all three commits unique todocs/1.1-cache-closure(b98428ee,ec7346d0,c7040c2f) are patch-equivalent to changes already in the evidence stack. Its documentation qualification and JavaScript-oracle diagnosis are retained; the later oracle implementation is also preserved. Merge755b0d27records that ancestry with a tree identical to its first parent, retaining the newer oracle repair evidence at the sole roadmap conflict. The retained-library integration carries this merge; branch deletion still waits for landing and retention.Fresh public-publication wheel qualification: Exact
a69747cfpasses installed wheel smoke. Wheel identity issha256:3bd00bfc2a263c725d8dc4990f30150672085c9a7c0bfc2da32e6754707586d7. Run20260913T030808Z-df7aa4is terminal passed; retained stdout is 18,640 bytes,sha256:00c181c5725dc06d77c7637c6d624e7e47e24079a07ff22d3eb01d3991d9aa12, with empty stderr. Named bytes were independently reopened and verified. This predates configured-current gating and release-policy integration.Implemented configured authenticated gate: Read-only
require-current-evidenceaccepts explicit independent plan/policy/revocations, bundle and signed source mappings. It selects only the configured project receipt, repeats full graph verification and rechecks current configuration, authority and map bytes. Unsigned fallback and arbitrary map overrides are refused. Legacy local inspection reportsauthenticated: falseeven for a locally current receipt. A real publish/verify/require-current-evidence flow passes with no-write snapshots and closed result-schema validation; removing source bytes makes the gate refuse. Unsigned receipts and alternate-map overrides are rejected. All 78 focused map/CLI/receipt/schema/architecture tests pass in 43.167 seconds; final path/policy-change and unsigned-fallback checks pass two end-to-end tests in 18.147 seconds. Lint/format, OpenSpec, repository layout, documentation rendering and driver/documentation authority review pass. Verification passes authority while retaining the stale receipt failure and three declared skips. Required release-policy binding and actual trusted CI provisioning remain outstanding; the repository's current receipt is unchanged.Current-evidence gate full qualification: Exact
fb496377passes a fresh complete Python run: 4,385 tests in 2,562.277 seconds, 33 skips and zero failures. The successful checkpoint was removed. Retained evidence run20260913T031649Z-2e4e33and its root step are both terminal passed; stdout is 3,488 bytes withsha256:79555369b8b838e4b633402d3b39c1fbb5a545e3ceae908d4e16c4d0fbb70b44, stderr is 8,028 bytes withsha256:431634077d1c432d8876c830c44d9515c40bf6b14d59d70ed46ecfde13c87ae6. Both files were independently reopened and their sizes/digests verified. This qualifies the current-map command and command-index repair, not the later release-policy authentication or combined main integration revision.Full-run command-index repair: Exact
39730ed6stopped after 620 Python tests in 1,014.851 seconds with 18 skips and one failure: the exhaustive public-verb test foundverify-evidencemissing from the canonical command index. Run20260913T025429Z-b5da1eis terminal failed. Its retained stdout is 1,443 bytes,sha256:34845e48019e4f83966650924550fcac5b3ff670ab0a6fb3ef550138c8ee7210, and stderr is 2,289 bytes,sha256:702883e5c8076a53f359e66b0746ea8d93954b16eabf6cc1d0444282df4042e0; both were independently reopened and verified. The index and command table now include all three evidence verbs, including the newer publication/current gate. All 10 help/command-reference tests pass in 1.519 seconds. The failure is preserved and a fresh full run on the repaired complete stack remains required.Implemented public publication CLI:
project test-receipt publish-evidencecomposes full graph preparation, complete immutable bundle retention/readback and freshly verified atomic publication. Explicit independent plan/policy/ revocations, signed source-store mappings, detached roots and a bundle destination are required. Mutable operator inputs are rechecked during admission; unrelated host/MCP/journal writes stay outside the command's scope. Prior pointers survive failed admission even after immutable writes complete. The closed result contract is registered in the v2 public schema catalog; frozen v1 contracts are unchanged. Four CLI regressions cover a real initialized project publish-then-verify flow with complete bundle readback and schema validation, invalid proof refusal before storage, plan/revocation/source changes after storage, and debug/discovery refusal. All 67 current-map/CLI/schema/ architecture tests pass in 37.129 seconds. Lint/format, OpenSpec, repository layout, documentation rendering and current driver/documentation review pass. Verification passes authority and preserves the stale receipt failure and three declared skips. Release policy/currentness integration and durable CI admission remain open; no repository receipt was promoted.Fresh stored-map verification wheel qualification: Exact
39730ed6passes installed wheel smoke with wheelsha256:4b4f3d6969d755163c01ad527ab987166e4373a141af87ab0c00d411bbef334f. Run20260913T025423Z-17550fis terminal passed; retained stdout is 18,640 bytes,sha256:cf4a396d4fc4a808fcb96b596ea4ea332a3ea3f5cf95b32e021140e6a753d4fc, and stderr is empty. Named bytes were independently reopened and verified. This predates atomic publication and its CLI; latest combined qualification remains required.Implemented atomic current-map publication adapter: The existing project lifecycle lock serializes publication at the configured receipt path. Bounded canonical staging bytes, the retained graph, independent project/policy authority and the prior pointer are rechecked before replacement. An unchanged map still requires fresh verification; failures preserve the prior pointer and remove staging files. Plain inspection reports
authentication-requiredandauthenticated: false; legacyrequire-currentrejects the unauthenticated index. Five publication regressions cover real legacy-to-map replacement, fresh verification on idempotent publication, expiry, policy changes, failed replacement, peer pointer changes, lifecycle lock contention and staging-byte substitution. The first test selection passed 42 tests but included one nonexistent module; the corrected current-map/receipt/architecture selection passes 41 tests in 26.724 seconds. Lint/format, OpenSpec, repository layout, documentation rendering and driver/documentation review pass. Authority passes verification while the stale receipt failure and three skips remain. Public publication CLI and authenticated release policy remain open; no actual current receipt was promoted and the current-map milestone stays unchecked.Implemented stored-map verification: Canonical current maps are freshly verified against independently supplied project/plan/policy authority. Combined graph/plan/proof budgets are checked before bundle reads. Exact stored roots authenticate the original graph's signed retention and actual availability; receipt finalization and project authority are checked again. Read-only
verify-evidence --current-map --bundle-storerejects changed pointers and never infers trusted policy or plans from the map. Six new regressions cover real immutable bundle and initialized-project CLI round trips, authority and budget refusal before reads, missing original graph bytes despite a complete bundle, corrupt plan/proofs, expiry, changed project authority and pointer replacement. All 27 map/CLI tests pass in 14.438 seconds. Expanded revocation, canonical-map, paired-option and result-schema regressions pass with the full focused graph/retention/schema/architecture suite: 82 tests in 18.914 seconds. Lint/format, OpenSpec, repository layout, documentation rendering and reviewed driver/documentation authority pass. Verification preserves the stale receipt failure and three declared skips while passing project authority. Atomic promotion and legacy currentness integration remain open; the map task stays unchecked.Implemented compact current-map preparation: A full signed matrix must bind exact canonical finalized receipt bytes and pass existing project/suite, runner and finalization validation. The closed v2 identity map refers to the receipt, independent plan, matrix and detached retention roots; it is an index, never transferable authentication authority. Preparation preserves all verified bytes and charges the plan to the same graph object/byte budget. Immutable storage preflights the complete plan closure, verifies every object before writes and reads each stored object back. An initial regression exposed missing-leaf publication before preflight; the complete closure check fixes it. Nine map regressions cover real project finalization, canonical receipts, authority changes, exact budgets, complete custody, bad publication/readback, no pointer writes and public schema validation. The corrected evidence/CLI/ schema/architecture suite passes 83 tests in 14.560 seconds; final map/receipt checks pass 19 in 6.073 seconds. Lint/format, OpenSpec, repository layout, documentation rendering and current driver/documentation review pass. Verification passes authority and preserves the stale receipt failure and three declared skips. Atomic current-pointer replacement, fresh currentness verification and legacy receipt integration remain open; the existing current receipt is preserved and the map task stays unchecked.
Fresh preparation wheel and CI-possession full qualification: Exact
e0e1613apasses installed wheel smoke with wheelsha256:53408a606f9a45f9386cf2587767c63315e6ba658305df835c278cb177ea1ee3. Run20260913T024006Z-03628eretained stdout is 18,640 bytes,sha256:af487f02f404e64d768f25ae7c1829460e3c8f38ab978316bbe51e87abb8351a, with empty stderr. Separately, exact6a6b56c7passes the full Python suite: 4,348 tests in 2,444.831 seconds with 33 declared skips. Run20260913T020505Z-81732fretained stdout is 3,488 bytes,sha256:66fbeca6eb37c865ac59044a2b2b3aa8091ce3d99a9ea91cc95267bbd7cc4246, and stderr is 7,991 bytes,sha256:69427cd67af57f6ddffc1ff4cbe20c8864cd9781260e44c83f0e8f09d483e7d3. Both runs are terminal passed and all named bytes were independently reopened and verified. The full run predates public CLI/current-map work; the wheel predates stored-map verification. Latest combined qualification remains open.Fresh public-verifier wheel qualification: Exact
2fa52a72passes installed wheel smoke. Wheel identity issha256:a6a293d73930206ddad940ef85be0bdd77dd977330a97376b0046dfa97e707c9; run20260913T022135Z-84b050is terminal passed. Retained stdout (18,640 bytes,sha256:c85e35279c8bb9ada44a54d4d0be5a2c23e909eebb454290a6c54694e1f501c2) and empty stderr were independently reopened and verified. This predates map preparation; combined full/hosted qualification remains required.Implemented public verification command:
project test-receipt verify-evidenceaccepts a closed v2 plan bound to current project authority, explicit signer policy, fresh revocations, detached signed retention roots and configured read-only filesystem/monorepo/HTTPS stores. It verifies complete retained graph custody and rechecks authority, plan and policy after reads. Compact results never mutate/promote a receipt or grant execution. Twelve CLI regressions cover a real initialized project, retained graph retrieval, no-write snapshots, duplicate inputs/stores, unsigned roots, missing evidence, new revocations, changed authority/policy and refusal of debug-file/MCP side effects. A named pipe refuses without waiting for a writer; regular-file custody remains checked. The broad receipt/schema/graph/architecture suite passes 94 tests in 73.696 seconds; final CLI/receipt/architecture regressions pass 33 in 9.759 seconds. Lint/format, OpenSpec, repository layout, full documentation rendering and current driver/documentation reviews pass. All-gate verification passes authority and retains the unchanged stale receipt failure and three skips. Fresh exact installed and combined full qualification remains required. Durable current-map admission and live CI challenge consumption are the remaining OPS-300 integration work.Fresh live-possession wheel qualification: Exact
6a6b56c7passes installed wheel smoke, includingoidc_run_possession_verified. Wheel identity issha256:dd90f1603d8e8d20965995bb4a2aca71ada0d6ead75c9229ec0f56a639bf1744; run20260913T020501Z-e72446is terminal passed. Retained stdout (18,640 bytes,sha256:c0a238806af5f81814cb8f589b441a1a194010d2f136d8d4a7f892b8090a7736) and empty stderr were independently reopened and verified. This predates the public verification command; its fresh full Python gate remains running.Implemented live CI evidence possession: The exact OIDC audience binding now requires verification of the actual DSSE bytes and signature from the named Ed25519 key. Shared checks enforce independent run context, passed status, matrix coverage and bounded run times without creating a retroactive signer grant. The immutable result retains both authentication results and exact envelope bytes for durable admission. Eight dual-signature regressions plus OIDC/transport, graph, retention, trust, storage, architecture and wheel tests pass 147 tests in 6.716 seconds. Expanded installed probe passes from source, including
oidc_run_possession_verified; fresh exact-wheel proof follows. Live workflow qualification, challenge consumption, current revocations, graph closure and authority-signed persistent receipt admission remain open.Fresh OIDC wheel qualification: Exact
434655cfpasses installed wheel smoke outside the checkout, including synthetic issuer verification and changed audience refusal. Wheel identity issha256:63762b81d2b548b5e41b48bd3819ce0103857f570898be0ecf3429a000b093ee; run20260913T014824Z-d893beis terminal passed. Retained stdout (18,602 bytes,sha256:8e23e4637bf549bf8f292f8cdfa5ca46b940e7e36d1c1a12d6d83857d5252a52) and empty stderr were independently reopened and verified. This predates the issuer loader and live run possession check; it is not live CI admission.Fresh graph qualification: Exact
a3bf141bpasses 4,308 tests in 2,589.497 seconds with 33 skips. Run20260913T011047Z-0e5752is terminal passed; retained stdout (3,488 bytes,sha256:3bfddd0ddb02194f3748e7785ec4952d1a32c2ac26325ad384d225988a4e98a4) and stderr (7,951 bytes,sha256:fafff10727a26e095b56396ea3f6340e8f13e50976e201741f0568c99ccd497d) were independently reopened and verified. This predates retention and OIDC; fresh full qualification ofe15f3b45stopped after 138 tests in 226.009 seconds (eight skips, one error): installed distribution observation omits thePyJWTpayload'sjwtimport alias. Derive aliases from the already verified installed payload paths; do not whitelist the import or weaken source-BOM reconciliation. Add a distribution/import-name regression and rerun the failing self-hosting conformance test before fresh full qualification. Repair now derives package, namespace, extension and single-module aliases from the same verified installed file closure bound into the BOM identity. It does not trusttop_level.txtclaims or data-only/stub paths. The new alias regression, transitive-distribution observation and previously failing self-hosting drift conformance all pass (three tests, 112.217 seconds). Final lint/format, OpenSpec, repository layout, documentation rendering and driver/documentation reviews pass. Verification passes authority and retains the existing stale receipt failure and three declared skips. Fresh full and installed checks must qualify the corrected combined revision.Implemented CI issuer transport: Fresh discovery and keys now come only from fixed GitHub HTTPS endpoints with verified TLS, bounded responses and explicit local freshness policy. Redirects, endpoint substitution, malformed keys and expired/rolled-back fetch windows refuse verification. No ambient credentials, proxy routing, stale fallback or token-selected network destinations are used. Ten transport regressions plus OIDC, evidence, storage, architecture and wheel tests pass 139 tests in 7.178 seconds; lint/format, OpenSpec and layout pass. Documentation renders all 121 diagrams across 538 files, and the reviewed driver pin is current. A live issuer read with the system CA bundle validates 5,547 JWKS bytes and returns snapshot identity
sha256:26f857cb595d76eb31cd5bdd7c9bbd20863e00bf0cb3024ba881cff27f84386b. That short-lived snapshot proves authenticated transport, not receipt admission or current/historical workflow identity. Fresh workflow tokens, DSSE admission and durable receipt issuance remain open; no roadmap checkbox is closed here.Implemented live CI identity profile: Pinned PyJWT 2.14.0 now verifies fixed GitHub/RS256 identity tokens using fresh, explicitly trusted JWKS snapshots. Independent policy requires exact immutable repository/owner IDs, workflow commit, event/ref/subject/environment scope and provider job/run/attempt. The custom audience binds exact evidence, key, run expectation, fresh challenge and policy identities. Strict bounded JSON/base64url parsing, fixed algorithms, constrained RSA keys, ambiguity refusal and explicit time bounds reject token confusion and stale authority. Eleven real-RSA token regressions plus the evidence, retention, storage, schema, architecture and wheel suite pass 157 tests in 6.916 seconds. A malformed-input regression caught interpreter-dependent JSON nesting acceptance; an explicit 32-level limit now rejects it before JWT decode. Final lint/format, OpenSpec/layout, documentation rendering (121 diagrams / 538 files), dependency audit and current driver/documentation review pass. All-gate verification passes authority, retaining the existing stale receipt failure and three declared skips. The synthetic issuer installed probe passes from source with identity verification and changed-audience refusal. This is not live workflow qualification or historical authority: trusted JWKS discovery/refresh, DSSE admission and durable receipt issuance remain open, so the CI adapter checkbox stays unchecked. PyJWT was already an optional locked dependency; it is now directly pinned, with only its version changing in the lock graph.
Implemented retention verification: The retained graph entry point authenticates complete detached locator coverage before I/O and checks every claim against all referencing runs' independent scopes. Only signed, exactly matching locator metadata supplies routing; actual verified retrieval remains mandatory. Detached proof roots count toward the graph's unique object/byte limits, and both run and retention signature passes consume one shared work budget. After retrieval, fresh time/revocations reject shortened remaining retention or a newly revoked store signer even when run signers stay valid. Exact claims and per-run checks remain in the in-memory result; future availability is not asserted. All 146 retention/graph/storage/trust/signature/schema/architecture/wheel tests pass in 7.206 seconds. Ten retention regressions cover complete shared scope, missing/duplicate/extra or changed claims, unsigned/untrusted claims, actual missing bytes, authenticated mirror fallback, and global proof/signature bounds. The expanded installed probe passes from source, including complete retained derivation verification and missing-retention refusal. Lint, format, OpenSpec, layout, documentation and reviewed driver checks pass.
litai verifypasses authority, retains the existing stale receipt failure and skips undeclared lock/provider-none/HTML checks. Exact installed and full qualification of this new revision remain pending. Detached roots must be preserved by the upcoming receipt persistence/admission path.Implemented authenticated run graph: Independent in-memory requirements now bind every exact envelope, expected run, named child and named artifact. The graph verifier checks matrix-to-platform-to-derivation roles and complete reachability before I/O, then compares every signed edge/artifact to the plan. One resolution session retains the full object set; shared derivations are read once. One signature-work budget includes both initial and post-I/O authentication. Fresh trusted time/revocations are required after resolution, with rollback, expiry and mid-read revocation refusal. Fourteen graph regressions cover real signatures and filesystem retrieval, shared DAGs, child/context/artifact substitutions, invalid signatures, missing/corrupt bytes, resource bounds and refreshed-state failures. The combined 119 graph, session, storage, trust, signature, schema and architecture tests pass in 6.837 seconds. The expanded installed probe passes from source with complete derivation graph verification and post-read revocation refusal; exact installed qualification is pending. The 17 wheel/custody tests also pass, as do lint, format, OpenSpec, layout, documentation and reviewed driver checks.
litai verifypasses authority and still reports the pre-existing stale receipt, with lock/provider-none/HTML gates skipped. The in-memory checked graph does not authenticate retention assertions or establish current storage availability; CI identity, complete admission closure and receipt promotion remain open.Implemented closure budget:
EvidenceResolutionSessioncarries one cumulative unique object/byte limit across successive graph reads. It checks pending allocations before I/O, retains exact verified bytes for shared objects, rejects changed reference/locator metadata and incomplete, duplicate or substituted backend results, and permanently refuses reads after any failed batch. Nine regressions cover split-budget bypass, inclusive bounds, shared edges, changed metadata, backend substitutions/corruption, interruption and a real filesystem resolver. All 105 session/storage/trust/signature/record/schema/architecture tests pass in 6.449 seconds; lint, format, OpenSpec, layout, documentation and reviewed driver-authority checks pass.litai verifypasses authority, reports the existing stale project receipt and skips undeclared lock, provider-none and HTML gates. Full qualification of this new session revision remains pending. The session provides byte integrity and resource accounting; complete graph-role authentication, signature-work bounds, current revocation/availability checks, CI identity and receipt admission remain open under the next action above.Implemented assertion-policy slice: Closed public signer, trust-policy, revocation-snapshot and run-expectation records now enforce the pinned-key profile. Issuer/key associations come from trusted configuration. Scope, current key validity and revocation filter eligible keys before authentication; distinct qualified keys must also cover the actual run interval. Correctly signed assertions still fail for substituted subject/media/context, prior invocations, stale or future runs, excessive duration, non-passing terminal status and reduced matrix coverage. Authorized locator assertions require matching object/store scope and sufficient claimed retention. Check results bind exact authenticated bytes plus policy, revocation and independent expectation identities. All 113 trust, storage, signature, schema, architecture and wheel/custody tests pass in 6.511 seconds. The expanded installed probe passes from source with policy-checked storage/resolution and wrong-revision refusal; its exact installed qualification is pending. This does not implement OIDC/CI certificate validation, authenticated transitive closure, post-resolution revocation refresh, retained availability or receipt promotion; the remaining OPS-300 tasks stay open.
Implemented storage ports: Explicit filesystem, checked-out monorepo and HTTPS stores now supply immutable objects through
EvidenceStore. The configuredEvidenceResolversnapshots routing and checks all reference/locator metadata and operation bounds before I/O, then rechecks returned byte size and digest. Missing mirrors may fall back; corrupt mirrors and conflicting locator metadata fail closed. Read-only filesystem access creates no directories or locks. HTTPS uses certificate/hostname validation, explicit credentials, exact media and length, no redirects or encodings, and conditional PUT followed by a verified GET. The real-TLS refusal regression exposed deferred response cleanup while an exception traceback remained live; explicit response closure fixes that leak. The 104 storage, signature, schema, architecture, CAS-bound and wheel/custody tests pass in 5.886 seconds. They include real TLS publication/readback, signed-statement resolution, corruption, missing/duplicate references, bounded reads, stalled-body timeout, and filesystem/monorepo behavior. The expanded installed probe passes from source and will qualify signed statement storage, resolution and missing-blob refusal from the next exact non-editable wheel. Direct-reference resolution is implemented; authenticated recursive closure, claimed-retention admission and receipt promotion remain open.Implemented evidence contracts: Four closed v2 derivation-run, platform-run, matrix and locator predicates are published in the current schema catalog and carried by standard in-toto statements inside bounded DSSE envelopes. Run context binds exact repository/revision/workflow/target and invocation/time values. Immutable named artifact collections and matrix coverage reject duplicates, missing declared cells and wrong envelope media. Locators name explicitly configured stores and immutable objects, never ambient URLs or paths. Local PyCA Ed25519 verification precedes one parse of the exact signed bytes; it retains those original bytes and authenticates distinct configured keys. Standard envelope/statement extensions are ignored; predicate extensions are rejected. Neither a signature nor the producer's own matrix requirements or retention deadline establishes admission policy. The combined evidence, isolation-schema, catalog, architecture and frozen-schema suite passes 73 tests in 5.572 seconds, including substitutions, invalid signatures, thresholds, malformed/oversized JSON, closed-field refusal, time order and matrix coverage.
Installed qualification: At
9ed02d16, the installed signature probe passed but worker wheelhouse export rejected CFFI 2.1.1's three valid empty ZIP directories. The validator now admits those entries while rejecting links, startup hooks, traversal, colliding paths and unrecorded regular files. Adjacent component-sorted path comparison also avoids quadratic prefix allocation; its 8 KiB deep-name regression caught 34,361,369 bytes before repair and passes an 8 MiB ceiling. The 54 focused worker/DSSE/wheel-custody tests pass in 1.433 seconds. Exactbf6d3d90subsequently passed the complete installed-wheel gate, including native dependency wheelhouse installation and signature round-trip/tamper checks: wheelsha256:bd66aef9b7981d121c57e78ddcb4f4ebbf0cc6c21670ed839e02b0dd9a220f90, evidence run20260912T233546Z-96d3b6, retained stdout 18,138 bytes withsha256:ef5c1493b470f3192eca4a4c27414e15615baaca0e19fd58ddad4e1ec856c5aa. Exact predicate revisionc5376bbdalso passes the complete installed-wheel gate: wheelsha256:cf6c81e3c944b3b25ba74c8500cdb95f5a41bf3f2ef8d73dbe247d8fe8fe45d6, evidence run20260912T235028Z-8dc724, retained stdout 18,138 bytes withsha256:9b254973e8c4bdd7c6b3abe66de317d98fce6ea4aae363ff013705becd7fe1d4. Its full Python qualification failed after 368 tests in 906.734 seconds (8 skips): the live progress-reset fixture exceeded its 0.75-second inactivity bound at 0.758 seconds. Retain failed run20260912T235040Z-0abd52;LINEAGE-STREAM-001owns inspection and deterministic deadline coverage before a fresh full run. Exact storage revision47434badsubsequently passed the installed-wheel gate, including signed statement storage/resolution and missing-blob refusal: wheelsha256:1bdca225accfd50e6299373d01871af30a9ee8225ca0400a4fc6e8c1fe7ccab4, evidence run20260913T001328Z-055993, stdout 18,203 bytes withsha256:1567734012c42c4e21d566e4cbe8f90de0833ec045d7201a62dab0ae553e25ed. The fresh full Python run at23ef9d51, including the deterministic deadline repair, passed 4,272 tests in 2,592.680 seconds with 33 skips. Evidence run20260913T001849Z-0ee3e5retains stdout 3,488 bytes withsha256:89013c0830c4345077a483c7770eb8c7e3749b401cce12143638d99d759408b5and stderr 7,915 bytes withsha256:4a0d184e2c3ce94ea0a8868ef740cb0d557d6cfc5726f195d25083943b284fbf. Exact trust-policy revisiondf82f650also passed the installed-wheel gate, including policy-checked resolution and wrong-run refusal: wheelsha256:ee6d0b7fbae85cbebce475bd57bc303fcff9dde64cadd5da4bd883b401817368, evidence20260913T004732Z-eef1df, stdout 18,254 bytes withsha256:bc154197a59241d7d5ffa1bf599bbcff196a60c977b4306e3c1f71047ec7d564. All retained stdout/stderr sizes and digests were independently rechecked. Exact graph revisiona3bf141bsubsequently passed the installed-wheel gate, including planned graph verification and post-read revocation refusal: wheelsha256:16991d31c6861996fe8c17f006ffba826988030236fe904931cfd52eedcc1562, evidence20260913T011037Z-5552c1, stdout 18,315 bytes withsha256:1c3a5a8949acca21eb4b5b2204c81e60f7df33f7e49d1101a3fcf9dfc0c9e3c8. Its retained stdout and empty stderr were independently checked. Full Python qualification remains active at that exact graph revision. These results do not qualify the newer retained-graph entry point or expanded retention probe. Exact retained-graph revisionb1208f2fsubsequently passed its installed-wheel gate, including retained retrieval and missing-retention refusal: wheelsha256:18d2e7ee4e1b904f850d638c95d3711065b3fc09c3bc514ee4fe20c0b2863e1d, evidence20260913T012211Z-b31c6e, stdout 18,377 bytes withsha256:4541cbd81f806bbe55e17d7f05714f3eaf8f61c89a39a051d61fab361f6ddc58. Retained stdout/empty-stderr digests were rechecked. The new live OIDC profile and PyJWT pin still require their own exact installed/full qualification.Earlier full qualification: Exact isolation-schema revision
56f55baecompleted 4,219 Python tests in 2,500.204 seconds with 33 skips and no failures. Evidence run20260912T225942Z-7fb10cretains stdout 3,488 bytes withsha256:401145132a6b14117bed19eeb9c44930e4b29e79debed23828af971cf40ad667and stderr 7,862 bytes withsha256:905c96ff54baa959934b00f3b920f9e0f06b6c4e9506a50d4b33aae61fa4b300; both were reopened and verified. This is predecessor evidence, not qualification of the newer storage, cryptography, wheel or predicate implementation.Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed OPS-300 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
FND-002; contracts can develop in parallel with the lifecycle.Implementation:
- Complete the 2 remaining unchecked tasks in the detailed OPS-300 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed OPS-300 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] OPS-320 — Record durable, privacy-aware derivation journals
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: Record durable, privacy-aware derivation journals
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed OPS-320 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
OPS-300.Implementation:
- Complete the 6 remaining unchecked tasks in the detailed OPS-320 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed OPS-320 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] DEP-330 — Prove real repository and package dependencies
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: Prove real repository and package dependencies
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed DEP-330 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
APP-240,BUILD-220,OPS-300,SBOM-340,SEC-360.Implementation:
- Complete the 6 remaining unchecked tasks in the detailed DEP-330 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed DEP-330 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] SBOM-340 — State dependency completeness honestly
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: State dependency completeness honestly
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed SBOM-340 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
FND-002; required beforeDEP-330completes.Implementation:
- Complete the 5 remaining unchecked tasks in the detailed SBOM-340 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed SBOM-340 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] SEC-360 — Establish production containment
Local batch qualification completed: At clean source
54142493b6df0898e6047c99c97b6aad3ae5bcd9, the complete Python suite passed 4,700 tests in 5,350.196 seconds with 30 skips and no failures. The run20260913T084417Z-570ae2closed successfully and its checkpoint was removed. Retained stdout is 4,189 bytes,sha256:8ba4f9fb7a3371aa1b2538c6889c00576c65eb1ef34bfee88f523d2af5eedd62; stderr is 8,343 bytes,sha256:760356b1447acab96161426104132c4ddc4412b9bf23a187d4d91d12da4bf102. Installed-wheel qualification passed at the same source in a separate clean checkout, run20260913T084716Z-decf5b. The wheel is 2,637,668 bytes,sha256:7224fac23495d827ba58e3de0e50b3a41a12e1df9f947e1a83ad0b36151c2c86; retained stdout is 18,640 bytes,sha256:1d19cb3c83f5e45203e33194146b59eba92f4f4dabacab8b58fed1588cd39292, and stderr is empty. Wheel and retained log identities were independently rehashed. This qualifies the local admission, binding and preflight batch; it does not establish actual Linux containment, native VM execution or authenticated enforcement observations. Integration with subsequent main changes and hosted CI remain required before landing.Combined security integration qualified locally: Exact source
56dc5753passes all 4,704 Python tests in 6,209.870 seconds (30 skips), with no checkpoint remaining. Run20260913T103022Z-21e752closed successfully; stdout is 4,189 bytes, SHA-25673a3c9297dc319a91007842224b09062cfdfa8ef07724b37903a28ef5d2655c6, and stderr is 8,347 bytes, SHA-256c1038089b58fca599009831fe4b3be5d9d19d51848fcf486ce6a775d77d199be. The exact-source installed-wheel run20260913T115100Z-bad011also passes: manifest_build/ci-wheels/run-i1xu59ee/manifest.json, wheel 2,639,951 bytes, SHA-256dae698d314fe6a383cc93c7b7bd0106d9dcd52147d354aa3ac49a4ebe2b2be97. Retained manifest revision, wheel bytes and log digests were independently checked after runtime cleanup. Hosted qualification remains required. This qualifies the admission and preflight implementation; actual production containment, VM runners and authenticated enforcement evidence remain open.Linux cgroup preflight implemented locally: Inspect an existing cgroup-v2 domain leaf through its verified descriptor/mount identity and require exact finite CPU, memory, swap and process limits, empty/unfrozen state and current process-placement/tree-kill write access. No hierarchy is provisioned and no setting or process is changed. All 28 focused cgroup, binding, admission and architecture tests pass. Fixtures explicitly simulate cgroup mount identity; they prove refusal and parsing behavior, not Linux enforcement. The runtime must still bind these expected limits to reviewed configuration, require qualified fair-class scheduling, exclude worker control access, bound storage and wall time, own actual process membership/cleanup and authenticate enforcement evidence. Native Linux and VM qualification remain open. Lint, formatting, OpenSpec, layout and documentation rendering pass (121 diagrams in 539 Markdown files). Authority verification passes; the existing stale receipt still fails. Locks, provider
nonesource intelligence and undeclared HTML artifacts remain named skips. The local full-suite and wheel results above supersede the initial focused-only qualification; hosted qualification remains required.Exact build containment commitment implemented locally: The trusted launcher can bind the existing full isolation request/policy and exact runner, runtime, image, configuration and host-profile references into the existing build request before authorization. Contained admission rejects changed references, wrong source/stage, absent stage policy and local-only minimum levels before spending a grant. Rebinding cannot reuse an old grant. All 21 focused binding, single-use admission and architecture tests pass. Runtime configuration validation, trusted execution, other phase grants, authenticated observations and native qualification remain open; immutable references do not prove any runtime control. No production backend or host provisioning is enabled. Lint, formatting, current driver/documentation reviews, OpenSpec and layout pass; all 121 diagrams render from 539 Markdown files. Verification passes authority, rejects the existing stale receipt, and skips undeclared locks, provider
nonesource intelligence and undeclared HTML artifacts. The local batch qualification above covers this binding; hosted qualification and authenticated current receipts remain required.Single-use admission prerequisite implemented locally: Reuse the existing exact build grant and live verifier. Add durable, atomic single-use consumption before launch, with a fresh validity/revocation check before and after consumption. A crash or failed second check leaves the grant spent. Missing/corrupt stores refuse; initialization is an explicit trusted-operator action, never automatic recovery. Store custody must remain outside worker authority. This prerequisite does not bind a phase/runtime profile or launch a contained process; those runner bindings and authenticated enforcement evidence remain required. Verify concurrent replay, restart persistence, missing-store refusal and revocation during admission: all 18 admission/existing security tests pass, including exactly one winner among eight attempts across four spawned processes. All 11 architecture-boundary tests pass. Lint, formatting, current lifecycle and documentation reviews, OpenSpec and layout pass; documentation renders 121 diagrams from 539 Markdown files. The local batch qualification above covers this prerequisite; hosted qualification remains open. No runner is provisioned or launched by these checks.
Release target: 1.1.0
Priority: P0 design, P1 delivery
Owner: Framework score-improvement program: Establish production containment
Design review: ADR 0041, explicitly accepted by the maintainer on 2026-09-12. The complete SEC-360 delivery scope now supersedes ADR 0039's local-development-only 1.1 boundary; design acceptance does not close implementation or enforcement evidence.
Next action: Integrate the public isolation schemas with APP-240/OPS-300 grant and authenticated-evidence contracts, then qualify the Linux phase runner, native macOS/Windows VM runners and enterprise review in that order. The four existing isolation records are now registered in the current schema catalog and public security API, preserving their unauthenticated, non-authorizing semantics. The schema, policy and catalog suite passes 42 tests in 2.317 seconds, including fresh public imports, exact recomputation, malformed documents and attempted authentication upgrades. Full integration qualification and grant/evidence bindings remain open. Another 24 schema immutability, v2 and architecture-boundary tests pass in 3.179 seconds; documentation renders 260 diagrams in 809 Markdown files with nine fence tests and zero dependency-audit findings, and repository layout is clean. Keep the existing integration candidate frozen during qualification. Execution and host provisioning retain their applicable authorization. Design-only validation passes: 121 diagrams across 538 Markdown files, dependency audit with zero findings, nine fence tests, current documentation review and project authority validation. No backend implementation or containment qualification is claimed.
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed SEC-360 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on: architecture can start immediately; implementation uses
APP-240andOPS-300.Implementation:
- Complete the 6 remaining unchecked tasks in the detailed SEC-360 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed SEC-360 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] PORT-370 — Produce a signed cross-platform matrix
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: Produce a signed cross-platform matrix
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed PORT-370 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
OPS-300,SAMPLE-280, and target containment policy.Implementation:
- Complete the 5 remaining unchecked tasks in the detailed PORT-370 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed PORT-370 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] TEST-380 — Add property, fuzz, and mutation proof
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: Add property, fuzz, and mutation proof
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed TEST-380 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on: contracts as they stabilize; qualification coverage requires
QUAL-120.Implementation:
- Complete the 7 remaining unchecked tasks in the detailed TEST-380 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed TEST-380 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] BENCH-390 — Publish a versioned benchmark and score ledger
Release target: 1.1.0
Priority: P1/P2
Owner: Framework score-improvement program: Publish a versioned benchmark and score ledger
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed BENCH-390 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
QUAL-120,UX-270,OPS-300,TEST-380.Implementation:
- Complete the 9 remaining unchecked tasks in the detailed BENCH-390 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed BENCH-390 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] MOD-400 — Decompose by existing boundaries
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: Decompose by existing boundaries
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed MOD-400 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on:
APP-230; complete afterSAMPLE-280.Implementation:
- Complete the 6 remaining unchecked tasks in the detailed MOD-400 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed MOD-400 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] LIVE-405 — Investigate an optional BEAM/ERTS live-development layer
Release target: 1.1.0
Priority: P2
Owner: Framework score-improvement program: Investigate an optional BEAM/ERTS live-development layer
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed LIVE-405 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on: provider-neutral lifecycle contracts from
MOD-400; the investigation must not block or weaken the existing C++, Python, JavaScript, or Rust paths.Implementation:
- Complete the 6 remaining unchecked tasks in the detailed LIVE-405 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed LIVE-405 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] DOC-410 — Make the golden path and guarantees obvious
Release target: 1.1.0
Priority: P1
Owner: Framework score-improvement program: Make the golden path and guarantees obvious
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed DOC-410 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on: documentation follows the implemented contracts in each wave; final pass after
UX-270andSAMPLE-280.Implementation:
- Complete the 6 remaining unchecked tasks in the detailed DOC-410 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed DOC-410 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[ ] REL-420 — Final release proof
Release target: 1.1.0
Priority: terminal gate
Owner: Framework score-improvement program: Final release proof
Direction: Complete every outstanding roadmap obligation for 1.1, including this previously unprojected milestone.
Conclusion: The detailed REL-420 milestone retains the behavior, scope, migration, dependency, and acceptance authority. Audit already-landed evidence before adding code; preserve unmet acceptance and existing design or execution approval gates.
Depends on: every P0 and milestone-required P1 task.
Implementation:
- Complete the 12 remaining unchecked tasks in the detailed REL-420 milestone; reconcile overlapping queue work using verified evidence, not prose status.
Evidence:
- Every required acceptance outcome in the detailed REL-420 milestone has current, attributable proof and its detailed checklist is reconciled; do not close this queue owner while any required milestone task remains unchecked.
[x] PROMOTE-KIND-001 — Preserve reviewed Component kind during source promotion
- Release target: 1.1.0
- GitHub issue: #371
- Integration boundary: Upstream local proof below is retained as historical evidence; current consolidated qualification is LIBRARY-ARTIFACT-001's open gate.
- Priority: P0
- Owner: coding-agent
- Direction: Project the reviewed graph node kind into promoted component authoring so immutable authority preserves library lifecycle semantics.
- Conclusion: A source-derived library must plan with an import surface and no product entrypoint.
- Depends on: GitHub issue #371
- Implementation:
- Set ComponentAuthoring.kind during promotion and add a regression that promotes a reviewed library node and verifies its component kind.
- Evidence:
- Targeted unit test plus
make python-check(3,651 passed, 33 skipped).
- Targeted unit test plus
[ ] UX-270 — Complete installed-wheel starter qualification on all worker platforms
Release target: 1.1.0
Priority: P0
Owner: Standard onboarding and installed-wheel qualification
Direction: Complete every outstanding roadmap obligation for 1.1, including acceptance described only in prose.
Conclusion: The detailed UX-270 milestone owns the design. Existing macOS live evidence and current offline create/adopt smoke do not prove its still-open private macOS/Linux/Windows generation and cache-hit fanout. Preserve existing proof and earn missing acceptance without fabricating platform results.
Depends on: APP-240, CACHE-250
Implementation:
- Run the installed-wheel starter generation, build, test, execution and independent acceptance journey on each required worker platform using explicitly authorized provider/model and budgets.
- Repeat with accepted-source reuse and current receipts, retaining per-platform artifact and toolchain identities.
Evidence:
- The detailed milestone step 9 has attributable macOS/Linux/Windows fanout receipts; offline scaffolding or simulated workers are not substitutes.
[ ] OPS-310 — Establish trusted CI, receipt promotion, and release workflows
Release target: 1.1.0
Priority: P0
Owner: Release engineering and authenticated CI evidence
Direction: Complete every outstanding roadmap obligation for 1.1, including the prose-only trusted-CI milestone.
Conclusion: The detailed OPS-310 milestone owns four trust-separated workflows. The existing ci.yml is not proof of trusted scheduled generation, receipt-only promotion or authenticated release signing. Preserve opt-in source intelligence under ADR 0019 and obtain approval for significant unresolved trust designs before implementation.
Depends on: FND-004, OPS-300, UX-270
Implementation:
- Retain secret-free PR validation with pinned actions and dependency-free source-intelligence defaults.
- Implement budgeted exact-SHA trusted generation and cache-hit qualification after authenticated evidence and explicit execution authorization exist.
- Implement policy-reviewed receipt-only promotion and exact-commit signed release workflows without weakening required gates.
Evidence:
- All four detailed workflow trust boundaries have positive and negative evidence, including failed authentication, rejected receipt replacement and untrusted or stale release evidence.
[ ] RUST-LIBRARY-TESTS-001 — Validate generated Cargo integration-test targets
Accepted-boundary live preparation: The public signed review and installed-wheel
spec acceptpath now promote the checked-sum boundary with Rust/Cargo/macOS, the actual Standard distribution pin and a canonical eight-case profile. Source inventory remains exact. A re-bound external Cargo oracle passes all eight independent expectations. Earlier source-checkout promotion intentionally had no installed Standard binding and correctly refused qualification; it is retained as a preparation failure, not a framework defect. The canonical profile was promoted into a new project instead of altering earlier audited files.Explicit model repair (implemented): The earlier
spec qualifyprovided no--modelargument and omitspipeline_modelwhen assembling each clean Standard runtime.LITAI_LIVE_MODELalone does not change that recipe binding. Thread an explicit model selector through public planning and every clean lifecycle runtime, preserving the existing default when omitted. Prove the selected model reaches both runs and remains part of ordinary recipe authority before executing the configured OpenCode/model qualification. Repeated clean qualification remains open. The implementation now passes all 54 CLI library qualification, filesystem lifecycle, Standard rebuild, retained recipe and architecture regressions in 10.069 seconds. Public-command coverage checks the same explicit selector reaches the plan and adapter; two separate empty-workspace runtime assemblies retain it. Lint, formatting and OpenSpec checks pass. This does not qualify model execution; the new installed runtime and full integration still require their own gates.Live library capture repair (in progress): Wheel
167376d7passes installed qualification (20260914T022904Z-a3b470); the 2,701,258-byte wheel SHA-256 isa1c1576f5c48e82115733981d6d1168a30f619a80c4d54e3a9255deaa5baa073. Actual wheel/log hashes and terminal nodes were verified. Public Standard rebind correctly invalidated the old promotion audit; a fresh promotion on that wheel retained the accepted boundary and byte-identical lock/profile/oracle inputs. Live qualification then failed at build-intent capture: the evidence recorder unconditionally asks an importable library for executable entrypoint contracts. Preserve failure8bbafa16336e803a7c7bcc6616c133e55b6be3bdd62474df2e4d30299aa4f21a. The capture path now records the library command contract without inventing executable entrypoints. Enabling evidence retention in the existing real library build/package test reproduces the failure before repair and passes afterwards. All 121 local-command, capture, qualification, contract and architecture tests pass in 29.186 seconds with two skips; lint and formatting pass. A repaired installed wheel and another live two-run qualification remain required.Reviewed Rust import authority gap (reproduced): Capture repair
d178d08bpasses installed-wheel qualification20260914T032717Z-7f8cc4; the verified 2,703,102-byte wheel has SHA-256dfdeda4a01cd3c533fe9dc063497c891922908517979a2248e658f00648cd149. Fresh promotion and live generation on that wheel reach execution, where the import verifier refuses the generated package. Direct verifier replay reproduces the rejection against the retained artifact. The accepted interface requires Cargo packageimport-proofand root-levelchecked_sum; generated source has both. Current projection instead derives packagesource, modulesource::checked_sum, and symbolchecked_sumfrom Component/capability names. Failure evidence is5165b854d03b0b468fb12153100f9f926a4fa3902a1005ef5ae3df3c1e6df383. Implement optionallibrary_importsdeclarations in Component authoring, keyed by language and provided capability, naming package, module and exported symbols. Require complete per-language coverage and one package, then insert current locked interface identities during projection. Omitted declarations preserve prior bytes and naming conventions; generated recipes and execution must share this projection. Bind explicit reviewed native package/module/symbol names into authoring, locked import projection, generation and independent acceptance. Preserve conventional defaults for existing libraries and refuse mismatches; do not weaken import verification or change the accepted fixture to fit the derived convention. The authoring/Markdown/current-v2 schema and shared recipe/execution projection now implement these declarations. All 100 authoring, migration, generation, command, schema and architecture tests pass in 10.600 seconds. The native Rust test imports a rootchecked_sumfrom packageimport-proof; prior convention and missing-symbol variants refuse. Lint, formatting and OpenSpec checks pass. The next slice carries these optional declarations through reviewed graph wire decoding, model graph combination, rendered contract review and promotion. Omit empty declarations from canonical graph bytes to preserve existing approvals; bind nonempty declarations into graph/review identities and reject conflicting language/capability names. A real promotion fixture must prove final Markdown retains the declarations before another installed/live qualification attempt. Reviewed graph decoding, model graph combination, rendered contracts and actual signed CLI promotion now preserve these declarations. The 57 focused tests pass in 41.072 seconds, including old graph canonical bytes, conflicting names, and rejection of a substituted import symbol under the original signature. Lint, formatting and OpenSpec checks pass. Installed-wheel run20260914T042843Z-c9fc5epasses ate452fa94: its 2,706,515-byte artifact issha256:d6019a056989cf6b7dc77afe2ff661a3d2648134fb9ef49e0f9abf3a8c046c18. Terminal ledger, retained output hashes, inner verdict and manifest were verified. The measured installed distribution issha256:4351aaf7e92677b0a9b038ff898929dc43939f647a641a67536c0ddc0b08ed16. A new signed review and actual public promotion preserve the accepted native names while keeping specification/interface identities unchanged. The independent harness removes the obsolete crate alias and passes all eight cases against the byte-identical baseline. The fresh live run requires two clean generations, all Cargo test targets and independent acceptance; its result remains pending. Full current integration qualification also remains required. Qualify the corrected installed path with the existing full Cargo targets and two clean model-backed runs before claiming the Rust boundary complete.Live Rust library qualification (verified): The exact candidate wheel
literate_ai-1.1.0-py3-none-any.whl(SHA-256275b9061971dcb405e20fce4d48f98269fdb349f54b6d446a013f0608e7a7584) now completes two clean Sonnet-backed Standard lifecycle runs. Both generated Cargo packages passcargo build --locked --all-targets,cargo test --locked --all-targets, sealed library acceptance, and all eight independent normal/boundary parity cases through a disposable external Cargo consumer importing rootimport_proof::checked_sum. The qualification grants specification release authority with no blockers. Decision identity:sha256:0f3926b86f42385283ad2ed30084d5928505f3a715d4b18ed8430ff91dac6712; run identities:sha256:13156c906b1091349607e41b409b30c19246ed2823366a829ae66dcd7bf028abandsha256:9d21f6809868d4058cc9bffc44d562123e6a7665011287b8aa85dda3b3f2e54b. The retained 1,608,281-byte evidence archive is valid ZIP content and independently hashes tosha256:7eb922da3cbdf0d9bd8f092350bcfb3a927e556b311eb1b0921061ddc034a5b0. Qualification also exposed and repaired a library-generation defect: library Components no longer inherit a productsource/main.rsentrypoint requirement. The focused preparation, lifecycle, Rust generation, and component-node suite passes 143 tests with two skips and 61 subtests; lint and formatting pass.Maintainer decision: The reviewed
checked_sumboundary is accepted for promotion, and live generated-host qualification is authorized (2026-09-13). Perform the concrete promotion and at least two clean Cargo qualifications; acceptance does not itself establish those results or retire baseline source.Release target: 1.1.0
GitHub issue: #379
Priority: P1
Owner: Rust library generation and Standard lifecycle
Static review preparation repair: The checked-addition fixture exposed a separate false claim in Rust Flavor proposals: the generic symbol scanner labels private, nested and test functions as public exports. Static Rust proposals now retain those names as lexical candidates and explicitly state that public reachability is unverified. This preserves source evidence while leaving the actual API to the reviewed Component contract. A regression exercises private helpers, a public function inside a private module, nested unit tests and integration tests through the public derive CLI. The fixture's independent authored oracle passes eight baseline cases and refuses altered cases; this is preparation, not repeated generated-library qualification. All 12 static-source tests pass in 34.936 seconds; the final targeted regression passes after formatting. Lint/format, layout, OpenSpec, documentation and both authority reviews pass. Re-deriving the original signed baseline corrects all seven Rust statements without changing source hashes; the boundary proposal validates against the new observation IDs. Full qualification passed at
7488cd1cec592b6de9e61393834902c22be49213: 4,688 tests in 5,462.411 seconds, with 30 skips, run20260913T131441Z-56f183. The terminal ledger, retained log sizes and SHA-256 digests, clean revision and checkpoint removal were independently verified. Installed-wheel qualification passed at that same revision in run20260913T132457Z-90989b; the wheel is 2,633,126 bytes with SHA-256472dc4928dc4447c79ce043dde1333cd87d29efca62bf3aeef9186df8fb6eda9. Hosted CI remains required before landing this repair. The combined landing candidate also includes the retained-Cargo delivery and graph checks from PR #394 and lock-health work from PR #395, on main through PR #393. All changed code, test, script and schema files match their qualified input branches; shared review metadata is recomputed for the combination. The combined full local and installed-wheel gates now pass atefcb5ec5, as recorded under RELEASE-INTEGRATION-001; fresh hosted qualification remains required before merge.Direction: Resolve issue #379: generated Cargo integration tests must import the library crate correctly and all generated test targets must be checked.
Conclusion: Treat invalid crate-root imports and omitted Cargo targets as correctness defects in existing Rust library support. Preserve independent library acceptance; native cargo test is an additional required gate, not its replacement.
Depends on: LIBRARY-ARTIFACT-001
Next action: Qualify the combined landing revision and repeat clean library qualification with authorized model execution. The projected test driver now runs
cargo test --locked --all-targetsbefore the attributable binary against the exact package with external target output. Native stdout/stderr remains diagnostic evidence; it cannot impersonate the JSON case protocol. Cargo/Rust skills 1.0.1 and their explicit template mirrors clarify integration crate imports while preserving validsuperimports in nested unit-test modules.Implementation:
- Correct Rust library generation authority and run admitted Cargo integration-test targets.
- Retain failing generated command and case evidence.
Evidence:
- Real Cargo 1.94.1 fixtures reject invalid integration imports (E0433), failing native assertions and invalid additional targets before a passing protocol driver can hide them. Crate-name imports and nested unit-test imports pass; protocol failure still refuses after native success. Every case preserves package/lock bytes and leaves no target output in the package. All 57 focused driver, projection, Cargo, factory and skill tests pass; the final five real-Cargo cases also pass after formatting. No model-generated source or repeated full qualification is claimed by these authored fixtures. All six non-model admission checks pass for the root skill and four edited catalog/template skills; normalization reports no remaining pin/mirror drift. Repository lint, format (879 files), layout, OpenSpec (2 items), documentation (9 parser tests, 121 diagrams, 530 Markdown files), and the reviewed lifecycle/documentation authority pins pass.
- Fresh full local Python qualification at
4326ba93passes: 3,827 run, 3,794 passed, 33 skipped, zero failures in 2,239.415 seconds, from test one with a new checkpoint that is removed on success. Three skips are the optional pytest profiling tests; after installing pytest 9.1.1 into that isolated managed test environment, those three pass separately. This does not rewrite the full-run skip count. Wheel qualification and independent byte/origin checks pass for wheel SHA-256518d63dd4022c9516d4260019e8a54c879cba38f81075675f05d01a4d44a82b5(2,437,354 bytes), manifest identitysha256:3253130fde238bc6afa1741913bb5f0abd77f40666a0bdabb9c12d957077c557. Isolated installation and forced offline installed-E2E also pass; neither performs model-backed generation or replaces independent live qualification. - Repeated clean qualification passes without omitted Cargo tests; the exact stacked landing head still requires its hosted merge gates.
[x] RETAINED-LIBRARY-BRIDGE-001 — Bind qualified native libraries into retained build graphs
Public importer admission completed:
project retained-cargo admitnow composes current provider/archive verification, transactional package materialization, complete consumer and external-input custody, measured Cargo/Rust/gate tools, locked metadata verification, every reviewed retained gate and the independently reviewed per-target positive test inventory. A separate exact reviewed source- retirement declaration names sorted importer roots; admission requires those roots already absent, refuses overlap with authored after-state or package destinations, and requires explicit host-execution and source-retirement acknowledgements. It never deletes source. The canonical admission receipt binds provider qualification, binding, workspace plan, gate policy, test inventory, source retirement, captured consumer inputs and every successful command observation. The 120-test focused retained-Cargo regression passes, including fresh absent-package archive custody, real offline registry/Git and external build-script inputs, real Cargo executable attribution, source/tool/input drift, foreign-state preservation and receipt round-tripping. Schema-catalog and wire-version suites add 37 passing checks; lint and formatting pass. Hosted exact-revision qualification remains the merge gate.Native capture size repair (in progress): Hosted run
35059606583fails one macOS/Python 3.14 retained-Cargo standard-harness test at the native-file capture boundary's 128 MiB per-file ceiling. The local graph includes inspector libraries such aslibLTO; the hosted exception does not identify which image exceeds the ceiling. Replace native-only in-memory byte retention with bounded streaming SHA-256 custody, allowing at most 512 MiB per image and 2 GiB aggregate while preserving exact content, file identity, parent and loader-alias checks. Keep generation-authority limits unchanged. Require a real file over the old limit, boundary/aggregate/mutation refusal, native Cargo execution and fresh hosted qualification. Do not waive or omit inspector dependencies to pass the fixture.Native repair live evidence: The complete real retained-Cargo standard-harness test passes in 745.252 seconds with the streaming custody implementation: seven reviewed test targets use dynamic Rust linkage and current native dependency guards. This focused native pass does not close installed-wheel or final hosted gates. The separate resumed baseline at
c7dac9a1completed 4,170 tests in 14,687.225 seconds with seven skips and no failures; its runner deliberately returned exit 2 and requires a fresh run from test one for release evidence. The local volume then had only 4.8 GiB available, so no new full local build ladder was started. Hosted run35069594227qualifies published combined revision4c8a4b07and remains the active exact-revision gate.Native capture repair evidence: Native-only custody now retains immutable streaming digests and byte counts. Generation-authority byte retention and limits are unchanged. The 58 native custody, dependency graph, Cargo runtime/build-output, pinned-input and version-authority tests pass in 9.023 seconds with no skips. Coverage includes an actual 128 MiB + 1 byte sparse file, at-most-1 MiB reads, exact boundaries, growth during reads, aggregate accounting, duplicate references, changed bytes, same-byte replacement, parent replacement and loader aliases. The pre-change diagnostic identified the local graph's largest image as a 76,699,312-byte
libLTO.dylib; it was stopped after identifying that graph, without treating the partial run as a test pass. Repaired full native Cargo standard-harness execution and hosted qualification are still running/pending. Lint, formatting, OpenSpec, repository layout, skill admission and full documentation rendering (121 diagrams / 547 Markdown files) pass.Windows streaming follow-up: PR #441 run
35082166004reached all 2,520 tests in Windows shard 3 and exposed one same-size mutation that Windows did not report while the reader handle remained open. The custody primitive now snapshots the streamed descriptor, closes it, and only then compares the named path so deferred Windows timestamps participate in refusal. All 15 focused native-file tests pass locally; fresh hosted Windows qualification remains open.Positive Cargo test attribution (locally verified): Match machine-readable Cargo test artifacts to the entire reviewed workspace target set, then compare each libtest binary's discovered and passing case names with reviewed expectations. A real protocol probe confirms that explicit
--all-targetsincludes bin, example and bench targets whose metadatatestflag is false; filtering that flag would omit coverage. Custom harnesses can exit zero without test results and must not gain admission through aggregate-count heuristics. Preserve original ordered gates and bind binary custody, per-target observations and complete current inputs into durable evidence before exposing consumer admission. The artifact matcher and strict libtest observer are locally verified by 39 target-graph, execution-input, execution and observation tests. Native fixtures cover inactive/active required features, false test flags, empty targets, equal case names in different binaries and custom-harness zero exits. Missing or duplicate artifacts, foreign output paths, ignored/filtered cases and incomplete named results refuse. The reviewed, versioned test inventory binds the importer, workspace-plan identity and gate-policy identity to exact per-target case names. It covers every selected target, represents empty targets explicitly and requires positive cases overall. Binary discovery cannot author its own expected inventory; a changed target/case set needs current review without requalifying the provider merely for consumer-source edits. The versioned inventory and read-only authority reader now pass 12 focused inventory/observation tests, including exact-byte review, project/plan/policy substitution, omitted targets, changed cases, malformed fields, bounds and symlink refusal. Native artifact selection uses the same target-selection helper. Internal consumer execution now accepts matching reviewed test authority, preserves every original gate and compiles all targets into fresh owned output with the reviewed target/features. It captures every binary before per-target list/run and rechecks the full set, inventory, measured tools and consumer inputs at process boundaries. The 42 focused tests pass, including real Cargo execution across seven standard-harness targets, zero-exit custom-harness refusal, fresh compilation, current/other binary mutation and inventory/session mismatch. The runtime extension passes 46 focused tests: it captures the measured compiler's target-library directory before compilation, then generated loader directories before test execution, binds their identity and rejects file drift. Seven native standard-harness targets pass with dynamic Rust runtime linkage. A separate authored dynamic-library probe on macOS reproduced an unconfigured loader failure (exit -6) and passed both sum/overflow cases with generated and compiler library paths (exit 0); all 12 retained output hashes were verified. This probe is diagnostic evidence, not a consumer admission receipt. Next, qualify caller-supplied runtime paths, system/shared-cache loader authority, paths named by build-script runtime values and arbitrary external build-script inputs, then finalize durable consumer receipts. Public admission remains open.Build-script environment projection (locally verified): Direct retained-Cargo test binaries now receive their own package's checked
rustc-envoutput. The executable authority binds these values; malformed, oversized, foreign or conflicting output refuses, and package-directory overrides are rejected. The 35-test regression passes, including seven native standard-harness targets with a runtime variable lookup checked against its compile-time value. Package isolation, empty values, Windows key aliases and aggregate limits are covered. Seven focused projection/binding tests also verify that empty process values are accepted while NUL-containing values and invalid environment names refuse. This projection does not capture files merely named by variable values; complete runtime authority and durable admission remain open.Generated runtime data (locally verified): The consumer test runner now captures complete recursive
OUT_DIRtrees from the checked compilation stream, binds their identity to each executable, and rechecks bytes, directory entries and physical parents around every list/run. Only known packages and safe, disjoint output trees beneath the fresh compilation directory are accepted. The 45-test regression passes, including native nested-file reads and refusal after a test-discovery process changes the data. Nine focused capture tests also cover missing paths, links, same-byte replacement, parent replacement and shared entry/byte/root bounds. External script inputs and complete native runtime authority still require qualification before durable consumer admission.Foundation qualification (
7815d2bf): Fresh full Python qualification completed from test one: 4,967 tests run, 33 skipped, no failures, 5,387.962 seconds. The source stayed clean, the checkpoint was removed, and both retained outer runner logs matched their recorded byte counts and SHA-256 identities. The terminal ledger is20260914T113911Z-76cb56; PR #400 records this result alongside its installed-wheel and 15-job hosted CI passes. This foundation evidence does not qualify later consumer changes or the combined tree with the subsequently landed worker changes; those gates run separately.Host runtime closure (in progress): The existing portable native dependency observer now accepts explicit library search roots and routes them to ELF, PE and Mach-O observation. Mach-O runtime-name resolution retains ambiguity refusal; all 68 dependency-observer tests pass. The real macOS dynamically linked Cargo fixture yields 608 components and 7,162 edges, including the generated provider, Rust standard library and 597 unmaterialized Mach-O image UUID records. Retained bytes verify against closure
sha256:04324c75b4a1710ddf7d1e3fb2987a02ffe1ff769ba962f14134c88a6c64e66c. Windows PE observation now accepts an explicit execution environment, snapshots case-insensitive keys, and resolvesSystemRoot/PATHwithout ambient fallback. Missing roots, key aliases and unsafe explicit paths refuse before inspection. All 72 dependency-observer regression tests pass; five focused environment tests also verify preservation of the default caller's observation-time host lookup. These simulate Windows selection; native Windows qualification remains required. Native observers now also accept an explicit, bounded artifact-file selection. The complete 79-test observer regression passes, including original-path selection, unchanged default discovery and missing/linked/foreign/wrong-format refusal. A native macOS probe observes the original Cargo test binary in place, retaining 608 components and 7,162 edges under graph identitysha256:57201e28e4c657d1c3625a01052fe8849046bdbd86949937884894ea02c38a23. The 1,927,724-byte graph, original binary digest and exact-path component were independently verified; generated provider and Rust standard libraries remain present. This avoids copying the executable or scanning unrelated Cargo outputs. Materialized native-file custody now binds recorded hashes to copied observation bytes, physical files/parents and complete Mach-O loader-link chains. The 87-test regression passes; nine focused custody tests also cover shared aggregate budgets, duplicate-file references, same-byte replacement and parent/link drift. The native graph captures 81,483,752 bytes, 42 physical nodes and nine loader paths under custody identitysha256:b8cac43f6db097221781b25746519668d170a779977e88d80d7f0c34198dd12f. The initial 64 MiB file limit refused the inspector's 77 MBlibLTO.dylib; the final 128 MiB file/256 MiB total limits capture the actual nine-file set. All 597 unmaterialized components remain explicit and separately unqualified. A composed native-dependency guard freezes its selection and re-observes the whole graph around materialized-file checks. The 92-test regression passes; changed system-image UUID records, dependency edges and file bytes refuse. The real Rust diagnostic passes both dynamic sum/overflow cases through guarded discovery/execution, with all four process-output files verified against their hashes. Native execution identity:sha256:2afa0e009503c52b01acb6cffbb666ae17dd2dd419b7405bca97073f090910e7. A fresh re-observation reopened that same identity; the exact graph and frozen selection bytes are retained alongside the four process outputs. All six retained artifacts match their recorded byte counts and hashes. This remains diagnostic proof; complete consumer environment binding and durable admission are still open. Next, compose this observed closure with process-time binary/input custody and durable consumer receipts, including explicit execution-environment resolution on every host. Directory hashes and package declarations do not substitute for native dependency evidence; the diagnostic fixture is not admission authority.Consumer wheel qualification (
a98277dd): All three installed-wheel evidence nodes passed. The retained logs, canonical manifest and wheel bytes were verified: wheelsha256:076f9f63c91e45a6674de49ed3c149e461365373b23346c9449c90231b81aaa0(2,742,019 bytes), installed Standard distributionsha256:d78fbbe22fbb0e2261362df46deb08df0ada0e07c9c4cb11048efb4dce10bca7(861 members). This qualifies the captured-runtime candidate; the later external input policy and native observer extension need their own complete gates.Consumer full Python qualification (
a98277dd): A fresh run from test one passed 5,018 tests with 33 skips in 5,197.666 seconds. Ledger20260914T130701Z-df4724closed at2026-09-14T14:33:47.108Z; exact clean revision, checkpoint removal and both retained outer output hashes were verified. The stdout is 3,487 bytes with SHA-2561f0e575689d1d4d874a5a4d37da242bee494e7e9593c20917300d6819403e5d0; stderr is 8,655 bytes with SHA-2566c1d07a6f679f2b9c622e9ff537bd5af718e1a7aba2e378b605aab3ab0e072c7. Intentional nested failure-test diagnostics are not outer-gate failures. This qualifies the combined consumer-runtime candidate locally; exact-current hosted CI remains required before landing PR #400.Consumer input wheel qualification (
172a4e63): All three installed-wheel nodes passed in ledger20260914T141205Z-954694, closed at2026-09-14T14:28:26.050Z. The exact clean revision, both retained output files, canonical manifest and wheel bytes were verified. Wheel:sha256:41eb82601fb7dc1506af525ad5730b3d3dd6832daa8fbbd206972bc84d32ad36(2,746,566 bytes); installed Standard distribution:sha256:213db4e3633b6368351d8bffdc276de96d6a9efc9f87437ccb1fa744fe79c786(863 members). This adds packaged qualification for external input policy, build-script environment projection and generated-output custody. Subsequent explicit native artifact selection, native-file custody and re-observation are qualified separately below. This wheel result is not the full release gate.Native guards in internal Cargo test execution: Each exact target now binds a native graph/file guard into process executable authority and re-observes it around discovery and execution. Fourteen focused tests pass, including changed graph refusal after discovery. The current-code real standard-harness fixture passed all seven targets with dynamic Rust linkage (one integration test, 1,334.461 seconds). Source hashes were unchanged throughout that run; its retained output was verified. This cost includes fresh native inspection at every guard. The initial broader integration run predates the callback-binding fix and remains separate evidence. Complete loader-environment coverage and durable importer admission remain open.
Explicit macOS loader paths: Library/framework override and fallback path controls now receive the composed Cargo process environment, including measured Rust runtime directories. The current 94-test focused batch and the real seven-target dynamic Rust harness pass (one integration test, 1,266.264 seconds). Source hashes were unchanged throughout the native run. Complete dyld authority and durable consumer admission remain open.
The loader-path projection now reaches application-seed traversal and retained native re-observation. Inspector dependencies keep their sanitized context, including when applications share transitive images. The current 93-test observer/custody batch passes. Two live fixtures prove different execution under library/framework overrides; the full native observer selects the corresponding replacement and omits the original path. Both retained graphs and selections were hash-verified. Library guard identity:
sha256:7faa502276386742739ca67d184e3bc1d251731e4ea893cc14e532265b116a7e; framework guard identity:sha256:69867281504389995068bb8305adf5ef2e2c7c4753e1f6a7ae50d709f3d76628. These four path controls do not establish complete dyld policy, embedded loader configuration, all image compatibility/security rules or durable admission.ELF direct import selection: Imports containing a slash now bypass the loader cache and explicit library roots. Absolute imports and both
$ORIGINspellings select the direct image; relative imports and unmodeled tokens refuse. Four regression tests exposed the prior behavior and now pass with a 20-test focused observer/custody batch. This is locally tested selection logic; native Linux qualification,RPATH/RUNPATHordering and inheritance, actual loader environment and secure-execution authority remain open.ELF dynamic path tag precedence:
RUNPATHsuppressesRPATHregardless of tag order, including an explicitly emptyRUNPATH. Nonempty path strings with empty directory entries refuse instead of silently dropping the cwd dependency. Four new tests reproduced nine failing cases; all pass in the 23-test focused batch after correction. Inherited path context, environment ordering and native Linux qualification remain open.ELF inherited startup paths: Each executable seed now retains its own first-visit dependency traversal.
RPATHfollows children with the declaring image's$ORIGIN, whileRUNPATHremains direct-only and suppresses ancestor paths for that image's imports. Shared application/inspector images keep separate contexts; interpreter dependencies do not inherit application paths. Six focused tests cover those cases and inspected emptyRUNPATHpresence; the full 30-test observer/custody batch passes. Actual Linux environment ordering, loaded-object aliases/interposition, secure execution and native qualification remain open.Explicit Linux loader environment:
LinuxLoaderPathsprojects a frozen, bounded absoluteLD_LIBRARY_PATHinto runtime traversal after inheritedRPATHand before directRUNPATH. Inspector and dual-role seed contexts stay separate. Colons and semicolons retain order; implicit cwd entries, dynamic tokens, otherLD_*controls andGLIBC_TUNABLESrefuse. Explicit observation no longer treats arbitrary supplied library roots as loader fallback paths. All 52 focused Linux/macOS observer and custody tests pass, including immutable re-observation and portable dispatch. Cargo now passes its composed Linux environment, including measured Rust library directories and package overlays, to this guard. The integrated 53-test batch passes on macOS, including native drift refusal and platform-conditional caller assertions. Native Linux execution, cache/hardware-capability fidelity, aliases/interposition and secure execution remain open.PR #400 landed: Merge
143c268914e7168f5ded3e1271b08cefd71c2ad4retains the exact tree of qualified heada98277dd. All 15 hosted jobs passed workflow34856975448, attempt 2; the Windows installation prerequisite and cancelled Ubuntu sample job passed the same-head retry. The 5,018-test fresh local suite and installed wheel bytes were reverified before merge. This lands the retained-Cargo foundation, not full #380 admission or ADR 0041 containment. The refreshed contribution sweep remains not ready, with 11 included open items and 23 unclassified branch/worktree entries at that snapshot; all were preserved.Native Linux loader semantics: The configured x86-64 worker passed the sample-worker prerequisite profile without installation and with a valid clock check. Six authored C cases prove inherited
RPATHprecedence, non-inheritedRUNPATHrefusal, environment-selected transitive libraries and absolute import stability underLD_LIBRARY_PATH. All 52 exported source, binary and command output files were verified against their manifest; the 25,153-byte archive has SHA-25666c129a229613b0c76eddb2e8d8a6494dcc2ddb2e16d6cf8a08d2b027ae2b217. These are native fixture semantics, not whole-framework source or installed retained-Cargo consumer admission. Private worker configuration remains outside the repository, and original Rust promotion source remains retained.Original-source SDK contribution scope: Issue #407 and stacked reviews #408, #409 and #410 are included in 1.1. Their byte-transfer, authored build recipe and policy/cache composition foundations do not yet establish generated consumer imports, independent ABI/API acceptance, packaging or fresh-worker application execution. Reported SDK qualifications still require review at the eventual integrated head. The current sweep reports 15 included open items and 20 unclassified branch/worktree entries; every branch/worktree is preserved.
Linux framework source qualification: Exact commit
5b9b9b92and treebe5ad59ebd62c089b0e09c8780c089c94583d1e9were materialized through the Git checkout helper after verified shallow Git transport. A managed Python 3.12 runtime ran 44 focused checks: 42 passed, while two real Cargo cases refused target drift. Retained Cargo 1.75 metadata names the inferred librarytest-protocol, whereas the reviewed fixture expectstest_protocol. The fixture now explicitly declares its[lib]name, keeping production comparison strict. The failed run and byte-verified command archive remain retained; qualification of the corrected source and native execution remain required. No source retirement or consumer admission follows from this repair.Corrected commit
0efd95d1passes all 44 focused Linux checks. Its eight native execution cases stop at compiler runtime capture: the distro supplies two regular shared libraries through relative file symlinks. Explicit compiler-only alias custody now retains those links and external target bytes, with physical file/parent and chain revalidation; generated outputs still reject aliases. Local regression initially exposed missing same-byte and parent replacement checks, which are now bound. The build-script fixture also uses Cargo's older supported single-colon directive syntax. Corrected native qualification remains required; both failed exact-source runs and all imported evidence are retained.Commit
02847a4epasses the expanded 61-test Linux batch. Native compilation proceeds, but post-build runtime capture still refuses the distro aliases because that capture combines compiler and generated directories. Alias permission is now restricted to the selected compiler root in both captures; the combined byte and entry budgets remain shared, and mixed-directory regression preserves generated symlink refusal. Native execution qualification remains pending.Linux retained-Cargo source qualification (
ab114d06): All 62 focused checks and eight real native execution cases pass without skips. The seven standard-harness targets execute with dynamic Rust linkage, and binary, data, runtime-file and graph drift refusals pass. The configured worker's inherited loader path contains an implicit cwd entry, which correctly refused; this qualification explicitly setsLD_LIBRARY_PATHempty before the framework prepends its captured directories. The worker configuration is unchanged. The imported 6,249-byte evidence archive has SHA-256b08a94f2191ecf94eefc6594ec972a5d52d3f8d0c4dc8334096ae2c95d514af9. This is source regression evidence, not installed-wheel or consumer admission. Installed-wheel qualification remains active. The fresh full suite stopped at test 38 because neutral recipe composition attempted live CUDA preflight on a GPU host withoutnvcc. The neutral suite now binds authored fixture stack documents and explicitly composes both CUDA samples on CPU hosts; real sample execution keeps its live hardware/tool preflight. Corrected full qualification remains required.Loader foundation wheel (
ec3ace35): All three installed-wheel nodes passed ledger20260914T162305Z-070e97, closed2026-09-14T16:40:43.714Z. Clean source, canonical manifest and retained output/wheel bytes were verified. The 2,753,366-byte wheel has SHA-256622104c392366be20a96015cb328e68f15f0832c674624018d3dff82987f8535; installed Standard distribution isf7ddd1e8ca1c5c9b83d53c53f96fe19fdda60473d12e4de611fcaabbd06d568d(866 members). The ledger explicitly marks its temporary smoke workspace pruned. This predates the inherited ELF context and Linux environment work above; the fresh full Python suite for the same frozen revision remains in progress.Direct native observer root validation: Linux and Windows constructors now use the same bounded absolute-root validator as portable and macOS entry points. The expanded regression exposed six refusals missing in the original code (relative paths, parent traversal and 129 roots on each adapter); all pass after the fix, along with the 81-test dependency/custody batch. This closes direct API bypasses without claiming full loader-environment or consumer admission coverage.
Native custody wheel qualification (
5dfe99d2): All three installed-wheel nodes passed in ledger20260914T144058Z-01394d, closed at2026-09-14T14:57:43.286Z. The exact clean revision, retained logs, canonical manifest and wheel bytes were verified. The 2,750,627-byte wheel has SHA-2569f584977b8a4bd266275e3bcf0a21b1e2b0a8732051080ea02e7fcf0ded0ed2b; its installed Standard distribution issha256:1b9a83172e474fd68046786883e012ca247b5caf182a6eb3fd10a3ff69f91aeewith 865 members. The fresh full Python gate is still running. This packages the native guard; integrating it into actual consumer test execution, complete loader authority and durable admission remain open.Reviewed external directories (locally verified): Importing gate policy names optional environment variables for complete external input trees. Host paths remain in explicit execution configuration; selected directories and bytes bind each consumer run. Disjoint, present, safe directories and entry/byte bounds are required; command/tool overrides refuse before execution. Existing policies retain their wire identity when this field is absent. The 52 focused policy, current-authority, input and execution tests pass. Eight external-input tests, including an additional real offline Cargo build-script read, also pass: the captured tree remains current through its passing native test and later source edits invalidate the consumer capture without changing provider authority. This declares reviewed inputs; it does not infer arbitrary script reads or complete system-loader qualification. Durable receipts remain unfinished.
External Cargo input custody (locally verified): Capture explicitly selected Cargo-home registry/git trees and merged configuration files outside the project before consumer gates. Bind present files and absences, refuse links or later replacements, and require metadata package/target paths to belong to captured consumer or dependency inputs. Preserve ordinary provisioned registry and Git dependencies rather than limiting the bridge to dependency-free consumers. This snapshot must compose with local consumer custody and measured tools; additional paths selected by configuration/build scripts and positive test receipts still need reviewed execution authority before public admission. Internal execution now requires typed captured inputs rather than a supplied source-identity callback. The 46 focused input/execution/file/CLI tests pass, including real Cargo metadata and offline compilation with a vendored registry crate and provisioned Git crate. Cargo's hard-linked Git pack groups are accepted only when every alias belongs to the captured Git tree; external aliases, source edits, configuration drift and uncaptured metadata paths refuse. Full integrated release qualification and complete arbitrary gate-input coverage remain pending.
Public HTTPS delivery (locally verified): Connect the existing fixed-origin, bounded evidence CAS reader to retained-Cargo check/materialize. Require an explicit HTTPS endpoint instead of a local archive, use the binding's exact archive digest/size/media type, and pass fetched bytes through the same current qualification and package verifier. Credentials come only from an explicitly named environment variable. Offline selection must refuse HTTPS before provider discovery or transport, with no cache/local fallback. Prove real TLS retrieval, read-only checking, exact provisioning, redirects/corruption/missing credentials and sanitized diagnostics. This needs no production service or account creation. The public CLI, delivery and importer-current suites pass 49 tests, including eight CLI tests using a real TLS endpoint or explicit offline refusal. Provider authority is supplied by the existing qualification fixture; installed/live end-to-end consumer qualification remains required before release completion.
Native package layout repair (locally verified): Both retained Rust products place
Cargo.tomlatsource/Cargo.toml, declare Cargo packageimport-proof, and expose library target/import nameimport_proof. Existing preflight incorrectly equates the artifact destination with its Cargo package root and Cargo's package name with its import name. Match one reviewed library target beneath each artifact destination, then check its manifest's exact qualified bytes, Cargo package name/version and library name against the reviewed graph before materialization. Refuse ambiguous roots, manifests outside the export, changed manifest bytes and workspace-inherited package identity. Thirty package-manifest, plan, archive-composition and architecture tests pass in 4.829 seconds after correcting a fixture field name; the initial failing test log is retained. Archive verification now requires that checker before returning any retained product. Real directory-archive fixtures contain nested Cargo manifests and Rust source; otherwise valid qualification evidence cannot bypass a changed reviewed manifest, package name or version. The expanded 101-test capture, lifecycle, importer, manifest and architecture suite passes in 35.269 seconds; these authored evidence fixtures do not claim live native compilation. Next, compose importer configuration and filesystem custody into transactional consumption. Native metadata/gates and transactional consumption remain required.Fresh-checkout provisioning custody (locally verified): The file reader now supports an explicit absent-package phase when checking the retained workspace's reviewed after-state. It verifies every authored file and requires each complete artifact destination to be absent, binding that phase into snapshot identity. Qualified package manifests remain mandatory in archive verification; the separate present-package phase verifies their exact on-disk bytes after provisioning. Thirty-three file-custody, archive, manifest and architecture tests pass in 8.704 seconds, including real archive storage with no package directories, authored-lock drift and preservation of concurrent additions. Lint, formatting and OpenSpec pass. Next, materialize under owned transactional custody and prove native consumer gates.
Transactional package publication (in progress): Prepare a complete package tree before publishing it, retaining cooperative write custody and exact before/ after identities. The publication primitive must atomically refuse existing destinations, including empty directories created after preflight. Use native exclusive rename on Linux/macOS and Windows' no-replacement rename; unsupported filesystems fail rather than falling back to replacement. Preserve conflicting directories and changed staging inputs. This is a prerequisite for materializer composition, not proof of qualification, transfer or native consumer execution. The exclusive publication primitive and architecture checks pass 19 tests in 3.549 seconds on macOS, including an empty destination created between preflight and the native operation. Lint, formatting and OpenSpec pass. Linux/Windows native execution and full materializer composition remain unverified. Next, compose bounded archive verification with cooperative reservations for every destination, complete staging, exact reuse of already-present packages and native exclusive publication. Keep authored-file/provider custody through publication; rollback only unchanged owned directories and preserve foreign replacements or additions. Mixed existing/new destinations must support a second boundary without rewriting the first. Return an in-memory custody guard, never a durable admission receipt; native metadata/full gates and source-transfer acknowledgement remain separate requirements. The internal composition now passes 42 focused tests in 9.788 seconds, covering real archive verification, fresh and mixed package provisioning, exact reuse, current-authority drift after publication, competing reservations, partial publication rollback and preservation of foreign additions. Tree custody rejects extra directories, hard links and identical-byte replacements; descriptor-based permission changes preserve a concurrently replaced file. Lint passes. Evidence:
_build/cargo-materialization-final-tests.log. This remains an internal prerequisite; driver and documentation pins are refreshed; lint, formatting and OpenSpec pass, and documentation renders 121 diagrams from 539 Markdown files. Eleven architecture tests also pass in 3.631 seconds. CLI composition and native consumer qualification remain pending. The initial run's two error-type assertion failures are preserved in_build/cargo-materialization-tests.log.Native manifest full Python gate (verified): Clean revision
d59ec7889c9e3fff2e7aee1eb709c0d33cbf8619passes 4,896 tests in 5,671.336 seconds with 33 skips. Session84355exits zero; ledger20260914T062458Z-4aa939and root stdout/stderr hashes are independently verified. The suite intentionally records negative-path child operations; this is the Python-suite/root verdict, not a claim that every nested fixture operation succeeded. Evidence:pn-dev/_build/native-manifest-full-terminal-evidence.jsonunder root_build. This revision predates the new materialization/current-input/execution adapters; those require a fresh full run after their local checks and commit.Cargo cache-marker qualification: The Linux full suite at
0f5bd4adstopped after 4,023 tests (72 skipped) when Cargo 1.75 rewrote only the root GitCACHEDIR.TAGtimestamps during offline metadata resolution. The focused diagnostic reproduced that exact change. Root Git/registry cache markers now retain their pinned bytes and physical identity across timestamp rewrites; nested source markers, content changes and replacements still refuse. All 19 local execution-input and consumer-file tests pass, including the new regression. Fresh Linux and full integration qualification remain required.Local consumer file custody (in progress): The internal reader now captures local files with bounded, link-safe reads and retains file and directory physical identities. It re-enumerates around execution through
current_identity, detecting additions, removals and replacements. Local Cargo configuration remains captured; only declared disposable roots, reviewed Cargo output, Git metadata and reservation metadata are excluded. An exclusion hiding a retained manifest, target source or workspace-ancestor Cargo configuration is refused. Generated packages remain under materializer custody. External Cargo homes/tool inputs, caller composition and positive gate receipts still need separate current-authority qualification. Installed composition against wheel revision9809e516now passes with the current provider archive reopened before materialization: two packages, all five Cargo targets, and 13 passing tests including eight independent checked-sum cases. The real materializer, native graph verifier, measured Cargo/compiler guards, local consumer inventory and bounded executor ran together. Saved output hashes and every target summary were independently checked; no tests failed, were ignored or were filtered out. All five original source files still match their baseline. Evidence:rs-dev/_build/rust-proof/consumer10-terminal-evidence.jsonandconsumer10-positive-observation.jsonunder the root_builddirectory. This proof uses a reviewed local fixture inventory, an isolated Cargo home and explicit absent ancestor-configuration guards. It is not a production importer admission or durable acceptance receipt. The preserved setup failures concerned compiler authority lookup, fixture identity types and cache-directory layout; they stopped before package publication. Next, expose the composed path through a public importer flow with independently reviewed consumer configuration, bounded artifact transport, complete current gate/source authority and durable attributable acceptance. Keep read-only check, package materialization, host execution and acknowledged source retirement as distinct operations; do not reuse legacy harness receipts as native admission. The first public operations now accept explicit reviewed binding/gate identities, provider selection and a supplied local archive:project retained-cargo checkreopens current authority and verifies existing package trees without writes;materializeprovisions complete packages under lifecycle/package custody. Seven CLI tests pass with real archives and filesystem publication, covering exact reuse, missing review, mismatched binding/gates, corrupt archives and preservation of foreign files. Provider discovery is a fixture in those tests; fresh installed CLI qualification and durable native admission remain pending. The combined CLI, importer-file/current-authority, materialization and architecture suite passes 54 tests in 20.310 seconds. Lint, formatting and OpenSpec pass; driver and documentation authority review pins are refreshed. The first test run exposed implicit profiling writes on read-only commands; retained-Cargo operations now suppress unrelated update, telemetry and MCP work. Current-head Windows CI exposed two portability failures: a native-graph test inventory used backslash paths, and directory-entry cached stat records omitted physical identity/link-count fields. Replace cached entry metadata with fresh no-follow filesystem observations in package and consumer custody, preserving hard-link/reparse/replacement refusal; normalize the test inventory to POSIX paths. The regression reproduced the cached-stat refusal before the fix. Freshlstatobservations now pass 49 combined CLI, consumer-file, materialization, actual Cargo graph and architecture tests in 19.038 seconds, including hard-link refusal. Native Windows rerun remains required. The failed CI job retained 8 failures, 2,213 passes and 57 skips; this local result does not convert that job to green. Separately, the clean full Python run atff2ba268passes 4,950 tests in 5,755.632 seconds with 33 skips. Ledger20260914T080755Z-479913, root output byte counts/hashes and clean revision are verified inpn-dev/_build/retained-execution-full-terminal-evidence.json. That revision predates the new CLI and Windows custody fix, which need fresh full qualification. The repaired 0.8.4 candidate now passes current-receipt validation (195 tests, zero failures or skips, 24 Component locks). Its clean full release check remains running; neither the repaired candidate nor earlier resumed gates is release attestation. Validation: 55 focused consumer-file, executor, materializer, importer-authority and manifest-custody tests pass; lint, formatting and OpenSpec checks pass.Measured execution-tool custody (in progress): The generic local tool binding permits a caller-supplied authority identity without an observer guard. Retained Cargo execution must reject that weaker form for Cargo, Rust and retained gate tools, requiring current measured authority and its guard before any subprocess. Preserve the generic binding contract for other callers; enforce the stronger requirement at this retained-admission boundary and test each tool position. The regression reproduced execution with unguarded asserted identities before the fix. The executor now requires measured authority and an observer guard for all three positions, while the generic binding remains unchanged. Forty-eight combined tests pass in 22.031 seconds, plus an observer-drift test in 0.612 seconds that preserves the completed observation and prevents subsequent execution. Lint, formatting and OpenSpec pass; documentation renders 121 diagrams from 539 Markdown files. Pins are refreshed and 33 peer branches preserved. Proofs:
_build/cargo-tool-custody-reproduction.log,_build/cargo-tool-custody-tests.logand_build/cargo-tool-observer-drift-test.log. The running full suite atff2ba268predates this additional fix.0.8.4 live sample recovery: Session
97330now passes loan-risk and playback after the public-interface backport, along with seven other newly reported sample passes. Self-hosting fails closed because OpenCode exits zero with only an intent statement and no source files. Preserve_build/084-sample-contract-live.logand its terminal record in08-dev. One same-revision retry is active as session74322, log_build/084-sample-contract-retry-live.log; no source changes were selected for that retry. Diagnostic checkpoint completion still requires a later fresh release run from gate one.Retained native execution (in progress): Hold materialized-package reservations while running bounded native processes. Recheck importer, package, consumer-input and measured-tool custody before/after each phase. Verify locked Cargo metadata against the reviewed graph before any retained gate and again after the full ordered gate list. Require explicit host-execution authorization and offline gate compatibility; preserve failed command observations without claiming acceptance. Positive test receipts, consumer source-lock resolution and source transfer remain separate required authority checks. The consolidated
24c57372full suite exposed one integration regression after 4,167 tests: reservation acquisition no longer masks bodyOSError, while retained package publication still depended on that old behavior. Translate publication races at the retained materialization boundary after its rollback path runs. The focused materialization, reservation and lifecycle batch passes 50 tests in 54.178 seconds; full candidate qualification remains required. The internal bounded runner now passes 47 execution/current-input/materialization and architecture tests in 19.734 seconds. Tests use process/graph doubles at the execution seam and cover ordering, authorization, graph refusal before build, nonzero gate observations, consumer/package drift, duplicate metadata, compiler/ output overrides, links and offline network-gate refusal. The real native probe remains separate evidence; this adapter still needs full installed integration. Lint, formatting and OpenSpec pass, and documentation renders 121 diagrams from 539 Markdown files. Pins are refreshed and peer branches preserved. Initial override/path assertion failures are retained in_build/cargo-execution-tests.log; final results are in_build/cargo-execution-final-tests.log.Current importer authority composition (in progress): Read the importer project and an explicitly reviewed repository build-plan file under bounded file custody. Preserve every declared command; never infer full retained gates or importing trust from the candidate archive/binding. Binding approval and logical store selection are explicit caller configuration. Compose these inputs with independently reopened provider promotion, current recipes/oracle/command/profile/ driver authority and the measured Cargo/Rust compiler identities. Refuse non-Cargo providers, missing tool bindings and any later input drift. This read-only adapter neither executes gates nor certifies source ownership/transfer. The reader and composition are implemented internally. Thirty-seven importer, archive/materialization and architecture tests pass in 11.205 seconds, including actual reviewed gate-file custody, duplicate/unknown JSON refusal, path/link/size checks, full command preservation, native drift and fixture archive reopening through the composed current inputs. Native provider objects in these composition unit tests are fixture doubles; installed end-to-end importer admission remains pending. Lint, formatting and OpenSpec pass; documentation renders 121 diagrams from 539 Markdown files. Driver/documentation pins are refreshed. Peer survey preserves 33 collectable branches, with no collectable worktrees or green review. The initial six fixture-construction errors (missing required expected output) are preserved in
_build/cargo-current-tests.log; final results are in_build/cargo-current-composed-tests.log.Native consumer probe (in progress): Reopen the installed-qualified
live9archive through current provider/native authority, copy its exact sole package export to an explicit probe input, and stage it using the bounded directory decoder and package-tree custody adapter. A disposable ordinary Cargo workspace will depend on that package by path and run independent checked-sum cases with locked, offline, all-target build/test commands. Keep Cargo output separate and recheck package bytes. This probe does not replace reviewed importer gate/store configuration, full binding admission, monorepo source ownership or acknowledged transfer. Those remain required for the final retained-Cargo bridge. The real native probe now passes: two workspace packages resolve by the intended path, locked/offline workspace build and all-target tests succeed, and all eight independent consumer cases pass. Exact package bytes/physical custody and the generated workspace lock remain unchanged. This used an empty initial Cargo home and no model invocation. Command output hashes and the original five-file source baseline are independently rechecked. Evidence:rc-dev/_build/consumer9/proof.json, with current-authority export input underrs-dev/_build/rust-proof/consumer9-input. This exercises the real package-tree staging and custody helpers, not yet the complete reviewed importer materialization entry point. Keep that distinction in final bridge qualification.Installed Rust qualification (verified):
project8completes two clean all-target Cargo qualification runs using the verified7228d26ewheel. Both retained runs reopen through the installed provider/native/current-command verifiers without diagnostic patches. Qualification identity:sha256:b47c2062317459b1d4e3d23d0a55ad696fcbbea9b0da337c67e35e94f0eb71c1. The 1,578,753-byte archive issha256:eff31a32e25d5e2ec88da577a93168f15eaca6c63fbc613d683597394e4e46c8. Hash, ZIP integrity, exact five-file baseline inventory and both current-authority reopens pass. Evidence:rs-dev/_build/rust-proof/live9-terminal-inspection.jsonbeneath root_build. This establishes provider qualification, not retained Cargo consumer admission or source retirement. Next, compose current import authority, verified package provisioning and full native consumer gates for the reviewed prospective retained workspace.0.8.4 patch-content decision — structured sample contracts: Backport already-landed correctness commit
9699053a4a419a2e6437467598ac79dce1cf738e. It binds the existing loan-risk and playback application contracts as public interfaces, preserving the DMN/SCXML behavior and independent oracle. The current 1.1 branch already includes the repair. The 0.8.4 live failure reproduces the missing authority on the patch line. The backport CLI requiresrelease/0.8.xand its isolated worktree; temporary branch-name and checked-out-branch refusals changed no content. Documentation conflicts were resolved deliberately on that line, preserving its older scope. Backport43b0829epasses the original prompt-projection regression, fast checks and 131-diagram documentation gate. Fresh live release checks remain pending. This is bounded correctness work, with no schema/Flavor or protocol change.Fresh Rust qualification and 0.8.4 live gate: The verified library-command wheel has accepted the unchanged signed review and baseline into
project8. Current lock/interface/import-surface checks preserve the eight-case oracle and exact profile. Two clean all-target Cargo qualification runs are active inrs-dev, session85528, with plan_build/rust-proof/live9-plan.json. The baseline remains retained and source retirement remains unacknowledged. Separately, 0.8.4 session98114exited 2: installed-project live execution passed, thenloan-risk-gate/pythonpackaged acceptance raisedKeyError: Age. Its application contract and oracle require lowercaseageandincome, while DMN inputs useAgeandIncome. The retained context selects the 2,401-byte DMN specification; application-contract delivery through the generation envelope still needs tracing before a repair is chosen. Preserve the failed output and twelve reusable diagnostic gates. Details:08-dev/_build/084-loan-risk-acceptance-failure.jsonbeneath root_build.Library command repair wheel (verified): Installed-wheel qualification at
7228d26e5d1bbe61d7aff99f0824e6ab934652f8passes all three ledger nodes in20260914T070347Z-601d3b. Independent output hashes, clean source revision and release-file validation confirm manifestsha256:3283a354ae958ea7a1344a3ea3a5d357c431552475577eb07a184216d4b9eb7fand wheelsha256:09b222f2b3d380c18d94acc36d6aec35eadaf84749b28025578815f322f3cb75. The exact wheel is installed in the managed Rust runtime; the observed 849-member distribution issha256:0e9f33d874edd3a564b43a4a888caa099ad4bea1ed8a93d0bf9c0855c6fb0f65. Proofs aremw-dev/_build/library-command-wheel-terminal-evidence.jsonandrs-dev/_build/rust-proof/runtime-library-command-observation.jsonbeneath the root_build. Fresh promotion and installed-runtime Rust qualification remain pending; the previous archive and diagnostic-only replay remain unchanged.Capture-repair wheel (verified): The combined installed-wheel gate at
acebd829bd34064520114ab2d71d299097273068passes after the preserved disk-full failure. Its retained manifest identity issha256:9a3f0846e77d22cc942d406495f20d3a3698a677b647c2b414e1145ca5ea06c9, with wheel identitysha256:f0bf6dff71d8468978efe9ab4906268d53d607f94c4fb10297a247be5b347ed1. Ledger terminal state, output hashes, manifest and installed distribution were independently checked. Two fresh authorized Rust qualification runs are now in progress with that noneditable wheel, unchanged reviewed boundary and eight-case oracle. Full archive reopening and retained consumer execution are still required.Library command-authority reopening (in progress): The next real Rust qualification completes two clean runs and emits archive
sha256:63c6d4a6957c69f709be6d8dcd49e5c30c50748a530f1bcc4f801d128823192d. Its current-authority reopening reaches the command verifier, which incorrectly asks a typed library for executable entrypoint contracts. Preserve the archive; verify the library's actual top-level command records without inventing an executable entrypoint. Upgrade library fixtures to carry real typed import surfaces so this failure is covered; keep executable entrypoint checks unchanged. The upgraded fixture reproduces the same entrypoint refusal before the fix. With the fix, 106 capture/lifecycle/importer/file-custody/architecture tests pass in 31.788 seconds, plus the executable-command build/test/cache regression. Missing library command records still fail; lint, formatting and OpenSpec pass. Diagnostic replay reopens both runs from the unchanged live archive with only the repaired verifier function substituted in memory. Current provider/native expectations are independently resolved; no archive bytes or installed files are changed. This diagnoses complete record retention, not qualification or consumption authority. A wheel containing the fix and its qualification remain required before the native consumer proof.Native Cargo process capture (locally verified): Offline diagnostic replay of the preserved Rust archive, supplying only the two deterministic missing index records in memory, reaches another missing record: Cargo's build-process observation. The archive was not rewritten or qualified by this diagnostic. Cargo currently hashes its process/target records without retaining them; product reopening also handles local/NPM builds but lacks Cargo's native format. Retain unchanged Cargo process identities and exact output, target, lock and metadata bytes, then verify all three successful phases, plan/tool/target bindings and the dependency-evidence closure before accepting the sealed artifact. The actual Cargo adapter with a controlled subprocess fixture now reopens both executable and library artifacts after workspace removal, and refuses missing records, foreign compilers/plans, unsuccessful or malformed phases and unbound evidence files. All 59 focused Cargo, capture and architecture tests pass in 29.256 seconds, together with lint, formatting, OpenSpec and documentation checks (121 diagrams from 539 Markdown files). Installed/live verification remains required; this does not grant importer trust or retire source.
Generated-index capture repair (locally verified): The two-run Rust proof qualified under installed revision
e452fa94, with eight baseline parity cases per run. Archive digest243bbc26432252fc0bb2327566872b31312594e18531a7bc11231a3c9ca223ffand baseline bytes verify, and current provider/native authority reopens. Full product reopening nevertheless refuses a missing disabled-source-index record. The filesystem rebuild usesDisabledGenerationIndexer, while capture attached only to lifecycle ports and the importer expected the alternate local-tree index. Retain the actual selected indexer's unchanged identity document at execution, validate both closed index formats against the current run, and cover the real disabled-index capture/reopen path plus missing, substituted and extra-field refusals. All 53 focused capture/filesystem qualification tests pass; the final focused rerun also passes, together with lint, formatting, OpenSpec and documentation checks (121 diagrams from 539 Markdown files). The original archive remains incomplete and preserved; new installed/live qualification is required.Installed catalog repair qualified: Wheel qualification at
26a326c9failed in run20260914T021608Z-c83897: the installed catalog could not resolve the retained-library export-set reference. The failed wheel and runtime remain preserved. Absolute catalog fragments at167376d7pass all 45 focused tests and installed qualification20260914T022904Z-a3b470; actual wheel and terminal log hashes were verified. Rust qualification used that installed wheel and then exposed the separate library build-intent capture defect recorded above.Public evidence retention (local implementation; qualification pending): Add an explicit local evidence-store selector to Standard library qualification. Capture and publish the bounded archive through the existing immutable CAS, verify stored bytes before scratch cleanup, and return its exact reference only after normal current-authority and promotion admission. Reject stores inside scratch or the retained baseline. This is transport persistence, not reviewed importer trust, consumer admission or source retirement. Sixty-nine targeted tests pass, including real local CAS publication/readback through the public CLI with injected lifecycle results, failure before admission, authority drift after publication, and scratch/baseline overlap refusals. These fixtures do not constitute live model-backed qualification or retained-consumer admission. Full and installed qualification of this added command path remain pending.
Release target: 1.1.0
GitHub issue: #380
Priority: P1
Owner: Retained-source boundary transfer and artifact consumption
Direction: Resolve issue #380: replace a retained Cargo crate with a qualified native library without committing generated source or relying on ambient cache.
Conclusion: Record the required reproducible bridge in 1.1. Review an identity-bearing checked-in binding and authenticated exact-artifact retrieval design before implementation; existing native graph consumer bindings alone do not prove retained Cargo workspace consumption.
Integration repair locally qualified: PR #397's Windows shard exposed differing pathname/descriptor
ctimemeanings in CPython 3.12.10. Delivery must compare creation timestamps across APIs and preserve each API's full before/after metadata checks. Deterministic timestamp and mutation regressions accompany the repair. Exactdd99a34apasses all 4,741 local Python tests in 5,724.470 seconds with 30 platform skips (run20260913T181506Z-4f8a12); its terminal root step, retained stdout/stderr hashes, clean revision and removed checkpoint were verified. Its installed-wheel run20260913T182442Z-e6245calso passes, including lock-health HTML: the 2,652,554-byte wheel has SHA-2562bb51234f2604fb685dd9eaa8ae1adb3b7b42afdbfb94e292695dd4399885ddb. All 15 hosted jobs passed on repaired integration head5e17f30ain CI run 34779317980. PR #397 merged it as8448d80a; this qualifies that integration scope, while the later retained-import implementation remains under qualification. The separate Windows wheel retry (34770004200, attempt 2, job103772160996) passed at pre-fix87abbb0c; it does not qualify this repair or establish the original lock-health render timeout's cause.Design review: ADR 0040 was explicitly accepted by the maintainer on 2026-09-12, together with ADR 0041. It covers model-free exact-artifact delivery, ordinary Cargo dependency/membership changes, current qualification custody and acknowledged boundary transfer.
Next action (in progress): Complete the concrete filesystem resolver and custody for current provider promotion/lifecycle, tool and retained-gate inputs, then transactional materialization using the composed archive verifier. Durable local bundle publication and typed Cargo plan reopening are implemented. Importer trust, transactional materialization, native Cargo graph integration and acknowledged boundary transfer remain required by ADR 0040.
Importer authority integration finding: Current
ProjectDefinitionhas no named artifact-store configuration. Existing retained harness authority uses inventory stages with shell command text, evidence paths and working directories; Cargo workspace plans use typed argv/environment commands. Complete the reviewed importer configuration and explicit command projection under custody before connecting the current archive verifier to consumption. Do not obtain current store approval or full gate expectations from the candidate binding/plan itself. Keep store credentials local and preserve full retained stage coverage, including root-stage coverage rules. Tests must reject changed store/review files, dropped stages, altered argv/environment and mid-read drift before artifact retrieval.Native provider input composition (local implementation): Resolve complete Standard commands from the current locked Flavor/tool closure and load the independent library oracle through bounded file custody. Bind its cases, specification, public interfaces and import surface to current provider authority; recheck tools, oracle/harness and provider files before reuse. All 48 focused provider, oracle, qualification, importer and architecture regressions pass in 36.566 seconds. Real lock, promotion and oracle files compose with measured installed fixtures and injected native tool observations; the tests reject changed files/tools, mismatched current authority, oversized harnesses and mutations during capture without invoking a generated runtime. These fixtures are not live qualification. Full and installed qualification, importer gate/store admission and transactional consumption remain required.
Importer binding structure: The current v2 contract pins importer project, configured store name, exact exports, archive, qualification/run identities, verifier/policy and workspace plan. Every graph export, including non-library dependencies, must have one portable nonoverlapping destination in identity order. Parsing grants no consumption authority. All 43 focused contract/schema and architecture tests pass in 3.249 seconds, covering round trips, missing/foreign exports, overlapping paths and rejected trust flags. Lint and formatting pass; full qualification of this new binding remains pending.
Concrete Cargo workspace plan: The binding's workspace reference now has a typed current-v2 record for manifest/lock preconditions and changes, the full native graph, tool identities, target/features and existing gate commands. The existing Cargo graph verifier consumes that same round-tripped graph. Bounded canonical plan reopening checks the pinned bytes, library names and destinations, and refuses output overlap with bound exports. These checks grant no execution or importer authority: current provider/maintainer admission, actual tool measurement, manifest custody, full gate comparison and transactional consumption remain the next required composition. All 54 focused plan, binding, schema, architecture and native Cargo graph tests pass in 3.445 seconds. The plan-derived locked/offline metadata command matches real Cargo's graph without changing its file inventory; this fixture observes metadata and does not execute the recorded consumer build/test gates. Lint and formatting pass. Full and installed qualification of the added plan remain pending.
Current input preflight: A read-only promotion path now shares the existing lock and lifecycle evidence checks without appending a qualification event. Cargo preflight requires independently reviewed importer/binding/store authority, the current qualified provider and selected run, current tool identities and exact retained gate commands. All 51 focused promotion, materialization, plan and architecture tests pass in 4.264 seconds, including persisted promotion reopening, changed-current-authority refusals and rehashed qualification runs naming a foreign Component lock. This returns only a plan; complete archive verification, independently resolved filesystem inputs and before/after custody still need composition before package consumption. Full qualification remains pending.
Archive composition: The read-only importer operation now performs preflight, exact bounded named-store/archive reads and complete product reopening, then checks custody and independently resolves current inputs again before returning bytes. Invalid review and oversized references refuse before transport; substituted or incomplete archives and mid-read input drift prevent return. Authored contract fixtures compose the real preflight, promotion checks and archive/product verifier. They do not provide a production filesystem resolver, perform consumer execution or constitute live model-backed qualification. All 126 capture, lifecycle, promotion, plan and architecture regression tests pass in 33.041 seconds; lint and formatting pass. Shared fixtures now support exact current target/specification and promotion-audit bindings for this composition while retaining their previous defaults. Full and installed qualification of the composed importer remains pending.
Importer file custody: A bounded reader now pins actual project, reviewed binding, plan and manifest/lock bytes and checks the selected before/after state's required absences. Revalidation refuses changed files, unsafe links and concurrent occupation of a planned addition without deleting foreign files. All 48 focused filesystem, archive, plan, project-configuration and architecture tests pass in 7.102 seconds. A real local evidence-store fixture composes archive verification with this filesystem guard; changing Cargo.lock during retrieval prevents product return. Provider authority remains authored fixture data in that test; its concrete filesystem resolver, native tool/gate observations and transactional consumption remain required.
Current provider recipe reader: A read-only filesystem composition now opens the provider's exact lock/catalog and projects every node's current recipe through Standard's model-binding logic. The importing authority explicitly selects the logical provider/model; no coding executable is selected and no generation workspace, cache or CAS is created. All 35 focused reader, node-preparation, locked CLI, archive and architecture regression tests pass in 8.749 seconds. The two-node filesystem fixture works with empty PATH and process launches prohibited, preserves every input byte, and refuses changed dependency, workflow and routing inputs, including drift during projection. Current model changes alter both node recipes. Promotion/lifecycle and native tool/gate resolution still need composition before importer consumption; full and installed qualification of the new reader remain pending.
Current qualification verifier reader: Current profile files now reopen with bounded regular-file custody and duplicate-field refusal. Verifier and case-map derivation is shared by qualification execution, evidence recording and archive reopening, preserving the existing record shape. No original baseline source tree or process execution is needed to compute current expectations. All 73 profile-reader, filesystem-qualification, capture, importer and architecture regressions pass in 26.154 seconds. Changed cases/source identities change the expected verifier, and changed profile bytes invalidate custody. Current promotion, profile-selection authority, installed policy and native tools/gates still need composition. Full and installed qualification of this reader remain pending.
Current persisted promotion reader: The provider head, promotion audits and exact qualification result now reopen through the filesystem authority stores and shared qualified-lock verifier. Current head is checked after reading; revalidation repeats evidence reopening and refuses invalidation, changed audit inputs, substituted records and head drift. All 66 promotion, materialization, current-recipe/profile, importer and architecture regressions pass in 9.135 seconds. The real persisted fixture preserves all bytes and four authority events on success; an intervening invalidation remains intact when admission refuses. Current lock/closure/verifier/policy expectations in this fixture are authored inputs, not a complete production resolver. Their independent derivation and guards, installed authority, native tools/gates and transactional consumption remain to be composed. Full qualification is pending.
Current generation closure derivation: The provider generation snapshot now derives the closure from current locked workflow/routing references and the actual promotion audit, with a nonempty audited subset for every selected Flavor plus forward skills. It rechecks audit bytes and generation custody before return, without reading a historical closure or running a process. All 63 current-reader, promotion, materialization, importer and architecture regressions pass in 9.180 seconds. The filesystem fixture derives a closure when no historical closure exists, rejects a missing selected Flavor despite another audited Flavor and refuses changed audited inputs. Current qualification identity, profile, installed policy and native tools still need to join this derivation in the complete provider resolver; full qualification remains pending.
Composed current provider authority: Project configuration, locked generation, current parity profile, persisted qualification and measured installed Standard binding now join in one guarded read. All run driver/distribution identities must match current installed authority. Revalidation checks installed payload again after promotion reopening. All 51 provider, profile, binding, importer and architecture regressions pass in 16.845 seconds; lint, formatting and OpenSpec checks pass. The fixture uses actual project/lock/profile/promotion files and the real installed observer over fixture distribution files, with authored qualification runs. It refuses project drift, installed payload drift and a payload replacement during promotion revalidation without modifying foreign bytes. This is not live provider qualification. Native tool/command and oracle resolution, importer/gate composition and transactional consumer execution remain the next required work; full/installed qualification is open.
Main integration: PR #397 merged as
8448d80aafter all 15 jobs passed on5e17f30a; #394 and #395 are merged through that ancestry. Retained-import development now incorporates that base while preserving its local capture, archive and promotion repairs. Both changelog histories are preserved, with no overlapping source edits. All 258 focused compatibility tests pass in 134.473 seconds with two skips; fast checks and combined authority review pass. Full-suite, installed-wheel and hosted qualification of the combined retained-import branch remain required.Combined draft qualification: Installed-wheel checks pass at exact
c19d34d0, including installed HTML and lock-health verification. The 2,675,769-byte wheel has SHA-256164e1139cca13c0ab8f81547dfb56adb287c36ff155981270b2f3c2103cc280e; retained manifest identity issha256:684e397896f3ba00564aad975a3e46567346417eaa641d8b7c9131cf4dbfc97a. Run20260913T215248Z-c9562fended successfully; wheel bytes, terminal stdout/stderr hashes and the exact clean source revision were verified. The independent fullmake python-checkrun at that same revision passed all 4,806 tests in 5,917.567 seconds, with 30 platform skips. Run20260913T215303Z-f80e66and its root step are terminal successful; retained stdout/stderr bytes and hashes and the clean revision were checked. These checks cover the combined draft, not completion of provider admission, source retirement or the broader 1.1 release.Retained/observability integration full suite: Exact clean
495ab34bpasses all 4,811 tests in 6,231.392 seconds, with 30 skips. Run20260913T224642Z-0e78caclosed successfully at2026-09-14T00:30:38.958Z; its root step, retained test verdict and output bytes were checked. The 4,188-byte stdout has SHA-25699c0008a0c834add55b942f6a7dfee0bdbf2581cc45351ef7c0acca9f875af7f; the 8,448-byte stderr has SHA-256d9c9e1e572beef778a5b66f97e292644dc215146e3f2258afbc5492adf674765. This verifies retained-product reopening, verification-health rendering and timeout diagnostics together. It predates the publication, wrapping, Git metadata and importer follow-ups; those changes require their own full qualification. Hosted Windows failures and the broader release remain open.Publication integration wheel: Exact
26ab0f1dpasses installed-wheel qualification in run20260913T231537Z-7473db. The retained 2,679,202-byte wheel has SHA-25651a4b6134cd97fc861937fdac69e84c6da031ad7ab0d422e713ffb668c004638. Source revision, clean status, artifact bytes, successful inner result and terminal ledger output hashes were verified. This includes local evidence publication, verification-health rendering, narrow-screen wrapping and fresh Git metadata batching. Its exact retained verification-health HTML artifacts also pass eight browser cases: 1280/390-pixel viewports, JavaScript on/off, current/failed locks, and all check/provenance panels opened and closed. Screenshots and accessibility trees were retained; mobile and desktop visual inspection confirms readable diagnostics and provenance, with no overflow, runtime errors or external requests. Artifact bytes match the installed run's records. Fullmake python-checkat that same clean revision also passes: 4,818 tests in 5,607.722 seconds with 30 skips. Run20260913T232043Z-33b26aclosed successfully at2026-09-14T00:54:23.012Z; terminal verdict and retained output bytes were verified. The 4,188-byte stdout has SHA-2569ac9aa894224e835c806c10f602e49b67a083ed5740a8a0cfa2050384ab28b3d; the 8,455-byte stderr has SHA-256502b6b3b179ee8eab19fa08bab9ca7e91e017760946a8bf03cb6bab4342c7cdd. Hosted qualification remains required; importer work is subsequent to this tested revision.Publication hosted qualification: The
26ab0f1dmatrix34794386006completed with 14 passes and a Windows installed-wheel HTML timeout. Repair25b8d8dfremoves a discarded preliminary source read while preserving current-source publication checks and the existing deadline. Its installed-wheel run20260914T014307Z-9e524cpasses; the 2,679,202-byte wheel SHA-256 is81e00519c0a443e07afc94e0c158fdb081551195712f088ae4bee95dc03f7fc2. Full Python run20260914T014335Z-9238a5passes 4,818 tests in 5,457.319 seconds with 33 skips. Clean revision, terminal verdict, actual wheel and retained root output hashes were verified. The subsequent bounded HTML deadline repair at73dd5809passes all 15 checks in completed CI run34806944053; PR #398 merged asd273686f16981915d1ffe240f5b1d619794f7561. Current importer development remains on its own branch and requires its own qualification.Concurrent CI repair: PR #399 (
d1bdf135) independently raises the installed HTML timeout from 120 to 300 seconds and repository Git timeout from 10 to 30 seconds, with corresponding unit assertions. It overlaps two files in #398 and remains preserved on its own branch. Its terminal matrix passes the Windows wheel but fails Ubuntu/Python 3.14 and Windows test shard 3; four other Python jobs are cancelled. Failed-job logs in run34794931052show configured lifecycle driver28973c4adiffering from computed4c9e5c7f; the runner identity matches. The source changes need reviewed driver repinning and fresh qualification before consideration. It is not green, and the diff alone does not establish the cause of the Windows delays.Persisted promotion identity repair: The promotion verifier now compares typed lifecycle-result identities directly. A persisted-file regression reproduced the prior rejection of matching qualification and now reopens it; the same result stored under a foreign identity still refuses. All 48 focused locked-promotion, materialization, service, journal and lifecycle-runner tests pass in 1.102 seconds without skips. Full qualification remains required.
Persisted archive reopening: Both retained runs pass the composed verifier after the complete archive is stored in the existing immutable filesystem evidence store, the writer and encoded archive are discarded, and a fresh read-only store supplies the verification bytes. The transport directory is removed before product verification. All 59 capture, archive and evidence-store tests pass in 22.836 seconds without skips. This proves storage composition; it does not implement the publication/admission command.
Producer archive completeness: Exact captured package bytes now join the producer’s bounded immutable evidence output under their content identities. An adapter-output archive round trip after scratch-reference cleanup reopens every captured package. All 68 focused archive, capture, filesystem adapter and lifecycle-runner tests pass in 21.862 seconds without skips, including aggregate read bounds and all-or-nothing failures. Durable publication and importer admission remain separate, unfinished work.
Evidence transport: The internal adapter encodes captured immutable records and package bytes in the existing canonical directory archive and reopens them under an explicit pinned blob reference and byte/record bounds. Both clean-run products reopen through the composed verifier after an archive round trip. Rehashed archives with foreign paths, modes or substituted record bytes refuse. All 62 archive, capture, directory-reader and architecture tests pass in 23.759 seconds without skips. This transport does not grant importer trust or publish files; durable publication and explicit admission remain open.
Capture completion custody: The producer revalidates current provider, Standard binding and independent oracle after all package reads, before exposing either retained packages or evidence. Authority changing during the final read refuses with empty public capture state and cleared scratch references. All 64 focused capture, filesystem adapter and lifecycle-runner tests pass in 22.780 seconds without skips. This internal capture check does not complete durable publication or importer admission.
Retained dependency evidence: Every product-reopening run requires the current Component's locked managed-graph record and revalidates raw source and resolved CycloneDX documents, including their exact lifecycle transition. Recomputed bindings must equal the build evidence. Authored command fixtures reopen after cleanup and reject missing records, misstated counts and rehashed foreign Component identities. Two-run contract fixtures retain distinct valid BOMs; a missing second-run source or resolved BOM blocks all package bytes. The combined suite runs 206 tests successfully in 14.296 seconds, with two skips. Source/artifact file-tree custody remains required.
Current recipes during product reopening: Callers must supply every and only current locked Component recipe. Every clean run validates its suite bytes and complete case membership against those recipes; source candidate and provenance recipe identities must also match. Two-run contract fixtures now retain full, distinct generated suites. Missing/extra/changed recipes, a missing second-run suite and a current suite paired with foreign source recipe evidence all refuse before package bytes. This closes recipe composition; complete portable importer admission remains open. The combined suite runs 188 tests successfully in 13.103 seconds, with two skips.
Current generated-suite authority: Producer capture reprojects recipes through the configured runtime adapter against guarded current locked authority and validates retained suite bytes with the existing recipe, specification-reference, invocation and result-shape checks. Every retained case definition and each entrypoint's membership must match that suite. Single and multiple-entrypoint authored fixtures reopen after cleanup; missing suites, changed recipes/locks, rehashed foreign references and omitted cases refuse. A producer-boundary test proves that refusal prevents product-context retention. The combined suite runs 186 tests successfully in 12.285 seconds with two skips.
Generated-test process evidence: Every reopened run requires retained case definitions, attributed observations and exact successful process outputs. Single and multiple-entrypoint fixtures reopen after temporary custody removal; missing records, rehashed foreign phases/plans/entrypoints, failed or duplicate output cases, duplicate JSON keys, non-text outputs and added fields refuse. A missing second-run generated-test observation blocks all package-byte reads. Full source custody still requires verification. The combined capture/lifecycle/ npm/CLI/native-oracle/architecture suite runs 175 tests successfully in 13.367 seconds, with two skips.
Build process evidence: Run reopening checks exact command or npm build records before package bytes. npm reopening reparses bounded retained manifest/lock bytes with the existing authority parser and checks inventory, dependency membership, install/inventory commands and syntax observations. Filesystem package-root discovery remains separate. Missing records and rehashed foreign bindings, boolean/nonzero statuses or extra fields refuse. The combined suite runs 163 tests successfully in 12.533 seconds with two skips. This does not prove complete tree custody or authorization closure.
Execution process evidence: Run reopening checks single and multiple entrypoint execution observations, exact plan/phase/exit/output bindings, each retained unit and aggregate runtime/output records. The real local command fixtures reopen after temporary custody removal. Missing records, rehashed phase/plan/output drift, boolean/nonzero exit statuses, added fields and non-text output refuse. All 161 combined lifecycle/capture/npm/ native-oracle/CLI/architecture tests pass in 11.415 seconds, with two skips; an additional regression proves a missing second-run execution record prevents first-run package reads. These checks do not complete build/test/ root-package/parity evidence closure or durable publication.
npm record retention: The producer now retains existing npm install/ inventory observations, the npm build envelope, target/source authority payloads and exact package manifest, lockfile, inventory and dependency evidence bytes. The lifecycle fixture reopens all of them after temporary source/artifact removal; npm and Node execution are injected fixture boundaries. Existing target/source identity payloads are AST-identical. All 154 combined npm, command-adapter, capture, lifecycle, native oracle and architecture regressions pass in 12.495 seconds, with two skips. Required-record validation and durable bundle publication remain open.
Composed library oracle evidence: Product reopening now requires the caller-reopened current Component lock and library oracle. It checks every clean run's exact root-package acceptance, retained harness, cases and results before package bytes. A substituted observation in the second run blocks retrieval of the first run's product. Missing oracle/harness/case/ result/root-acceptance records and current oracle interface drift refuse. All 101 capture, lifecycle, native JavaScript oracle, filesystem, CLI and architecture regressions pass in 7.504 seconds. The two-run contract fixture does not compile source or prove native regeneration.
Current provider admission evidence: Capture checks current prepared authority, installed Standard distribution/policy and the reloaded acceptance oracle after all clean runs. Final admission repeats those checks and reopens promotion evidence before any qualification record or authority append. Mid-run harness, unchanged-case oracle authority, installed distribution and promotion-record drift refuse. Capture failure exposes no partial records and performs no package reads. All 149 focused CLI, capture, lifecycle, promotion, binding and architecture regressions pass in 10.116 seconds. These injected boundary tests do not prove live generation or durable bundle publication.
Current Standard binding: Product reopening now requires the caller's typed current Standard driver and compares every run's driver, policy and framework-distribution identities with it. Consistent historical records cannot substitute for that current binding. Typed fixtures now use a real driver identity in their receipts; missing bindings and changed policies or distributions refuse before package bytes. All 136 focused capture, lifecycle, CLI, binding and architecture tests pass in 27.644 seconds, without skips. Independent binding resolution/guards remain caller-owned; full qualification and importer admission remain open.
Baseline inventory retention: The parity producer now retains its existing checked
SourceInventoryunder the pinned baseline identity, using the shared evidence limit. Offline parity requires that record and restores it through the existing inventory parser. The authored subprocess fixture reopens its inventory after baseline deletion, and missing inventory refuses product bytes. All 98 combined qualification/CLI/host/operational/architecture tests pass in 27.627 seconds, without skips. The record contains metadata, not original file contents or execution custody; those proofs and full qualification remain outstanding.Finite parity compatibility correction: Review found that the new strict parser/comparison used artifact JSON v1, inadvertently rejecting all floats and large integers. Live and retained observation comparison now use the existing qualification semantic JSON digest. Positive authored subprocess and product-reopening cases cover finite decimals, exponent formatting, nested numbers and large integers; ambiguous JSON and type-changing results still refuse. All 98 combined qualification/CLI/host/operational/architecture tests pass in 25.007 seconds, without skips. Full qualification remains open.
Offline parity evidence: Product reopening requires the caller's current qualification profile and minimum clean-run count. It reconstructs exact verifier/case-map authority and reopens profile, parity, case and process records. Commands, integer zero statuses, true validity flags and bounded raw outputs must agree; strict parsing and canonical comparison recompute every pass. Missing records, changed profiles, excess output and rehashed false passes refuse before package bytes. The two-run fixture now records typed profiles and the real observation format with injected process results. All 97 focused qualification, CLI, host/operational and architecture tests pass in 28.737 seconds, without skips. Actual source/launcher custody, importer trust and full qualification remain required.
Parity result correction: The filesystem producer now parses strict UTF-8 JSON, rejects duplicate fields and non-finite values, and compares canonical result identities. Python's boolean/number equality can no longer turn changed results into passing parity; integer/floating representations also remain distinct. Authored subprocess cases prove refusal and preserve valid null, whitespace and key-order equivalence. Malformed output bytes remain retained with a failed validity flag. All 95 combined qualification, CLI, host/operational and architecture tests pass in 21.641 seconds, without skips. Offline parity profile/process reopening and full qualification remain open.
Packaged-library process evidence: Every product-reopening run verifies the root library's packaged generated-test and smoke process records before bytes. Exact plan, integer zero exit status, text outputs, complete passing suite cases and observable smoke output are required. Rehashed foreign plans, failed/boolean exit statuses, malformed or duplicate case results, missing records and blank output refuse. The real local adapter's record writer also reopens after scratch cleanup with injected process results; this is not native execution proof. All 143 focused tests pass in 23.198 seconds, with two skips. Invocation custody, parity and full qualification remain open.
Current command authority evidence: Product reopening requires typed current command contracts for exactly the locked Components. Every run checks the request builder/sandbox, tools, export shapes and existing action names, and reopens exact contract/command/entrypoint records before package reads. Missing/extra authority and changed builders, tools, outputs or commands refuse. Authored local-command records verify after scratch cleanup; typed two-run fixtures cover mandatory composition. All 141 focused tests pass in 17.946 seconds, with two skips. This does not authenticate launched argv, measured executable bytes, historical timing or importer trust; full and hosted qualification remain required.
Historical build authority evidence: Every run reopens its exact local source index, security request, build intent and grant before package reads. Component/source, classification, compiler, privilege and declared-output bindings must match the realized plan. Rehashed index substitutions and missing second-run records refuse; the real local-command adapter's records reopen after scratch cleanup and reject rehashed foreign, revoked or privilege-mismatched grants. Expired historical records do not authorize new execution. All 140 focused capture, lifecycle, local-command, source-generator and architecture tests pass in 16.953 seconds, with two skips. Attributable execution time, current builder/command/policy, importer trust and full qualification remain required.
Complete run membership evidence: Product reopening derives every clean run's ten evidence memberships through the existing qualification validator, validates accepted-node custody and binds the generated source tree, SBOM and test suite. Two typed library lifecycles with distinct workspaces reopen retained products after their byte custody is removed. Missing lifecycle records, substituted source BOMs and a foreign workspace claim in another clean run refuse before package-byte reads. All 158 combined capture, lifecycle, adapter, oracle, delivery, archive and architecture regressions pass in 10.504 seconds, with two skips. These contract fixtures do not prove native generation, provider authentication or importer admission.
Extended capture evidence: Typed lifecycle reopening reuses the producer's existing validators and refuses missing plans, nodes, schedules, memberships or context records. Duplicate references decode once and still fail membership checks. Independent library acceptance requires exact current lock/oracle bindings and retained harness/case/result records; rehashed foreign packages, incomplete/duplicate observations and altered results refuse. The authored JavaScript fixture reopens actual Node oracle results after package cleanup. These focused observations do not prove generated provider qualification or importer trust. All 166 combined capture, lifecycle, native oracle, delivery, archive and architecture tests pass in 13.100 seconds, with two skips.
Capture draft evidence: The combined capture, lifecycle, archive, delivery and library-acceptance regressions pass 153 tests in 6.641 seconds, with two platform skips. Root/receipt binding rejects missing records, rehashed foreign receipts and run/target/policy/evidence substitutions. The root service fixture uses contract stage identities and does not prove native qualification; authored local-command and JavaScript fixtures separately exercise retained observations. Full required-record closure, current provider authority, publication and importer admission remain unfinished. Full-suite and hosted qualification of this capture draft remain required.
Cargo hosted Windows fixture repair: Run
34758840357at79d49b21failed one Windows shard-3 test during fixture publication, before its header/body assertions (2,084 passed, 53 skipped). The test inadvertently used its deliberately short 100 ms stall timeout for TLS setup and PUT. Publish with the normal timeout and require the exact size-mismatch error for header refusal; retain the short timeout for the stalled GET. Production transport limits are unchanged. The failed job log is retained, and fresh hosted qualification is required.Cargo integration qualification: Combined delivery and native metadata verification at
23529f15c482ada37bbcf66fceb05a8a481db9f0passes the full Python suite: 4,704 tests in 6,241.402 seconds, 30 skips, run20260913T110226Z-989a09. The terminal ledger and retained stdout/stderr sizes and hashes were independently checked; the checkpoint was removed. Installed-wheel qualification also passes at that exact revision, run20260913T114836Z-d84e77: wheel 2,639,338 bytes, SHA-2569c6bd4e1737fdbf079bfe9865f95dce3d1a4e5ee0bd5fecf793abf1b304aeb2a. The retained manifest revision and wheel bytes were checked after cleanup. All 51 focused delivery/archive/HTTPS/Cargo/architecture tests pass in 4.141 seconds. Lint/format (1,018 files), OpenSpec, layout and both authority reviews pass. The first documentation render timed out on an unchanged sample; the complete retry rendered 121 diagrams from 539 Markdown files. Verification passes authority and retains the stale receipt failure and three declared skips. Hosted CI remains required before merge. This proves the combined helpers, not importer admission, transactional materialization, native build execution or independent source-retirement qualification.Native graph verification implemented locally: Add an internal, read-only check of Cargo metadata against explicit reviewed local packages, dependency declarations and resolved edges. Require exact roots, names, versions, aliases, dependency kinds, target predicates, selected features, workspace/default membership and Cargo build/test targets. Exercise real offline metadata from a retained workspace, including renamed normal/dev/build dependencies and missing or substituted edges. This check must not infer qualification, fetch packages, rewrite manifests/locks or retire source. Importer evidence admission and transactional materialization remain separate required work. Ten tests pass against real Cargo 1.94.1 metadata with a fresh Cargo home and offline locked resolution. They cover normal/dev/build aliases, transitive local packages, workspace globs, an inactive optional dependency, conditional dependency kinds, exact output location, missing tests and opaque package IDs. File inventories remain unchanged and Cargo creates no build output. This is metadata proof; it does not qualify compiled consumers, provider evidence, toolchain custody, source retirement or other platforms. The 11 architecture-boundary tests, lint/format (1,016 files), OpenSpec, layout and current driver/documentation reviews also pass; 121 diagrams render from 539 Markdown files. Verification passes authority and retains the existing stale-receipt failure, with locks, provider
nonesource intelligence and undeclared HTML artifacts skipped. The combined qualification above supersedes this earlier local-only checkpoint.Export-set contract implemented: Reuse
ArtifactBuildGraphand its exact link closures for ADR 0040's sealed export set. Bind the selected library link plan and every library's existing export/import metadata, rejecting absent, duplicate or substituted products. Preserve declared non-library dependencies and multi-output build graphs. This content contract is not qualification or permission to materialize; evidence admission, Cargo bindings, retrieval and transfer custody remain required before exposing consumption. The 56 focused export-set, graph, library-product, schema and architecture tests pass in 4.452 seconds; the final seven export-set tests pass in 0.047 seconds, including grouped roots with shared dependencies. Lint/format (964 files), OpenSpec and repository layout checks pass. The contract is registered in current v2 without changing frozen v1. Documentation renders 121 diagrams from 539 Markdown files; lifecycle and documentation reviews are current.litai verifypasses authority and retains the stale-receipt failure with three skips. No provider qualification or retained Cargo execution is claimed.Archive reader implemented: Add bounded, pinned-byte validation for the existing canonical directory ZIP before retrieval can expose any members. Reject unsafe paths, cross-platform collisions, links, special modes, excessive entries/bytes and noncanonical ZIP encodings. This is a transport prerequisite; binding admission, retrieval and materialization remain open. The 46 focused archive, remote transport, library export and retained-export tests pass in 1.067 seconds. Lint, formatting (1,013 files), OpenSpec, repository layout and current lifecycle/documentation reviews pass; documentation renders 121 diagrams from 539 Markdown files.
litai verifypasses authority and reports the stale receipt, with lock, source-intelligence and HTML gates skipped. Full integration and hosted qualification of this reader remain open.Bounded delivery implementation: Explicit file input and configured HTTPS CAS retrieval now feed the canonical directory reader, with caller-selected offline policy and byte/entry limits. Reuse the existing evidence store's fixed-origin TLS protocol, exact metadata checks, explicit bearer credentials and no-redirect behavior. Local input checks refuse aliases, size drift and replacement without writing or removing foreign state. All seven delivery tests pass in 0.575 seconds; the combined delivery/evidence-store/archive/architecture suite passes 41 tests in 3.866 seconds, including actual local TLS and credential-redaction failures. Lint, formatting, OpenSpec, layout and current authority reviews pass; documentation renders all 121 diagrams from 539 Markdown files. Project verification passes authority, rejects the stale receipt, and skips undeclared locks/HTML plus provider
nonesource intelligence. These checks prove delivery integrity only; current provider/importer admission, transactional materialization, native Cargo graph integration, boundary transfer and full local/hosted qualification remain open.Proposal checks: Documentation authority is current; 27 documentation Python tests, the nine Mermaid parser cases, and full rendering of 121 diagrams in 531 Markdown files pass. These validate the proposal's repository integration, not Cargo bridge behavior or source-retirement acceptance.
Depends on: LIBRARY-ARTIFACT-001, ADOPT-MONOREPO-001
Implementation:
- Review an ADR for artifact retrieval, target/toolchain identity, Cargo binding, and incremental transfer custody. The maintainer explicitly accepted ADR 0040 on 2026-09-12.
- Implement checked-in artifact binding and disposable materialization after design approval.
Evidence:
- Fresh offline-model CI checkout resolves exact qualified artifact without ambient cache and rejects identity or toolchain drift.
- Retiring the replaced source preserves all retained workspace build and test gates.
[x] DOC-DEPENDENCIES-001 — Remediate audited documentation-tool dependencies
- Release target: 1.1.0
- Priority: P1
- Owner: OpenSpec and Mermaid documentation tooling
- Direction: Resolve dependency findings exposed by fresh 1.1 documentation qualification.
- Conclusion: A fresh npm ci and npm audit report five high-severity affected packages in the extract-zip/Puppeteer dependency chain and js-yaml. This is tooling dependency evidence, not proof of runtime exposure. Review compatible dependency updates and verify rendering; do not apply an unreviewed major-version force fix.
Audit references:
GHSA-jmr9-qjv8-65gv,GHSA-7pqw-9j4j-h8q3andGHSA-2883-xcg3-v3hh. Successful documentation rendering alone is not a dependency-security disposition. - Implementation result: Upgraded the pinned documentation browser to
Puppeteer 25.10.0, whose browser installer no longer depends on extract-zip,
and remove its obsolete YAML/configuration dependency chain. The resulting
lock contains neither extract-zip nor js-yaml. The existing Mermaid CLI
11.16.0 already declares Puppeteer 25 compatibility, so preserve that pin.
Raise only the contributor documentation-tool Node floor to 22.12; CI already
selects Node 24, and generated-application runtime requirements remain unchanged.
Make documentation validation run
npm audit --audit-level=highover all staged development dependencies before rendering, so future high/critical findings or unavailable audit evidence cannot be mistaken for a passing gate. The fresh installed graph and complete rendering have been verified locally. - Next action: Complete. The update is an ancestor of merged
ad92a655, and the documentation tool tree is unchanged from qualified0ae183d8. Fresh release-wide qualification remains with RELEASE-INTEGRATION-001. - Depends on: none
- Implementation:
- Review advisory reachability and select compatible fixed documentation-tool versions.
- Update package constraints and lockfile with reviewed dependency identities.
- Evidence:
- Fresh npm audit reports zero vulnerabilities; installed
npm lsconfirms Puppeteer 25.10.0 and browsers 3.2.2 without extract-zip or js-yaml. A deliberately unavailable audit endpoint exits nonzero before parser or renderer execution; no audit bypass or browser sandbox relaxation was added. - Fresh tooling installation passes OpenSpec (2 items), Mermaid parser tests
(9), and full rendering (121 diagrams across 530 Markdown files).
Node 22.12 separately passes the same full rendering set. The final
documentation/OpenSpec/lint/format/layout/driver-review chain passes on
Node 26.8.2; 30 focused tooling/documentation Python tests also pass.
One intervening full render failed with a browser protocol timeout at
docs/history/roadmap/release-branching-model.md:67. Its cause remains unproven: three isolated attempts using the supported Chrome fallback passed in 274/155/156 ms, followed by the complete unchanged gate passing. Retain this intermittent failure for hosted qualification; do not hide it with a timeout increase or a passing minimum-Node run. - Exact committed update
0ae183d81b71d80ce8cff8a1d5a98deedbdbd9c9passes a freshmake python-check: 3,827 tests run, 3,794 passed, 33 skipped, no failures, 2,135.721 seconds. The checkpoint was absent before the run and removed on successful completion; no resumed repair is presented as fresh qualification. The three optional pytest-profiler skips remain distinct from the separately exercised predecessor's tests. - The same exact revision passes wheel smoke outside the checkout and retains
the tested 2,437,352-byte wheel, SHA-256
a0097059d4fce4ce328f140b36a027e71c7bda01a504a8ffc646d5108549344c, in qualified-files manifestsha256:33b6c93d9c4d4941a469efdf752ded31acb089a42e0b21a0695768ba104e75a5. Its installed initialization origin reports0ae183d8; this is not qualification of the later roadmap/ADR drafts or a published release. - Exact
0ae183d8also passes isolatedinstall-checkand a forced offline installed-CLI/command-worker end-to-end run (765 CLI files, identitysha256:6302fad79325b42e18ed165f76bdab4f8b8ff2597085559b0dd675507d3f9408). The publication fixture identity issha256:648fdb68634ea6de2a421707566e4b8c529a0e7db4b282cc544a198bb899bfd1. This exercises installed packaging and deterministic command workers, not live model generation or release publication. - Full integration qualification and hosted CI pass. PR #388
retains the local full Python result (4,206 tests, 30 skips, no failures),
wheel, installed E2E and fast gates at
692041a1; the retained Python ledger and output digests have been rechecked. That commit's tree is identical to mergedad92a655, whose complete 15-job hosted matrix passes, including native documentation rendering on all three OSes. The previously reported browser timeout remains historical evidence; no timeout increase or exclusion was needed for those passes. A current documentation check also reports zero npm vulnerabilities and passes all nine fence cases and rendering. The exact tooling files remain byte-identical to0ae183d8, including the audited dependency lock.
- Fresh npm audit reports zero vulnerabilities; installed
[ ] ACCEPT-JSON-001 — Verify finite numeric application data without changing contract JSON
Release target: 1.1.0
GitHub issue: #405
Priority: P1
Owner: Standard independent acceptance and product evidence
Direction: Accept finite fractional inputs and outputs in portable and library acceptance.
Conclusion: Issue #405 reproduces integer-only contract serialization applied to product data. Keep canonical contract JSON v1 unchanged and introduce a finite product JSON boundary with integer-only identity compatibility.
Depends on: none
Implementation:
- Use finite product JSON for oracle identity, cases, harness arguments and exact result comparison.
- Reject non-finite data before application or harness execution.
Evidence:
- Fractional portable and library cases reach real verifier execution and retain exact identities.
- Existing integer-only identities stay stable and contract JSON still rejects floats.
- Full Python regression and clean-commit installed-wheel smoke pass.
make finite-acceptance-check passes 58 tests (two platform skips), including real
Python and JavaScript numeric invocations, exact fractional mismatch detection,
non-finite rejection before harness invocation, and integer-only identity compatibility.
Lint, formatting, strict OpenSpec and project authority validation pass; documentation
renders 121 Mermaid diagrams from 539 Markdown files. The full Python check is in
progress. Native downstream acceptance and distribution adoption require their own
qualification; these fixtures establish only the framework's product JSON boundary.
The clean-commit wheel passed at 63215c55. Main then advanced through retained
qualification and worker parallelism, leaving the draft unmergeable. Reconciliation
preserves upstream payload capture and adds exact finite-product reopening while
keeping the general contract JSON reader strict. All 62 focused tests pass, including
retained fractional Node results. The earlier full Python run was interrupted for
this reconciliation; current full regression, wheel and hosted checks remain pending.
Qualification repair: Current hosted regression exposed a stale lifecycle-driver implementation pin after the branch source changes. All four changed implementation files were reviewed; the exact driver pin and documentation authority are refreshed. All 12 version-authority tests now pass. Resume full qualification. The old full-suite runs are interrupted diagnostic evidence, not a passing gate.
Numeric representation review: PR #406 at
32677ee3passes 21 focused tests, but an additional real JavaScript invocation rejects0.75 + 0.25when the oracle expects1.0: its result is encoded as1. Exact numeric-value comparison now accepts that result while preserving the original bytes and identities for invocation, cases and observed results. Retained reopening reads the actual identity-bound result, validates canonical product encoding and checks its value against the oracle. Real portable/library cases, changed fractions, booleans, signed zero, integer precision and malformed retained bytes are covered. The failing review proof and subsequent focused evidence are retained separately. Fresh consolidated full, installed-wheel and hosted qualification remain required.
[x] WORKER-009 — Preserve lifecycle parallelism through remote dispatch
- GitHub issue: #401
- Priority: P1
- Owner: Framework execution dispatch contracts and worker lifecycle
- Direction: Issue #401: build --jobs N --worker must preserve the requested bounded parallelism.
- Conclusion: Bind jobs to the exact dispatch request and worker rebuild invocation. Scheduling is execution policy, like timeout and verbosity, so retain the shared artifact-input authority identity and default wire representation for replay compatibility. Existing scheduler dependency and failure rules remain authoritative.
- Depends on: none
- Implementation:
- Add optional jobs in the range 1 through 256, reject booleans, preserve default-one wire identity, and forward through dispatch and worker rebuild.
- Verify remote concurrency, dependency ordering, failure propagation, and retained artifact replay.
- Evidence:
- 54 focused tests passed: contract/schema round trips and invalid values,
CLI and worker forwarding, a barrier proving independent diamond nodes overlap
through the remote executor, provider-before-consumer ordering, failed-node
cancellation, and default-
runreplay of the parallel build's retained artifact. - At
ff2a493a, the fresh full Python gate passed 4,818 tests (30 skips), and installed-wheel qualification passed with wheelsha256:57e1d1cbc74668f9bd0297107591548a46aba31f60e5cc76254138fc9cf424d2. Retained outer-runner output bytes and hashes were verified. All 15 hosted CI jobs, including documentation, passed. PR #402 landed at806e9bc9with a tree identical to the qualified head; #401 closed with evidence. One missing nested diagnostic log was recorded separately and was not used as completion evidence.
- 54 focused tests passed: contract/schema round trips and invalid values,
CLI and worker forwarding, a barrier proving independent diamond nodes overlap
through the remote executor, provider-before-consumer ordering, failed-node
cancellation, and default-
[ ] NATIVE-SDK-001 — Admit vendor native SDKs into Standard generated consumers
Integration fixture alignment: Merge the updated integration base
aca2a393into the diagnostics/worker-health stack. Both branches repaired a 30-second process deadline beneath a 120-second startup allowance; retain the base's 180-second process deadline and explanatory comment. The earlier live success/rejection/revocation proof used 150 seconds and remains historical evidence. Exact combined-revision hosted qualification remains required.Release target: 1.1.0
GitHub issue: #407
Priority: P1
Owner: Repository source locks, native dependency products and Standard lifecycle
Direction: Issue #407: consume exact original-source native SDK products from generated Components without ambient dependencies or vendor conversion.
Runtime metadata access (in progress): Generated Python consumers need exact SDK snapshot and target identities without asking a coding model to transcribe opaque digests. Expose a minimal read-only
literate_ai_native_sdk.binding(package)projection from the existing isolated runtime bootstrap after all SDK bytes are verified. Keep execution grants, revocation checks and SDK custody unchanged; reject absent/ambiguous bindings and ambient replacement. Cover actual TEST/EXECUTE, import and packaged runtime behavior, plus receipt reopening. Clarify the generation contract and retain full bounded acceptance diagnostics when the CLI wraps lifecycle failures. Require exact-source and installed-wheel qualification before downstream rebind. This is a continuation of #407, not source-authority promotion.Runtime metadata dependency integration: A public generated consumer at
abed816fcorrectly imports the runtime module, then source-BOM reconciliation rejects it as an undeclared pip distribution. Thread an explicit Python runtime-import set through the resolver only after Standard verifies SDK dependency evidence. Preserve default import rejection, manifest checks and other language checks. Add actual consumer-build coverage with the runtime import present in the admitted source and focused negative admission cases; require renewed exact-source and wheel qualification.Runtime metadata local evidence: The public rebuild CLI suite passes 28 cases (81.634 seconds). Actual native TEST/EXECUTE passes (169.328 seconds), including exact metadata, immutable mappings, missing-package refusal and ambient-module shadow rejection. The relocated native library and retained-authority proof passes (580.713 seconds). Lint, formatting, driver review, documentation authority and project validation pass. Exact-source Linux and installed-wheel qualification remain pending.
Consumer-build repair: A real public rebuild with admitted SDK inputs reaches the obsolete unconditional build refusal. Integrate the existing locked compile command with fresh SDK custody, exact finalized build authorization, and SDK-bound cache and resolved-BOM identities. Keep SDK runtime imports confined to the separately authorized TEST/EXECUTE paths. Require actual consumer-build regression coverage, rejection before dispatch for missing authority or changed custody, and fresh installed-wheel/public rebuild qualification.
Consumer-build local evidence: Four actual-build/custody/cache/grant cases pass in 222.492 seconds, including independent build and authorization reopening and six rehashed-record refusals. The real native TEST/EXECUTE regression passes in 203.415 seconds; 45 surrounding lifecycle cases pass with two platform skips, and all 12 version-authority cases pass. Initial test setup omitted recorder bounds; the first retained-build run then exposed the separate compilation-record requirement and missing SDK identities during build-authorization reconstruction. These are repaired and covered by the final run. Lint, formatting, driver review, documentation review, project validation and both peer surveys pass. Exact-source Linux, installed-wheel and public generated-consumer acceptance remain pending.
Generated application candidate evidence: A deterministic specification-bound generator now drives the public filesystem composition root with the real admitted C/Python SDK. The run deletes the vendor origin before consumer generation, binds
vendor_mathand the injected immutable SDK metadata, executes three non-acceptance generated cases, seals the package, rematerializes SDK custody and passes a verifier-owned product invocation. The first complete run exposed that portable independent acceptance bypassed SDK materialization; the repaired path now uses the fresh authorized SDK command scope and records its execution identity. The focused macOS proof passes in 548.871 seconds. Exact-head hosted and installed qualification remain required before closing #407.Linked-runtime fixture repair: Keep package fixture Component plans in canonical identity order. The isolated repaired fixture passes on Linux (one test, 45.543 seconds; imported bundle
sha256:a6c400a1654da096609d0a269b9734ee922965972adf7286b0be2bef565979fd). The repaired fixture is applied with canonical formatting and an identical Python AST. Frozen candidate36170093passes installed-wheel qualification with wheelsha256:5683cbe7116504b6dee6b69638ca0bcca15d3769b03a647ba36d3254fb9acdbf; production behavior is unchanged.Windows test correction: CI shard 3 reaches the expected missing-DLL refusal but reports
FileNotFoundError, anOSErrorsubclass. Replace the traceback-name assertion with an explicit subprocess check of the exception family; preserve failure when import unexpectedly succeeds or raises another exception. Fresh macOS Python qualification ata28841adpassed 4837 tests with 30 skips.Fixture evidence: The real CMake-built C ABI and public Python SDK pass through typed snapshot capture, independent CAS transfer, deletion of the producer CAS and build directory, and relocation into a path with spaces. A fresh isolated Python process calls the native functions and fails when the native library is removed. SDK custody, bounded CAS copying, storage and schema regressions pass 79 tests on macOS; this does not yet exercise Standard admission.
Custody implementation: Canonical v2 SDK snapshots bind exact files, modes and declared source/recipe/target/license/import identities. Capture rejects unsafe paths and changed input; fresh materialization verifies bounded CAS reads and copied bytes, refuses changed identities and preserves unrelated paths on failure. These declared identities remain unverified claims until the existing repository-source admission pipeline authenticates them and verifies target/runtime closure.
Build evidence: The concrete native SDK repository builder now traverses the existing resolver with real Git capture, CMake compilation, retained output snapshots and relocated native execution. Its default refuses missing live authorization, and checks bind source/plan/tool/layout/license and revalidate revocation before each command. Seven builder and 16 repository-source tests pass on macOS. The repository/index/approval fixtures are explicit test authorities; Standard and remote admission remain unproven.
Runtime evidence: SDK build results now retain the existing platform observer's exact loader graph. Declared native images and their recursive runtime chain require matching content and OS/architecture; changed dependencies and incomplete graphs refuse. The real two-library fixture survives relocation and rejects a newly captured package missing its linked helper before consumer loading. SDK and dependency regressions pass 88 tests on macOS; synthetic three-platform cases do not establish live Windows/Linux qualification or language ABI/API conformance.
Current qualification: Combined SDK/storage/schema/source/dependency and version-authority coverage passes 187 tests on macOS. Exact source
438fb43epasses 24 SDK tests on a real Linux x86-64 execution worker; archive bytes and returned manifest/log custody are verified. Bundle identity:sha256:4dc55b631f59fabf872befb5438b39dcc79fd7c42997a8581498147997a8917a. This establishes source qualification only; installed-wheel, live Windows, Standard consumer and language ABI/API qualification remain open.Source locking evidence: The public lock command now captures exact Git dependency bytes and public integration contracts without building. Real Git fixtures prove branch/default/commit selection, cleanup, configuration isolation, moved-branch replay, changed-lock rejection before indexing/building, and unresolved LFS refusal. The combined source/lock/CLI/generation/SDK run passes 106 tests with one skip on macOS. Standard planning and generation explicitly refuse unadmitted repository dependencies. Exact source
1fbc918balso passes 32 SDK/source-lock tests on a real Linux execution worker; imported manifest/log bundle:sha256:b4d1a1de6e612e3f61e98f1097f6db484ac337c8e25a031454137e08d06f3167. This remains framework-source qualification, not installed-wheel or Standard admission.Recipe evidence: Typed SDK layout and recipe contracts now resolve from current locked Flavor builder contributions. Normal project-validation parsing rejects invalid recipe metadata. Real Git acquisition and the public lock path feed the authored recipe planner, then the CMake-built SDK executes after source deletion and relocation. Missing or changed recipe authority, mismatched public contracts/targets and replayed source/tool bindings fail before building. Index/approval/cache authorities in this proof remain explicit test fixtures. Initial Linux recipe qualification exposed a fixture dependency on the host default branch name; the fixture now pins its exact commit. All six recipe tests pass on the real Linux worker at
376769d0, with imported bundlesha256:7bcbbf99039946eb8ea56a056a11d61efb2866a3d70643776335d32d719630d3. The preceding 32 SDK/source-lock tests passed at production-source revisionb5828e12. Combined local recipe/SDK/source/schema and version-authority coverage passes 95 focused tests.Snapshot replay evidence: Captured generation snapshots recheck local catalog/byte/lock/audit authority using their already admitted exact repository source locks, with no dependency fetch. Incomplete or conflicting replay inputs refuse. Fresh lock/read operations still resolve source and detect moved branches. All 38 repository/locked-authority/planner tests pass with one platform skip, including continued currentness after origin deletion and rejection of changed local contracts.
Consumer input evidence: Completed producer services now provide exact consumer/target/dependency bindings and portable input manifests. Fresh SDK directories use verified CAS bytes, retain relocation-time native observations, reject changed SDK bytes, and clean up on success or consumer failure. Five focused real-build cases pass across a four-test run and an added corrupt-CAS test, including source deletion, duplicate/foreign inputs, missing/unbuilt/self-asserted inputs and preserved unrelated paths. This prepares inputs without executing a source build or granting consumer execution. Standard build/import/BOM/package paths do not yet consume the adapter.
Standard authorization evidence: Exact SDK input identities now bind the security request builder, Standard intent and materialization/composite request. Local ports require actual completed producer custody, match the execution lock and target, and recheck before intent creation, authorization and plan finalization. Two new real-build tests and seven source-build regressions pass in one nine-test run; 171 surrounding Standard/schema/composite/Bazel/Cargo/artifact tests pass with two platform skips. The initial wire-test expectation used the wrong exception base; its corrected canonical-input checks pass. Nonempty SDK plans explicitly refuse execution before any backend dispatch until imports/BOM/packaging are integrated. The artifact materializer also refuses unhandled SDK inputs before creating a root; all three materialization tests pass. Seventeen wire-version checks, full lint/format and current driver/documentation review with project validation pass.
Consumer Linux evidence: Exact source
f25a8709passes all 12 source-build and consumer-input tests on Linux x86-64. The coordinator verifies and imports bundlesha256:cf8af746583ffd1e875ebccd93618c002cbd115dc1200c1303f4f15a6832b759. This source qualification excludes the subsequent Standard authorization integration and is not installed-wheel or generated application evidence.Dependency evidence: Materialized SDKs now retain immutable dependency projections from actual native-loader observations and source admissions. Standard's BOM writer records SDK packages, consumer/source edges, the complete managed dependency closure, snapshot-relative SDK paths and each product's admission; shared source nodes use a canonical proof only when source bytes agree. Shared host image scopes merge without replacing conflicting facts. Two real SDK projection tests pass, including source deletion and repeated relocation with equal evidence identity and changed/incomplete graph refusal. The real Standard BOM writer passes with strict source custody and actual host Python/native observations. Five existing consumer cases and two source-proof merge cases pass in a seven-test run; 147 Standard/backend/CycloneDX/dependency regressions pass with two platform skips, including the added shared-image scope and conflict case. Initial regression invocation named a nonexistent module; the actual 64-case dependency lifecycle module passes and is included in the final 147-test run. These checks do not generate or execute a Standard SDK consumer.
Package resources: Standard directory packaging now retains the exact SDK files and executable modes, snapshot and public binding manifests, and a package-relative consumer index. Plans distinguish supplied SDK files from a loader environment that still requires fresh host validation. The native fixture relocates and executes after source and CAS deletion; wrong locks/targets, foreign blobs, collisions, corrupt bytes, missing/extra files, mode drift and symlinks are refused. The actual Standard BOM/export/package custody seam passes with an explicitly fixture-produced consumer artifact. All three final native resource and Standard integration tests pass together in 112.020 seconds. The final 107-case packaging/Standard/schema/version regression run passes with three platform skips. Initial tests caught and repaired a dropped executable flag and a string-to-content-identity conversion in loader requirements. The reviewed driver pin is current; formatting, lint and project validation pass. Full generated-consumer execution and fresh runtime authorization remain open.
Runtime import work: A locked native-SDK-input role and isolated Python driver now project direct SDK imports from exact digest-addressed manifests. Standard command execution binds its argv, environment, tool and fresh SDK graph to a new grant and checks current producer revocations before and after launch. Source-build verifier closures cannot be reused after their temporary checkout is removed; completed SDK custody plus current host revocations own runtime checks. Native inspection excludes ambient loader overrides, so Standard removes those before binding the runtime request. Public build/generation remain closed, and qualification readers must verify SDK-extended process records before retained SDK execution can qualify. Local runtime tests pass for actual Standard TEST/EXECUTE imports plus stale source/command grants, expiry, revocation, changed manifests/files/graphs and cleanup; the two-case run takes 522.339 seconds on the current host. A focused follow-up passes actual command execution with retained manifest/request/grant/dependency records in 184.561 seconds. The 89-case surrounding regression run passes with three platform skips; 12 version-authority tests, formatting, lint, current driver/documentation review and project validation pass. Exact final-source Linux qualification, including the added empty-privilege refusal case, is next.
Authorization wheel evidence: Exact source
0b0787fdpasses installed-wheel qualification: wheelsha256:ee1abe4b863697aace35f8bbf2b876e0589576bbe5637e53954e72e66e787304, distributionsha256:0528dc411e3d818ba9fcec07377b65de01b7bb55b6ae4eaf76ba83d6461c49c7. This precedes dependency projection and BOM-writer integration.Retained execution reader: Versioned SDK records now retain command scope, consumer bindings, recipe selections, resolved source build plans, manifests, dependency projections and historical before/after grant checks. The reader validates this chain without granting transported producer trust or fresh host permission. Real macOS TEST records pass positive reopening and independently rehashed mutation cases; 80 lifecycle and 62 capture/project regressions pass, plus 41 local command tests after adding missing-plan coverage. The complete updated real TEST/EXECUTE fixture and grant-refusal suite require exact-source worker qualification.
Completed prior gates: Dependency/BOM revision
5acb0571passes 4891 Python tests with 30 skips in 5042.116 seconds. Runtime revisionb9a800bapasses its three exact-source Linux cases with imported bundlesha256:eaf7f62bd8d31dac0997e9f258ad3ddb2e3dcaf9931d47198cad0b977226c4ad, and installed-wheel qualification with wheelsha256:3c43af3332e60449c33db7e9e5334f0799e1ec8b89e793b95009a7ceec4a8505and distributionsha256:c135a3e07cf15cc2073161fa5c94d913e89a87d4c8d1a65c98cdc43521b6b752. These gates precede the retained reader changes.Next action (in progress): Run the specification-led generated application proof from the exact integration head in hosted Linux/Windows/macOS and installed-wheel qualification, then close #407 only if fresh-worker custody and the surrounding canonical gates pass. Linked-runtime fixture and frozen-wheel evidence are recorded above; live Windows loader qualification remains an exact-head gate.
Source-build composition evidence: The actual Git capture/inspection, source scanner, policy authorizer, live revocation verifier and quarantine cache now compose around the selected recipe. Seven focused local cases pass across initial and repair runs, including relocated native execution after source deletion, missing host acknowledgement, revocation after configure, source changes after configure, invalid revocation state, required unavailable intelligence and altered recipe plans. Early assertion repairs account for the resolver's wrapped errors and quarantine storage location; these are focused tests, not a fresh full-suite qualification. The preceding recipe branch's installed wheel passes at
7895c05bwith wheel identitysha256:8a7fb66da2625c0582959aca77d6d778f8c4b8151bdd138f0b0c379b523171dd; that wheel excludes this new service.Execution-worker source evidence: Exact source
4d77e8bcpasses all seven source-build cases on the Linux x86-64 Literate worker in 74.271 seconds. The coordinator verifies and imports manifest/log bundlesha256:385cd0bfb730f70dfe747351ce6532fe89fa0851161b95abc2fe20a71004f92d. This is framework-source qualification, not an installed wheel, Standard generated consumer or full application fanout. The local surrounding 32 regressions and 12 version-authority tests also pass, along with lint, formatting, driver review and project validation. Implementation is in draft PR #410, stacked on #409.Conclusion: Exact source acquisition, SDK-bound generation, resolved dependency evidence and separately authorized runtime/package paths are implemented in the draft stack. Public consumer compilation exposed a remaining integration guard; its repair must pass the current qualification ladder before downstream adoption. The retained Cargo bridge has the opposite consumption direction.
Depends on: ACCEPT-JSON-001 for finite native acceptance fixtures
Implementation:
- Define the exact source, recipe, target ABI, license, import surface and native artifact contracts and their lifecycle placement.
- Resolve declared SDK authority and materialize verified original-source products through existing worker and artifact custody services.
- Bind SDK imports and runtime closure through source BOM, build, generated tests, independent acceptance, packaging and retained execution.
- Expose portable SDK selection and current admission evidence through canonical CLI and worker dispatch without private paths in project authority.
Evidence:
- A generated Python consumer calls a compiled C ABI through the declared public SDK package and passes independent acceptance.
- Fresh-worker replay consumes exact verified artifacts with no ambient SDK or copied vendor implementation in generated source.
- Wrong source, import identity, target ABI, missing runtime dependencies and changed native bytes fail before native loading.
- Existing dependency rejection, canonical serialization, local lifecycle and current worker custody regressions pass.
[ ] CONAN-VERIFY-001 — Verify restored Conan payload against exact package authority
Release target: 1.1.0
GitHub issue: #429
Priority: P1
Owner: Conan package adapter
Direction: Repair missing restored-payload verification discovered while preparing generated C++ library packaging.
Conclusion: The existing Flavor requires exact metadata, file closure and checksums. A matching name in conan list is insufficient; verify the one exact restored binary and all declared payload bytes.
Depends on: none
Implementation:
- Resolve one exact restored recipe/package revision and reject ambiguous or mismatched coordinates.
- Verify payload membership, safe file nodes, sizes and SHA-256 against PackageResult, excluding only Conan-owned metadata and rejecting input collisions.
Evidence:
- 20 focused package-adapter tests pass with Conan 2.32.0, including a real fresh-cache archive round-trip, mismatched payload claims, ambiguous catalogs, missing/extra/changed files, symlinks and metadata collisions. Formatting and lint checks pass.
- Full
make python-checkis running in the managedconan-verifysession; installed and hosted qualification remain open. - The resumed full
make python-checkran 4,743 tests with one stale lifecycle-driver identity failure and 21 skips. Reviewed drift is confined to the Conan adapter; the proposed pin update passes 32 version-authority/package tests with native Conan. Hosted Ubuntu reproduced the same pin failure. Complete fresh hosted and installed qualification remain open.
Repository lifecycle lock custody repair (#418 / #425)
The integration review reproduced execution continuing after a child replaced
execution.lock, followed by unconditional deletion of the replacement. The executor
now reuses descriptor-backed write reservations and checks ownership around commands,
with setup inside the reservation cleanup scope. Regressions cover replacement with
foreign and identical bytes, edits, and failed receipt setup. A 43-test run exposed
reservation error translation masking a missing-product failure; acquisition now
translates only its own failures and preserves execution errors. The combined reservation, lifecycle, refresh and version-authority run passes
90 tests in 397.640 seconds on macOS. Renaming an open CRT file is explicitly
unsupported in the Windows replacement fixtures; edited-marker coverage remains
portable. Native Windows qualification is pending. This does not complete worker
dispatch or independent product acceptance.
[ ] MARKDOWN-432 — Preserve mapping-like scalar list values
Release target: 1.1.0
GitHub issue: #432
Source contribution: PR #433, scalar quoting only.
Priority: high
Owner: framework component Markdown authoring adapter
Direction: Resolve issue #432 before the 1.1 release.
Conclusion: Quote scalar sequence values recognized as mapping syntax by the strict parser; preserve existing mapping value representations. Extract the independent fix from PR #433 without enabling C++ library products.
Depends on: none
Implementation:
- Integrate the reviewed scalar quoting repair and exercise public component render/parse round trips.
Local evidence: The public Component constraint-value round trip failed before the repair and passes afterward. All 42 focused Markdown, authored-library, CLI authoring and version-authority tests pass (9.628 seconds); changed Python files pass lint/format. The first combined run failed only on the expected stale driver review pin; that pin was reviewed and regenerated before the passing rerun. Consolidated full, installed and hosted qualification remain open.
Evidence:
- Focused Markdown, authoring and version authority tests; lint and format; consolidated full and installed qualification before release.
[ ] CPP-LIBRARY-001 — Generated C++ libraries with native Bazel and Conan consumption
Next action (in progress): Qualify the repaired Standard Bazel command budget on the consolidated hosted/native candidate. Run
35078828340at722afd99e6c1150768951b192592eb71610cbe0bexposed the generic 60-second limit during static C++ analysis. Standard Bazel resolution, analysis, compilation and output lookup now use the existing dedicated adapter's finite 30-minute budget; ordinary lifecycle commands retain 60 seconds. Process-tree termination and failed-build publication boundaries remain intact.Budget repair evidence: 59 Bazel/local-command lifecycle tests pass in 8.228 seconds (two platform-specific skips), including real process-boundary budget propagation, analysis-timeout nonpublication and invalid-deadline refusal. Another 25 process-tree/version-authority tests pass in 9.865 seconds. Lint, formatting, OpenSpec, repository layout, skills and documentation (121 diagrams / 547 Markdown files) pass; an initial nonexistent
layout-checkinvocation was corrected to the repository'srepository-layout-check. Reviewed driver identity issha256:58d1909202740902e4caa8d6606d852f5820446ab7a6b0733a7f279e6c92de06. Documentation authority verification passes; the complete test receipt remains stale, and locks/source-intelligence/HTML gates are explicitly unconfigured. This focused evidence does not establish that the real native fixture passes. Local free space of 2.4 GiB precludes another large build allocation; full hosted and installed/native qualification remains open.Release target: 1.1.0
Priority: P1
Owner: Library contracts, Standard native build and acceptance, Conan packaging
Direction: Implement GitHub issue #427 so generated C++ libraries can replace retained native boundaries and be consumed through Bazel and Conan.
Conclusion: Extend existing library and artifact/link authority end to end; retain the current unsupported-language rejection until a real sealed native library can earn independent acceptance. Do not substitute a CLI archive.
Depends on: Existing library products, native build commands, exact artifact/link plans and Conan adapter
Implementation:
- Define exact public header, product kind and target/ABI library contracts and bind them through lock and generation.
- Build real native library products and independently compile consumers against sealed headers and binaries without producer source.
- Construct verified Conan packages and exercise fresh-cache Bazel consumption across declared native hosts.
Evidence:
- Native producer/consumer tests, header and binary substitution rejection, ABI mismatch rejection and incremental rebuild checks.
- Run the full framework Python gate and installed/hosted qualification before claiming support.
GitHub issue: #427
Design: Accepted ADR 0042.
Partial implementation:
CppLibraryLayoutdeclares canonical static/shared header, link and runtime closures and travels inLibraryArtifactProductand the dispatch schema. C++ products require the layout and bind capability headers to its public closure. Other languages preserve their existing wire bytes. Twenty-five focused contract/schema tests pass, including portable path aliases, wrong file roles, absent native fields and prior schema compatibility. This contract change alone does not qualify C++ library adoption. C++ authored imports now bind reviewed public header paths and qualified symbols through Markdown, wire contracts and generation/execution import projection. Missing declarations and unsafe headers/symbol expressions refuse. Sixty-four focused tests pass across those paths and existing library/schema compatibility. The namespace round-trip exposed #432: mapping-like strings in scalar lists now render quoted, preserving mapping values. The Bazel target now binds a native product layout and separate generated-test output. Its output projection rejects missing/extra/linked files before copying, exports only the consumer closure and retains the test artifact separately. A full Standard Bazel lifecycle fixture now exercises that separation through a Bazel process boundary: the consumer export contains exactly the declared header and link artifact while the generated test artifact remains in distinct custody. Nineteen focused Bazel-adapter tests pass. A real macOS compiler fixture builds static/shared libraries, deletes producer source and staging, then links and runs a fresh consumer from the exported headers/binaries with unchanged export bytes. This tests output custody, not specification-led Bazel production or generated test execution; the staging fixture's test payload is deliberately inert. A separate deterministic generated-source fixture now drives Bazel 9 andrules_ccthrough a declared Starlark tree-artifact action to compile and stage static and shared libraries plus generated tests. Each variant deletes the generated producer and complete Bazel object root before running its test and compiling/running a fresh consumer from the retained product. The proof also closes Python 3.14 cleanup of read-only Bazel tree artifacts through bounded parent-permission repair. Native layouts now survive command-contract serialization, rebuild results and qualification capture/reopening; Bazel output declarations must match command authority. Forty-six focused command/product/Bazel checks pass. The native oracle loader and verifier compiler now feed the existing independent library acceptance protocol. The macOS static/shared fixture calls a compiled namespaced symbol through that path and rejects a wrong expected result and a missing API symbol. Sixty-nine acceptance/capture regression tests pass, and the five native output tests pass with the full oracle path exercised for both product kinds. Explicit C++ static/shared language profiles plus a selected Bazel profile now project the same native layout into commands, ABI identity and generation recipes. The generation prompt binds public headers, compiled outputs and a separate test artifact. The import driver compiles a fresh native consumer and rejects missing symbols; existing language driver strings remain unchanged. A 174-test focused run passes (two unrelated optional tests skipped), including all six target/kind projections and real macOS static/shared import/acceptance. The built-in C++ profile now selects static-library production; reviewed replacement profiles retain explicit shared production. Specification-led generation through the complete lifecycle, compiler/loader/dependency authority and Conan consumption are implemented. The previous lifecycle-custody head passed the canonical Python gate with 5,036 tests and 33 skips. After reviewing and re-pinning the changed lifecycle-driver closure, the static real-Bazel head passes the clean canonical Python gate with 5,038 tests and 33 skips. The shared follow-up passes all 32 affected Bazel modules and the clean canonical Python gate with 5,039 tests and 33 skips. Two Windows runs proved that rules_cc 0.2.22cc_shared_librarypublishes the runtime DLL throughDefaultInfobut exposes no import library through eitherDefaultInfoorCcInfo.linking_context. The fixture now usescc_binary(linkshared = True)and Bazel's dedicatedinterface_libraryoutput group for the Windows link artifact; 72 focused Bazel tests with 44 subtests pass, and the clean canonical Python gate passes 5,040 tests with 33 skips. Run34987337017then proved that output group's actual rules_cc 0.2.22 basename issample.dll.if.lib(752 passed, 25 skipped, one fixture failure), not the assumedsample.if.lib. The stager now selects that Bazel artifact while preserving the locked consumer layout by exporting it aslib/sample.lib; 76 affected Bazel and projection tests plus 62 subtests pass. Replacement run34993970703, exact Windows Python 3.12 shard-two job104465537905, passes all 753 tests with 25 skips, qualifying the corrected Windows import-library projection at heada69a4bbe. The next slice now drives a locked integer-addition specification through the production filesystem runner, real Bazel static/shared targets, three attributable generated cases, directory packaging and an independent native consumer. That integration exposed and fixed cleanup of Bazel's read-only tree-artifact directories and makes package-root test replay and application execution explicitly inapplicable to no-entrypoint library products; the independent consumer remains mandatory. Both macOS product-kind subtests and all 39 local-command adapter tests with 77 subtests pass. After the lifecycle-driver and documentation-authority identities were reviewed and re-pinned, a cleanmake python-checkpasses all 5,041 tests with 33 skips and no failures in 5,817.989 seconds. Hosted cross-platform qualification for this new slice remains pending. The local Conan slice now binds the typed C++ layout and exact package-relative artifact root into CLI-retained packager authority, emits native static/shared package type plus include/link/runtime metadata, and refuses to label an unbound native C++ library as a portable Python wheel. Verification resolves one exact recipe and binary revision in a fresh cache, checks native metadata and every declared payload byte/mode, and rejects ambiguity, substitution, extras, links and metadata collisions. A real macOS qualification builds both Bazel product kinds, packages the sealed closures with Conan 2.32.0, deletes producer/package staging, restores each archive into a second fresh cache, lets Conan generate BazelDeps metadata, and runs a Bazel 9.2.0 consumer calling the non-inline symbol. The exact package suite passes 38 tests, CLI projection passes eight tests, and the static plus shared consumer qualification passes in 72.649 seconds. After lifecycle and documentation authority were reviewed and re-pinned,make python-checkpasses all 5,061 tests with 34 skips and no failures in 5,340.978 seconds; repository-wide lint, format and project authority validation also pass. The implementation slice passes all 5,061 canonical Python tests with 34 skips and no failures in 5,914.453 seconds; after strengthening the implementation-edit assertion to require identical public headers and a changed native binary, both exact real-Bazel variants pass again in 63.345 seconds. The current Bazel invalidation gate records seven actions for clean static and shared builds, zero for immediate no-op and unrelated-file edits, three after a public-header edit, three after incrementally restoring that header, four after a non-inline implementation edit, and seven after source restoration plusbazel clean. The header edit changes only the staged public header, and incremental restoration reproduces the complete original product. The implementation edit changes each library digest while preserving its header; the restored-clean products also exactly reproduce their original header and library bytes. Both current variants pass in 97.570 seconds. A second-cache Conan negative gate derives valid alternate settings from the detected profile and proves that target architecture, build type, compiler version and C++ ABI changes each report a missing binary under--build=never; both static/shared product subtests then install the exact profile and run their Bazel consumers in 103.855 seconds. Exact graph verification now binds recipe revision, package ID and package revision. A hostile-cache case proves an unpinned install selects a newer same-coordinate recipe, rejects that substituted graph, then pins and consumes only the verified binary; both product kinds pass the complete mismatch/shadow/Bazel path in 117.497 seconds. Exact head387f857ealso passes that complete static/shared path in a disposable Debian Bookworm Linux ARM64 container with Bazel 9.2.0 and Conan 2.32.0 in 65.210 seconds. It records the same 7/0/0/3/3/4/7 clean, no-op, unrelated, header-edit, header-restored, implementation-edit and restored-clean action counts, exact header restoration and changed native binaries. This is local cross-platform evidence; hosted Linux x86_64 and Windows Conan consumers remain open. The isolatedmake install-checkalso passes from a built wheel in a temporary prefix, including installed init/validate/lock/plan, release, lineage and synthetic build/test/run coverage. Fresh hosted qualification remains open. This is development evidence, not adoption approval.Exact-head hosted run
35064397144exposed one remaining Windows static-product reproducibility defect after 759 shard tests passed: rules_cc's MSVC archive carries wall-clock member timestamps, so the restored-clean.libdiffers byte-for-byte from the original despite identical source. Head57366069repairs the existing Bazel staging authority: it validates the COFF archive and canonicalizes only its member timestamp fields before export, retaining exact whole-product comparison. An executable two-member archive regression, both destructive static/shared products and the complete affected module pass locally (9 tests, 11 subtests, one expected optional skip), as do repository lint, format and project authority validation. Fresh hosted qualification remains required. Product identity was not weakened to a semantic comparison.After merging current
main, exact-head hosted run35071558730passed all documentation and sample-composition jobs, then shard three correctly rejected the stale configured lifecycle-driver identity after 2,271 tests passed. The merge added its reviewed whole-project rebuild implementation undersrc/literate_aito the existing closure. The exact merged implementation computessha256:15541885508ed9f922d25068beb06a63300909d7456fe14a797e4461a189cf61; that reviewed identity is now pinned. This is an authority repair, not a test relaxation; replacement exact-head hosted qualification remains required.Exact-head hosted run
35076380517completed with 13 successful jobs; Windows shard two passed 758 tests before exposing two real-Bazel product failures and one retained-runtime startup timeout, and its sibling shard was cancelled after that failure. Both static and shared staging reached the COFF canonicalizer. Diagnostic run35087913592proved that archive parsing completed and Windows rejected reopening the staged.libfor output. Exact-head run35088676409showed that explicitly closing and verifying the input stream was necessary but insufficient: staging copied the Bazel action input's permissions onto the destination before attempting the rewrite. The stager now temporarily adds only owner-write permission for archive canonicalization and restores the exact source permissions afterward. Its executable regression succeeds from a read-only source archive, and the real local static/shared Conan-to-Bazel consumer passes with all ten subtests. Exact-head run35090510043then completed both Windows products, emitted their full static/shared incremental evidence, and reached consumer cleanup. The remaining failure was limited to the fixture's rawshutil.rmtree, which could not unlink intentionally read-only Bazel exports; it now uses the existing bounded Bazel cleanup path. Replacement hosted run35091851181passes both dedicated native-library jobs: Linux x86_64 and Windows each complete the exact-tool preflight, real static/shared consumers, all 11 required JUnit outcomes, anti-skip verification and evidence upload. The broader exact-head matrix and landing remain required. Separately, the PE/COFF archive format permits omission of padding after an odd-sized final member because the pad exists only to align a following member. The parser accepts that exact terminal case, still rejects malformed nonterminal padding, and its executable regression covers both shapes. The runtime archive import also exceeded its ten-second deadline under hosted Windows load; a finite 60-second deadline covers observed startup without converting a hang into success. The repaired C++ module passes 9 tests and 11 subtests locally with one expected missing-Conan skip, and the retained-remote module passes all 8 tests. Replacement exact-head hosted qualification remains required.The existing broad matrix does not install Conan beside the test interpreter, so
test_real_conan_static_and_shared_packages_feed_bazel_consumersskips rather than proving native consumption when Conan or Bazel is absent. A dedicatedcpp-native-qualificationmatrix now provisions exact Bazel 9.2.0 and Conan 2.32.0 tools on hosted Linux x86_64 and Windows, verifies the native compiler, runs only that real static/shared consumer test, and rejects JUnit evidence unless it contains the parent test plus all ten product-kind/profile subtests with zero skips, failures or errors. First execution35086387730completed the real Linux static/shared path in 230.85 seconds and emitted both exact incremental evidence records, but its verifier correctly failed because it expected only two rather than all ten subtests. Windows installed Conan under the setup-pythonScriptsdirectory, so the interpreter-local tool boundary skipped and was also correctly rejected. The follow-up runs installation, preflight, pytest and evidence verification through one isolated venv per platform and requires all 11 outcomes. Intermediate run35087136171was rejected by workflow validation before any job was scheduled; matrix-selected custom shells were therefore removed in favor of fixed Python shells and per-platform venv paths exposed throughGITHUB_PATH. Run35087346634consequently entered the real Windows static/shared test rather than skipping and reproduced the in-place rewrite failure before the diagnostic run isolated it. Exact-head hosted run35092994515at558861b5subsequently passed all 17 jobs. Linux x86_64 and Windows each completed the dedicated real static/shared Bazel/Conan consumer, all 11 required outcomes, anti-skip verification and evidence upload; the full Linux, macOS and Windows matrix passed on the same head. The built-in static-profile enablement changes flavor authority and requires one final exact-head hosted run before landing.Priority: P1
Owner: Library contracts, Standard native build and acceptance, Conan packaging
Direction: Implement issue #427 for generated C++ libraries and native Bazel/Conan consumers.
Conclusion: Land the compiled product and exact consumer lifecycle specified by accepted ADR 0042 after the built-in static profile passes exact-head qualification.
Depends on: Existing library lifecycle; Conan payload verification #429
Implementation:
- Bind C++ headers, qualified symbols, product kind and ABI through authoring, locks, generation, native builds and consumer custody.
- Compile independent consumers from sealed static/shared products on Linux, macOS and Windows; package with Conan and consume with Bazel.
Evidence:
- Native generated producer and sealed consumer tests, substitution and ABI rejection, incremental actions and full installed/hosted qualification.
[ ] RETAINED-RECEIPT-002 — Dispatch retained receipts through selected workers
Release target: 1.1.0
Priority: P0
Owner: retained harness execution, worker dispatch, and remote evidence custody
Direction: A retained receipt requested with a configured worker must execute on that worker rather than label controller-local execution with the worker ID.
Conclusion: Route retained harness execution through the existing typed worker and SSH boundary while preserving exact inventory, source, plan, timeout, and evidence identities. Keep implicit local execution available, but reject worker labels that do not select a configured dispatcher.
Depends on: none
Implementation:
- Separate retained request preparation from execution and finalization.
- Select and validate the requested execution worker using the existing catalog.
- Execute the retained source projection remotely and validate its identity-bound canonical control result before coordinator finalization.
- Bridge installed-launcher version skew with a bounded identity-bound coordinator runtime archive without updating the worker installation.
- Carry exact pinned Linux x86-64
uvand Ninja binaries when direct retained stages or their admitted evidence scripts require them, and expose them only while retained child gates execute. - Import the full remote evidence bundle under custody and cleanup acknowledgement before claiming custody-backed remote evidence.
- Preserve explicit local execution without accepting a misleading remote label.
Evidence:
- Focused retained-receipt tests prove local and remote execution, worker selection, failure propagation, and evidence tamper rejection.
- Remote-evidence and SSH dispatch regression targets pass.
- An installed CLI produces a retained receipt from the configured Linux worker.
Results: The first functional slice resolves every non-
localID through the private worker catalog, admits only exact Linux/macOS SSH entries, sends the bounded retained source projection, canonical inventory, and deterministic coordinator runtime archive to the internal receiver, and finalizes only identity-bound sanitized phases and the actual remote platform.tests.e2e.test_retained_harness_receipts(19 tests),tests.e2e.test_retained_harness_remote(9 tests),tests.critical.test_remote_source_guardplustests.critical.test_source_materialization(27 tests), repository lint, andmake remote-evidence-check(66 tests) pass on macOS. An isolatedmake python-checkrelease-evidence run passes all 5,044 tests with 33 expected skips. The installed CLI produced ovrtx receiptsha256:025e694613e95f4478b544dc8df4796b455a78780eba87c7380417d0a1896438after direct and generated-wrapper Linux NVIDIA execution. The slice does not transport external workspace links or claim the full remote evidence-bundle/custody protocol.
[ ] REL-442 — Bind Cargo workspace package versions during release preparation
GitHub issue: #442
Priority: P1
Owner: project release version bindings
Direction: Support a retained Cargo workspace without out-of-scope lockfile edits (GitHub #442).
Conclusion: Select exact Cargo.lock package names and lowercase quoted authority keys. Validate parsed lockfile identity and preserve unrelated dependencies during atomic preparation.
Depends on: none
Implementation:
- Extend binding/schema contracts, implement exact package version updates, and add prepare/drift/invalid-input regressions.
Evidence:
- All 82 release tests and format/lint checks pass; prepare/check fixtures preserve unrelated dependency bytes.
- Read-only downstream validation accepts all ten real workspace package mirrors.
- Full framework Python check and hosted CI pass on the final frozen revision.
[x] WORKER-DAG-001 — Route one Component lifecycle DAG across exact workers
Release target: 1.1.0
GitHub issue: #403
Priority: P1
Owner: Component worker routing, artifact custody and Standard lifecycle dispatch
Direction: Preserve one canonical Component DAG while independent nodes execute on selected workers and consumers receive accepted predecessor products.
Conclusion: The Standard scheduler already supplies exact provider and packaging exports. Introduce routing and verified handoff at that boundary, preserve bounded generation context and final project acceptance, then connect command/SSH transports. Parallel whole-root rebuilds do not implement node routing.
Depends on: none
Implementation:
- Define exact node assignments, routing identities and artifact handoff/import contracts.
- Integrate worker dispatch at the existing Standard complete-node boundary with exact result correlation.
- Wire command and SSH node execution with source/evidence custody and target/ABI validation.
- Preserve cancellation, failed-predecessor blocking and exact-current recovery across workers.
Evidence:
- Independent diamond branches overlap through command and SSH handlers; the consumer import receipt contains both exact predecessor exports, and custody tests verify the corresponding source and destination bytes.
- Changed routes, wrong-worker results, corrupt artifacts and stale recovery fail before downstream actuation.
- Existing local lifecycle behavior and final project acceptance remain unchanged.
Foundation evidence:
make component-worker-checkpasses 102 tests, including 20 routing/custody tests and planning, lifecycle, CAS and schema regressions. Worker-local CAS transfer verifies actual bytes, rejects source/destination corruption and changes during copying, and excludes generation-only/transitive implementations. New wire contracts are included in the current schema catalog.Completion evidence: The Standard service preserves one dependency-layer scheduler while exact local, command and SSH handlers own node actuation. Focused routing, custody and lifecycle coverage passes 109 tests, including two-transport diamond overlap, exact consumer import membership, wrong-worker correlation failure, pre-dispatch cancellation and exact-current recovery. Full and hosted qualification remain release gates rather than behavior exceptions.
[x] WORKER-HEALTH-001 — Detect worker resource pressure and investigate bounded cleanup candidates
Hosted fixture repair (locally verified): Exact-head run
35069594227fails the Windows worker-storage fixture because it searches raw JSON for a Windows path whose backslashes are escaped by serialization. The fixture now compares the decoded request role/path mapping exactly, preserving path exclusion from process argv and changed-binding refusal. All 18 focused storage tests pass in 1.113 seconds; the same fixture also passes with explicit Windows drive/backslash bindings on the local host. Lint and formatting pass. This is protocol-fixture evidence, not native Windows execution; a fresh consolidated hosted run remains required. Production behavior is unchanged.Completion implementation (locally verified): Add deterministic sustained CPU, available-memory, paging, progress/queue and GPU classification; ordinary high utilization with progress remains healthy, while workload impact, memory paging and GPU allocation failure remain distinct. A bounded stdlib receiver serves local and exact nonce-bound SSH observations across Linux, macOS and Windows; explicit command workers must expose the pressure operation or remain unknown. Lifecycle
build,test,runand package dispatch now accept an explicit private health policy for preflight, active polling and post-failure recheck. Retry budgets never reset and active health incidents hold later work without cancelling the running task.Cleanup completion (locally verified): Disk incidents automatically inspect configured task-owned top-level roots with time, entry and depth bounds. Links and reparse points are skipped, overloaded workers receive shallower scans, and public reports retain only opaque target IDs, size, ownership, active-use evidence, uncertainty and recovery cost. Active or uncertain targets cannot become an executable proposal.
worker cleanup planstays read-only; localapplyrequires current worker/policy/proposal/target/operation/expiry authorization, revalidates the exact target, invokes one configured no-shell tool and remeasures actual free capacity. Remote apply refuses rather than acting on controller paths.Completion evidence: The isolated focused compatibility run passes 123 tests and 30 subtests. Pressure, cleanup, CLI/schema/help, lifecycle admission and template-skill slices add deterministic coverage for normal busy GPU/CPU, sustained overload, unavailable probes, GPU OOM, automatic investigation, deadlines, link boundaries, exact authorization refusal, target drift, supported tool invocation, post-cleanup measurement, bounded retry and non-cancelling active polling. The framework-owned
skills/agent/worker-healthsource and initialized- project copy are byte-identical. Exact-head hosted and installed-wheel checks remain release gates for the integrated stack rather than open design or implementation.Alert history (locally verified): Add explicitly selected
--alert-state PATHpersistence for storage-health inspection. Keep ordinary inspection read-only. Bound one private state record to worker/policy/job and the latest observation; cap bytes and role/resource entries, expire old history, serialize cooperative writers and refuse malformed, foreign-worker or out-of-order state. Emit initial, escalation, changed, improvement and recovery events while suppressing unchanged classifications despite numeric jitter. Missing measurements cannot manufacture recovery; positive not-applicable quota/inode findings must be represented. State only controls reporting, never the assessment or dispatch/cleanup authority. Cover concurrent updates, finite lock refusal, state/path safety, resets, stale observations, no-write default behavior and public human/JSON event output.Alert-history evidence: All 172 alert transition/state, public health CLI, capacity, storage/command receiver, quota, schema/help, cooperative lock, orchestration and version-authority tests pass in 32.143 seconds with no skips. Tests cover concurrent identical observations producing one initial event set, finite lock contention, out-of-order and foreign history, expiry/context resets, exact replay, numeric jitter, quota applicability recovery and missing-measurement uncertainty. Real disposable state files prove owner-only publication, corrupt and oversized preservation, link/hardlink/ancestor refusal, injected write failure, late state replacement and owned-stage cleanup. Public CLI JSON/human tests prove deduplication and recovery without changing the assessment. The schema registry validates history and events; this run also exposed and repaired the missing
quota-inodesfinding enum. The final capacity projection now records positive observation and inapplicable inode/quota findings so recovery has explicit evidence. Live native Windows/Linux state-file qualification, polling integration, pressure monitoring and cleanup qualification remain open; these tests do not close the item.Public storage inspection (locally verified): Add
litai worker healthfor one exact configured worker and a versioned private capacity/path configuration. Derive the effective policy from typed capacity requirements and exact current worker/path/command bindings; reject configuration drift and ambiguous JSON. Reuse the bounded collector and pure classifier, emit storage-scoped observations, decisions, role deficits and actionable human alerts without paths or credentials. Inspection performs no dispatch, cleanup, host update, MCP discovery or implicit state writes. Missing policy-required measurements remain retry/hold results. Qualify public CLI behavior, scope/privacy, no-write refusal and real disposable local paths. Pressure metrics, persisted alert deduplication, polling/admission integration and automatic investigation remain explicit subsequent work.Design accepted: The maintainer explicitly accepted ADR 0043 for 1.1 on 2026-09-16 UTC. Implementation and qualification are authorized: bounded platform observations, role/volume accounting, dispatch and polling, deduplicated alerts, automatic read-only investigation, exact cleanup authority and measured retry. Acceptance does not authorize live deletion.
Next action: Implement native Unix quota applicability and conservative accounting for supported filesystems. Then add pressure sampling, public CLI and dispatch/polling integration; cleanup keeps its separate gate. Native Linux/macOS/Windows qualification remains required before closing the platform implementation item.
Capacity foundation locally verified: Separate versioned private policy and observation records leave the hardware inventory wire contract unchanged. Explicit workspace/temp/cache/output roles bind fresh measurements to the worker, effective policy, private storage-binding digest and optional job identity. The pure classifier sums concurrent allocation by physical volume and independently by quota domain, applies the maximum shared reserve, and preserves a rounded-up free-percentage floor after allocation. Required missing measurements exhaust a bounded retry budget before hold; optional unknowns remain visible. Read-only admission cannot bypass a required probe, but a measured capacity deficit need not block non-allocating work. Assessment records bind evaluation time and observation expiry. No probe, dispatch, process termination or cleanup is performed by this foundation.
Capacity evidence: All 111 capacity, hardware-inventory, worker CLI/routing, Component-worker, wire/catalog and version-authority tests pass in 24.455 seconds with no skips. The 19 capacity tests cover shared volumes and quotas, separate temp exhaustion, inode budgets, explicit unavailable/denied/malformed states, required versus optional metrics, changed private bindings, stale or mismatched custody, exact boundary arithmetic and canonical numeric limits. Actual Draft 2020-12 validation covers policy/observation/assessment wires. The initial combined run caught the expected stale lifecycle pin (one failure among 111); after review and re-pinning, the complete rerun passes. Lint, formatting, OpenSpec, layout, skill checks and documentation rendering (121 diagrams / 546 Markdown files) pass. Platform collection, live dispatch, installed-wheel and exact final hosted qualification are not yet established.
Public inspection evidence: All 151 health CLI, capacity/probe, help/schema, repository orchestration and version-authority regressions pass in 30.846 seconds with no skips. The final 12-test CLI suite also includes a real explicit command receiver and refusal after the worker catalog changes during measurement. Tests cover input custody, duplicate/unknown fields, bounded configuration, derived binding identity, exact job context, visible deficits, required versus optional unknowns, human/JSON output privacy and suppression of host updates, MCP discovery, journals and telemetry writes. Native public CLI inspection passes on configured Linux/macOS/Windows workers without creating role paths: Linux and Windows report healthy storage, while macOS reports unknown quota support with proceed for an explicitly non-allocating policy that makes quota optional. No observation is presented as complete CPU/memory/GPU health or dispatch authority. The schema is shipped through the v2 catalog and the CLI reference lists the public verb. Lint, formatting, OpenSpec, layout, skill admission and full documentation rendering pass (121 diagrams / 547 Markdown files). Strict roadmap coverage remains 117 open 1.1 items; the peer survey reports no green reviews and no collectable worktrees. Persisted deduplication and dispatch/polling remain open.
Unix quota work in progress: Native interfaces distinguish overlapping user, group and project limits, including separate byte and inode limits. Replace the unreleased single-quota observation with bounded independent quota-domain samples before attaching native results. Aggregate each role's demand once per applicable domain, preserving independent limits and explicit denied/unsupported states; never collapse unrelated quota domains into one minimum. Existing ephemeral development observations require fresh collection. Add read-only native queries on the same filesystem handle where supported, with no quota enable/set/sync operations. Native quota exhaustion and platform applicability proofs remain required before closing the feature.
Unix quota implementation: Bounded independent quota-domain observations now preserve overlapping byte/inode limits. The classifier includes every bound role's demand even when a shared-domain measurement fails and requires a recheck for contradictory applicability. Read-only Linux ext queries use the same directory handle, filesystem user/group identities, valid-field masks and conservative soft-limit headroom. Disabled classes are positively known only from class applicability queries; missing identity records remain unknown. Active project quotas, XFS, macOS/APFS and unsupported ABIs remain explicit. No quota-setting, enable/sync, mount or live cleanup operation was performed.
Unix quota focused evidence: All 62 focused capacity, native quota, storage and command-receiver tests pass. Fresh native SSH measurements and injected stalled-probe deadlines pass on Linux, macOS and Windows. The Linux ext worker positively reports disabled quota classes; macOS remains unsupported, Windows retains caller-available quota accounting. Real active-quota exhaustion, dispatch admission and remaining platform coverage still block full closure.
Unix quota regression evidence: All 143 capacity, native quota, storage, process-tree, bounded-process, worker routing/inventory, Component lifecycle and version-authority tests pass in 18.543 seconds with no skips. A broader process-site check exposed an unnecessary local spawning wrapper; the adapter now supplies an unbuffered subprocess factory directly to the bounded runner, which retains process-tree ownership. Lint, format, OpenSpec, repository layout, skill admission and 121-diagram/547-Markdown rendering pass. The strict roadmap still reports 117 open items, all targeted to 1.1; none is closed by this partial implementation. The end-of-cycle peer survey reports no green reviews and no collectable worktrees; 80 retained branches remain untouched.
Hosted qualification follow-up: Run
35059606583at diagnostics commit045bf442finished with 11 successful jobs, one macOS/Python 3.14 failure and three cancelled jobs. Its 4,269-test run reported one error intest_all_reviewed_targets_pass_with_standard_harness: retained native file capture exceeded the pinned-input per-file limit. Repair the owning native capture boundary and rerun exact-revision qualification; no release readiness is inferred from local worker-health tests or the still-running baseline.Command receiver locally verified: A dedicated health command and explicit credential-environment mappings now bind private storage configuration. Lifecycle argv and credentials remain separate; absent health capability is unsupported and missing required mappings refuse before launch. Local, SSH and command requests share a versioned bounded envelope containing exact worker/policy/job identities, platform, deadline, role paths and nonce. The stdlib receiver validates the envelope and actual OS before measurement; its watchdog obeys the tighter request/command deadline without resetting elapsed input time. Response custody uses the complete request digest. The bundled module has an explicit stdin receiver entrypoint. The private storage protocol documents provider behavior; public health CLI/dispatch integration is pending.
Command evidence: All 137 command receiver, storage/capacity, process, worker inventory/CLI, lifecycle dispatch and wire/schema tests pass in 29.635 seconds with no skips. The ten command tests include a real shell-free receiver, minimal credential forwarding, required versus optional mappings, command/mapping drift, private input bounds, malformed context/platform refusal, response substitution, enforcement of a shorter request budget and immediate timeout exit when no reporting thread can start under pressure. The strengthened protocol also passes native SSH measurements on macOS, Linux and Windows (0.265 / 1.770 / 4.297 seconds) and request-bound timeout responses for injected stalled measurements (0.444 / 0.758 / 5.483 seconds). No native directories were created or cleaned. All 12 final version-authority tests pass (10.462 seconds), as do lint, formatting, OpenSpec, layout, skill admission and documentation rendering (121 diagrams / 547 Markdown files). Documentation validation caught an invalid new roadmap fragment; correcting it restored the authority gate. Verification still reports the stale full-test receipt, with explicit skips for unconfigured locks, source intelligence and HTML artifacts. The peer survey found no green review to land. These read-only checks do not qualify quota exhaustion, dispatch, installed-wheel behavior or cleanup, and WORKER-HEALTH-001 remains open.
SSH storage collection verified: The exact configured SSH transport sends bounded private requests over stdin, keeping role paths out of process arguments and raw diagnostic traces. An optional private Python executable participates in the bindings identity. The same nonce/role/platform response validation applies locally and remotely; transport failure is explicit. The stdlib receiver starts a watchdog before input/measurement and preserves it through output. A request-bound timeout response avoids Windows SSH shells collapsing child exit statuses; a second finite stop bounds a blocked timeout response. Input writers are bounded and owned descendants retaining stdin are stopped before process ownership is released.
Native SSH evidence: Read-only probes of existing root directories on the configured macOS, Linux and Windows workers returned measured capacity for four roles sharing one volume (0.239 / 1.734 / 4.331 seconds respectively). An injected stalled measurement returned validated
timed-outsamples on every platform (0.452 / 0.695 / 4.156 seconds including transport/startup). No target directory was created, scanned or cleaned. One other Windows endpoint refused its SSH key check; trust configuration was preserved and the failure remained unreachable. This proves remote measurement and finite failure reporting, not real quota exhaustion, dispatch or cleanup behavior. Native results are retained in private diagnostic state without hostnames, raw paths or error text. Command workers use the separately bound health operation above; their lifecycle dispatcher never implies health capability.SSH regression evidence: All 146 storage/capacity, bounded-process, hardware/CLI, schema, toolchain, Git-lineage, diagnostic and Rust/JavaScript regressions pass (50.258 seconds, no skips). After adding explicit refusal for a worker endpoint unsupported by the shared SSH transport, all 47 focused storage/capacity/process tests pass (8.170 seconds), as do 12 final version- authority tests (8.586 seconds). Lint, formatting, OpenSpec, repository layout, skill admission and documentation rendering (121 diagrams / 546 Markdown files) pass. Authority verification passes; the full-test receipt is stale. Locks, source-intelligence and HTML verification explicitly skip because none are configured. The peer survey found no green review to land and preserved all branches/worktrees. These results do not close WORKER-HEALTH-001.
Local storage collection verified: A stdlib-only local worker probe uses the existing bounded process runner with bounded private request data and output, no diagnostic command/payload retention, and child-side filesystem calls. Private absolute role paths plus exact worker configuration bind the effective policy digest; nonce-bound responses retain only role aliases and opaque volume identities. Unix probes use caller-available bytes/inodes; Windows probes use caller-visible capacity and explicit volume failures. Unix quota accounting remains unsupported and is never substituted with unlimited capacity. SSH/command extensions and evidence are recorded above; neither substitutes controller-local measurements for a remote worker. Failed attempts remain observations even when they expire before completion. Default process diagnostics remain enabled for other callers.
Local storage evidence: All 85 storage, capacity, bounded-process, worker inventory/CLI and wire/schema tests pass in 23.314 seconds without skips. Disposable local fixtures exercise real measurement, preserved files and missing directories, stopped timeout/output-flood children, late failure round trips, private-data exclusion and malformed/substituted responses. Portable native-API fixtures cover unprivileged Unix counters and Windows caller quota/volume-denied results. Windows API fixtures are not native Windows qualification. The 12 version-authority tests also pass (9.494 seconds), as do lint, formatting, OpenSpec, layout, skill admission and documentation rendering (121 diagrams from 546 Markdown files). Project authority validation passes; the release roadmap still has 117 open items, all targeted to 1.1. The peer survey found no green review to land; existing branches and worktrees remain preserved. Unix quota detection, pressure metrics, CLI/dispatch, investigation/cleanup and final hosted qualification remain open.
Observed local incident (2026-09-16 UTC): The active workspace volume has 7.4 GiB available, 0.8 percent of capacity. A 25-second bounded, read-only scan of the two task-owned object roots found about 969 MiB of staged tools in each, plus 201 MiB of bytecode caches and 128 MiB of lineage cache. These remain protected while qualification runs; no target has deletion approval or adequate inactive-use proof. Avoid additional build allocations, retain active work and remeasure after owned temporary workspaces finish. This is manual diagnostic evidence, not implementation of the accepted health design.
Release target: 1.1.0
GitHub issue: #440
Priority: P1
Owner: worker preflight, selection, polling and distributed agent skills
Direction: Track GitHub issue #440: detect disk and sustained resource pressure before and during jobs; report incidents and automatically investigate task-owned cleanup candidates.
Conclusion: Python owns bounded portable observations, classification and dispatch gating; a thin distributed skill routes investigation. Discovery is read-only; deletion requires current authorization for exact targets.
Depends on: none
Implementation:
- Inspect workspace, temp, cache and output volume byte/percentage, quota and inode headroom against configured footprint and reserve on all supported platforms.
- Sample bounded CPU, memory, paging, progress and applicable GPU metrics; classify sustained overload separately from normal utilization and unknown probes.
- Integrate preflight, selection and active-job polling with deduplicated alerts, recovery, critical-headroom dispatch holds and bounded retries.
- Automatically scan known task-owned cache/temp locations on disk incidents with deadlines, link/reparse refusal, ownership and active-use evidence, measured size and recovery cost.
- Require exact cleanup authorization, use supported tools, and remeasure capacity before retry; package the thin worker-health skill without a daemon.
Evidence:
- Portable fixtures prove capacity, quota/inode, separate temp disk-full, sustained pressure, GPU OOM and denied/stale/unavailable classifications.
- Tests prove automatic bounded investigation, visible deduplicated alerts, recovery, dispatch holds, authorized cleanup only and measured retry decisions.
- Distributed catalog and worker workflow tests pass without private identities, credentials or process arguments.
[ ] NPM-PACKAGE-001 — Construct and verify native npm release packages
Release target: 1.1.0
GitHub issue: #411
Priority: P1
Owner: package-npm Flavor and native package adapters
Direction: Resolve issue #411 so JavaScript Components selecting package-npm can construct and verify release packages.
Conclusion: Target 1.1.0. Add native npm construction over the exact accepted artifact closure; verification must neither install nor publish. Registry and release-asset publication retain their existing explicit authorization and evidence requirements.
Local implementation and review:
package-npmnow selects a deterministic native npm tarball adapter. Its exact packager identity binds canonical package metadata; its PackagePlan binds the accepted artifact closure, authored Component specification and both source/resolved CycloneDX documents. Independent verification reopens the tarball, reconstructs the plan identity, verifies every declared payload digest and executable mode, and rejects every extra entry without invoking npm, installing, or publishing. Per-provider retained input roots also repair independent verification of generated provider metadata.Local qualification evidence: The synthetic public CLI fixture passes package plan/build/verify, retains
publication_authorized: false, and refuses stale accepted generation inputs. Adapter regressions prove deterministic bytes and reject changed archive bytes, stale embedded plan authority and a digest-consistent tarball with undeclared contents. The focused packaging, release-contract, npm lifecycle, Flavor catalog and source-SBOM custody suite passes 85 tests; lint and format pass for the changed implementation. On the combined monorepo stack, reviewed lifecycle-driver identitysha256:63fa940f5e58d7f3b46f24825239820f01a45d2c9e2070615ec6478ab502c10c, sample-runner identitysha256:f40f04aa36ee31ed2688ae2f21e28f9694b2869607c47906d6d54e466604814fand documentation authority are current. Installed-wheel and hosted/full qualification remain open.Depends on: LIBRARY-ARTIFACT-001
Implementation:
- Implement native package-npm provider selection, deterministic package metadata and construction with exact authored specification, executable product, source/resolved SBOM and archive digest bindings.
- Verify the complete declared archive closure without installing or publishing; refuse stale accepted inputs, altered archive bytes and undeclared contents.
Evidence:
- A synthetic JavaScript fixture passes public package plan/build/verify, including the historical missing-provider refusal and the changed-byte, stale-input and undeclared-content regressions.
- Installed-wheel and current full/hosted qualification cover the package adapter; retain package identities and verification receipts before release publication.
[ ] REL-442 — Bind Cargo workspace package versions during release preparation
Local integration and repair: Merge
3d10bce4incorporates peer headf6ecaa7ddd3e52b9098087817c1f78c65cffc427, including Cargo mirrors and portable retained-runtime fixtures. Review reproduced a raw TypeError for integer dependency collections and invalid Cargo output for a PEP 440-only prerelease. Both now return typed binding errors; Cargo native SemVer is required under every project version policy. The public prepare regression proves refusal leaves every tracked release file unchanged.Local qualification evidence: 94 release/runtime regression tests pass in 62.532 seconds; 12 version-authority tests pass in 8.550 seconds. Lint, formatting, OpenSpec, layout, skills and documentation (121 diagrams / 547 Markdown files) pass. Reviewed driver identity is
sha256:999cc0b3d6a834eea67c80a1348818e8768ad9d4995f8b00f173a54fc3199871; documentation authority verification passes. The complete test receipt remains stale; installed, full and hosted acceptance remain open.Release target: 1.1.0
GitHub issue: #442
Pull request: #444, observed head
f6ecaa7ddd3e. Integrated locally with the additional review repairs and evidence below; full, installed and hosted qualification remains pending.Priority: P1
Owner: project release version bindings
Direction: Support exact Cargo workspace package mirrors during atomic release preparation (issue #442).
Conclusion: Reuse the existing REL-442 implementation in PR #444; qualify and integrate its exact package selectors, lowercase authority keys, drift checks and atomic rollback without changing unrelated dependency bytes.
Depends on: none
Implementation:
- Review and integrate PR #444 locally, preserve its owner and implementation, and repair malformed dependency and non-SemVer version refusal.
- Complete installed and hosted qualification of the consolidated candidate before landing or closing #442.
Evidence:
- Multi-package preparation/check, missing/duplicate/sourced selector, version drift, unchanged dependency and rollback fixtures pass on the integrated candidate; final local, installed and hosted release gates pass.
[ ] CONVERSION-DIAGNOSTICS-002 — Surface retained gate disk failures within bounded diagnostics
Release target: 1.1.0
GitHub issue: #449
Related work: CONVERSION-DIAGNOSTICS-001 supplies bounded full-stream capture; WORKER-HEALTH-001 supplies measured resource observations. Neither historical capture evidence nor optional health inspection proves this reported public-command failure is repaired.
Next action (in progress): Qualify the repaired bounded diagnostic path across the harness, public retained command and installed/native execution.
Local repair evidence: A public
run-retainedfixture reproduces the missing stdout tail with the old 4,096-character envelope. Both streams now retain physical tails; a reported ENOSPC buried between long output regions produces a static investigation hint even after earlier unrelated errors. Secret values are redacted, the post-redaction budget is enforced, long command headlines are bounded, and no failed candidate or evidence file is published. Generic exit 2 stays generic; direct ENOSPC/EDQUOT during local workspace execution or process startup getsproject.host_storage_exhausted. No live filesystem was filled or cleaned.Qualification evidence: The broad harness/retained-receipt/project-CLI batch passes 143 tests in 389.053 seconds. After the final diagnostic guards, all 10 focused tests pass in 24.047 seconds; the existing secret-redaction regression also passes, as do 12 version-authority tests in 9.561 seconds. Lint, formatting, OpenSpec, layout, changed-skill admission and documentation (121 diagrams / 547 Markdown files) pass. Reviewed driver identity:
sha256:2fa18c4b8b1dcf4a3b6fd68199a680dc1dfbf8e3ec28cb24937e3fddf3a8db49. Authority verification passes; the complete test receipt remains stale, with locks/source intelligence/HTML explicitly unconfigured. Installed/native qualification and consolidated release evidence remain open; the local volume has only 3.4 GiB available.Repair implemented; qualification in progress: The local retained CLI caps a harness diagnostic at 4,096 characters even though the harness default is 8,192; preserve the full finite harness budget for the two gate-failure codes. Prioritize a bounded, static storage-failure hint detected across the full stream and the physical tail before ordinary first-error/head context. Keep child-reported ENOSPC/quota text distinct from measured capacity and direct OS errno. Direct ENOSPC/EDQUOT in local retained workspace execution receives a specific stable error; generic exit 2 never establishes disk exhaustion. Public fixtures must retain mixed-stream tails, redact secrets, bound output and publish no failed candidate.
Priority: P0
Owner: retained-harness output observation and public CLI failure envelope
Direction: Resolve issue #449: head-only retained-run diagnostics hide a reported ENOSPC failure and misdirect investigation.
Conclusion: Extend the existing bounded full-stream observer and final CLI envelope. Prioritize actionable error context and true tail across both streams; distinguish observed disk-exhaustion evidence from generic exit 2 or an unverified text hint. Preserve redaction, output limits and fail-closed receipts.
Depends on: none
Implementation:
- Reproduce a long noisy retained test whose final output reports disk exhaustion, trace truncation through the public command, then repair the narrowest output/error boundary.
Evidence:
- Public retained-command fixtures preserve ENOSPC evidence after a long prefix and with mixed streams; generic failures are not mislabeled, sensitive text is redacted, output remains bounded and no failed receipt is published.
- Qualify the installed CLI and native platform diagnostics on the consolidated release candidate before closing #449.
[ ] ADOPT-READMIT-001 — Readmit corrected retained harnesses after conversion
Selection-accounting follow-up: #40. Cargo
ignoredcases are excluded from its default run, not runtime-skipped selected cases. Preserve their count as explicit excluded evidence; only passed/failed selected cases contribute to the selected total. A failed selected case, ignored-only suite, zero collection, Python runtime skip or known failure still cannot qualify. Verify actual Cargo default/include-ignored behavior and public retained receipt admission/refusal without changing source custody or receipt authentication.GitHub follow-up: #488. Restore explicit retained-stage selection from the archived implementation onto current main. Fresh inspection currently drops admitted test/package stages; preserve exact reviewed records and selection identity through plan/apply, then prove the installed-wheel command retains all required evidence. This restores a missing acceptance gate without changing release authority. The retained-harness/readmission/remote suite passes 44 tests, and the added two-stage regression passes separately. Lint and formatting pass. A read-only wrapped-project plan retains build/test/package, minimum test count one and required package evidence; installed-wheel validation and hosted CI remain pending.
GitHub issue: #451
Priority: P0
Owner: retained harness admission and conversion authority
Direction: Allow an adopted project with a false detected build system or post-admission inventory metadata to replace its retained commands through a reviewed framework transaction.
Conclusion: Add a plan/apply command that re-inspects or accepts explicit portable commands while original source remains authoritative, reruns baseline and wrapper parity on the retained implementation, atomically rebinds the receipt policy and wrapper, preserves prior evidence as history, and leaves the current conversion stage unchanged. Tighten Bazel detection to require a workspace marker and derive allow-unready policy from the final inventory.
Depends on: ADOPT-REFRESH-001
Implementation:
- Require original-source release authority, an exact plan identity, acknowledgement, bounded command execution, and current source custody.
- Reject commandless or escaping stages and preserve prior inventory, baseline, parity, wrapper, manifest, and authority as history.
- Regenerate the wrapper and receipt policy from the final qualified inventory without hand edits.
Evidence:
- False standalone BUILD.bazel fixtures are not classified as Bazel workspaces.
- Plan/apply tests prove rollback, history, policy rebinding, and qualified baseline/parity.
- Wrapped-to-retained adoption can readmit commands without changing authority; specification authority and stale plans fail closed.
- The ovrtx retained harness runs its real Linux RTX suite and advances only after a valid receipt.
Results:
project retained-harness readmitreplaced the false Bazel stages withuv buildplus the repository aggregate test runner, preserved prior evidence, qualified direct and generated-wrapper execution on the Linux NVIDIA worker, and left conversion authority wrapped. A subsequent 53-test retained receipt passed and authorized the explicit advance toretained.
[x] RETAINED-ADMISSION-001 — Qualify explicitly retained source under an existing Component
- Release target: 1.1.0
- GitHub issue: #463
- Priority: P1
- Owner: Standard lifecycle source admission
- Direction: Provide an explicitly authorized retained-source path without replacing existing Component specifications.
- Conclusion: Bind exact-content retained provenance to existing classification, dependency, build, and independent acceptance gates. Keep the source distinct from model-generated provenance and in a separate cache namespace.
- Depends on: none
- Implementation:
- Bind explicit retained-source input to the current lock and exact tree identity, with focused authorization and drift tests.
- Preserve distinct provenance and prevent regenerative cache promotion, with cache and checkpoint regressions.
- Evidence:
- The preparation branch passed 62 focused source/wire/cache/rebuild tests plus four CLI/acceptance tests and repository lint/format checks.
- The exact integrated implementation passes 152 retained-source, source-generation, cache/checkpoint, Standard lifecycle, CLI, and peer-work tests; focused lint and formatting, project validation, version authority, and the live full-stack and regenerative samples pass.
- A clean candidate wheel initialized a fresh exact-parent project, generated
and admitted a 12-test hello Component, then planned exact retained bytes as
sha256:2bae5b97e15206890f454fef6e5d1f0343ac7b8fce7910dc1953ef3ad589e54a. The authorized replay ran without a coding model, reported source provenanceretained, reused the exact build, and passed all 12 generated and independent acceptance tests.
[x] RETAINED-GITLINK-SCOPE-001 — Preserve initialized submodules in retained archives
- Release target: 1.1.0
- GitHub issue: #469
- Priority: P0
- Owner: retained harness source custody
- Direction: Include initialized Git-submodule source in the Git-visible retained scope without flattening repository administration or inventing content for an uninitialized gitlink.
- Conclusion: Recursively capture each initialized child repository's tracked and nonignored untracked files, carry child ignored-root accounting into the parent scope, and bind every included byte into the existing tree and archive identities.
- Implementation:
- Discover gitlinks from the superproject index and recurse only when the child worktree resolves to its own repository root.
- Prefix child paths and excluded roots while omitting
.gitadministration and uninitialized gitlinks.
- Evidence:
- Real Git fixtures prove initialized tracked and visible-untracked files are copied, ignored child outputs are accounted for, and deinitialized children remain omitted.
- A retained remote archive regression proves the nested source file is present
and no
.gitmember is transported.
[x] PEER-WORK-UNDERSCORE-001 — Accept Git-valid underscore branch lifecycle markers
- Release target: 1.1.0
- GitHub issue: #465
- Priority: P1
- Owner: peer-work lifecycle marker validation
- Direction: Permit an underscore-prefixed Git branch to receive an exact-head terminal marker without weakening unsafe-ref or deletion checks.
- Implementation:
- Accept
_archiveand retain traversal, invalid-component, and leading-option refusal.
- Accept
- Evidence:
- A real temporary-Git fixture creates and reads back the marker for
_archive.
- A real temporary-Git fixture creates and reads back the marker for
[ ] RELEASE-NOTES-001 — Resolve the newest GitLab release disposition
GitHub issue: #471.
Priority: P1
Owner: release contribution tracker adapter
Direction: Make release gates honor the latest current-cycle tracker disposition.
Conclusion: GitLab notes arrive newest first while classification chooses the last matching marker; normalize chronological order and read every notes page before classification. Track upstream issue #471.
Depends on: none
Implementation:
- Retrieve all GitLab notes pages and normalize creation order before classifying release markers.
Evidence:
- Five pre-fix regression failures reproduce stale selection, truncated pagination and missing identity validation; all 24 release contribution tests pass after the repair.
- Full Python check and required CI (next action).
[ ] PYTHON-LOCK-001 — Admit complete typed Python dependency locks
GitHub blocker: #473
Packaged runtime repair: Directory packages now project every non-export file from the sealed Python artifact as an explicit content-addressed package resource. This binds the retained wheel runtime, dependency manifest, artifact manifest and resolved SBOM into the package plan/result alongside the application export. Packaged execution reconstructs dependency observation from lifecycle-owned authority, verifies the complete packaged artifact tree and works after relocation with the original build artifact, admitted source and provisioning wheelhouse removed. Application, runtime, manifest and SBOM mutation each refuse before execution.
Local packaged evidence: Two real offline-wheel fixtures pass in 7.383 seconds, including relocated integration/execution and all four mutation classes. The combined Python lifecycle/evidence, command-projection, retained-source and rebuild adapter set passes 69 tests in 52.496 seconds. All 134 Python dependency, installation, evidence and lifecycle tests pass in an isolated environment with the exact pinned pip wheel in 96.375 seconds.
Shared payload follow-up: A real multi-wheel namespace distributes identical ordinary package files in multiple wheels. The current observer rejects all cross-package path overlap. In progress: permit only matching unmodified ordinary payload claims with exact path, SHA-256 and size agreement; validate each owner's RECORD and bind all owners in observed evidence. Continue rejecting differing bytes, within-wheel scheme collisions, distribution metadata overlap, transformed scripts and generated wrapper collisions. Add positive and adversarial regression fixtures before renewing native and framework qualification. No validator bypass or third-party archive rewrite is authorized by this work. The local implementation now passes 62 observer, real offline-installer, resolver, evidence and runtime tests in 49.570 seconds, without skips; changed Python lint/format and diff checks pass. A disposable Linux native closure installs and independently verifies 11,105 files, repeats validation and cleans up successfully. This is a patched review-environment result, not qualification of a new framework distribution. Next: review the changed lifecycle identity, renew framework qualification and build an exact non-editable candidate before any derived project's next binding transition. The single changed TCB file was reviewed and the supported helper records driver identity
sha256:59c56e3bb7ced25291a1944f8f8f8f42cc39926e7c2b20a09ea80d06b8898bbc. All 12 version-authority tests pass in 6.789 seconds. The prior clean revisiondcacfbc2passed 5,148 tests with 29 skips in 5,353.028 seconds; that result does not qualify this follow-up. A new exact-revision broad gate is next.Original issue: private downstream tracker item 1 (link intentionally omitted)
Draft: implementation and remaining admission boundaries. Local branch
fix/python-lock-admission; no push, merge or publication. Implemented: source manifest/lock reconciliation; complete wheel payload checks; owned staging; selected-interpreter compatibility observation; fixed offline installation through an exact pip wheel; independent wrapper/script projection; and installed-tree, dependency-edge and import-alias verification. The optional installer import is declared in source-BOM authority, not hidden or ambient. All 175 focused tests pass with the exact installer wheel supplied, including repeated-install identity, native payloads, wrapper drift, unsafe entry points, collisions and cleanup. Changed-file lint/format and diff checks pass. Offline Standard build dispatch, artifact custody, cache revalidation and execution admission are now connected for explicitly provisioned wheels. Controlled network acquisition remains separate work. The installed framework and execution gates remain unchanged. Full-suite qualification of this revision and Linux/Windows lifecycle acceptance are still required; historical interrupted broad-suite results are recorded in the linked draft, not counted as a pass. Retained Python payload evidence now binds build authorization, source authority, target and installer identities and survives installer-context cleanup. Cache verification requires an independently sealed manifest identity and rejects payload, permission, source, target and manifest drift. The CycloneDX resolver now consumes explicit source authority and a fresh Standard retained-payload callback, checks package coordinates, graph edges and import aliases, and binds installed evidence through the public resolution port. Default callers remain closed. Ambient packages and self-asserted build flags cannot supply this proof. An additional 22 application-port and CycloneDX regression tests pass. The public Python wheel profile, selected interpreter and manifest/lock paths are now bound into locked command and toolchain-closure authority. All three phases use isolated Python; runtime imports the retained package directory and ignores injected ambient startup paths. Existing dependency-free commands are unchanged. A fresh 148-test profile/schema/runtime/lifecycle run passes with two existing platform skips; the 197 dependency/public-port/SBOM tests also pass. These are local fixture results, not native Linux/Windows application acceptance. Runtime assembly now requires an explicit operator-provisioned wheel directory; rebuild composition accepts an absoluteLITAI_PYTHON_WHEELHOUSEor programmatic argument. It supplies bytes only; lock hashes, authorization, target verification and sealed artifact custody remain mandatory. Fresh offline builds install and retain the exact closure; cache hits require external checkpoint verification. Test/execute command preparation rechecks the complete sealed artifact and retained dependencies. Current combined regression: 374 tests, 372 passed and two existing platform skips; a separate 50-test rebuild/CLI/qualification run passes. Changed-file lint/format and diff checks pass. No native-platform or full-suite acceptance is claimed. Next in progress: qualify the production rebuild/source-cache/receipt chain and actual native dependency closures. Original-source native SDK work in GitHub #407 is related but does not by itself admit the Python distribution closure. Native Windows qualification of the draft exposed incompleteDirEntry.statidentity/link-count fields and a CRLF-writing authoring fixture. Fulllstatmetadata and explicit LF repair these without weakening link rejection. The disposable patched Windows snapshot passes all 48 affected tests with one platform skip, plus two metadata/hardlink regressions. Those repairs and tests are now integrated locally: all 50 focused tests pass in 53.557 seconds without skips, with changed-file lint, format and diff checks passing. The broad local gate at4853ee67finished 5,007 tests in 5,312.101 seconds: one failure and 29 skips. The failure is the stale self-hosting driver content identity. The repository review helper now binds the reviewed source atsha256:629166b067bf5baf150efae93199987f9b2c9400e3a6847230870a85028b4271; all 12 version-authority tests pass. Next: rerun broad qualification and the remaining Windows modules. No full-suite pass is claimed; installed framework and derived-project lifecycle bindings remain unchanged.Priority: P0
Owner: dependency acquisition and lifecycle evidence
Direction: Support third-party Python distributions without weakening lock or SBOM admission.
Conclusion: Implement an exact target-specific wheel lock with dependency edges and hashes; retain fail-closed behavior for incomplete or unsupported inputs.
Depends on: none
Implementation:
- Add typed Python lock validation and integrate acquisition and observation.
- Add portable graph, marker, hash mismatch, cache reuse and admission tests.
Evidence:
- Focused dependency tests and Python quality gates pass.
- Exact wheel hashes and selected transitive edges are enforced before execution.
[x] WORKTREE-001 — Keep worktrees inside the owning repository and collect sibling copies
Priority: P1
Owner: existing survey-peer-work skill and repository hygiene (PROJECT.md goal 1)
Direction: Inspect sibling Literate AI directories, preserve unique work, and remove verified redundant copies; future worktrees belong inside the repository.
Conclusion: Verify clean state, current commit ancestry and ignored payloads before removing sibling checkouts. Retain unique commits and non-reproducible evidence inside the owning repository.
Depends on: none
Implementation:
- Document the in-repository worktree rule and ignore its directory.
- Audit and remove sibling Literate AI checkouts after preserving any unique state.
Evidence:
- Confirm all removed checkout commits remain reachable and no sibling Literate AI directories remain.
- Run skill validation and review the final diff.
Verified outcome: Seven sibling linked worktrees and one separate release clone were clean; all eight checkout tips are ancestors of
a3a1a00f6cb8. Removed the redundant checkouts after preserving ignored build evidence and the separate clone's complete Git directory locally inside the owning repository. Imported every clone ref intorefs/archive/peer-cleanup-20260920/and verified each object identity. Existing branch refs remain intact. A fresh sibling scan found no remaining Literate AI checkout; ancestry checks passed after removal. Updated the existing survey skill rather than creating a duplicate. Bothmake skills-checkandgit diff --checkpassed.Survey scope: Start/end peer surveys succeeded. The GC plan had no eligible branch candidates (dirty main checkout, young/stale markers, or unmerged heads), so no branches were collected. Explicit operator direction authorized removal of the verified redundant sibling directories. Temporary worktrees and the checkout embedded in another project were outside this sibling cleanup.
WORKTREE-001 GitHub transfer follow-up: publishing the existing commit to the canonical GitHub release branch exposed an init-template parity failure. Sync the packaged survey skill with its authored source so installed projects receive the same worktree placement and preservation rules. Validate the existing parity regression and skill gate before reinstalling the GitHub-origin distribution.
WORKTREE-001 template repair evidence: focused make python-check with
PYTHON_TEST_PATTERN=test_agent_skill_catalog_template.py passes the existing
source/template parity test; make skills-check passes. GitHub CI is the remaining
confirmation for the published repair.
WORKTREE-001 lifecycle follow-through: the packaged skill is the only file changed
under the lifecycle driver's declared implementation paths. Reviewed that exact
copy-only change and refreshed its identity with review_lifecycle_driver.py --record, then refreshed documentation review. The existing version-authority
regression passes through focused make python-check; this addresses the next
GitHub CI failure without relaxing identity checks.
[x] CI-HELP-COLOR-001 — Make direct CLI help assertions color-independent
- Priority: P0 (1.1.0 release blocker)
- Owner: direct CLI help tests and their explicit plain-text environment
- Direction: The 1.1.0 release check failed because inherited
FORCE_COLORmade Python 3.14 argparse emit ANSI-colored help intoStringIO, while direct tests asserted uncolored literal text. After the initial CI-plan repair, a later check retained the same failure in parent checkout. - Conclusion: Run direct literal help assertions under the same plain-text environment already used by the canonical CLI help tests. Do not disable CLI color globally or weaken the command-name assertion.
- Depends on: none
- Implementation:
- Define the bounded plain-text test environment by removing inherited
color-forcing variables and setting
NO_COLOR=1andTERM=dumb. - Patch the environment only around the CI-plan, parent-checkout, and tracker-inspect help invocations.
- Define the bounded plain-text test environment by removing inherited
color-forcing variables and setting
- Evidence:
- The exact release gate failed the focused assertion under inherited
FORCE_COLOR; the repaired nine-test CI-plan module passes withFORCE_COLOR=1. - The canonical ten-test CLI-help module passes with
FORCE_COLOR=1; lint and formatting pass across all 1,250 checked files. - Release evidence
20260924T160451Z-8fddf5retained the independent parent-checkout failure after 2,924 tests; the tracker assertion reproduces under the same inherited-color environment. - PR #493 exact-head CI run
36029724360passed all 19 hosted jobs; all 28 affected modules pass underFORCE_COLOR=1before backport.
- The exact release gate failed the focused assertion under inherited
[x] WHEEL-ORIGIN-001 — Compare exact build origins canonically
- Priority: P0 (1.1.0 release blocker)
- Source pull request: #494 (isolated wheel-smoke repair extracted before the broader integration merged)
- Owner: installed-wheel origin qualification
- Direction: The build backend records canonical GitHub repository origins, while wheel smoke compared that value to the ambient raw remote URL.
- Conclusion: Canonicalize the observed origin with the same repository URL authority before exact comparison. Preserve revision equality and fail closed for genuinely different repositories.
- Depends on: none
- Implementation:
- Reuse
canonical_repository_originin the installed-wheel smoke gate.
- Reuse
- Evidence:
- Release evidence
20260926T052816Z-f2d2a4retained the exact-origin failure after all 5,778 wheel-smoke tests passed. - Extracted source commit
6326b4dfchanges only the gate comparison. - Clean exact repair head
9953e5b7passes the completewheel-check. - PR #499 exact-head CI run
36228926976passed all 19 hosted jobs.
- Release evidence
[x] CPP-BAZEL-MACOS-001 — Bind the fixture stager to its filesystem deployment floor
- Priority: P0 (1.1.0 release blocker)
- Owner: C++ Bazel product acceptance fixture
- Direction: Xcode 27 rejects the fixture's C++17 filesystem stager when Bazel targets a macOS version earlier than the API's 10.15 availability.
- Conclusion: Select a 10.15 compile and link floor only for the Darwin execution platform; preserve all Linux and Windows fixture flags.
- Depends on: none
- Implementation:
- Add Darwin-only compile and link options to the generated stager target.
- Add a structural regression for the generated Bazel rule.
- Evidence:
- Release evidence run
20260923T140622Z-e96cdfretains the Xcode 27 failure from the complete filesystem runtime test. - The structural regression and the previously failing static/shared runtime test pass together on macOS 27 with Xcode 27.
- PR #490 qualified the unchanged repair head in all 19 hosted CI jobs;
backport the reviewed commit with source provenance, then retain current
mainancestry on the release line.
- Release evidence run
[x] CPP-BAZEL-SDK-001 — Bind the selected macOS SDK through Bazel execution
- Priority: P0 (1.1.0 release blocker)
- Source pull request: #485 (self-contained SDK repair extracted; broader native gRPC work remains deferred)
- Owner: C++ toolchain identity and Bazel lifecycle execution
- Direction: Xcode 27 makes
SDKSettings.jsona compiler dependency, while an unbound Bazel repository probe does not admit the selected Xcode SDK root. - Conclusion: Resolve implicit Apple developer-directory and SDK selections once, bind them and bounded SDK metadata into C++ toolchain identity, and pass the exact selection to Bazel repository, action, host-action, and independent consumer invocations.
- Depends on: none
- Implementation:
- Discover implicit
DEVELOPER_DIRandSDKROOTwith bounded Apple tools. - Reject SDK path or metadata drift before and after lifecycle execution.
- Declare the selected SDK root to rules_cc repository probes and actions.
- Discover implicit
- Evidence:
- Local full validation retained the reproducible Xcode 27 failure at the
undeclared absolute
MacOSX.sdk/SDKSettings.jsoninput. - The exact complete filesystem runtime passes static and shared product builds, independent acceptance, and fresh Conan/Bazel consumers in 113.847 seconds after the repair.
- Local full validation retained the reproducible Xcode 27 failure at the
undeclared absolute
[x] REFRESH-WINDOWS-NODE-001 — Canonicalize unsigned filesystem identifiers
- Priority: P0 (1.1.0 release blocker)
- GitHub pull request: #491
- Owner: repository refresh custody identity
- Direction: The Windows 2025/VS2026 hosted image can expose filesystem identifiers above the canonical JSON signed 64-bit ceiling.
- Conclusion: Preserve the canonical JSON contract and encode only out-of-range local OS integers as tagged decimal strings before hashing custody, metadata transition, and metadata-directory plans.
- Depends on: none
- Implementation:
- Add bounded integer normalization to every refresh identity wire.
- Prove adjacent oversized node identifiers retain distinct identities.
- Evidence:
- Exact release-head CI run
35908379795retained 33 failures sharing$.children[0].boundary[0]: integer is outside canonical signed 64-bit range. - PR #491 wheel smoke retained the independent metadata transition failure
at
$.metadata[0].before_signature[0]. - The next Windows wheel smoke retained the metadata-directory failure at
$.metadata_directories[0].node[0]. - PR #491 exact-head rerun
35937064698passed all 19 hosted CI jobs; 121 combined refresh, C++ Bazel, and guarded-builder backport tests pass. - Backport all five reviewed commits with source provenance and retain
current
mainancestry without replacing release-specific identities.
- Exact release-head CI run
[ ] WORKTREE-002 — Own project-scoped worktree placement and audited retirement
- Design review: ADR 0046, Accepted 2026-09-25.
- Priority: P1 (partial placement slice in 1.2; remaining migration contract deferred to 1.3)
- GitHub issue: #7 (migrated from NVIDIA-dev/literate-ai#483)
- Owner: project worktree placement, peer survey, and evidence-preserving retirement
- Direction: Define one discoverable in-repository worktree location and migrate legacy peer-directory worktrees without losing useful commits, untracked data, locks, sessions, submodule state, or qualification evidence.
- Conclusion: The completed 1.1 sibling-cleanup slice does not establish the complete reusable lifecycle contract. Add provider-neutral placement, exhaustive audit, resumable migration, and Git-aware removal while retaining fail-closed ambiguity handling.
- Depends on: none
- Implementation:
- Obtain explicit maintainer acceptance of ADR 0046 before implementing its placement, migration-journal, or removal design.
- Define and enforce canonical project-scoped placement across CLI and initialized/inherited guidance.
- Audit legacy worktrees by common-directory identity, preserve or land useful state, and record each terminal disposition.
- Make migration resumable and prevent new peer-directory worktrees.
- Evidence:
- Portable tests cover dirty, staged, untracked, ignored, detached, locked, active, submodule, independent-clone, concurrent-change, failed-landing, failed-removal, and resumed migration cases.
- A reviewed migration report proves every removed worktree was revalidated and all useful state retained or landed.
- Progress (2026-09-25): The first placement slice now derives the canonical
.worktrees/root from the absolute Git common directory and NUL-delimited registration, exposes it throughlitai project worktree location, and provides collision-safe atomic reservation for framework commands. Canonical and linked checkout, bare-repository, collision, and symlink-refusal tests pass, and both the packaged and source guidance use the public command. Legacy discovery, complete audit, resumable journals, reviewed disposition, and removal remain open. Issue #483 records the explicit 1.3 disposition; the read-only release audit found no legacy candidate eligible for removal without the missing retained journal and revalidation contract.
[x] PACKAGE-APT-001 — Construct and independently verify real Debian packages
- Design review: ADR 0045, Accepted 2026-09-25.
- Priority: P1 (deferred to 1.2)
- GitHub issue: #487
- Owner: package-apt Flavor and native Debian package adapter
- Direction: Make package-apt produce a standards-compliant deterministic .deb rather than a metadata ZIP containing DEBIAN/control.
- Conclusion: Use bound native Debian tooling to construct the exact accepted PackagePlan under OBJ_DIR and independently inspect metadata and the complete payload without installing or publishing it.
- Depends on: none
- Implementation:
- Obtain explicit maintainer acceptance of ADR 0045 before implementing its Debian projection, bound native tooling, or worker custody design.
- Project deterministic Debian paths, modes, control metadata, architecture, entrypoints, specifications, SBOMs, and runtime dependencies from the accepted closure.
- Construct a reproducible .deb with bound tooling and verify its metadata, file table, modes, and digest independently.
- Evidence:
- Tests prove reproducible bytes, executable modes, exact metadata and payload, tamper rejection, and fail-closed behavior when required tools are unavailable.
- Progress (2026-09-25): The first local adapter slice projects exact
amd64orarm64paths and modes, refuses guessed runtime dependencies in favor of explicit resolved-CycloneDX Debian coordinates, binds and rechecksdpkg-deb, constructs with fixed gzip, ownership, locale and epoch policy, and independently parses the returned ar/control/data archives. Focused tests prove byte reproducibility, executable and documentation placement, tamper/script/traversal refusal, architecture contradiction, and non-Linux local refusal. The public package build/verify path now selects the real Debian adapter, retains its exact projection in package evidence, and refuses to misrepresent lifecycle-only remote dispatch as remote artifact construction. Real Linux tool evidence is retained by the hosted matrix. Serializable package dispatch and non-Linux-controller qualification are explicitly deferred to 1.3 as issue #497; that follow-on does not weaken the completed local package-apt contract. Windows hosted qualification also proved the public projection normalizes its uppercaseAMD64machine spelling before applying the Debianamd64contract.
[ ] NATIVE-CLI-001 — Admit native command-line application Components
- Design review: ADR 0047, Accepted 2026-09-25.
- Priority: P1 (partial taxonomy and verifier slice in 1.2; complete lifecycle qualification deferred to 1.3)
- GitHub issue: #6 (migrated from NVIDIA-dev/literate-ai#492)
- GitHub pull request: #484
- Owner: Component kinds, Standard lifecycle dispatch, and verifier-owned native CLI acceptance
- Direction: Support native-cli-application Components whose ordinary argv, exit-status, file, and output contracts must not be forced through the portable JSON application protocol.
- Conclusion: Review and reconcile the retained draft as a significant new 1.2 Component and acceptance surface. Bind its executable, specifications, cases, native build/platform Flavors, locks, and receipts while preserving targeted fail-closed diagnostics.
- Depends on: none
- Implementation:
- Obtain explicit maintainer acceptance of ADR 0047 before implementing the new Component kind, verifier schema, or packaged execution path.
- Define and validate native-cli-application plus native-cli entrypoints without applying the portable JSON oracle.
- Execute verifier-owned help, invalid-argv, file-input, exit-status, and output-artifact cases through the Standard lifecycle.
- Evidence:
- A synthetic fixture passes validation, lock, build, test, acceptance, and receipt verification on supported platforms.
- Substituted binaries, stale case inputs, and malformed or unsupported declarations are rejected.
- Progress (2026-09-25): The accepted kind and entrypoint taxonomy, public
verifier schema, strict parser, binary stdin/output and filesystem predicates, and
package-custodied subprocess acceptance are implemented. Focused source tests cover
exact binary fixtures and undeclared-output rejection. Sixteen native acceptance and
taxonomy tests pass against the installed wheel from integration head
6ff49aad4; complete synthetic lifecycle and cross-platform qualification remain open under issue #492's explicit 1.3 disposition.
[ ] NATIVE-GRPC-001 — Reconcile retained native gRPC and child lifecycle work
- Priority: P1 (deferred to 1.2)
- GitHub pull request: #485
- Owner: native gRPC oracle, retained child lifecycle, and IPC acceptance authority
- Direction: Preserve the broad divergent native gRPC and child-lifecycle draft for deliberate review without treating its historical focused evidence as merge or release qualification.
- Conclusion: Rebase and decompose the retained work against current
IPC-SURFACE-001 and lifecycle authority, retain only non-duplicated contracts,
and qualify the integrated result rather than landing the conflicting draft
wholesale. The self-contained macOS SDK repair was extracted into
CPP-BAZEL-SDK-001; it does not change the remaining gRPC disposition. - Depends on: IPC-SURFACE-001
- Implementation:
- Salvage the standalone public-CLI fixture isolation from
ff11badb4by selecting an explicit repository root instead of inheriting ambient parent discovery. - Inventory the draft by authority boundary. The native gRPC oracle, descriptor closure, transport, lifecycle dispatch, evidence retention, documentation, and generated-skill catalog form one non-duplicated ADR-0029 slice. Historical child-lifecycle and stale authority/evidence commits are superseded by current lifecycle work and are not merged wholesale.
- Land the reconciled native gRPC slice with current authority identities.
- Record exact landed and superseded commit dispositions on PR #485.
- Salvage the standalone public-CLI fixture isolation from
- Evidence:
- Source-focused native gRPC tests cover bounded loading, exact descriptor closure, default JSON-name normalization, all four RPC cardinalities, native readiness, remaining-budget enforcement, response/status/detail refusal, retained raw evidence, and child shutdown. This is local source evidence only.
- Forty-eight focused native gRPC descriptor, reflection, oracle, transport, and
child-lifecycle tests pass against the installed wheel and its pinned optional
runtime from integration head
6ff49aad4. - Complete local and hosted matrices pass on the final integrated heads.
- The draft PR records exact landed, superseded, and remaining commits before terminal disposition.
[ ] RELEASE-INTEGRATION-002 — Unify pending work and publish the next Literate AI release
- Release target: 1.2.0
- Design review: ADR 0044, Accepted 2026-09-25.
- Priority: P0
- Owner: framework lifecycle scheduling, shared caching, contribution integration, packaging, and release engineering
- Direction: Reconcile every pending roadmap item, open tracker item, review, unmerged branch, and attached worktree into an explicit include or defer decision; land included work on main; maximize safe workers.json lifecycle parallelism through a dependency DAG; add Bazel and sccache-backed reusable test, build, package, and container caching through local, LAN, or operator-configured cache endpoints; then cut and publish the next release end to end.
- Conclusion: Treat the next release as the 1.2 minor line already named by current forge dispositions. Extend the existing exact Component DAG rather than creating an unrelated scheduler: schedule ready nodes concurrently onto all compatible configured workers while preserving deterministic dependency, capability, custody, cancellation, recovery, and receipt boundaries. Define one provider-neutral content-addressed cache contract with local storage as the baseline and optional configured network service transport; Bazel and sccache are execution adapters, and package/container/test reuse remains untrusted until exact identity and verification gates pass. No open contribution or roadmap obligation disappears: each must be completed for 1.2 or explicitly deferred with a durable reason and later milestone.
- Depends on: Current main and exact 1.1.0 release history; existing WORKER-DAG-001, MATRIX-002, TEST-CACHE-001, CACHE-002/CACHE-006/CACHE-007, PACKAGE-001, release contribution sweep, and all current 1.2 tracker items.
- Implementation:
- Reconcile roadmap, GitHub issues/reviews, branches, and worktrees into the 1.2 contribution ledger.
- Obtain explicit maintainer acceptance of ADR 0044 before implementing its scheduler or shared-cache design.
- Specify and implement compatible-worker DAG scheduling with bounded concurrency and fail-closed evidence.
- Verify current test-cache behavior and implement provider-neutral Bazel/sccache plus package/container cache integration.
- Finish or explicitly defer every included queue item and land the consolidated change through the tiered qualification below (CI only where required).
- Cut
release/1.2.xfrom exact main and run plan, prepare, package, check, publish, verify-published, final sweep, and default-branch advance.
- Evidence:
- Roadmap projection and contribution sweep are ready with no unclassified or included-open items.
- Deterministic tests prove dependency ordering, real safe overlap across multiple compatible workers, cancellation/recovery, and no cross-node evidence borrowing.
- Cold/warm/corrupt cache tests prove correct test/build/package/container reuse with local and configured network endpoints.
- All project, package, installed-wheel, platform-worker and documentation gates pass on one exact main revision for every platform in
literate.release.jsonqualification, covered by the release host first, thenworkers.jsonworkers, then hosted CI only for platforms neither covers or when CI is marked mandatory (Windows workers runscripts/windows_release_gate.py). - The remote release branch, annotated tag, GitHub release, assets, receipts, and advanced main agree with that prepared identity.
- Maintainer direction (2026-09-29): Complete the full existing 1.2 program before release, including production worker scheduling and shared-cache qualification. Do not narrow this release to UPDATE-MERGE-002 or defer the program's remaining production-composition requirements merely to ship the merge repair early.
- Progress (2026-09-25): The first scheduler/cache slice now projects exact generate/index/authorize/plan/build/test/execute/accept/link/package/finalize nodes, dispatches newly ready work through bounded identity-bound worker slots, isolates descendant cancellation, and rejects changed recovery routes. Private worker catalogs bind slot counts and fresh compatible observations. Provider-neutral local and HTTPS/WebDAV cache authority projects to Bazel and sccache settings without embedding credentials; immutable package/container/test objects are rehashed against complete manifests. Production command/SSH action dispatch, LAN qualification, measured warm compiler hits, and full lifecycle composition remain open. Worktree migration and complete native-CLI lifecycle qualification have explicit 1.3 issue dispositions. Remote native-package custody is tracked by issue #497; production action dispatch and real LAN cache qualification are tracked by issue #498. These follow-ons preserve the boundary between the qualified 1.2 foundation and the remaining production composition work.
- 1.1 recovery scope: While the v1.1.0 authoritative check was running, PR #494
merged these foundations into
main. The release owner explicitly directed the first stable 1.1 candidate to include currentmainrather than retarget or pause. This does not claim completion of the remaining 1.2 and 1.3 work above.
[ ] PACKAGE-APT-002 — Dispatch native packaging to compatible remote workers
- Release target: 1.3.0
- Priority: P1
- GitHub issue: #5 (migrated from NVIDIA-dev/literate-ai#497)
- Owner: remote native-package worker and controller custody
- Direction: Serialize the exact accepted package plan and projection to a compatible worker, return exact artifact bytes plus independent inspection evidence, and verify the complete result under controller custody without constructing it on the controller.
- Depends on: PACKAGE-APT-001, WORKER-DAG-001
- Implementation:
- Bind and revalidate worker, platform, native tool, request, and route identity.
- Construct and inspect only beneath worker OBJ_DIR and return bounded evidence.
- Verify returned bytes, metadata, modes, and complete file tables on the controller.
- Evidence:
- Qualify a Linux worker from a non-Linux controller and reject drift, corruption, replay, changed routes, cancellation, timeout, and missing compatible workers.
[ ] TEST-POLICY-1.2-001 — Reconcile new 1.2 test modules with the test policy
- Release target: 1.2.0
- Priority: P1
- Owner: 1.2 lifecycle test suite and
tests/supportfixtures - Detailed roadmap: 1.2 test-policy review
- Direction: The 1.2 restart branch adds 54 modules under
tests/criticalthat predate the October 2026 test audit. Bring them under the policy inCONTRIBUTING.mdbefore release. - Conclusion: Four modules were reconciled with the restored audit decisions. A read-only review of the other 50 (291 tests) recommends keeping about 56 invariant cases, moving 14 real-process cases to E2E/smoke, folding 130 per-phase repeats into subTest tables, and dropping 83 wire/schema round trips, mock replicas and validation checks. The maintainer chose to record the review and defer applying it.
- Depends on: none; apply after a passing complete combined-tree run so the baseline is clean.
- Next action: Review the recommendations, then apply them in batches by
pattern (F1–F12), rerunning affected modules after each batch and committing each
batch separately. Keep every test that drives a real receiver, child process or
Git repository. Fix the unused
_WORKERscript intest_explicit_action_inputs, the two wrong module docstrings, and per-test fixture chain rebuilding. - Implementation:
- Record the per-module review and its repeated patterns
- Apply maintainer-approved keep/move/merge/drop decisions
- Build expensive support fixtures once per class
- Evidence:
- Affected modules and the complete combined-tree run pass after reduction
-
docs/testing/test-suite-audit.jsonrecords the 1.2 module decisions
[ ] RELEASE-INTEGRATION-003 — Compose production DAG dispatch and shared LAN caches
- Release target: 1.3.0 (deferred from 1.2.0 by maintainer decision on 2026-10-10; 1.2 ships the scheduler and cache foundation)
- Priority: P0
- GitHub issue: #4 (migrated from NVIDIA-dev/literate-ai#498)
- Owner: production lifecycle scheduling and shared-cache qualification
- Direction: Route production command and SSH lifecycle actions through the accepted DAG, then qualify real cross-worker Bazel/sccache and verified immutable artifact reuse.
- Depends on: accepted ADR 0044 and the existing scheduler/cache primitives; deferred to 1.3, so it no longer blocks RELEASE-INTEGRATION-002.
- Maintainer direction (2026-09-29): Complete the full existing 1.2 program before releasing. The earlier 1.3 deferral is superseded.
- Next action (in progress): Split lifecycle phases into serializable dispatch
with remote custody, preserving accepted-provider artifact admission. The action
transport must encode existing typed action/worker requests, an exact finite
deadline, and hash-verified payload/predecessor records. Command dispatch must use
the selected private worker's argv/environment, own cancellation and process-tree
cleanup, and admit only a response bound to that exact request and worker with
verified result bytes. Qualify real subprocess actuation, corruption/replay refusal,
cancellation, expiry, output limits, and credential isolation. This transport is a
prerequisite to worker-side phase execution and CLI composition, not their completion.
Reuse the host-tool bounded pipe runner for command transport; extend it with an
explicit finite input allowance, an interrupt guard, and owned-descendant cleanup.
Keep its existing caller defaults while avoiding unbounded temporary output files.
The command action boundary now passes 41 wire, scheduler, planner, and bounded
process checks. Real subprocesses prove stdin/file input, 128 KiB input, two-worker
overlap, cancellation with owned-child termination, deadline enforcement, private
environment isolation, and no result admission after corruption or worker drift.
The first worker-side phase now invokes the production source-index policy against
the exact generated candidate and its portable CAS file manifest. Reuse streaming
FileSystemCAS.copy_toto avoid serializing source bytes inside the action wire. Require the candidate predecessor, component and full source-tree identity before indexing; reject missing/corrupt blobs, unsafe or colliding paths, changed worker identity and expired deadlines. Run the receiver as an installed Python module with private CAS/workspace bindings and remove its per-action workspace on success or refusal. This first handler does not implement generation/build/test/acceptance handlers or automatic CLI routing; those remain release requirements. Integration review exposed a payload mismatch: the production planner fixes action payloads before source generation, while the first index handler placed generated file references in that payload. Move candidate/file custody into the generated predecessor result, retain the planner's exact static payload, and require matching execution-plan, generation-plan and Component identities. Qualify a node emitted by the real planner and refusal of a predecessor from another plan. Do not count an isolated handcrafted action as proof of production planner compatibility. The handler now consumes the planner's unchanged static payload and obtains source custody from the exact generation-result record. Tests use real production-planned INDEX nodes, including execution through the command receiver and rejection of a generation result bound to another execution/generation plan. Replacement source retains the same planned action identity while producing distinct predecessor and index evidence. All 40 focused tests and repository lint pass. Full lifecycle composition remains open. Source handoff now uses the controller CAS's read-only HTTP(S) blob layout from a privately configured worker endpoint. Fetch only manifest-declared missing blobs, under the existing action deadline and byte limits; verify size/digest before local CAS publication, reject redirects and corrupted existing custody, and keep endpoint/credential details out of results. Prove an actual worker process with separate controller/worker stores and a real HTTP service, including corrupt and missing responses. This is transport custody, not automatic worker routing or source acceptance; remote credentials remain private operator configuration. The command-backed adapter now implements the productionGenerationIndexerport with command dispatch. Resolve the exact registered candidate and current source, capture a bounded immutable snapshot before publishing any source blob, then use the static production INDEX node and verified generation predecessor. Reserve only admitted worker slots, retain the existing qualification recorder, and independently require the exact disabled-index result before returning it to the lifecycle. Source publication occurs at dispatch so restored source uses the same path. This port must not claim that automatic CLI worker selection or other phases are complete. Next in progress: load private action-execution configuration from the user configuration root (or an explicit environment override) and compose command INDEX admission automatically in Standard rebuild. Bind source CAS, finite deadline, hardware observation freshness and per-worker health policy paths; preserve exact configuration/policy custody and redact private diagnostics. Missing default config keeps local execution, while an explicit missing/invalid config or no admitted worker refuses. Reuse existing catalog/observation paths and health assessment; neither execute legacy commands as probes nor claim other remote phases are done. Qualify default/override paths, bounded no-follow parsing, live composition, changed inputs, unavailable workers, and the public rebuild selection boundary. Nine initial configuration checks pass, including real command health and capability receivers followed by actual HTTP-backed indexing through the automatically selected public factory. Further coverage requires enough remaining action budget for each nested bounded health probe and refuses symlink/FIFO configuration without blocking. Command-worker hardware observation is now implemented through an explicit--describe-hardwarechallenge on the opted-in one-shot receiver. Platform facts originate at that worker; request, private worker, receiver code, deadline and typed response are verified before the controller stores its conservative probe start time. Both stdin and private request-file transport pass. Public CLI failure leaves no observation file; verified success persists the typed catalog. All 34 hardware, capability, existing platform and CLI checks pass, including replay, malformed/oversized/duplicate documents, binding mismatch, legacy command refusal, and finite output/deadline/process ownership on both transport and collection. Live collection is now composed into automatic INDEX admission. Only opted-in, matching-target candidates with private health policy are probed. The admission caches verified observations only while fresh and bound to the same worker identity; expiry re-probes and unavailable candidates are excluded. Revalidation rejects changed hardware facts while allowing a fresh timestamp for unchanged facts. Persisted observation files are no longer a routing prerequisite. Catalog custody is checked again after collection and the hardware probe cannot extend the action deadline. The initial 35 focused checks pass; all 51 final composed checks pass, covering missing/stale disk observations, real unavailable-worker exclusion, freshness refresh, changed facts, catalog drift during collection, outer deadline, public probing, Standard factory integration and actual HTTP-backed indexing. Full-suite and installed-wheel qualification remain pending; other remote lifecycle phases and full automatic capacity scheduling remain mandatory 1.2 work. All 78 configuration, user-path, factory, rebuild and CLI checks pass, including real health/capability subprocesses and automatic HTTP-backed index execution. Source CAS publication remains outside authority, and the loader rejects duplicate, unknown, oversized, symbolic and non-regular configuration. Per-probe action budget is checked before starting health measurements. Retained-source authorization must precede automatic worker admission and source-CAS allocation. All twelve final configuration checks pass, including that authorization ordering; lint, host-path policy, formatting, and authority reviews also pass. Installed and consolidated checks remain required, followed by command hardware-probe integration. The completed factory integration connects to an admitted command INDEX pool and an explicit source publication CAS. The factory must obtain candidates from verified source evidence custody, share the same indexer across fresh generation and cache restoration, and bind admission into invocation identity. Missing/partial worker inputs must refuse rather than fall back to local indexing. Qualify real command execution through the assembled factory, strict source evidence, changed or missing custody, and unchanged local defaults. Automatic private CLI configuration remains the next integration step. Forty-three factory, rebuild, admission and command-index checks pass, followed by a separate real-probe check rejecting a mismatched locked target. The factory test executes an actual command worker against HTTP source custody, retains the index result, and rejects missing strict evidence or changed files before dispatch. The capability wheel atca6fc552passes with artifactsha256:1527de144861718c9dfb3ce24bf7b0cb00e6879885947adfb5b9f2c096bd54c6. Consolidated run three stopped after 201 selected checks (13 skips) at the real two-command-worker overlap assertion; the exact test passed unchanged in isolation, returning two accepted actions. The failed consolidated run remains non-passing evidence and does not authorize landing. The overlap fixture used a separate 10-second startup barrier inside a 60-second action. Use the existing action deadline for the rendezvous while still requiring both real subprocesses to overlap and return accepted results. Preserve finite cancellation and include bounded failure codes in future assertion diagnostics. All six final factory checks pass, including invocation identity separation between local and admitted command indexing without changing project revision identity. All ten real command-transport checks pass with the deadline-bound overlap barrier. Next source-custody integration must avoid the registry's existing unbounded rehash before the command indexer's bounded snapshot: retain strict evidence while bounding the complete pre-publication read, including candidate lookup and resolver revalidation. Automatic CLI configuration and full-phase routing remain open. Bounded custody now reads immutable registration metadata and verifies source bytes inside the command indexer's own bounded capture, both before publication and after worker execution. The new regression first exposed a remaining unbounded final rehash; replacing it with the bounded verifier preserves result-time drift refusal. Thirty-six factory/indexer/rebuild/runtime checks pass, plus a real-worker growth regression: a sparse file exceeding the source limit after execution is rejected before qualification retention. The successful real HTTP factory test forbids any legacy unbounded rehash. Oversized capture refuses before dispatch or CAS writes. The existing local-command and qualification suites also pass: 82 checks with two skips, preserving existing registry resolve/evidence verification for other callers. The admitted-worker wheel atb8db54bbpasses, artifactsha256:ffd147fa6b1d71c210ff9761b27f01e9d7b2a3cac188fd02de5be4fa4c05d323. Live command-worker admission now composes into the production index port; installed and consolidated qualification is in progress. Select only explicitly opted-in, fresh hardware-compatible workers that prove the required phase and source handoff. Require a health admission identity and bind those facts into scheduler admission. Re-read route and hardware authority, health, and live capability facts before dispatch and before retaining results; changed runtime, route or stale hardware must refuse. This does not close automatic CLI routing or the remaining lifecycle phase handlers. Ten admission checks pass within a 49-check composed batch; its only error was an existing HTTP-capability probe deadline expiry. A real HTTP-backed index action rechecks health four times across initial admission, source publication, dispatch, and result acceptance. Route/hardware/runtime drift and unsupported capability refuse; health rejection after execution retains no qualification record. A rejected candidate is excluded while an eligible worker remains, with sanitized diagnostics. This batch is not a clean integration pass. The same HTTP-capability expiry repeated in the focused rerun. Inspection found that endpoint validation eagerly creates urllib transport/proxy handlers even for a read-only capability description. Defer that setup until the first actual fetch; prove constructor validation never initializes transport. This removes unnecessary host proxy discovery from probing without extending the deadline. With lazy transport setup, all 56 admission, command-indexer, capability, wire, action-planner and HTTP-source checks pass together. This includes the repeated HTTP-capability failure and real HTTP fetches after constructor-only validation. Full-suite and installed-wheel qualification remain pending. Automatic admission next needs a live phase-capability probe. Add an optional action-protocol declaration to private worker records, preserving legacy identities when absent; never run an unmarked legacy command as a capability probe. Bind a finite challenge to the configured worker, return only supported phases and current receiver/runtime identities, reject replay and mismatches, and preserve private command environment isolation. This probe is necessary admission evidence, not automatic CLI routing or completion of build/test/acceptance handlers. The 103-check capability, legacy contract/schema, source, command-port, planner and scheduler batch passes, plus a separate real-process regression proves the probe caps its own budget at 30 seconds even when the action deadline is longer. Its first run expired while hashing receiver code; an unchanged isolated rerun passed. The consolidated suite at0490a003completed 2,847 checks with one native-SDK setup authorization expiry and 30 skips; that run is not passing release evidence. The native-SDK failure passes unchanged in isolation. A subsequent focused batch also reached an action deadline before its semantic-result assertion; the exact semantic test passes unchanged in isolation. Deadline enforcement remains intact; fresh combined qualification is still required. The subsequent 100-test batch had one large-source dispatch expiry; all 11 capability and large-source checks then passed together unchanged. Lint and authority reviews pass. These focused passes do not replace a clean consolidated run. The command-indexer installed-wheel check passes at1c77b3ba, artifactsha256:5af4fe6b97d3e2fb557e58a66a2f5b9dae1b453f2891928e4849ca8838959ff0. Real stdin/file probes bind fresh challenges and stable capability facts; file mode also executes an actual index action. Legacy documents retain their original identity, unmarked commands are never invoked, and stale/future/changed-route observations, replay, receiver drift and unsupported phase claims refuse. HTTP handoff is described only with valid private configuration; this read-only probe performs no source fetch. Seventy-one index-port, source, transport, planner, scheduler and runtime-factory checks pass. The assembled Standard runtime invokes a real command worker through the port, retrieves controller-published CAS files over HTTP, and retains the exact result in its qualification recorder. Wrong candidates, changed source, byte/count bounds and semantically incorrect worker results refuse. Concurrent index calls share one admitted worker slot without overlapping dispatch. Installed/full integration and automatic CLI admission remain required. Fifty focused source, wire, planner and scheduler checks pass. A real command receiver fetches from separate controller/worker CAS directories, including a 17 MiB source tree with a control message below 8 KiB. Warm verified worker reuse makes no HTTP request, and controller blob bytes/modification times are unchanged. Corruption, truncation, excess bytes, duplicate length headers, encoded bodies, redirects, missing blobs and expired requests refuse. Existing corrupt worker custody is preserved and refused without remote repair. HTTP failure responses and redirects close their sockets; network hydration precedes workspace allocation. This loopback HTTP evidence does not qualify cross-host LAN throughput, automatic worker routing or the remaining lifecycle handlers. Thirty-nine source-index, wire, scheduler and planner tests pass. Real command subprocesses return the production disabled-index policy's exact evidence for ordinary source and a 17 MiB tree whose control message remains below 8 KiB. Missing/corrupt blobs, unsafe manifests, unrelated predecessors, component/worker drift, unsupported phases and byte/file limits refuse without result admission. Success and refusal remove temporary source workspaces. Remote CAS staging, interruption cleanup, remaining phase handlers and integrated CLI use are still open. SSH action transport now accepts an explicit private receiver argv, sends bounded requests through SSH stdin, and uses the same exact receiver/worker probes and result verification as command workers. Legacy SSH definitions remain ineligible. Eighty-five transport, capability, hardware, admission, configuration, source-index and dispatch-contract checks pass on frozen source. The production indexer also admits these SSH workers: ten focused indexer/SSH checks pass, including a real receiver subprocess through the application port and refusal of wrong worker identity or failed receiver. Twenty-five SSH/schema checks pass. POSIX argument execution and Windows encoded-command shape are covered locally. Exact source3855a3287323c60d735bbe582260e131a641fee6also passes real cross-host SSH to a native Windows receiver: challenged capabilities, worker-owned hardware collection, and source-index execution return independently verified identities. This qualifies those receiver operations, not automatic health admission, other phases, Linux SSH, interrupted remote cleanup or sample readiness. The Windows unit cohort exposed a fixture that invoked POSIX Bash on Windows; it now selects each host's native shell and passes five local checks. The native rerun at84662464exposes a controller environment defect: copying Windows environment variables into a plain dict loses case-insensitive lookup, dropping SYSTEMROOT/COMSPEC from the runtime allowlist. PowerShell fails before receiver startup (8009001d); real SSH still passes because its remote environment is independently owned. Correct the lookup without expanding ambient forwarding. The transport fixture must separately model the remote host's native environment, not reuse the controller's filtered SSH-client environment. A controlled native run with that environment and a 60-second probe cap passes all three receiver operations in 52.658 seconds; the previous cap left only about 16 seconds after controller identity reads. Adopt the finite 60-second cap while preserving any earlier outer action deadline. Sixty composed action/environment, capability, hardware, indexing and admission checks pass; a real sleeping-receiver regression confirms a one-second action deadline still stops the probe (1.038 seconds observed). Exact-source native866cbbf2passes two environment and five SSH checks; the capability cohort then expires its shared 60-second fixture deadline on the second real probe. Give this multi-operation fixture a three-minute outer budget, including the subsequent dispatch, while retaining the production per-probe 60-second cap and explicit short-deadline regression. Exact-source native requalification remains required. The combined worker/environment, capability, admission, configuration, lifecycle, repair and dependency-planning regression cohort passes 143 checks in 89.150 seconds on the integrated candidate. Exact sourcee3a8e1b0passes two environment, five SSH and eleven capability checks on Windows. The hardware cohort then exposes the same shared fixture deadline during a probe followed by direct collection; give its multi-operation scenario three minutes while retaining the independent 60-second probe and collector bounds. All nine hardware checks pass locally and on native Windows at exact source5f35ff0c95d1a6d388bc187d4568fc12fd441203(337.375 seconds). Together with the environment/SSH/capability cohorts ate3a8e1b0, this qualifies the receiver unit boundaries; sample readiness, complete phase dispatch and final integrated platform release qualification remain open. An earlier mixed- source run correctly refused receiver identity drift and is not passing evidence. Production phase handlers, transitive artifact custody, SSH actuation, remote cleanup, and automatic CLI routing remain mandatory; these process fixtures do not close them. The action projection previously released build/toolchain/runtime consumers after provider BUILD, allowing rejected provider artifacts to reach consumers. ADR 0044 requires exact accepted exports: those consuming phases now depend on provider ACCEPT while public-interface generation stays independent. The new rejection regression failed for all three dependency kinds before the repair; 62 action planning, scheduler, Component planning, and lifecycle checks now pass, including independent-branch continuation. This projection repair does not complete production phase dispatch. The static projection now includes an explicit BUILD_INTENT action between indexing and authorization. Build/toolchain accepted-export prerequisites gate that action. Production inspection also found that toolchain edges waited for provider acceptance but omitted the accepted provider exports from build intent, because their input kind istoolchainrather thanartifact-export. Include those exact exports in build-input custody and verify the complete diamond's intent, build action, and realized export dependencies before continuing late-phase binding. The new diamond regression fails before the repair with missing provider identities; 88 lifecycle/repair/planning tests and 40 worker/cache/checkpoint retention tests pass after the correction. The complete-node worker handoff has the same omitted toolchain input kind; include it in exact direct-provider imports, with real CAS transfer checks and routed lifecycle receipt coverage. Both automatic command projection and explicit toolchain-closure admission must also include the toolchain provider's process binding; otherwise the real local adapter cannot consume the newly retained artifact. Transfer and routed-lifecycle cases both fail before the handoff correction; explicit closure admission rejects required toolchain bindings before the projection correction. All 139 focused lifecycle, worker handoff, cache/checkpoint, factory and command-projection checks pass after both repairs. Runtime/package late binding remains unfinished. The next custody boundary adds explicit canonical provider artifact identities to execution evidence, records them for single/multiple entrypoints, and refuses omitted or substituted execution inputs. Empty-input legacy identities remain stable. This is a prerequisite for moving runtime providers out of build intent, not completion of phase scheduling. The field is now emitted by local execution and checked at lifecycle admission and independent reopening. A substituted-provider reopening regression fails before the verifier repair; the corrected execution/schema/local-adapter/qualification cohort passes 162 checks (two platform-dependent skips), and 17 source-cache, checkpoint and input-rejection checks pass. Runtime providers still wait at build intent until phase-specific artifact assembly and scheduling are composed. Next, retain runtime/package links as explicit assembly dependencies, binding locked edges and accepted provider evidence without changing compilation manifests or export identities. Verify transitive closure, unchanged entrypoints, canonical serialization, missing endpoints, duplicate/cyclic edges and substitutions; compose the same derivation into Standard local and release graph assembly before changing runtime/package scheduling barriers. The explicit assembly dependency contract and both assembly paths now bind exact locked runtime/package edges and accepted provider exports. Graph closure rejects absent endpoints, duplicates, cycles and substitutions; empty-edge legacy serialization remains unchanged. The 205-check artifact/lifecycle/local-adapter/package/schema/cache/checkpoint/ qualification cohort passes with two platform-dependent skips. Sixteen additional graph/package checks pass, including actual package input membership, one retained application entrypoint, and refusal of incomplete/duplicate accepted node sets. Deployment evidence is deliberately excluded from artifact-input semantics. Hosted integration exposed an omitted public schema identifier in the v2 catalog. The catalog registration is repaired; all 12 version-authority checks pass throughmake python-check PYTHON_TEST_PATTERN=test_version_authority.py. Hosted CI must qualify the corrected revision before this integration can land. The corrected revision also passes the 341-test t–z shard (one platform skip). Hosted run36760944035then exposed formatting drift in the capability deadline fixture. The fixture is normalized; whole-tree Ruff lint and formatting pass across 1,307 Python files. Cancelled jobs are not qualification evidence. Hosted run36761508242reached 1,650 checks in the first macOS shard and found the assembly-dependency contract missing from the public-schema fixture inventory. Runtime and packaging samples are now present; all five executable schema checks pass through Make, and whole-tree lint/format checks pass for 1,310 files. Fresh exact-revision hosted qualification remains required. Hosted run36763559593exposes a stale remote parallel-build fixture: it requires provider acceptance before consumer build intent while declaring generation-only public-interface edges. Qualify the intended artifact-dependent ordering with explicit build edges, preserving the concurrency barrier and exact worker-CAS assertions. Generation-only edges must remain free of that barrier. The repaired remote-execution module passes all 19 checks through Make; project authority and CI-scoped lint/format checks pass across 1,310 Python files. Runtime providers still block build intent; next compose late executor inputs with the execution custody records before removing that barrier. The next implementation must also replace build-plan-only accepted-node reuse: bind the execution request to the locked runtime edges, exact accepted provider artifacts, and provider acceptance identities. Validate this scope before process authorization and in independent evidence reopening; changing only a runtime provider must retain compiled outputs while invalidating execution/acceptance.ComponentExecutor.execute, local single/multi-entrypoint execution, accepted-node resume, andverify_qualification_executionmust consume the same current scope. A bounded canonical execution-input scope now derives from locked runtime edges, exact consumer build/exports, and accepted provider results. Input/acceptance substitutions change its identity without rewriting compilation; missing, duplicate, foreign and failed providers are rejected. A regression first exposed inconsistent acceptance through two edges to the same artifact and now verifies its rejection. Next compose this scope into execution authorization, independent reopening and accepted-node resume before removing the runtime gate; deriving a scope alone neither grants process authority nor completes production scheduling. Localexecute_scopednow grants exact input/source/command/runtime authority, checks it before and after each entrypoint, and binds every process observation. Live file/directory bytes and transitive provider closure are verified independently of cached blobs. A real process reads a late provider while compile identities stay unchanged; corrupt files/directories, expired grants, mismatched inputs and swapped entrypoint outputs are rejected. All 213 lifecycle/cache/checkpoint/qualification/ schema/version checks pass (two platform skips), with authority, lint and formatting gates current. Legacy unscoped wire identities remain unchanged. The combined integration passes 218 checks (two platform skips), including the public executable schema inventory, plus project authority and whole-tree lint and formatting across 1,310 Python files. The local service now selects scoped execution, removes runtime-only compilation inputs/barriers, and waits for accepted runtime providers at execution. Opaque accepted-node resume cannot bypass current scope/grant validation; source and build caches remain eligible while execution and acceptance are revalidated. A scheduling regression first exposed an indirect provider missing after runtime edges stopped entering compilation provenance. The complete runtime/build/toolchain closure now supplies it, preserving original locked edge endpoints and compile identities. All 359 Standard lifecycle checks pass (four platform skips); 14 scope checks also pass with explicit indirect-cycle and missing compiled-provenance rejection. Another 59 qualification custody, authority and capture checks pass. Project authority and CI-scoped lint/format gates pass. This branch still requires the integration branch's existing public assembly-schema fixture repair; its omitted inventory fixture is not treated as a pass here. The controller fixture proves overlap, failure containment, scope substitution rejection and changed-runtime resume. Existing real-process adapter checks prove scoped launch and byte/grant custody. Native integrated runtime graphs, complete remote phase dispatch, one production DAG queue and phase-specific cache reuse remain required before the full scheduling program is complete. Integration with the schema inventory and remote build-order repairs passes all 361 Standard checks (four platform skips) and 36 executable-schema, remote-execution and version checks. Project authority and lint/format gates pass across 1,311 Python files. Exact-head hosted and native release qualification remain open. Local generation and lifecycle continuations now share one ready queue ordered by canonical planned action identity, including replacement candidate phases. The new ready-order regression fails before the change and passes afterward. Broader checks exposed a cached-source refusal misclassified as a lifecycle failure; queued source generation now retains the original source-generation phase and diagnostic. All 362 Standard checks pass (four platform skips), plus 40 planner, scheduler, remote-execution and command-indexer checks. The dispatch-count proof now requires generation as a separate pool operation for every Component. Dependency gates, held-provider overlap, shared slot bounds and bounded repairs remain covered. Next compose admitted worker-slot placement into this queue and the remaining production phase handlers. The indexer's internal slot wait and legacy complete-node routing do not yet provide complete cross-worker action scheduling. The frozenc9123830full suite terminates after 4,815 tests (35 skips) with one retained-receiver ZIP import failure. The C++ driver generator reads its module through a physical__file__path inside the ZIP. The focused receiver regression reproduces on current integration. Load that source through package resources; preserve the emitted standalone driver's semantics and qualify both real native driver behavior and isolated ZIP receiver import. The failed run is not release attestation and has not been silently restarted. The package-resource repair passes all 14 retained receiver checks, including the isolated ZIP import, and 20 native C++ cache/factory checks, including compilation and execution of a real multi-file C++ program. The currently published CI candidate contains the same reproduced ZIP defect and requires the repaired revision. All 113 execution-input/lifecycle/wire/post-source/schema/version checks pass. Scope schemas use the installed Draft 2020-12 validator, including rejection of packaging inputs, because the lightweight catalog fixture does not evaluateallOf. Current project authority, scoped lint and formatting checks also pass. With assembly custody available, remove the local packaging-only intent barrier and compile inputs. Prove overlap with a held package provider, retained package membership after acceptance, and no project receipt when that provider fails. The existing complete-node transport remains pending conversion to phase custody; this local scheduling slice does not complete remote phase dispatch. Both new regressions fail before the local repair: a held package provider prevents consumer compilation, and provider failure cancels that otherwise independent compilation. They pass after removing local package inputs/barriers, alongside 156 lifecycle/worker/graph/package/local-adapter checks (two platform-dependent skips). Another 56 cache/checkpoint/qualification checks pass, including an exact identity regression: rotating only the package provider changes package/assembly identity and selects its new artifact, while retaining the consumer build plan and export. Complete-node transport keeps its existing handoff until phase dispatch replaces it. Forty-four action planner, scheduler, wire, and source-index checks pass, including transitive readiness: runtime/package providers do not block intent or compilation, and rejected build providers cancel intent before authorization. Another 48 worker admission, capability, configuration, and hardware checks pass. Late binding in production and the complete remote lifecycle remain outstanding. Production readiness now removes the all-provider barrier for purely public- interface dependencies. Their immutable inputs are already admitted by the lock. Two regressions failed before the repair and now prove consumer build overlaps a held provider and independent consumers continue after provider failure while the overall project is rejected. Artifact-ordering fixtures now declare BUILD edges; authorization checks select the node actually reaching the queued phase instead of assuming a serialized provider order. Eighty-seven lifecycle, repair, service, factory and planner checks plus 40 worker/cache/checkpoint checks pass. Runtime/ package late binding and full phase dispatch remain required. The next production boundary separates source generation from provider-dependent compilation in the same bounded pool. Locked public interfaces permit consumer generation while provider build/acceptance continues; exact accepted artifact imports still gate build intent. Preserve original generation evidence, source-cache admission, bounded fresh-candidate repairs, and the global slot limit. Existing complete-node transport remains explicit until phase requests have remote custody; do not execute an assigned remote generation callback on the controller. This first production split now passes 95 lifecycle, candidate-repair, worker, factory, and service checks. A held provider build overlaps its consumer's source generation with exactly two occupied slots; consumer build still waits for provider acceptance. The regression failed against the previous implementation. Dependency failure now retains already-produced source evidence while cancelling its build; invalid cached-source custody still refuses the owning source action and all dependent builds. Build intent, index, authorization, plan, build, test, execution, and acceptance now dispatch as distinct local operations through that same pool. Each returned value passes its existing typed predecessor checks before the next step; repairs retain their complete fresh-candidate chain. Ninety-eight lifecycle, repair, worker, factory, and service checks pass, including separate pool dispatch, rejection of a malformed build response before subsequent phases, and grant-expiry refusal at each queued host phase's actual execution boundary. Local continuations are not a remote protocol: full phase-specific predecessor readiness, serializable request/result custody, and dynamic worker routing remain mandatory before closure. The next readiness correction moves source indexing ahead of the accepted-provider barrier. Indexing consumes only the current Component source; build intent still binds all exact accepted provider/package exports. Qualify held-provider overlap, rejected-provider cancellation, fresh indexing during candidate repair, and unchanged authorization/receipt custody. This does not establish remote phase execution. Hosted run36678365665ata1aff322exposed an obsolete whole-node ordering assertion in the remote build/CAS fixture: it required provider acceptance before consumer generation. Update that assertion to the actual accepted-export boundary, consumer build intent, while retaining the real parallel build barrier and exact worker CAS execution checks. The failed matrix is not landing evidence. The indexing/readiness and corrected remote fixture now pass 124 lifecycle, repair, checkpoint, factory, worker, service, and remote/CAS tests. The held-provider regression failed against the prior implementation. Independent work survives a rejected provider; cancelled consumers retain passed indexing without invoking intent, authorization, or repair; replacement candidates are indexed again. Full integrated and installed-worker qualification remains open. - Transport progress: The HTTP/local-layer adapter is implemented. Local artifact writer policy still limits individual payloads only. Enforce the aggregate payload-plus-manifest quota for each artifact namespace under a shared writer lock, collecting expired and then oldest entries with bounded inventory. Preserve shared payloads until their final manifest is removed; refuse unsafe inventory before deletion. Read-only lookup must not change bytes or timestamps. Qualify concurrent distinct writers, deduplication, expiry, quota pressure, corruption, unsafe paths, and interrupted publication. Native compiler/Bazel and remote service retention are separate policies and remain required. Forty-three focused cache/configuration checks now pass, including real HTTP concurrent writers, read-only readers, partial/corrupt entries, redirect refusal, and unavailable-service fallback. Source consistency and full integration qualification remain pending; this evidence does not complete production multi-worker or compiler-cache proof. Local retention now enforces payload-plus-manifest quota per artifact namespace, counts shared objects once, expires reads without mutation, collects publication orphans, and preserves verified remote reuse when local hydration cannot fit. Four regression cases failed against the prior implementation. Concurrent distinct writers, including four independent Python processes, remain within quota; collision, hardlink, unsafe-inventory and inventory-budget refusals preserve existing custody. Expired exact republication retains payload bytes and modification time. Native cache/service retention, LAN performance, and installed worker qualification remain open. Retention review found that a writer must also reserve inventory capacity for its own incoming entry: otherwise repeated valid publications can exceed the next writer's scan bound. Bound each new manifest by the reader's limit and evict before aggregate manifest bytes or entry count exceed the inventory budget; qualify both limits at small deterministic boundaries. All 45 focused cache/configuration tests pass after these admission-bound repairs.
- Scheduler progress: Production complete-node scheduling now keeps one bounded pool and releases a consumer when its own dependencies finish. Forty-six lifecycle and planning tests pass, including a held unrelated branch that no longer delays a ready consumer. This preserves whole-node repair and evidence contracts; distinct phase dispatch, dynamic compatible-worker admission, and real remote custody remain required before this item can close.
- Production cache progress: Private shared-cache configuration now binds into Standard rebuild identity and Bazel invocation, with exact configuration rechecks, early credential validation, temporary private credential files, and redacted diagnostics. Fifty-one focused configuration, Bazel execution, rebuild, and user path checks pass. A further 34-check slice includes a real Bazel 9.2 cold/warm action: its disposable read-only view reports a disk-cache hit, preserves output bytes, and leaves shared file contents and modification times unchanged. The small-fixture copy took 6 ms; this is not compiler or large-cache performance qualification. Shared writer-retention enforcement and LAN measurements remain required.
- Compiler-cache progress: Cargo builds now bind sccache executable identity, own a private bounded server, use a locked stable disposable workspace, and retain strictly parsed advisory cache observations in captured build evidence. Real C and Cargo library compilations demonstrate warm hits and identical output bytes; read-only compiler storage also uses a disposable view because sccache otherwise updates entry timestamps. Process cleanup and captured Cargo evidence reopening pass. Standard native C++ command drivers now compile separate objects through the exact cache wrapper and link with the selected compiler; real single/multiple-entrypoint cold/warm builds produce identical runnable binaries in fresh workspaces. The 137-check projection, adapter, capture, and compiler slice passes (two existing platform skips). Recursive cache-tool native dependencies now enter the cache identity and build dependency graph. Lifecycle entry/exit and compiler-session guards reject loader or dependency drift, including artifact-cache reuse. Forty-five focused dependency, factory, configuration, and rebuild checks pass (one platform skip); real macOS cold/warm C compilation still produces identical bytes and a measured warm hit, and exceptional server cleanup passes with inspector processes present. All five native cache cases pass across the combined run and corrected cleanup rerun, including Cargo, multiple-entrypoint C++, and read-only preservation. This repair evidence is not a fresh release run. Native inspection adds per-build cost; throughput, LAN failure/concurrency, and cross-platform qualification remain required before this item can close.
- Implementation:
- Compose the complete production lifecycle through deterministic bounded dispatch.
- Exercise configured LAN transports and retain exact cache decision evidence.
- Preserve independent verification before package, container, or test reuse.
- Evidence:
- Multi-worker qualification proves real overlap, recovery, measured warm compiler hits, corruption refusal, verified artifact reuse, and no evidence borrowing.
[x] REPO-MAN-PROFILE-001 — Recognize retained repo_man Standard command profiles
- Release target: 1.2.0
- Priority: P1
- Owner: Standard command-profile contract, schema catalog, and retained-harness projection
- Direction: Make the already-shipped build-repo-man Flavor parse and project as retained harness authority without treating repository-relative repo.sh as a discoverable host tool.
- Conclusion: Add a typed repo_man profile to the public command-profile union and schema catalog; retain its entrypoint and build-target identity while the disposable generated wrapper continues through the selected language toolchain.
- Depends on: none
- Implementation:
- Parse and validate the typed repo_man profile and admit it on the build-system Flavor axis.
- Project disposable generated source with the native language driver while preserving retained repo_man authority and excluding repo.sh from host tool discovery.
- Evidence:
-
test_standard_command_projection.pypasses 32 focused contract and projection tests, including exact Python-driver discovery and malformed target/tool/entrypoint rejection;test_schema_catalog.pypasses 20 independent catalog tests. Strict lint and format checks pass.
-
[x] SOURCE-GENERATION-PROGRESS-002 — Make source-generation stderr allowance safely configurable
- Priority: P0
- GitHub issue: #495
- Owner: framework core coding-CLI transport and Standard local generation adapter
- Direction: Allow larger Components to complete when a supported coding agent emits more than the fixed 16 MiB source-generation progress allowance.
- Conclusion: Progress stderr and admitted generated-source bytes are separate bounded resources. Preserve the 16 MiB default and all tighter task/stdout limits, add a narrowly scoped local override with a 256 MiB safety ceiling, and use a 64 MiB allowance for the observed regeneration.
- Depends on: SOURCE-GENERATION-PROGRESS-001
- Implementation:
- Add validated source-generation stderr configuration and pass it through Standard local generation only
- Keep source-tree, stdout, JSON-task, timeout, concurrent drain, overflow, and process-tree semantics unchanged
- Evidence:
- The 134-test coding-CLI unit slice passes with two expected skips, proving the default, 64 MiB override, invalid and excessive rejection, configured old-limit crossing, overflow failure, and unchanged timeout behavior.
- The same exact large-Component Codex authority that previously failed at the 16 MiB boundary completed under a 64 MiB allowance; source admission and all six native tests passed for finalized candidate
sha256:8f6f1d3bb267d97302fceee952db7abbd8b4831c0fbbb90da67681e72d7bbe06.
[ ] NVIDIA-LIBS-001 — Discover and qualify NVIDIA accelerated libraries by capability and language
- Priority: P1
- Owner: Documentation, agent skills, generation skills, and existing target Flavors
- Direction: Help generated applications discover, install, and incorporate NVIDIA OSS libraries across numerical computing, neural networks, and ray tracing, including CUDA Python.
- Conclusion: Goals 2, 4, 5, and 6: begin with a capability-first assessment and inventory; distinguish OSS wrappers from binary dependencies; use existing axes and require exact library and language qualification before claiming support.
- Assessment: NVIDIA library discovery
- Next action: Expand the per-library and per-language inventory from official sources, starting with CUDA Python installation and API selection.
- Depends on: none
- Implementation:
- Author and link a source-backed discovery assessment with existing overlap and staged admission criteria.
- Inventory remaining CUDA-X and adjacent OSS libraries and their language-specific installation paths.
- Admit and qualify a CUDA Python realization using the existing Python and CUDA Flavors.
- Add demand-driven library integration skills and independent acceptance samples.
- Evidence:
- Verify assessment links and review official sources for initial capability and language mappings. Official CUDA-X, CUDA Python, cuDNN Frontend, CUTLASS, CCCL, and OptiX sources reviewed on 2026-09-26; all local assessment links and both discovery entry points resolve.
- CI run
36249248600retained undeclared cross-Component Markdown links; representing those authority locations as paths restores documentation review, and the complete gate renders all 697 Mermaid diagrams. - PR #500 unchanged-head rerun
36257898373passed all 19 hosted jobs after one unrelated Windows TLS test failure in the first attempt. - Prove exact package resolution, device execution, SBOM closure, and independent acceptance for every admitted realization.
[ ] PRODUCTION-FIT-001 — Make production compatibility visible before adoption
- Release target: 1.3.0
- Priority: P0
- Owner: adoption planning, project validation, and production preflight
- Direction: Turn recurring downstream discoveries into one explicit support and preflight contract rather than learning about repository topology, Component shape, runtime scale, packaging, or execution-placement gaps after generation begins.
- Conclusion: Keep Literate AI's fail-closed custody and independent acceptance, but move predictable incompatibilities to a read-only preflight with actionable remedies. Common brownfield shapes are product requirements, not exceptional inputs.
- Depends on: ADOPT-MONOREPO-001, NATIVE-CLI-001, WORKTREE-002, PACKAGE-APT-002, RELEASE-INTEGRATION-003
- Tracker sampling (2026-09-28): Reviewed the six issues then open (#483,
#492, #497, #498, #503, and #505) and the ten most recently closed issues
(#380, #463, #465, #469, #471, #473, #480, #487, #488, and #495). Issue
#503 was subsequently resolved by
REFRESH-ABSORBED-001. The sample shows strong exact-identity, custody, portable-reproduction, independent-acceptance, and fail-closed behavior. It also shows repeated late discovery of ordinary production conditions: native CLIs, absorbed submodules, large runtime closures, retained build graphs, remote native tooling, platform SDKs, and operational diagnostics. - Implementation:
- Publish a versioned compatibility matrix covering repository topology, Component interfaces, build/package systems, runtime-closure scale, controller/worker placement, and supported host toolchains.
- Add a non-mutating production preflight that reports unsupported or partial shapes, required Flavors/tools/workers, configured resource limits, and the exact lifecycle stages that remain unqualified before model invocation.
- Require each newly discovered production shape to add a minimal public fixture, a support-matrix disposition, and an end-to-end deployment or independent-acceptance scenario rather than only a parser/unit regression.
- Link every preflight finding to a stable error code, bounded evidence, and a concrete operator remedy without weakening later authoritative gates.
- Evidence:
- Representative monorepo, submodule, native-CLI, large Python runtime, retained-native, remote-package, and multi-worker fixtures receive complete, deterministic preflight reports before generation or mutation.
- Supported fixtures proceed through the declared lifecycle; unsupported and partial fixtures stop early with no model call, generated source, or receipt.
[x] WORKER-PROBE-DIAGNOSTICS-001 — Preserve actionable SSH probe failures
Release target: 1.3.0
Priority: P0
GitHub issue: #3 (migrated from NVIDIA-dev/literate-ai#505)
Owner: worker capability probes, SSH transport diagnostics, and CLI rendering
Direction: A failed worker probe must name the worker and preserve the bounded, redacted SSH cause instead of collapsing host-key, authentication, DNS, refusal, and timeout failures into one generic transport error.
Conclusion: Diagnostics are part of operability, not evidence authority. Retain worker identity, exit status, stable cause classification, and safe stderr while preserving BatchMode, host-key policy, output bounds, and credential redaction.
Depends on: WORKER-HEALTH-001
Outcome: Diagnostic repair is landed and its issue acceptance is verified.
Implementation:
- Carry worker ID, SSH exit status, bounded stderr, and redacted transport cause
through individual and
--allprobe results. - Render distinct remediation for unknown/changed host keys, rejected credentials, name resolution, connection refusal, and timeout.
- Carry worker ID, SSH exit status, bounded stderr, and redacted transport cause
through individual and
Evidence:
- Multi-worker regressions identify only the failing worker and retain each SSH exit-255 diagnostic without secrets or unbounded output.
- Real first-contact and registered-host probes demonstrate that host-key setup is not misreported as failure of unrelated workers.
Local evidence: Seventeen focused capability/CLI tests pass. A real SSH probe with an isolated empty known-hosts file reports host-key refusal, and the same Linux worker succeeds with its ordinary registered key. The all-worker probe correctly names a different worker whose GPU observation reports zero memory; that invalid inventory remains refused and is not evidence of an authentication failure. No host-key policy or saved observation was changed by these dry runs.
Qualification follow-up: Resolve or explicitly exclude the zero-memory GPU observation under RELEASE-INTEGRATION-003 capability admission; do not silently substitute invented capacity in order to admit that worker.
Current qualification: Four capability tests cover every named SSH cause, bounds/redaction and mixed healthy/failed routing. Fresh strict empty-known-host refusal followed by normal registered-host success passes on the combined 1.3 source. Exact combined CI remains pending; the parent stays open until integration qualification.
Closure qualification: The implementation is landed through PR #110 on
75d73ac2; exact-head CI run39790990072passed. Fresh managedmake python-checkselectiontest_worker_capabilities.pypassed all seven cases, including six SSH exit-255 causes, failing-worker identity in a mixed catalog, redaction and diagnostic bounds. The previously checked first-contact/registered-host acceptance is preserved; host-key policy is unchanged.
[ ] QUALIFICATION-ECONOMY-001 — Make exact qualification affordable and observable
- Release target: 1.3.0
- Priority: P0
- Owner: gate planning, source-closure invalidation, lifecycle checkpoints, and CLI UX
- Direction: Preserve authoritative from-zero and exact-source release evidence while avoiding repeated live generation and multi-hour full-suite work for closures proven unaffected by a change.
- Conclusion: Security gates that teams cannot afford to run become adoption blockers. Reuse only content-addressed, independently verified stage evidence whose complete authority closure is unchanged; always issue a fresh project-level result bound to the current revision and never promote a diagnostic checkpoint to release evidence.
- Depends on: RELEASE-002, TEST-CACHE-001, CACHE-007
- Implementation:
- Publish the gate plan, completed/active stage, elapsed time, cache decision, and invalidation reason through stable human and JSON progress surfaces.
- Preflight every selected host toolchain, SDK, worker, package tool, and output bound before any live model call or expensive component build.
- Compute complete per-stage authority closures and reuse passed generation, build, test, package, and acceptance evidence only when every input identity, toolchain, route, policy, and verifier implementation is unchanged.
- Retain an explicit from-zero mode and require it for releases, compatibility certification, cache-policy changes, and scheduled confidence runs.
- Evidence:
- A documentation-only change rebinds a fresh project receipt without rerunning unaffected live generation; a source, toolchain, policy, route, or verifier change invalidates exactly the dependent stages.
- Corrupt, partial, stale, foreign-route, and implementation-mismatched evidence is rejected, while from-zero and safely reused runs produce equivalent final acceptance semantics.
- Production-shaped timing evidence demonstrates materially lower edit-to-proof latency and names every reused or rerun stage without hiding full-run cost.
[ ] PUBLIC-MIRROR-001 — Publish and verify the sanitized public mirror
- Priority: P0
- Owner: public-export publication workflow and dual-location verification
- Direction: Refresh the public jordanhubbard mirror from current NVIDIA-dev Literate AI sources and verify the declared gates in both locations.
- Conclusion: Reconcile public-export hardening onto current NVIDIA-dev main, fix every failing gate there first, publish a sanitized clean snapshot without internal Git history, and independently verify the public mirror. Do not mirror an unmerged or failing source revision.
- Depends on: PUBLIC-EXPORT-001
- Implementation:
- Reconcile the public-export changes with current NVIDIA-dev main, run the repository-declared verification gates, land the passing source revision, create or refresh jordanhubbard/literate-ai from a clean sanitized snapshot, and run the same gates from an independent public checkout.
- Prove that a clean root-commit checkout with no inherited release tags can run retained-harness promotion and its nested project initialization using the integrating project's recorded parent selection.
- Evidence:
- Record exact NVIDIA-dev and public-mirror commit identities, passing local gate output, exact-source GitHub check results, public-export scan results, and proof that the public repository has no inherited internal history.
[x] PUBLIC-EXPORT-001 — Make the repository safe and useful for public export
- Priority: P0
- Owner: repository documentation, tests, release identity, and public-export validation
- Direction: Remove references to non-public NVIDIA repositories and generalize company-internal examples before copying this repository to a public location.
- Conclusion: The current tree must contain no non-public repository, internal host, private project, employee identity, or internal service dependency; public NVIDIA OSS and product documentation remain valid. Repository-self URLs need a destination-neutral migration boundary until the public owner is selected. Existing Git history must not be published unchanged because other refs retain internal GitLab registry and worker identities.
- Depends on: none
- Implementation:
- Replace private downstream project evidence with synthetic provider-neutral examples
- Replace internal GitLab, Jira, email, MaaS, and custom router-specific fixtures and prose
- Make repository-owned publication and self-update identity configurable for the future public location
- Add a repeatable tracked-content audit that rejects internal-reference regressions
- Document the sanitized-export requirement for publishing history
- Evidence:
-
make public-export-checkscans tracked and untracked export candidates, including embedded Office archive members, and passes after a manual remaining-host review found only public NVIDIA endpoints and this repository's explicitly allowed self URLs. - Focused forge, update, Homebrew, self-update, MCP-channel, and public-export tests pass; Ruff lint and format checks pass across the repository.
-
make python-checkpasses all 3,627 tests (29 skipped); first-timemake bootstrapnow installs the pinned isolated evaluator, andmake skills-checkpasses all six Tier-1 checks for every changed catalog/template skill. - End-of-cycle peer survey reports no green reviews or collectable worktrees related to this change; unrelated branch cleanup remains untouched.
-
[x] REFRESH-ABSORBED-001 — Recognize absorbed primary worktrees without weakening shared-ref custody
GitHub issue: #503
Priority: P1
Owner: framework orchestration refresh
Direction: Allow clean attached submodule refresh while preserving external shared-branch checkouts.
Conclusion: Normalize only an observed primary registration proven by Git metadata; retain all external worktree refusal gates. See GitHub issue #503.
Depends on: none
Implementation:
- Resolve absorbed primary registration against captured checkout metadata; reject ambiguity.
- Add portable absorbed-primary and external shared-branch regressions.
Evidence:
- Focused managed Python checks pass, including normal and absorbed worktrees.
- Disposable attached refresh succeeds and shared-peer refusal preserves all state.
Completion evidence: PR #504 merged to
mainasacd6da68f74c1667db580c23569b0250d30719dd. The combined public-mirror qualification branch records the resulting lifecycle-driver and documentation authority identities and passes the complete managed Python suite, including the absorbed attached update, rollback/custody, and native Bazel cases.
[ ] COURSE-001 — Rebuildable instructional videos and onboarding demo repairs
- Priority: P1
- Owner: onboarding, retained test evidence, instructional video CLI
- Direction: Fix defects exposed by the real course sessions, support repeatable course creation in Literate AI, and publish the courses publicly.
- Conclusion: Repair starter acceptance authority and exact CTest summaries; add a portable course manifest, narration providers, captions, evidence verification and a documented CLI, then refresh the public examples.
- Review correction: The first draft failed the viewing experience: robotic speech, lecture-like dialogue, text-heavy visuals, and missing first-time setup. Goals 1 and 6 require a visual-first, engaging instructional method that children can inherit, while this repository alone owns its two-character comedy and cast.
- Second audience correction: The continuous cut still gives Sam explanatory lines rather than consequential objections. Rewrite as a ten-minute contested pitch: Sam already has C++, Make and tests; LitAI must earn adoption by showing contract/implementation separation, selective Flavors and skills, pinned repo inheritance, brownfield preservation and reviewed updates. Keep product limits visible. Audition more expressive local speech with explicit acronym pronunciation before replacing the existing public film. Obtain the latest available Opus model's independent narrative critique and address it before rendering.
- Second-revision progress: Opus 5.5 (
claude-opus-5-5, confirmed by the provider usage record) reviewed the complete 1,512-word draft and returned revise. Its critique is retained indocs/courses/play/OPUS-REVIEW.md. The revised 1,247-word/54-turn script moves taxonomy to relevant objections, explicitly concedes a lenient oracle can pass wrong code, lets Sam count both framework bugs, aligns capture/narration and ends with a limited trial. This is not a second Opus approval. Local Qwen3-TTS voices and acronym-specific speech text are being auditioned; the existing public movie is preserved. Two narrative/pronunciation regressions and eleven video regressions pass. - Audition evidence: A six-turn, 75.76-second captioned Qwen3-TTS audition
renders and verifies locally; output SHA-256
d80d0b01b40341eae223e860c7a5af75ba386cc7c51689cccfb9a9640a76382a. Local lint and formatting pass. Human listening/voice approval, final pacing, complete shot review and full-film replacement remain required; no claim of improved perceived voice quality is inferred from the media receipt. - Migration handoff: Preserve the revised source, independent review and
verified audition package on the public contribution branch. The operator selected
NVIDIA-dev
mainas the final migration source: consolidate the video, CLI version/self-update, README and CI changes through PR #515 before the migration. Validate the combined tree and await hosted qualification before landing; stop writing to NVIDIA-dev after the verified main handoff. Keep original feedback media and incomplete review/qualification states explicit. Do not move private Git history, raw logs, credentials, model weights or disposable tools. - Depends on: none
- Implementation:
- Fix starter oracle and CTest summary parsing with regression coverage.
- Add reusable video authoring, build, verify, and refresh commands and packaged skill.
- Refresh and publish the course bundle with current demo evidence.
- Replace stock system speech with auditioned natural narration and produce a short review cut before full rendering. User accepted the improved direction after watching the 94-second neural cut.
- Rewrite greenfield with real dialogue, a complete acquisition/install/authentication path, and visual demonstrations rather than bullet slides.
- Make the inherited skill and starter narrative-neutral; retain cast, tone, and two-character choices only in this course package. Nine video regressions pass.
- Produce one continuous video play with character introductions, respectful skeptical-engineer humor, real coding in the middle, and an updates/repository-lineage closing. The 13:38 feedback cut contains 85 turns, visible captions and labeled edited execution replays. Fresh installed-wheel generation, demo-local oracle recovery, 3-pass/2-skip verification, wheel build/verify, and TinyXML2 retained advancement passed; COURSE-003 preserves the discovered framework defect.
- Publish the continuous feedback edition to the authorized public GitHub repository with captions, regeneration sources, provenance and explicit limitations. Public course commit
e118f2cais reachable ondocs/publish-video-courses; an unauthenticated download matches MP4 SHA-256d23c1a39f8ee27423638caee670687c98f498af03c16bcb9cc3fc017f472f822. Public PR #10 remains a feedback draft, not a framework release or upstream OSS adoption. Eleven video regressions, two demo regressions, complete media decode/verification, lint/format, public-export, layout and documentation checks pass. Full audience review and broader release qualification remain separate.
- Evidence:
- Regression tests, installed CLI checks, real greenfield and TinyXML2 demos, and media verification pass.
[ ] COURSE-002 — Accepted-source continuation after an onboarding rebuild
- Priority: P1
- Owner: source cache continuation
- Direction: Investigate the runtime_absent result observed during the greenfield course despite a passing rebuild.
- Conclusion: Reproduce against the release candidate and compare exact admission keys before proposing a fix; do not weaken cache membership checks.
- Depends on: none
- Implementation:
- Reproduce and classify missing membership versus a framework lookup defect.
- Evidence:
- Same-model accepted-source continuation passes or yields an actionable exact mismatch diagnosis.
[ ] COURSE-003 — Bind inherited starter acceptance to its actual contract
- Priority: P1
- Owner: project initialization and inherited acceptance authority
- Direction: The continuous-course fresh run inherited the public parent's richer greeting-card Component but received the simple template's acceptance cases.
- Conclusion: Selecting a starter by name is not enough to select its oracle. The generator correctly followed the inherited contract; independent acceptance failed with missing
messages. Correcting the disposable demonstration oracle proves only local recovery, not a framework repair. Preserve verifier isolation and refuse unsupported assumptions rather than synthesizing expectations from generated code. - Depends on: none
- Implementation:
- Define explicit inherited acceptance ownership and bind it to the selected starter contract.
- Cover simple template, rich inherited starter, custom same-name starter and conflict/refusal cases.
- Evidence:
- Fresh public-parent installed-CLI onboarding completes without hand-editing its oracle, with independent acceptance intact.
[ ] RELEASE-INVARIANTS-001 — Require SemVer release branches and verified public tags
Prerelease correctness refinement (GitHub issue: #38): honor the selected version scheme when classifying numbered drafts. GitHub publication and verification must match the prepared version's prerelease status, refuse unpublished drafts and retain notes/artifact/tag/branch checks; the publication-verification skill states the same contract. Stable, SemVer draft and PEP 440 regression paths are covered by the release tests. Release-invariant program completion is not claimed.
Release blocker: yes; applies equally to the framework and derived projects.
Observed failure: The public repository advertises no tags, so default installed-CLI parent selection fails with
repository_lineage.release_unavailable. Explicit-parent tutorial sessions did not exercise this first-run path.Enforcement findings: Release policy accepts
pep440; branch ownership has an exemption when no default branch is configured. Published verification checks remote branch/tag revision equality but does not itself require the branch to be the version's release line. Remove exemptions, including legacy-policy paths. Canonical release identity must be SemVer; ecosystem-specific package spelling may only be a checked projection, not a competing release-version authority.Publication distinction: Development builds may exist without release tags, but neither an installer, migration, nor release receipt may represent such a build as a verified published release. Framework-managed release paths must fail closed; direct out-of-band Git/forge writes require forge protections and cannot be made impossible by a client CLI alone.
Dependency evidence: Public PR #11 owns canonical-destination corrections and remains unmerged with CI pending at inspection. Do not duplicate its edits or treat its pre-merge checks as exact merged-source qualification. The public source snapshot still carries the old provider destination until that repair lands.
Next action: Implement and test release invariants before publication; retain default-parent fail-closed behavior. Use source-matched tooling because the ambient 1.0.1 CLI cannot parse this checkout's
artifact_gatepolicy.Priority: P0
Owner: framework release core, inherited release policy, publication acceptance
Direction: Every Literate AI project must use SemVer and release from a release branch with a tag on that branch; repair public bare init failure.
Conclusion: Goals 1, 4 and 6: package metadata is not a published release. Remove branch-policy exemptions, require semantic release identity and remote branch/tag proof, and qualify fresh public installation without an explicit parent. Preserve private-history isolation and do not tag an unqualified snapshot.
Depends on: PUBLIC-MIRROR-001
Implementation:
- Enforce SemVer and release-line ownership across plan, prepare, check, publish and published verification, including legacy and derived policies.
- Integrate the canonical public destination repair after qualified landing; publish the qualified release branch and annotated version tag through the release workflow.
Evidence:
- Negative tests reject missing or wrong release branches, invalid versions, missing or mismatched tags and incomplete publication; valid derived-project release succeeds.
- Fresh public wheel installation runs bare litai init in an empty directory with no private credentials or explicit parent override.
[ ] CLI-BUILD-IDENTITY-001 — Distinguish source builds and verify explicit CLI self-update
The Python 3.14 CI control exposed stale external bytecode after prefix self-update. Pip strips the configured bytecode-cache prefix while re-execution restores it, so equal-size/equal-timestamp replacement modules can load old code. Reproduce the collision deterministically and keep installation/re-execution cache custody aligned; preserve isolated import paths and unrelated operator caches. The collision fixture fails with the old updater and passes with aligned cache custody. All 13 build-identity tests and 17 updater regressions pass through Make, along with lint and format checks. Full CI remains pending.
- Priority: P0
- Owner: CLI version reporting and prefix self-update
- Direction: Git main installations must not masquerade as a published release; verify that litai update applies a newer release.
- Conclusion: Goals 1 and 4: report immutable installed Git provenance and unverified publication separately from package compatibility version. Explicit update performs bounded release discovery before applying an enrolled-prefix update; preserve project planning, opt-outs, installation custody and offline operation.
- Depends on: none
- Implementation:
- Add source-aware offline CLI version reporting without changing protocol or lifecycle version authorities.
- Make explicit update synchronously discover and apply eligible release wheels before re-executing the original command.
- Evidence:
- Regression tests cover source provenance, newer release selection, original argv re-execution, opt-outs and failure behavior; disposable installed-prefix smoke demonstrates the real upgrade.
- Current verification: 13 focused build-identity/explicit-update tests pass, including real pip installation of a newer fixture wheel and execution of the refreshed prefix launcher with unchanged arguments. Release discovery alone is synthetic; no live public-release upgrade is claimed. The 17 existing updater regressions and 12 version-authority tests pass. Lint, format, public-export, reviewed driver identity and documentation authority checks pass. The broader CLI slice also passes all 258 tests, including the new focused tests. A separate non-editable Git-install probe was stopped after recursive shallow local-clone fetches exhausted file descriptors; it is not passing installation evidence. Full installed-wheel qualification was started separately and remains pending at this handoff. No user's installed CLI, release tag or release branch changed.
[ ] REPO-MOVE-001 — Continue existing installations across the repository move
- Design review: ADR 0049, Accepted 2026-10-02.
- Priority: P0 (1.1.0 release blocker)
- GitHub issue: #18
- Owner: repository origin continuity, self-update and release publication
- Direction: Users of the archived
NVIDIA-dev/literate-airepository reach the public repository without editing projects or losing provenance. - Conclusion: Declare the move as an explicit predecessor-to-successor mapping. Update planning accepts the successor; self-update resolves through it; recorded origins and pins stay unchanged. Historical tags are parentless public markers. Releases 1.0.x hard-code the old endpoint, so 1.1.0 publishes one bridge release there.
- Depends on: none
- Implementation:
- Declare the succession and use it in update planning and self-update endpoint resolution.
- Publish annotated historical markers for
v0.1.0a1throughv1.0.1, keeping the original tags outsiderefs/tags. - Document the migration for prefix, pip and editable installs, projects, and repository clones.
- After 1.1.0 publication, attach the identical wheel to a
v1.1.0release on the temporarily unarchived predecessor, then re-archive it (#18).
- Evidence:
- Unit tests cover successor acceptance, refusal of unrelated origins, and successor release endpoints.
- A 1.0.1 prefix install self-updates to 1.1.0 through the bridge, and its next check targets the public repository.
[x] WORKER-CLI-001 — Manage and test private worker registrations through the CLI
Priority: P0
Owner: worker catalog, CLI, SSH diagnostics and native qualification
Direction: Provide worker CRUD and SSH connectivity testing, then use the Linux and Windows pool to qualify Literate AI against current open issue and PR scenarios.
Conclusion: Local registrations are durable private configuration. Add validated atomic CRUD and independent bounded connectivity results without VM provisioning or host-key policy mutation; integrate relevant current review changes in an isolated test branch and retain truthful per-platform evidence.
Depends on: WORKER-PROBE-DIAGNOSTICS-001; published PR #513 diagnostic foundation
Implementation:
- Add list/show/add/update/remove commands with canonical validation, private atomic writes, conflict protection, and actionable errors.
- Add worker test selection/all with separate DNS, connection, host-key, authentication, timeout and unsupported results; preserve successful peers.
- Reconcile all six open issues and four PRs into an explicit qualification matrix, integrating applicable changes and recording unsupported or deferred scope.
Evidence:
- Focused CRUD/concurrency/negative diagnostic regressions and scoped lint, format, layout, skill and authority checks pass; broader gate failures remain explicitly recorded.
- Real Linux and Windows worker CLI and issue/PR-derived tests execute the exact changed framework; retain source identities and per-worker outcomes.
WORKER-CLI-001 progress: 229 worker-focused tests pass on the isolated PR #513 published baseline plus this change. The first real 20-worker connectivity run returns 18 successful handshakes and independent authentication/changed-key failures; those are readiness findings, not native framework test qualification.
Current tracker qualification matrix (2026-09-30):
- Issue #505: include its published diagnostic repair from PR #513, extend peer aggregation and SSH-only testing, and exercise actual first-contact and authentication failures.
- Issues #497 and #498: use native package, scheduling and cache regression suites from PR #513 as real-world worker load. Their full production feature acceptance remains owned by their existing items.
- Issue #492: include native-CLI contract and lifecycle tests; record unsupported cases as such.
- Issue #483: include worktree placement/refresh regressions. The installed location command refuses the current legacy registrations; no cleanup is authorized by this test cycle.
- Issue #512: include project update/merge regression scenarios and retain the unresolved three-way application boundary rather than claiming its feature complete.
- PR #513, published
a1aff322: integrated as the starting test baseline. Its failing hosted assertion and unpublished follow-ups remain explicit; this branch does not modify its owner's worktree. - PR #511: include the dynamic-worker roadmap contract; provisioning and VM deletion remain external.
- PR #508: include the pinned CI action update, with no claim that native workers prove GitHub action execution.
- PR #501: conflicting stale export branch overlaps public-export work already on main. The export checker, self-update implementation and export tests are identical at the compared tips; native public-export groups pass on both platforms. Defer the stale branch rather than replaying its historical roadmap over newer authority.
[x] REFRESH-MODE-001 — Validate refresh against admitted physical permissions
- Priority: P1
- Owner: framework core: repository refresh application
- Direction: Use native workers to exercise current issues and PRs; a Linux worker exposed a legitimate group-writable checkout rejected as changed.
- Conclusion: Git tree modes encode executable intent, not exact physical permissions. Compare previous and unchanged files against captured physical modes; newly applied changes retain declared output modes. Preserve race and rollback custody checks.
- Integration finding: The 85-test composed run had one error: the new real-Git fixture advanced its child commit but left the declared parent pin stale. The fixture now updates its manifest and records the exact authority review before testing refresh. Its isolated real-Git regression passes (151.746 seconds), preserving unchanged group-writable permissions and normal changed-file output modes. The other 84 composed checks passed, including permission drift refusals; native Linux qualification remains required.
- Depends on: none
- Implementation:
- Use staged member permission observations for previous and unchanged regular files.
- Add real-Git regression with group-writable changed and unchanged files.
- Evidence:
- Focused repository refresh permission regression suite passes locally and on a native Linux worker with a group-writable checkout.
[ ] CACHE-WINPATH-001 — Qualify CAS publication beyond Windows path limits
Priority: P1
Owner: framework storage CAS and cache roundtrip qualification
Direction: Native Windows testing of the published integration baseline exposed a long-path cache publication failure.
Conclusion: The portable archive roundtrip fixture exceeds the default Windows path limit at CAS hardlink publication. Preserve the failure as an issue-498 qualification finding; determine whether to support extended paths or bound fixture placement without weakening immutable publication.
Depends on: none
Implementation:
- Reproduce test_twelve_published_keys_round_trip_through_portable_archive on Windows without assuming long-path host policy.
- Resolve native path handling without shortening the fixture.
Evidence:
- Native Windows cache tests pass at
15f94afc: three CAS, 11 round-trip and 232 broader cache tests (nine skips); release-head qualification remains open.
- Native Windows cache tests pass at
WORKER-CLI-001 native checkpoint: source
ee78fa0b6cf8ef1d66debebef9f6b8d230268432, tree5267127f8d0d1ed464949231c073eeb21dbade16, passes 232 worker-focused tests on Linux and 232 on Windows (four documented platform skips). An actual twenty-worker SSH test returns nineteen handshakes and one independent authentication failure, with nonzero command status. No host-key verification was disabled. Repository layout, public-export audit, Ruff lint/format, changed skill checks and authority review pass. Full frozen-source qualification remains pending; initial mutable-checkout proof runs were correctly rejected when source changed during execution and are not pass evidence.Peer survey: the end-of-cycle CLI survey found no additional green reviews or collectable worktrees. Historical/dirty worktrees and unpublished peer work are retained untouched. The integration baseline remains a draft with red CI; native scenario coverage does not claim completion of its entire 1.2 program.
Installed CLI qualification: the wheel built from
d6d003ebhas SHA-256db8aa7f28539c44c16927f08ad9b5c60928640b49dc85df01e9b25ec5cf03f5e. Its embedded distribution origin matches that revision. Eight external-checkout CLI steps pass: empty list, add, update, show, unsupported-transport test exit, remove, empty list, and real Linux/Windows SSH handshakes. The broader frozenee78fa0binstalled-wheel smoke also passes; it is evidence for that exact earlier wheel, not a claim that every later refresh edge case passed.Additional native findings: the published integration baseline reproduces PR #513's remote-execution call-count assertion on Linux. On Windows, 23 worktree tests pass; the subsequent refresh group reports Git inspection failure in
test_complete_commit_is_manifest_last_and_cleans_terminal_journalafter 19 tests near the configured deadline. The controller wait and remote runner then expire; a separate process inspection confirms no qualification processes remain. This is an incomplete refresh qualification, not a passing Windows refresh result.REFRESH-MODE-001 repair checkpoint: the first native repair exposed absent physical inventories for no-op plans.
d6d003ebadmits and retains exact no-op permissions while validating Git executable intent; five focused filesystem tests pass, including file/directory permission drift and foreign content refusal. The repaired source passes 232 worker tests on each native platform (four Windows skips). Its longer Linux real-Git application suite remains in progress.1.2 worker integration: local integration of PR #514 (
d6d003eb) with live command hardware admission (92d91173) is under qualification. The peer's hosted failure is missing worker CRUD/test verbs in the canonical command-reference block; repair that reference and retain both feature sets. Preserve verified partial probe successes and stale-failure removal while avoiding a newly created empty catalog when every probe fails. The repaired worker integration is committed as23ad740a; cache, action-intent and SSH changes through84662464pass 149 composed checks spanning worker CRUD/probes/help, schemas, action admission, SSH/indexing, DAG planning, CAS paths and source-cache round trips. Authority validation passes. Native cache and Windows SSH receiver results are recorded below and under the scheduler program. Neither the failed/cancelled hosted run nor local integration substitutes for qualification of the final release head.1.2 Windows CAS path repair (CACHE-WINPATH-001 / issue #498): peer native evidence reproduces WinError 3 at immutable publication in the twelve-key portable archive test: the temporary blob exists but the longer digest destination exceeds MAX_PATH. Qualify extended-length native hardlink arguments without shortening the fixture, assuming registry policy, changing CAS identities, or permitting overwrite. Local path-form, long-path, concurrent publication and corruption checks precede required native Windows cache-suite evidence. This item remains release-blocking.
Native Windows evidence at
367dea50disproves the hardlink-only repair: a competing immutable writer correctly sees FileExistsError, but ordinary-path verification cannot reopen that long destination. Extend native blob paths through read, metadata and enumeration operations, retaining namespace-consistent custody checks. The broad sample-worker detector also reports package-manager provenance and coding-agent failures; this run is scoped to separately probed CAS/cache unit prerequisites and is not sample readiness or release attestation.At
81a10165, all three native Windows CAS tests pass, including long-path concurrent publication, verified reads, enumeration, copy and corruption refusal. The original twelve-key archive regression now reaches source-cache membership publication and fails at the long key-directory mkdir. Extend metadata I/O and archive capture consistently; preserve the unchanged long fixture and its check against borrowing the original checkout after restoration. Native qualification remains open, and the broader cache suite continues on its frozen prior snapshot.The frozen
81a10165native cache run terminates with 232 tests, nine skips and exactly the long membership-directory error; the native CAS tests pass separately. The metadata/archive repair preserves logical roots, derives native I/O roots and performs containment checks in that namespace. Twenty targeted storage/roundtrip checks and 64 broader source-cache, hardening and source-materialization checks pass locally. Native Windows requalification at exact revision15f94afcae9090dd7a0148bb76f35105feb2f0f9passes all three CAS tests, all 11 source-cache round-trip tests, and 232 broader cache tests (nine skips). The original long-path fixture passes without shortening or weakening immutable publication. This completes native cache-unit qualification; integration into the release head and the full release gates remain required. The host's broader sample-readiness failures remain unresolved and are not overridden by these unit results.
[ ] UPDATE-MERGE-002 — Complete three-way update migration and release it
GitHub issue: #2
Current release target: 1.3.0 (2026-10-18 reconciliation)
Release target: 1.3.0 (deferred from 1.2.0 by maintainer decision on 2026-10-10; issue #2; 1.2 ships plan-only update reviews)
Historical transport recovery refinement (GitHub issue: #36): spell safe GitHub SCP locators as the equivalent
ssh://git@github.com/owner/repositoryURL when constructing historical fetch references, preserving the SSH transport, predecessor coordinates, exact revisions, original provenance and digest-only admission. Recorded URLs keep their transport; an unusable historical locator leaves the conflict unresolved. Focused initialization and catalog fixtures must prove recovery, transport preservation and rejection of wrong bytes. Upstream landing and release qualification remain separate gates. Local proof (1.2 integration, independent review): 8 focused update/merge tests pass, strict lint and formatting pass. Hosted review and published-wheel qualification are pending; the overall update migration item stays open.GitHub issue: #512
Priority: P0
Owner: Framework update adapters and CLI; UX-275 and ADR 0007
Direction: Finish the originally specified three-way merge behavior and publish a verified release.
Conclusion: Hash classification and plan-only reviews do not fulfill migration. Recover verified bases, merge disjoint edits, explicitly apply reviewed conflicts, advance upstream baselines transactionally, and qualify the release without closing unrelated UX-275 obligations.
Depends on: Accepted ADR 0007; existing lineage and framework rollback boundaries; complete RELEASE-INTEGRATION-002 before release
Implementation:
- Implement verified baseline custody and recovery, deterministic clean merges, and identity-bound reviewed resolution application for framework and inherited files.
- Document the completed behavior and reconcile UX-275 and UPDATE-MERGE-001 truthfully.
- Land through hosted CI and execute release plan, prepare, check, publish, and published verification.
Evidence:
- Regression proofs cover non-overlap, overlap, identical edits, binary/missing/tampered bases, stale review, repeated updates, mode preservation and complete rollback.
- Installed CLI migration and required local and hosted gates pass; published release artifacts are verified.
UPDATE-MERGE-002 progress: 52 focused update/lineage/follow tests pass, followed by 27 merge/adapter checks after roadmap-owner preservation was extended to clean merges. Proofs include real exact-commit Git base retrieval, repeated framework/catalog updates, reviewed keep-local/take-upstream/merge decisions, unchanged file modes, stale checkpoint refusal, and complete composite rollback. Full local, installed, hosted, and release qualification remains open. No release completion is claimed. The full local run reached 3,292 tests (24 platform skips) and exposed one stale initialization assertion: merge-base custody metadata is deliberately outside the framework-owned file baseline. Its inventory assertion now recognizes that second metadata file; the initialization and three-way merge regression modules pass.
The repaired full local run passes: 5,933 tests with 34 platform skips, no failures (
make python-check, retained log/tmp/litai-merge-full3.log). Installed-wheel validation also passes at9ca019e7, producing wheel identitysha256:4026cf4427988b1c122f1fa7d3e2e265e0122765f22a4b911b864e60c5465f43. That repair now passes 157 composed update, initialization, CLI, worker/SSH and schema checks with the worker/cache/SSH tree at8d06db87. Authority validation passes. The integrated880cc25bwheel gate passes with artifact identitysha256:5b16fabbfb99c73992735082483799af1eda132c31f65c17682d8b724db11a76. Final full-suite, hosted CI and release qualification remain required before publication; the tested wheel is not a versioned 1.2 release artifact.
[x] WORKER-PROVISION-001 — Configure and invoke a local provider-neutral worker provisioner
Priority: P0
Owner: framework worker CLI, private configuration and provisioning contracts
Direction: Implement the generic hook in this change: support static workers independently, and launch an organization-supplied command only when dynamic provisioning is explicitly enabled in local user settings.
Conclusion: Add local opt-in command configuration, help discovery and explicit on-demand worker provisioning. Use a versioned provider-neutral request/response boundary, user-supplied environment credential bindings, bounded process execution and private recovery state. Validate the returned worker before registration; keep cloud APIs, provider flags and credential acquisition outside Literate AI.
Depends on: none
Implementation:
- Add local provisioner configuration CRUD, enabled-by-default-false policy, and help/--help discovery.
- Add bounded on-demand provisioning with request identity, duplicate-allocation protection, response validation and private registration/recovery.
- Document the adapter protocol and the complete static-only and dynamic-enabled CLI flows.
Evidence:
- Disabled/missing configuration and missing credentials invoke no command; malformed output, timeout, identity drift and concurrent requests fail safely without unintended registration or retries.
- Public CLI synthetic provisioner flow passes on native Linux and Windows and the returned worker can pass independent SSH testing.
Generic-hook implementation: Added local configuration/show/enable/disable/remove, provider help discovery, bounded explicit provisioning, credential environment bindings, schema-validated SSH registration and durable per-worker recovery state. The 245 worker-focused tests pass locally, including 13 real-process hook tests. Lint, formatting, changed-skill evaluation, layout, public export, lifecycle-driver review and documentation authority review pass. Native hook qualification follows.
Refresh qualification correction: Final native no-op checks passed before the broad application run reached a new test fixture with mismatched manifest pins. Corrected that fixture to commit both Gitlink and manifest authority together; rerunning its application coverage. No full-suite pass is claimed.
Final generic-hook qualification: Framework code at
bb19f82cpasses 248 worker-focused tests on macOS, Linux and Windows (four Windows platform skips), including 16 real-process provisioning regressions. A noneditable wheel with SHA-256207a2a600d3efd8f458e5c2346f1595baebcb29f1bd1dad4b9ddfb6804f41c6fpasses 13 CLI smoke steps outside the checkout, including local opt-in settings, a synthetic provider response, private registration/recovery, and real SSH to existing Linux and Windows endpoints. This verifies the generic handoff, not a provider-specific resource allocation. The repeated pool test reports 19/20 SSH successes; the remaining Windows worker independently reports authentication failure. Forty private user-path/configuration tests also pass.Qualification boundary: The broad refresh reruns were stopped in favor of the focused physical-permission regression group. Their partial progress is not a full-suite pass. The new Git fixture now adds its unchanged member before the initial root authority/pins are constructed; it does not rewrite an admitted root manifest without its documentation review. No provisioner is enabled in the operator's real local configuration. The unrelated cache path and remote-call count failures, stale receipt, and Windows broad-refresh failure remain reported.
Final peer survey: No eligible cleanup candidates; stale, dirty or unmerged peer branches remain retained. No peer checkout was removed or rewritten.
Focused refresh proof: Six physical-permission regressions pass on native Linux at
142120a2, including a complete real-Git refresh with group-writable changed and unchanged members, plus no-op admission and drift rejection. The macOS run of the same focused group also passes (six tests, 168 seconds). Framework runtime source is unchanged from the three-platform worker and installed-wheel proofs above.Completion boundary: Worker CRUD, SSH diagnostics and the generic local provisioning hook are implemented and qualified in draft PR #514. The six focused refresh permission regressions pass on macOS and native Linux. This closes the implementation/test tasks, not the integration release:
verifystill reports its stale receipt, and broader baseline failures remain owned by their recorded work items. The published wheel proof binds runtime codebb19f82c; subsequent commits only reorganize the regression fixture and record this evidence.1.2 advanced worker integration: PR #514 head
f452be65adds the opt-in provisioning hook and native qualification beyond already-integratedd6d003eb. Review preserves disabled-by-default configuration, explicit credential bindings, bounded real processes, durable duplicate-allocation refusal and recovery without a second allocation. Include this contribution with the existing worker program; its hosted failure is the unregistered provisioning schema in the version catalog. Version checking reproduces the omitted resource. Move the new schema to the current v2 catalog and register its existing wire identifiers, preserving frozen published v1 bytes. Qualify schema closure and the combined CLI. The wire regression also reproduces a non-SSH response accepted by the public schema but rejected by the adapter. Constrain the response schema to the existing SSH-only contract; preserve closed records and NUL-command rejection. The physical-permission fixture moved to the focused modes module; retain its coherent initial Git/manifest authority and unchanged permission assertions. Native evidence remains bound to the peer's revisions until integrated qualification.Integrated provisioning checks: All 248 worker tests and six real-Git physical permission regressions pass. Changed-skill checks pass. The combined CLI/catalog check additionally found nine provisioning verbs omitted from the canonical command inventory. With those entries restored, all 55 combined CLI/catalog, version-authority and user-path checks pass. Ruff checks and formatting pass for 1,316 files. These focused checks do not replace full release qualification.
Ready-queue worker admission: Remote source indexing must reserve one exact admitted worker slot before consuming a shared lifecycle executor slot. When no remote slot is free, leave the action pending and continue other ready phases. The reservation must release on successful indexing, guard or dispatch failure, and executor submission failure. Slot exhaustion and deadline failures remain distinct: exhaustion waits without occupying an executor, while an expired admission fails the source-index phase. Direct index callers retain bounded blocking behavior using the same slot accounting. Qualification must prove unrelated ready work progresses while index capacity is exhausted, and a failed or completed reservation cannot leak capacity or execute twice.
Implementation now gives the ready queue a single-use index reservation backed by the same occupied-slot set as direct callers. Guard/operation/submission failures release ownership; source-index failures retain their phase. Bounded retries observe capacity released by callers outside the shared executor. The capacity-progress regression fails against
63a4a4c6and passes after the repair. Ten focused queue/real-command-index checks, 365 Standard lifecycle tests (four skips), and 48 scheduler/catalog/version checks pass. Ruff checks and formatting pass. This qualifies INDEX admission only; all-phase remote dispatch, automatic whole-pool sizing, and the remaining release gates stay open.Automatic admitted-pool sizing: Omitted
--jobson build, test, rebuild and profile must reach Standard composition as an automatic policy rather than an implicit serial cap. Resolve it from the live admitted worker slots, bounded at 256; an explicit limit caps admitted capacity. With no admitted pool, preserve the one-slot default and explicit local limits. Bind the resolved limit into the lifecycle request identity. Legacy complete-node dispatch retains its existing integer wire default until all-phase worker composition replaces that path.The CLI and Standard rebuild now preserve automatic selection, derive the shared executor limit from the admitted slots, cap explicit requests, and record the effective count in lifecycle authority. Expired admission retains its structured error and starts no runtime execution. The adapter regression fails against
62c9e33f(including a requested 12 jobs incorrectly escaping a five-slot pool) and passes after the repair. Seventy combined CLI rebuild, execution dispatch, action configuration and adapter tests pass; 12 CLI help/profile checks and 12 version-authority checks also pass. The final expired-admission regression passes with all nine adapter tests. This advances the existing INDEX composition; it does not close all-phase remote scheduling or native/LAN release qualification.Portable phase finalization: Separate deterministic build-plan construction from controller-local intent/provider maps. A phase must receive the exact typed intent, authorization, command contract, provider and package artifact records, and admitted dependency-resolution mode. Check exact input bindings before producing a plan. The pure operation preserves historical plan reconstruction; current grant validity remains enforced at the execution/dispatch boundary. Local finalization retains live SDK admission and plan registration; the pure operation must round-trip its public inputs and preserve the existing plan identity for each supported resolution mode. This is preparation for production remote phase requests, not remote-execution evidence.
finalize_standard_component_plannow takes those explicit inputs, checks the intent/request references, compiler and SDK-bound builder identity, output set, resolution privileges, and exact provider/package records. Local ports retain their SDK custody and registration duties. Serialized records reconstruct plans after source/object directories and local maps are discarded; substitution tests reject mismatched inputs. A separate comparison against40d14d6epreserves exact plan documents and identities for none/npm/Python resolution. All 368 Standard tests pass (four skips), as do 32 catalog/version checks and Ruff checks for 1,318 files. The command receiver still supports INDEX only; remote PLAN transport and remaining production phases are not claimed by this refactor.Remote PLAN receiver: Extend the one-shot action protocol with a closed, bounded plan-input record binding execution/generation plans, intent, current authorization, command contract, exact provider/package records and resolution mode. PLAN consumes exactly one authorized predecessor record and its canonical action payload. Refuse changed worker/deadline/phase/plan/component bindings, missing or extra records, invalid grants and substituted input identities. Return the existing typed build-plan document without running host build commands. Advertise PLAN only once the real command receiver implements it. Qualification must dispatch a real child process and cover malformed, expired, changed and oversized inputs; production queue composition remains a separate required step.
The command receiver now advertises INDEX and PLAN and implements exact PLAN finalization. The v2 catalog publishes the closed input-record schema while preserving frozen v1. Real child-process dispatch returns the expected plan; real refusal responses cover revoked grants and substituted generation plans. The action suite passes (124 executions in the first run, including imported source-index fixture tests subsequently removed from duplicate discovery). The final 17 PLAN/capability checks cover duplicate keys, changed bytes, expired and future valid-shaped grants, extra/missing records, worker/phase/deadline mismatch, and bounds. Forty schema/catalog/version/immutability checks and Ruff checks for 1,320 files pass. Real SSH PLAN execution and production ready-queue composition remain required; the existing CLI still composes only remote INDEX.
Production PLAN composition: Standard rebuild must dispatch PLAN to admitted capable workers through the existing bounded ready queue. INDEX and PLAN share one per-worker occupied-slot set and global cap. Capacity exhaustion leaves the action pending; unsupported remote phases retain the explicit local path. Once admitted, transport, capability, deadline or response failures must fail the phase, never silently retry locally. Before build uses a returned plan, the controller must independently recompute it from current local intent/provider/SDK authority, verify exact equality, and register it using the existing local custody path.
Production composition now installs
CommandBuildPlanFinalizerafter durable source-cache/checkpoint setup and preserves that port through later composition. Real child-process proofs verify factory dispatch and local registration, shared INDEX/PLAN slot exclusion, and refusal/release of substituted results. The ready queue reserves PLAN without bypassing its final identity checks. All 372 Standard tests pass (four skips), plus 47 index/admission/configuration/version checks. Hosted candidatee985d512separately failed run36772772259: Ubuntu Python 3.14 ran 4,904 tests with 38 skips and one malformed artifact-graph error path. Two calls pass three arguments to the two-argument validation helper. Removing every manifest in turn reproduces that TypeError locally; repair is required before advancing the published candidate. Native PLAN SSH and all remaining phases stay open.Hosted artifact-graph refusal repair: Both missing-export and missing-action dependency branches passed an accidental extra label to
fail(path, message). Restore the two-argument calls. Expand retained-library truncation coverage to remove every manifest in turn, and exercise an unrealized action whose provider is absent from the graph. Both paths reproduce TypeError before the repair; the intended outcome remains a typed contract refusal, with no accepted graph.The repaired graph contract passes all 16 artifact-graph tests and seven retained library export tests, including every manifest truncation and the unrealized action dependency. Both pre-fix reproductions are retained as failed evidence.
Portable build intent: Separate deterministic post-source build-request and intent construction from local source/SDK admission and retained library bindings. Explicit typed inputs bind the generated candidate to its generation plan and command contract, exact provider/package artifacts, SDK identities and dependency mode. Preserve existing request/intent identities and privileges; refuse mismatched candidate/contract/plan inputs. The local adapter retains source validation, live SDK lock checks, evidence recording and library binding custody. Prove reconstruction from serialized inputs after the original filesystem/maps are gone before adding a remote BUILD_INTENT handler. This refactor alone does not enable that phase.
Portable construction now preserves the prior serialized intent and identity in six comparisons covering none/npm/Python dependency modes with and without SDK inputs, including provider and package records. Serialized inputs reconstruct after local custody is discarded, and candidate/contract/plan substitutions are refused. The existing library-import fixture now supplies its exact candidate revision and generation-plan identity; its original two-hash stub failed the new binding check. The SDK authority fixture likewise supplies its candidate-bound generation-plan identity. The nine SDK consumer checks initially confirmed eight passes and one linked-provider stub missing the same identity. With that second stub bound to its candidate, both closure checks pass (423.079 seconds), retaining the failed run as evidence. All three SDK authority checks also pass. All 374 Standard tests pass (four skips). Remote BUILD_INTENT composition and complete release qualification remain open.
Current contribution survey: PR #515 advanced to
eb309658with 229 changed files. Hosted run36779999437, macOS Python 3.11 shard 3, fails the version authority check because configured and computed lifecycle-driver identities differ; the remaining cancelled jobs are not passing evidence. This draft remains under review and is not yet included in the qualified integration candidate.Native PLAN qualification: Exact revision
4c3539b1493d343daa8ef54c880fad91425adf38passes 36 receiver/composition checks each on native Windows and Linux: runtime environment, SSH transport, capabilities, hardware, PLAN records and production shared-slot composition. Both hosts then pass a real controller-to-worker SSH PLAN dispatch, returning the independently expected plan bytes and refusing revoked grants and substituted generation-plan identities withaction_plan.invalid. Receiver identity issha256:c9178e6bc57f87e58c97044eae81d705cfc1e2ce2ae127e6a53aceaf210350e0. Private evidence retains exact source/tree custody, detected prerequisites, native logs and structured results; no private endpoint or credential enters the repository. This qualifies INDEX/PLAN receiver boundaries and PLAN composition/SSH custody, not generated build execution, other lifecycle phases, samples or final release.Build-intent result admission: Expose an immutable portable-input snapshot separately from local intent registration so a worker result can be checked before it becomes controller authority. Recompute against current source/SDK/command and dependency inputs on return, refuse substituted results, validate library-import bindings before registering any intent maps, and retain the existing evidence path. Local construction uses the same admission and registration boundary. Qualify no registration during input capture, no partial registration on refusal, exact result admission, and changed library/SDK authority before remote dispatch is added.
The prior implementation reproduces partial registration on a refused library target. Separating input capture and result admission passes 377 Standard checks (four skips). A subsequent injected evidence-write refusal reproduces another partial-registration path; defer all intent-map writes until both library validation and required evidence recording succeed. Cover both refusal boundaries explicitly.
Final admission now recomputes returned intents against current inputs, validates library imports, records required evidence, and only then registers intent maps. Input capture performs no intent registration. All 378 Standard checks pass (four skips), including substituted results, changed SDK inputs and evidence refusal; all three SDK authority checks pass. Both prior partial-registration reproductions remain failed evidence. Remote BUILD_INTENT dispatch remains unimplemented: its request must carry the current index result and typed provider acceptance evidence matching the canonical INDEX/ACCEPT predecessors, not merely export hashes.
Remote BUILD_INTENT receiver: Carry an index handoff containing the exact execution plan, generated candidate, command contract, SDK identities, dependency mode and actual index record. The current receiver admits its existing disabled-index policy only. Each additional canonical ACCEPT predecessor carries the provider's typed acceptance evidence, including exact built/tested/executed exports. Recompute the canonical DAG, require one correctly bound record per ordered predecessor, derive provider artifacts exclusively from those acceptance records, and refuse omitted, extra, changed or reordered custody. Packaging-only inputs remain absent at this phase. Bound aggregate bytes and record counts, preserve worker/deadline checks, and return a typed intent without source materialization or host execution. Qualify real subprocess execution for a build-dependency diamond and tampered predecessors before advertising this receiver phase. Production queue composition stays separate.
The receiver now implements BUILD_INTENT and advertises it alongside INDEX and PLAN. The v2 catalog publishes the closed index-handoff schema; accepted provider records reuse existing typed acceptance contracts. A real command process returns the exact intent for a build-dependency diamond and for interface-only edges, and refuses changed index or foreign-provider custody. The 120-check action cohort passes; final eight receiver checks also cover omitted/reordered predecessors, changed generation/contract/export records, duplicate JSON, bounds, expiry and worker binding. Eleven production INDEX/PLAN composition checks and 20 schema checks pass. This is receiver qualification; production BUILD_INTENT reservation, predecessor capture, independent returned-intent admission and native SSH proof remain required before claiming that phase's production composition.
Production BUILD_INTENT composition: Add an explicit queued dispatch port carrying the completed index identity and typed acceptance records for exact build and toolchain providers. Capture predecessors only after the existing acceptance barrier; verify each receipt against its result's identity and exports. Reserve from the same admitted slots as INDEX/PLAN before executor submission, revalidate worker capability and deadline, dispatch the canonical request and independently compare returned bytes. Retain result evidence before local intent admission so recording failures cannot register state. Preserve the dispatch port through cache and checkpoint composition. Refuse missing/substituted provider evidence or remote failures without local retry. Keep the legacy complete-node path explicit until its separate phase conversion; this step qualifies the shared ready queue.
Production composition now installs the explicit BUILD_INTENT dispatcher and preserves it through cache/checkpoint assembly. Four real command-dispatch checks pass, including shared INDEX/PLAN capacity, substituted results, evidence-write refusal before registration, and foreign index refusal. The Standard cohort ran 384 tests successfully with four skips; eight final ready-queue checks pass, including exact typed build-provider receipts captured after acceptance and refusal of providers represented only by a scalar acceptance identity. Native BUILD_INTENT SSH qualification and the remaining remote phases remain open.
PLAN result retention before admission: Match BUILD_INTENT's failure semantics. Retain verified remote PLAN bytes before registering the returned plan or SDK authorization locally. An evidence-store refusal must leave both maps unchanged and release the reserved worker slot; it must not trigger a local retry.
The injected evidence-store refusal reproduced a partially registered plan before the repair. Retention now precedes local admission; all four production PLAN checks pass, including unchanged registration maps and released slot capacity. Native BUILD_INTENT qualification is running independently at exact d3229715; those receipts will not qualify this later PLAN ordering repair.
Portable authorization inputs: Separate deterministic Standard grant construction from controller admission. The immutable input binds the exact intent, completed index and controller-selected issuance time. Preserve the existing constrained profile, requested privileges, actor/reason, grant ID and thirty-minute lifetime byte-for-byte. Local SDK validation and evidence recording remain at the local port. This is preparation for AUTHORIZE transport, not permission for a worker to choose policy, privileges or extend the grant.
The immutable authorization input now constructs the same grant without accessing host state. Two exact previous/new document and identity comparisons pass. Three focused checks cover serialized intent, expiry, SDK refusal before construction, controller time and both retained documents. The Standard cohort passes 389 tests with four skips. AUTHORIZE receiver and production composition remain open.
BUILD_INTENT Linux qualification at d3229715: Native Linux ran 47 checks successfully: environment (2), SSH transport (5), capabilities (11), hardware (9), BUILD_INTENT receiver (8), production composition (4), ready queue (8). The exact-source tree is e9de70db247cfb2cbc66f8b2922277c340e17c01. A real controller-to- Linux SSH request returned the exact intent for a build-dependency diamond and rejected changed-index and foreign-provider records as action_intent.invalid. Receiver identity is sha256:b82b120e8451097d56919fe4a6d836aff79ccbb22d314e1ea44502706b3efbd5. This qualifies that receiver/composition scope only, without generated build execution or later source changes. Windows qualification remains live. Its full sample-worker bootstrap reports missing Codex; required receiver-test tools were detected, so that run does not establish full sample-worker readiness.
Hosted candidate 4c3539b1 failure: Run 36780861550 completed with failure in Windows Python 3.12 test shard 3 (job 110110475273). Five action-execution- configuration tests reject worker admission as lacking a current compatible observation. Root cause and native reproduction remain required; this candidate is not landing or release evidence.
Worker hardware admission diagnostics: When all eligible probe attempts fail, retain the bounded error codes in the admission refusal instead of replacing them with generic hardware incompatibility. Do not include raw exception messages, private endpoints or environment values. A healthy candidate must still proceed when another candidate fails; refused admission must not allocate source CAS.
All 17 action-execution-configuration checks pass, including sanitized transport/OS error reporting, source-CAS nonallocation on refusal, and mixed healthy/unavailable candidates. The missing-disk-observation CI case passes on registered Windows at d3229715 with a successful actual hardware probe; this does not reproduce or resolve the hosted failure. Candidate 4c's final matrix has 11 successful jobs, one failed Windows shard and seven cancelled jobs. Further hosted diagnosis is required; cancelled checks are not passing evidence.
Bounded AUTHORIZE receiver: Accept the controller's exact intent, completed disabled-index record, execution/generation identities and issuance time in a closed, size-bounded BUILD_INTENT handoff. Bind the canonical AUTHORIZE action and payload to that predecessor. Reconstruct only the existing constrained grant policy with its fixed lifetime; refuse future or expired grants, changed source indexing and substituted payloads. No host execution, policy selection or clock renewal is delegated. Controller SDK admission, independent returned-result comparison and evidence retention remain required for production composition.
The one-shot receiver now implements AUTHORIZE and advertises it with INDEX, BUILD_INTENT and PLAN. The v2 schema publishes its closed handoff; v1 is unchanged. All 126 action checks pass, including real grant return, changed-index refusal, future/expired/controller-time checks, payload binding, duplicate fields and oversized records. This is receiver qualification only; production AUTHORIZE reservation and independent controller admission remain open.
Production AUTHORIZE composition: Reserve the existing shared worker pool before dispatch. Capture issuance time only once capacity is owned and current local SDK admission succeeds; bind the completed index and exact intent. Independently reconstruct returned grant bytes, retain them before local evidence admission, and recheck SDK custody and grant validity without renewing issuance. Queue consumers keep their exact authorization checks; no remote failure invokes local authorization as a retry. Cache/checkpoint recomposition preserves this port.
Native Windows qualification at d3229715 completed with an expired-deadline error in the combined BUILD_INTENT fault-injection test's slot-release assertion. The environment (2), transport (5), capabilities (11), hardware (9) and receiver (8) groups passed. Split substituted-result and evidence-store refusals into separate fixture lifetimes for BUILD_INTENT and AUTHORIZE, and assert the exact intended error so deadline expiry cannot satisfy a generic refusal assertion. Preserve production time bounds; native requalification remains required.
Production AUTHORIZE now composes through the shared pool and preserves its port across cache/checkpoint reconstruction. All 395 Standard tests pass (four skips). After splitting fault scenarios, all 31 production action/queue checks pass. Real subprocess checks cover unchanged grant return, slot exclusion, deferred time capture, substituted or unretained results before admission and SDK drift. Queue tests reject malformed authorization before finalization; local admission refuses renewed issuance and expired grants before recording evidence. Native AUTHORIZE and repaired Windows BUILD_INTENT qualification remain required.
Portable BUILD contract preflight: Reuse the existing locked-command export and provider-artifact checks independently of controller paths and mutable local registries. Preserve exact declared export IDs, Component, role, ABI, target, media type, producer and compiler identities, plus ordered provider identities. The local adapter retains its existing refusal behavior before commands execute. Qualify deserialized inputs after removing local source custody and changed export/provider refusals. This is a prerequisite for the BUILD receiver; worker toolchain observation, source/provider materialization, SDK/package custody and retained build-result admission remain separate required work.
The pure preflight now validates typed, deserialized plan/contract/provider records without source directories or host bindings. Three focused checks pass, covering source-independent validation and changed export ID, role, ABI, target, media type, producer, compiler and extra-provider refusal. The local adapter preserves its error type and refuses before command execution. All 400 Standard tests pass with four skips. Work is retained in the temporary BUILD checkout because the original local repository is currently read-only.
Worker-local toolchain selection for BUILD: Retain a bounded immutable registry of actual local tool bindings supplied by worker startup discovery. Requests select exact canonical identity tuples only; they cannot supply executable paths, environment values or aliases. Refuse duplicate or unavailable identities and revalidate selected launchers and observed runtime guards at use. An opaque authority identity without a drift guard is not a worker observation. Keep private invocation details out of exported inventory. This prepares the BUILD receiver's local execution boundary; wire discovery, scheduling and BUILD execution remain required before claiming remote build support.
The worker registry now retains a bounded immutable identity-to-binding map. Five focused cases cover a real discovered Python toolchain, independent worker paths, launcher drift, observed-runtime guard drift, unguarded aliases, duplicate or missing IDs, changed arguments/environment, and identity-only inventory. All 131 action checks pass. Worker startup discovery and BUILD integration are still required; the registry alone does not advertise a host-execution phase.
Linux AUTHORIZE SSH qualification at d25ef141: Native qualification completed all 59 checks successfully, including BUILD_INTENT/AUTHORIZE receivers, production composition and the ready queue. A separate real controller-to-Linux SSH request returned the exact authorization and refused expired controller time, changed source-index custody and changed generation-plan identity as action_authorization.invalid. Receiver identity is sha256:0e86ec74e9a069b9548832539003336d45f5d2b750d6b785bd6d83b1888019d7. This is exact-revision phase evidence, without generated build execution. Windows native qualification also completed all 59 checks at d25ef141, including production BUILD_INTENT (five checks in 1087.632 seconds), production AUTHORIZE (five in 1187.548 seconds) and the ready queue (nine in 3.767 seconds). The exact revision and successful terminal report were retrieved with the full native log. This qualification covers receiver and composition behavior, without generated build execution or the subsequent BUILD preparation commits. The separate controller-to-Windows SSH AUTHORIZE proof also passed: the exact authorization record was returned, while expired controller time, changed source index and changed generation-plan identity were refused as action_authorization.invalid without a result. Its receiver code identity matches the Linux proof above; the accepted authorization record is sha256:a53a9706758a984e831144c13380475109821bf8cca587c8fd7dd6fe2c964626.
Phase-scoped local BUILD runtime: Permit an explicit canonical command-phase scope while preserving the full lifecycle default. Require every and only actual tool dependency for the selected phases; npm BUILD retains its Node dependency. Reject out-of-scope test, execution and independent acceptance before side effects, including SDK and packaged execution branches. This prepares worker execution without advertising BUILD before its custody and authorization integration.
The adapter now enforces explicit command scopes before dispatch and retains the full lifecycle default. Five focused checks cover a real BUILD with unavailable TEST/EXECUTE tools, early refusals including SDK/package dispatch entry points, malformed scopes, a shared launcher that cannot bypass phase restrictions, and npm BUILD's Node dependency. All 405 Standard tests pass with four skips. Remote BUILD source/provider custody, authorization and result transfer remain pending.
Portable BUILD authorization admission: Extract a shared current-grant and exact-plan check for BUILD worker admission. Reuse it in local admission of a remote PLAN result, preserving live SDK validation and local error semantics. Verify serialized input admission without source custody, expired/revoked/future grants, altered index/privileges and substituted plans before any local retention. Receiver wiring and actual BUILD transfers remain part of the open 1.2 program.
The portable admission check is now shared with local remote-plan admission. Six focused checks pass, including serialized authority after controller source removal, revoked/expired/future grants, index/privilege substitution, changed commands and providers, and refusal before local plan retention. Four production PLAN-dispatch tests pass. This validates authority admission; it does not yet execute remote BUILD.
Portable generated-source validation for BUILD: Capture recipe-derived SBOM and generated-suite validation inputs in a path-free, immutable transport value. Use the same validators during ordinary registration and transferred registration, reject mixed recipe/transport authority, and retain the exact existing custody identity. Prove transfer after controller source removal, changed evidence refusal without registration, and actual BUILD from the worker copy. Binding these inputs into BUILD's action envelope remains required before enabling remote dispatch.
The registry now captures and exports immutable recipe-derived validation inputs, revalidates worker-local SBOM/suite bytes with the existing validators, and refuses competing validation authority without replacing retained state. Six focused checks pass: a real BUILD after controller source deletion preserves the exact custody record; altered recipe/reference/result-shape/dependency-graph authority, changed worker bytes, malformed or oversized documents and mixed/replaced authority are refused. All 417 Standard tests pass with four skips. BUILD action-envelope binding, provider materialization and receiver dispatch remain open.
Shared CAS source materialization for BUILD: Reuse INDEX's bounded manifest, digest, deadline and temporary-workspace rules for BUILD source preparation. Bind the admitted candidate and exact strict source-custody identity to the current plan/grant and captured validation inputs. Prove HTTP transfer into an independent worker CAS after controller source removal, actual build from that registry, pre-fetch authority refusals, interrupted/changed transfers and cleanup. Keep source preparation distinct from the still-required bounded BUILD receiver.
INDEX now uses the shared source materializer. BUILD source preparation rechecks its exact plan/grant and candidate before transfer, reconstructs strict source evidence on the worker and compares the expected custody identity before yielding. Five focused cases pass, including real HTTP transfer to an independent worker CAS followed by BUILD after controller source deletion, expiry during transfer, corrupt fetch refusal and cleanup after an interrupted body. All 136 action tests pass. Host-execution bounds, provider materialization and BUILD result transfer remain required before enabling remote BUILD.
Bounded BUILD worker supervision: Add a worker-side child supervisor using the existing bounded process-tree owner. Bind its private launcher and exact admitted input bytes, cap execution by both the current grant and action deadline, check cancellation during execution, bound outputs and refuse private diagnostic leakage. Prove real-child interruption on authorization expiry/cancellation, output overflow refusal and descendant cleanup. BUILD wire admission and worker composition remain required; the supervisor alone must not advertise remote BUILD capability.
The worker supervisor now binds a private launcher and exact admitted input bytes, uses the shared bounded process-tree owner, checks grant/deadline/cancellation during execution and rechecks authority and launcher custody before returning. Seven real-child tests pass, including both real-time deadline orderings, running cancellation and expiry, input mismatch/overflow and changed launcher refusal, stdout/stderr limits, private diagnostic suppression and descendant cleanup after successful parent exit. All 143 action tests pass. BUILD record decoding, worker composition, signal/cancellation routing and artifact/evidence verification remain required before this supervisor can enable remote BUILD.
BUILD child record admission: Replace the supervisor's opaque input assumption with a closed, bounded record binding execution/generation identity, exact plan, current authorization, command contract, provider/package declarations, generated candidate, source manifest and captured validation/custody identities. Reconstruct the intent from those inputs and the plan from its authorization before launch. The child consumes the same verified record; private executables and environment remain worker-owned. Prove changed authority and malformed records refuse before launch, while the accepted record reconstructs strict source custody. Receiver dispatch, provider materialization and result transfer remain open.
The supervisor now derives authority solely from the exact decoded record before launcher access. Five decoder checks cover changed candidate/generation/plan, malformed/duplicate/oversized JSON, revoked/expired grants and real source custody. Eight process tests retain interruption/output/descendant checks and add a real child which repeats admission and builds from worker CAS after controller source removal. All 149 action tests pass locally. The final process assertion accepts native text line endings; exact source and artifact bytes remain verified by the existing custody checks. This is not production remote BUILD qualification.
Hosted qualification follow-up: Run 36794916017 at b776e9d3 finished with Windows shard two failing two tests: the real Bazel shared-product test received HTTP 500 fetching pybind11_bazel, and the hardware bounds test exceeded its 60-second probe deadline. The shard reports 1095 passed and 39 skipped; sibling cancellation is not qualification. Native d25ef141 hardware checks passed, but that does not supersede this hosted failure. Artifact retrieval is currently unavailable, so the probe's cause remains unresolved. Preserve execution bounds and require successful exact-head hosted qualification before release.
Transferred BUILD result admission: Revalidate a transferred artifact tree against the exact retained plan, current authorization, provider materials and expected Standard build evidence before registering local export custody. Stage export registrations until SBOM/evidence validation and final authority/tree checks succeed, including the ordinary local build path. Prove real transfer and subsequent use after producer artifact removal, changed exports/SBOM/evidence, expired grants and failed validation without partial registrations. This prepares controller acceptance; remote transport and evidence-record retention remain open. Admission now requires the existing bounded qualification reader and build process/artifact-tree verifier before filesystem reopening. Export registrations are staged until exact evidence, current authority and unchanged source/provider/ artifact custody pass. The broad Standard suite passes 426 tests with four skips. After adding the final proof-record gate, ten focused tests and all 26 BUILD action checks pass. These prove BUILD-to-TEST use after producer artifact deletion, refusal of altered exports/evidence/SBOM and missing supporting records, grant expiry and tree mutation during admission, foreign roots/links, and preservation of prior registrations after a failed replacement. Existing real process observations remain evidence of execution even when later artifact admission fails. Production worker result encoding, transport, record retention and controller composition remain required before advertising remote BUILD.
BUILD result CAS transfer: Carry a bounded closed result record binding the exact BUILD input, Standard evidence, whole artifact archive and supporting record references. Reuse canonical directory archives and private staged-tree custody; preserve file modes and bind all bytes to verified build observations. Verify controller CAS contents, retain supporting records before artifact registration, and remove failed stages while preserving prior admissions. Prove real HTTP CAS transfer after producer artifact deletion, corruption/substitution/bounds refusal, and retention/authority failure without partial registration. Production child and dispatcher composition remain required; do not advertise remote BUILD yet.
The result adapter now captures canonical archives and proof records into worker CAS, transfers and verifies them through an independent controller CAS, retains records before admission, and owns the received stage through final registration. All 160 action tests pass. Eleven result cases include real HTTP transfer and subsequent TEST after worker artifact deletion, corrupt cached/remote bytes, archive substitution, control bounds, retention/expiry failures, read-only modes, changed producer/staged files, and preservation of a replaced foreign stage. Eleven transferred-admission checks also pass, including expiry during the final tree recheck. All 37 final BUILD action checks pass after binding result decoding directly to the exact input bytes. Production receiver/dispatcher wiring and custody-only admission on controllers or TEST-only workers without BUILD tools remain open; native mixed-profile and directory-export qualification is still required before release.
Post-BUILD artifact admission across phase scopes: Treat verified artifact admission as data custody, not compiler execution. A TEST-only worker must accept the exact completed BUILD result without possessing its compiler binding, then run its own locked TEST command. Keep current plan/grant, source/provider/SBOM, supporting-record and staged-tree checks intact, and prove BUILD still refuses before process access. A controller with no execution adapter remains a separate required integration step; do not advertise complete remote lifecycle support.
Artifact admission no longer requires BUILD scope; every host-execution guard remains in place. A real BUILD using a distinct compiler invocation transfers its archived artifact and proof through separate worker/receiver CAS stores after the producer artifact tree is deleted. The TEST-only receiver has no compiler binding, retains and admits the exact evidence, runs its own locked TEST, and refuses BUILD before compiler access. All 12 admission tests, five command-scope checks and 37 BUILD action checks pass locally. Zero-execution controller custody and full production phase dispatch remain required.
BUILD child generation context
Carry and verify the actual Component generation plan in the BUILD input so worker-side intent registration can preserve direct library interface edges. Identity-only context cannot implement that registration faithfully. This does not by itself complete provider material transfer, private toolchain composition, or production BUILD dispatch.
Outcome: BUILD records now retain the complete generation plan and verify its identity, Component revision, and generation key against the candidate before launch. Missing plans, substituted plan bytes, internally consistent replacement plans, and changed candidate generation keys are refused. All 38 focused BUILD checks pass, including supervised child execution and CAS result transfer; the 12 artifact-admission checks also pass. This remains preparation for production BUILD dispatch, not completion of that phase or the 1.2 program.
BUILD child lifecycle registration
Retain the full execution plan as well as its selected generation plan in child input, verify their relationship, and exercise ordinary intent/plan admission in the real supervised child before BUILD. This supplies the Component lock context needed by SDK admission and avoids bypassing lifecycle registration. Production worker configuration and provider material transfer remain open.
Outcome: the real supervised BUILD child now admits the transferred intent and finalized plan through the ordinary lifecycle methods before running BUILD from worker CAS after controller source removal. The input retains and verifies the full execution plan and exact generation membership. All 39 BUILD checks and 12 transferred-artifact checks pass; specialized provider/SDK worker composition and production dispatch remain required.
Production BUILD execution operation
Move the supervised-child fixture's admission and BUILD sequence into production code and finish it with verified result capture. Require an already configured evidence recorder so provider custody can be admitted before consumer BUILD without rebinding or losing evidence. Qualify the actual production operation in a supervised process against worker CAS after controller source deletion.
The production operation is exercised by the bounded subprocess test and returns a CAS-backed verified artifact result. Its worker Python launcher uses observed toolchain custody to preserve virtual-environment semantics; resolving a venv symlink as an unobserved binary lost installed runtime dependencies. Missing recording, changed source custody, and divergent runtime plan inputs must refuse before BUILD. Worker CLI composition and dispatcher wiring remain unfinished.
Shared Standard adapter composition for workers
Extract the existing Standard lifecycle-port composition from the full project runtime factory. Both call paths must retain projected-toolchain drift checks, Python wheelhouse requirements, specialized adapter selection, native SDK inputs, and shared-cache dependency evidence. This enables private worker composition without requiring generation or running an entire lifecycle for one BUILD action.
Phase-scoped shared port construction
Centralize exact command-tool requirements and let the shared port factory select a canonical phase scope. Preserve npm BUILD dependencies, entrypoint bindings, full-scope independent acceptance, and every execution guard. This selects host execution bindings from a currently observed closure; observation of a partial remote worker inventory remains a separate integration requirement.
Python lifecycle qualification of worker composition foundations
At revision 55a14d1f9f5c6cdf4191f7284302f8759edf8a8e, the managed macOS
Python 3.14 environment passed all 12 test_standard_python_lifecycle.py checks
in 62.111 seconds and all 13 test_python_install.py checks in 13.618 seconds,
without skips. The previously absent installer fixture was supplied as the
existing pinned pip-26.2.1-py3-none-any.whl, verified against SHA-256
71138adf1f4ca900cdb7d289c21b7494329f2332b6d85f0e1c42108c0384ed3e before
execution. Tests use the wheel offline; installer authority was not changed.
Coverage includes actual offline installation, build/test/launch, sealed-cache reopening, package relocation, changed payload and SBOM refusal, installer hash refusal, and cleanup after failed installation. This supersedes the earlier skipped local Python run for these composition changes. It does not qualify remote Python worker dispatch, cross-host transfer, or the full 1.2 release.
Integrated CAS-backed worker execution
Connect strict source materialization to the production BUILD operation using a worker-startup-owned runtime context. Keep specialized adapter construction in the shared factory and retain provider/SDK resource lifetime through capture. Exercise the complete source-to-result path in the supervised child; verify cleanup when composition or execution fails. Worker CLI configuration and provider/SDK wire admission remain outstanding.
Outcome: all 43 focused BUILD checks pass. The actual supervised child calls
execute_worker_build_from_cas, composes BUILD-only ports with the shared
Standard factory and complete startup-owned fixture contracts, and returns a
verified CAS result after both source and object directories are removed.
The fixture now supplies actual local tool identities and classified, versioned
dependency evidence; no production SBOM checks were weakened. Runtime-entry and
execution exceptions both unwind temporary source custody. This covers normal
context lifetime; abrupt child termination remains supervisor/recovery work.
The worker CLI and specialized provider/SDK transfer are still open.
Production BUILD child stdio boundary
Move bounded input reading and completed-result emission into a production child entry point. Bind expected input identity and deadline from the supervisor, not stale inherited environment. Keep runtime factory selection entirely in trusted startup composition; an unconfigured child refuses and advertises no capability. The full worker receiver configuration and specialized custody remain open.
Outcome: five child-boundary tests and all 44 focused BUILD tests pass. The real
supervised child calls literate_ai.build_worker.main through measured startup
composition, with logging isolated from result stdout. Tests cover a missing
runtime factory, bounded oversized input, malformed records, fixed error output,
relative paths, expired deadlines, and replacement of reserved environment values
from both caller and launcher (including case variants). The standalone module
intentionally refuses without a private runtime factory; this is not yet the
configured production action receiver or complete 1.2 dispatch support.
Windows hardware challenge: receiver hash allocation overhead
Hosted run 36804231273 failed Windows shard 3 in two action-execution configuration
tests because hardware admission expired. Native Windows diagnosis on the
previously qualified d25ef141 checkout measured imports at 4.141 seconds, one
receiver hash at 16.811 seconds, and actual hardware collection at 8.526 seconds.
The challenge hashes receiver code on both sides, consuming substantial margin
inside the existing 60-second bound. This identifies a contributor, not proof
that it is the only cause of the hosted failures.
The shared regular-file reader requested the remaining 64 MiB package budget for each file. A 212-byte local file produced a 67,242,310-byte traced allocation peak. A native Windows comparison over 655 files / 11,939,451 bytes took 16.513 seconds with the current reader (15.880 seconds in file reads), versus 0.343 seconds with reads bounded to descriptor size plus one byte; both produced the identical receiver identity. Fix that allocation behavior and refuse changing file sizes. Do not widen probe deadlines, skip real hardware admission, cache stale facts, or replace file-content hashing with metadata-only identity checks.
Local validation of the implemented reader change passes three allocation/size checks, all 36 source-cache tests, and all 167 action tests (125.658 seconds). The same 212-byte file now peaks at 133,478 traced bytes rather than 67,242,310. The reader preserves the exact maximum-size admission and content bytes, and rejects growth or truncation after descriptor metadata capture. Exact-revision Windows hardware/configuration qualification and hosted CI remain required before claiming the hardware-admission failures resolved.
Native Windows qualification at cd399ee0 passes 39 tests with one POSIX-only
FIFO skip: bounded regular files (3), action capabilities (11), hardware (9),
and action execution configuration (16 passed / 1 skipped). Both configuration
tests that failed the hosted run pass with their original deadlines. A separate
qualification on the same frozen revision passes all five BUILD child boundary
tests and all 44 BUILD tests, including the real supervised child and read-only
artifact cleanup. These are native regression results; current-head hosted CI,
complete worker readiness and the full 1.2 release qualification remain open.
Portable artifact-tree ordering
Remaining BUILD transfer qualification exposed native Path sorting in the local
artifact-tree identity. Windows compares path components without case; POSIX uses
case-sensitive components. Identical portable trees containing Z.txt and a.txt
therefore receive different custody identities. Define ordering as case-sensitive
relative path components on every platform, preserving the existing POSIX identity
and file-content verification. Do not silently accept historical alternative tree
hashes: affected Windows artifacts must be rebuilt with current custody. Prove the
ordering on native Windows and keep cross-worker lifecycle qualification open.
Local evidence: the portable-order test checks mixed-case names, directory-prefix ordering, reversed creation order and changed content against one exact custody identity. It passes alongside all 12 transferred-build tests, all 44 BUILD tests, 12 version-authority tests, project validation and Ruff. Native Windows proof is still required for this change.
Specialized adapter command scope propagation
Hosted run 36813937631 at 8ac528f1 failed the native C++ job before
compilation: the shared port factory passes command_phases, but the Bazel
adapter constructor did not accept it. Cargo has the same defect. Forward the
explicit phase scope through both specialized adapters to the common execution
guards, preserving the existing full-phase default. Add constructor/scope
regression coverage without depending on installed native compilers, then repeat
the specialized lifecycle and native C++ qualification. Cancelled hosted jobs are
not passing evidence.
Local repair evidence: six command-scope tests, 19 Bazel lifecycle tests, ten Cargo lifecycle tests and 19 shared-factory tests pass. Both specialized adapters accept the full default, preserve BUILD-only refusal of TEST/EXECUTE before custody access, and reject an empty scope. Twelve version-authority tests, project validation, Ruff and diff checks pass. Native C++ compilation and fresh hosted CI remain open.
Native qualification of ordering and specialized composition
On native Windows at cbac605d, all 57 checks pass without skips: the portable
artifact-order identity case, 12 transferred-build cases and 44 BUILD cases.
The exact committed tree is 8cd987d7d41fc2a8adfc6e78bfe472c766f47f7a.
This proves the regression on both host path implementations; full cross-worker
lifecycle qualification remains open.
On macOS at 689146aa, all ten test_cpp_bazel_outputs.py tests pass without
skips in 226.060 seconds through the Make-managed environment. This includes the
complete filesystem runtime case that failed hosted CI, static/shared Bazel and
Conan consumers, and real product restoration after producer source/object
disposal. Incremental evidence reports zero actions for no-op and unrelated edits,
and rebuild actions for implementation/header edits. This establishes native
compilation after the constructor fix; hosted Linux/Windows qualification and the
full 1.2 program remain required.
Hosted run 36814563382 subsequently passes its native C++ Ubuntu job at
689146aa; the Windows native C++ job and the overall run are still in progress.
This is one passing job, not a complete hosted qualification.
BUILD action envelope admission
Connect the existing supervised BUILD operation to lifecycle dispatch authority. Before launching the private child, require the selected worker, current deadline, canonical BUILD action/component/payload and its single PLAN predecessor to match the exact admitted BUILD input. Reject missing, extra, oversized or substituted records before process creation. Re-admit the returned BUILD result against that same input before emitting it. Exercise this path with the real supervised child. This is the receiver operation prerequisite; configured tool inventory, advertised capability and shared-queue controller installation remain subsequent work.
Outcome: execute_build_action admits the exact dispatch envelope, invokes the
existing bounded supervisor and re-admits returned BUILD result bytes. All 48
BUILD tests pass, including a real child using the shared specialized port factory
through this receiver operation. Four new tests cover worker/phase/predecessor/
deadline mismatch, missing/extra/corrupt/oversized records, validly rehashed foreign
payloads, and an actual child echoing input instead of a result. Eleven architecture
and 12 version-authority tests, project validation and Ruff pass. The default action
CLI still does not advertise BUILD: private configuration, tool inventory admission,
source hydration and controller queue composition remain open.
BUILD reservations in the production ready queue
The BUILD receiver operation is available, but the lifecycle currently submits all BUILD calls directly to its executor. Add the same nonblocking reservation port used by INDEX/AUTHORIZE/PLAN so an admitted BUILD adapter can share worker slots without occupying threads while waiting for capacity. Preserve the current grant guard immediately before reserved execution, release every reservation on success or failure, and validate the returned Standard build output before TEST readiness. Prove that exhausted BUILD capacity leaves other ready phases runnable. Installing the configured command adapter remains required; this queue contract alone is not remote BUILD support.
Outcome: the production BUILD stage recognizes AdmittedComponentBuilder and
reserves before entering the shared executor. Eleven readiness tests pass,
including exhausted BUILD capacity with other phases progressing and invalid
reserved output releasing its slot without reaching TEST. All 55 lifecycle,
19 shared-factory and 12 version-authority tests also pass; project validation,
Ruff and diff checks pass. The configured command builder and worker capability
admission remain uninstalled, so this is readiness plumbing, not a claim of
complete remote BUILD or 1.2 acceptance.
Retain exact controller BUILD inputs
The controller stores finalized plans but retains full grants only for native SDK
builds. Remote BUILD requires the actual StandardPlanFinalizationInputs, not a
grant reconstructed from its identity. Retain the latest exact inputs alongside
each registered Component plan, whether finalized locally or accepted remotely.
Expose a data-only getter that rejects unregistered or superseded plans, changed
current contracts/providers/SDK custody and expired grants before yielding inputs.
Use this custody for subsequent command BUILD composition; do not relax execution
phase or tool binding checks.
Outcome: local and remotely accepted plans retain StandardPlanFinalizationInputs
by Component revision. build_execution_inputs checks the current plan, current
input projection and grant validity before returning the stored value. Four new
custody tests pass, including superseded plans, contract drift, grant expiry and
TEST-only data access without BUILD permission. All 48 BUILD tests, four native
SDK consumer-build tests (140.209 seconds), 19 factory tests and 12 version-authority
tests pass, along with project validation and Ruff. Command builder installation
and real remote handoff qualification remain open.
Command BUILD controller adapter
Implement the controller builder over the already admitted worker pool and shared slots. Capture bounded current source bytes into the source CAS, construct the exact BUILD input from retained plan/source custody, retain the handoff before dispatch, and use the existing action transport. Fetch returned artifacts and proofs through an explicitly supplied worker result-CAS source (or existing shared CAS), retain verified records before admission, and revalidate worker admission immediately before local artifact registration. Refuse missing evidence recording, provider mismatch, unavailable BUILD capability and changed inputs; never fall back to controller compilation. Production capability/configuration installation remains a separate prerequisite before automatic selection.
Outcome: CommandComponentBuilder uses the INDEX capacity owner, exact retained
plan inputs and bounded source capture, then dispatches the BUILD handoff and
imports its verified CAS result. Controller evidence retention is mandatory;
worker admission is rechecked before artifact registration and staged files are
rechecked after that potentially blocking admission check. Seven controller tests
pass through actual command transport, including a retained exact-input build
result followed by generated TEST, shared-slot ownership, missing capability,
provider/recorder refusal, retention bounds, changed admission and corrupt blobs.
The fixture supplies BUILD admission and an already-built result explicitly; it
is not proof of automatic worker capability discovery or SSH child compilation.
All 48 BUILD, 11 architecture and 12 version-authority checks also pass, with
project validation and Ruff. Private worker startup configuration, result-CAS
configuration and automatic factory installation remain required.
Configured BUILD receiver execution
Wire the BUILD action operation into the one-shot receiver through a typed trusted startup configuration, never a request-selected import or command. Require current privately observed launcher/tool bindings and exact compiler/BUILD tool selection before fetching source or allocating job custody. Hydrate only the bounded verified source manifest into CAS, then supervise a child in one owned job directory. Bind CAS/workspace locations through supervisor-owned controls, refuse conflicting child CLI locations, and remove still-owned job custody after normal completion or child failure. Recheck current authorization and tool observations around the operation. Default receivers remain unconfigured for BUILD; capability/inventory advertising and automatic composition follow separately. Receiver parent death and recovery remain explicit unfinished release obligations.
Outcome: the typed configured receiver now hydrates verified source blobs, selects exact observed tools and supervises BUILD in an owned job directory. The real-child fixture downloads source through HTTP after controller source removal and returns verified build artifacts; its outer receiver is invoked in-process, so this is not yet SSH qualification. Failure and cancellation remove read-only partial job files. Supervisor path controls override inherited values, conflicting child CLI paths refuse before input reads, and external or root-level artifact paths refuse before BUILD while source/runtime contexts close. Four configured-worker, six child, 172 action, seven controller, 11 architecture and 12 version-authority tests pass, along with project validation and Ruff. Default receivers explicitly report BUILD as unconfigured. Next: bind configured capability discovery to the observed tool inventory, then select compatible BUILD workers and install the controller adapter with explicit result-CAS access. Full remote runtime composition and recovery remain open.
BUILD capability and tool placement
Expose BUILD only for a trusted configured receiver, with its configuration identity and canonical observed tool identities bound into capability facts. Keep unconfigured capability documents unchanged. Bound the extended document to 32 KiB and its inventory to the existing 256-tool limit. Reject missing, duplicate, noncanonical or inconsistent BUILD facts. Select only workers that advertise all exact tools required by a Component's current BUILD inputs before reserving capacity; refuse an empty compatible set instead of waiting indefinitely or compiling locally. Revalidate the complete capability identity before dispatch and artifact admission.
Outcome: configured receivers advertise BUILD with the measured startup profile and observed tool inventory; unconfigured responses retain their prior shape. Controller placement and receiver admission share the exact tool requirement projection. Missing compatible tools refuse before slot reservation, while occupied compatible capacity still yields to the ready queue. Real command discovery, 256-tool round-trip, malformed inventory refusal, profile drift and controller refusal tests pass. The complete selected action run passes 175 tests; eight controller, four configured-worker, 11 architecture and 12 version-authority tests also pass, with project validation and Ruff. Next: explicit worker result-CAS configuration and automatic standard factory installation, followed by complete runtime composition and remote qualification. This capability observation does not establish provider/SDK readiness or result transport availability.
BUILD result transport and standard composition
Bind result transport explicitly per worker in private action configuration: either the existing shared CAS or an HTTP CAS endpoint with optional named credential and explicit insecure-HTTP policy. Validate configuration without network access; refuse unconfigured BUILD result transport before standard runtime composition. Bind fetches to the admitted worker identity and unchanged private configuration, then reuse bounded digest-verified CAS reads and artifact admission. Automatically install the command builder when BUILD is advertised and its result transport is configured. Keep result endpoints independent of source publication and never infer or provision a server. Complete provider/SDK runtime composition and remote proof remain required.
Outcome: private result_sources entries now bind explicit shared or HTTP CAS reads,
including named bearer credentials and endpoint policy. Reads verify exact worker
binding and unchanged configuration around transfer. The standard factory validates
BUILD result transport before runtime composition and installs the command builder
after source-cache/checkpoint wrapping, sharing INDEX capacity. Twenty-one
configuration, nine factory, eight builder, 11 architecture and 12 version-authority
tests pass, with project validation and Ruff. Tests include real authenticated HTTP
reads, explicit shared reads, worker/configuration drift, invalid endpoint/credential
refusal and automatic factory installation. The factory fixture supplies admitted
BUILD facts; it does not prove general worker runtime composition or SSH BUILD.
Next: complete provider/SDK and specialized target runtime custody, then qualify the
configured command/SSH BUILD path and receiver recovery before continuing the
remaining lifecycle phases.
Dependency-transfer inspection: the lifecycle already supplies exact accepted-provider
receipts to BUILD_INTENT (accepted_build_providers), but BuildWorkerInput carries
only provider/package export descriptors. Worker BUILD still depends on private
runtime composition to populate provider contracts, artifact paths, transitive export
custody and SDK/specialized-target inputs. Do not import historical provider builds
through the current-build admission path: that path requires the original execution
grant to remain current, whereas consuming an already accepted provider is a separate
data operation under the consumer's current authority. The next implementation must
retain the lifecycle's accepted receipts for BUILD, transfer bounded verified artifact
and proof records, and register provider custody without executing provider commands
or replacing acceptance with a fresh build claim. Library contract/import-surface and
transitive dependency identities must survive that transfer.
Native integration qualification completed for 3b8738c864469d0bf790041533420d8c73d54af3
(tree 88f91d9228396dbc07f1f10ae45c2c96f7742070) on Windows from a frozen Git
bundle and managed Make environment: 109 tests passed, one POSIX FIFO test skipped.
The seven groups cover 49 BUILD, six child, four configured-worker, 13 capability,
eight controller, 21 result-configuration and nine standard-factory cases. The
configuration group includes the skip. Unit prerequisites passed; full sample
readiness was not established. This qualifies that exact revision, not the later
provider-receipt/artifact-transfer work or a complete SSH BUILD/release path.
Accepted-provider receipt handoff: add a data-only builder port through which the lifecycle passes its already accepted provider receipts before reserving BUILD. The command builder must retain the exact receipts per current plan, bind their complete export set to the finalized provider descriptors, and include them in the bounded BUILD record. The worker revalidates canonical, unique receipts and exact exports before preparing a runtime. This transfers receipt custody only; artifact bytes, proof-record closure, provider contracts and package-only dependencies remain separate required transfer work. Local builders retain their existing interface.
Outcome: the lifecycle's receipt-custody port now runs before BUILD reservation, and the command builder retains a current-plan receipt set per Component revision. The bounded BUILD wire record carries typed receipts; controller and child admission reject missing, extra, duplicate, noncanonical or export-mismatched provider receipt sets. Twelve queue tests include a typed accepted-provider BUILD diamond; 50 BUILD, nine controller, 12 transferred-build, 55 lifecycle, 11 architecture and 12 version-authority tests pass, with project validation and Ruff. This is receipt descriptor custody, not verification of the referenced proof closure or provider artifact bytes. Transfer and reopen those records and bytes next.
Historical provider-build transfer: capture an accepted provider's artifact archive and bounded build-proof records under the consumer's current guard. Bind the transfer to the exact accepted receipt and original build plan; reopen the existing build proof and verify every archived file/export before returning data to a worker. Historical provider execution grants are not renewed or required to remain current. The caller must supply the accepted receipt from lifecycle custody, never from the transfer itself. This establishes build/artifact byte custody; acceptance-proof closure, contracts, transitive registration and BUILD wire integration remain open.
Outcome: ProviderBuildTransfer captures bounded artifact/proof CAS references tied
to an externally supplied accepted receipt. Capture/read reopen the original plan
and build proof, verify every archived file/export, and repeatedly check the supplied
consumer guard and deadline. Four tests use actual generated TEST, EXECUTE and ACCEPT
evidence, remove the provider artifact before reopening, move the consumer clock past
the provider grant's expiry, and refuse receipt substitution, corrupt blobs or consumer
revocation. Eleven BUILD-result, 11 architecture and 12 version-authority checks also
pass, with validation and Ruff. The returned verified data is not yet registered as
worker dependency custody or included in BUILD wire inputs; those integrations and
acceptance-proof closure remain the next required work.
Provider archive handoff: include one closed transfer descriptor per accepted BUILD provider receipt, in the same canonical order. Bound all unique provider archives to 256 MiB and unique evidence records to 64 MiB/4096 records across the action. Capture provider bytes from controller artifact custody under the current consumer grant; verify/hydrate them in the configured receiver before allocating a child job. Exact receipt membership and descriptor identity conflicts refuse before IO. Dependency registration, provider contracts, transitive custody and acceptance proof remain required before provider-dependent BUILD is complete.
Outcome: BUILD inputs now carry closed provider-transfer descriptors matched to accepted receipts. The controller captures provider archives and proof references; the configured receiver verifies and hydrates them before child-job allocation. Shared digest metadata must agree across archive/proof roles and across providers. The initial regression run passed 57 BUILD-related, nine controller, four configured worker, 11 architecture and 12 version checks. After tightening shared-digest bounds, all seven provider-transfer and nine BUILD-record tests pass, with the version gate, project validation and Ruff. Tests cover descriptor round-trip, foreign descriptors, aggregate record limits and conflicting metadata refusing before fetch. A complete provider-dependent BUILD is not yet proven: worker dependency registration and acceptance-proof closure remain next, with contract/transitive/SDK custody still open.
Provider acceptance process proof: reopen exact retained receipt, generated-test and execution evidence, the Standard acceptance policy, and source-custody links before accepting a provider archive. Apply existing generated-test and execution-process verifiers after build verification. Missing or substituted supporting records must refuse capture/read without provider execution. This validates the retained process chain; current recipe/oracle authority, contracts and dependency registration remain separate required checks.
Outcome: provider capture/read now requires the exact retained receipt, BUILD, generated-test and execution records, Standard acceptance policy and matching source generation/tree/suite custody. Existing TEST and EXECUTE verifiers reopen their underlying process observations. New negative cases remove the accepted execution record, policy, generated-test case observation or execution observation and refuse the transfer. All 60 BUILD-related, nine controller, four configured-worker, 11 architecture and 12 version-authority tests pass, with project validation and Ruff. Current recipe/oracle authority and worker dependency registration remain unfinished; process-proof verification does not claim to complete those obligations.
Provider source authority: carry the controller's recipe-derived source-validation snapshot with each provider transfer. Bind the retained candidate to the provider's generation plan in the current execution plan; revalidate source/resolved SBOMs and generated-suite membership against that snapshot. Required context comes from the current controller/worker plan, not from a transfer-selected generation plan. This is a prerequisite to worker dependency registration; standalone library/oracle and transitive dependency checks remain required.
Outcome: provider transfer now carries the recipe-derived validation snapshot and checks candidate membership against the current execution plan's provider generation plan. Source/resolved SBOMs and generated-suite case membership are revalidated. Ten provider, 51 BUILD, 59 qualification, nine controller, 11 architecture and 12 version-authority tests pass, with project validation. Changed provider-plan and recipe identities refuse. Dependency registration and independent oracle/library and transitive dependency checks remain open.
Hosted follow-up: run 36814563382 at 689146aa completed with 13 successful jobs, one failed Windows shard and five cancelled jobs. Both failures concern command hardware observation: the bounds case explicitly expires its 60-second action deadline; the CLI observation case reports transport/verification failure. Native passing probes do not explain the hosted failures. Retrieve available profiling artifacts and measure receiver startup, code verification and hardware collection before choosing a repair; preserve the existing execution bound.
Provider dependency closure: BUILD receipt custody must include every accepted receipt reached through a direct provider's artifact dependency identities. Include complete exports for each reached receipt, reject missing dependencies, cycles and unrelated receipt injection, and retain canonical receipt order. BUILD_INTENT keeps its exact direct-provider receipt contract. Derive the closure from completed lifecycle results before dispatch so a worker receives the same dependency bytes used by the controller. Registration remains gated by contract and oracle checks.
Outcome: a shared receipt selector derives the exact transitive artifact dependency closure from accepted results. BUILD wire admission rejects incomplete, extra, duplicate, substituted or noncanonical inventories. The queue passes the complete closure to BUILD and only direct receipts to BUILD_INTENT. Five closure, 12 queue, 55 lifecycle, nine BUILD-record, nine controller, 11 architecture and 12 version checks pass. The diamond queue test proves all three ancestor receipts reach the root builder. Worker artifact registration remains open.
Registration boundary clarification: LocalStandardLifecyclePorts.accept retains
the Standard per-component BUILD/generated-TEST/EXECUTE policy. Independent library
oracle verification in verify_qualification_library_acceptance binds standalone
root package/integration evidence. In-plan dependency registration must preserve
the component acceptance boundary and verify current contracts and all transitive
bytes; it must not introduce a dependency on a later root-package receipt. Standalone
library qualification and final independent package acceptance remain required in
their existing release/retained-library flows.
Worker provider registration: stage each verified accepted provider archive beneath the worker object root, retain its proof records, and admit the complete dependency set against current locked contracts before consumer BUILD. Keep imported paths and blob custody scoped to that BUILD, check current consumer authorization and staged file custody around execution, and remove owned stages on failure or completion. Historical provider grants remain evidence, not new execution permission. Prove artifact access after controller removal, contract/drift refusal and cleanup.
Outcome: worker BUILD now stages and registers the verified provider dependency set under current consumer authority, checks current export/command contracts, retains proof and exposes portable file/directory blobs through local artifact custody. Provider paths and registrations are scoped to the operation and removed afterward. Seven focused tests pass, including an actual consumer BUILD after original provider artifact and consumer source removal, directory-export blob preservation, changed contract/revoked authority/file mutation refusal, and both new-consumer and preexisting shared-blob cleanup. The broader run passed 57 BUILD-related, four configured-worker, 12 transferred-build, 11 architecture and 12 version-authority tests; the final cleanup repair passed all seven focused tests and the version gate again. This proves the in-process CAS-to-BUILD path, not the remaining full SSH/native/SDK/package program.
Configured provider BUILD qualification: exercise the accepted provider transfer through the configured receiver and its actual supervised child, with private startup contracts and observed tools. Remove original source/provider files before dispatch, verify the returned artifact from CAS after owned job cleanup, and retain separate exact-commit Windows evidence for the provider/closure/worker regressions. This complements the direct CAS operation proof; full SSH deployment remains open.
Outcome: all eight provider materialization tests pass, including actual configured receiver dispatch into a supervised child after original consumer source and provider artifact removal. The result archive remains readable from CAS after job cleanup. The test uses explicitly measured Python startup authority to preserve the managed interpreter environment. Twelve version-authority checks and project validation pass. This proves receiver/child transport with private runtime composition; complete projected Standard factory and real SSH provider-dependent dispatch still require qualification. Exact-commit Windows regressions at b103f93b are running separately; no result is claimed until their terminal report is retrieved.
Standard factory provider qualification: use an actual BUILD dependency chain,
accepted intermediate artifacts and the complete locked command/tool/provider
projection in the worker child. Transfer both direct and transitive receipts, remove
controller files before dispatch and verify the final artifact from worker CAS.
This must exercise project_standard_toolchain_closure and
assemble_standard_lifecycle_ports, not only a directly constructed local runtime.
Outcome: a three-Component BUILD chain now has an end-to-end Standard factory proof.
The controller builds, tests, executes and accepts the two providers, transfers both
receipts and their archives, then removes its entire source/artifact directory. The
configured receiver hydrates a separate CAS and launches a supervised child using
project_standard_toolchain_closure and assemble_standard_lifecycle_ports. The
root artifact has the expected bytes after worker job cleanup. The chain test, eight
preparation-fixture tests, twelve version checks, project validation and Ruff pass.
Actual cross-host SSH provider dispatch remains unproven by this local process test.
Controller artifact custody without execution: permit an explicitly empty command scope with no local tool bindings. It may retain source/plan authority and verify returned BUILD artifacts, but must refuse BUILD, TEST, EXECUTE and independent acceptance before host/custody access. It must not report local command authority as execution-ready. Preserve default/full and existing phase scopes. Prove admission of a real transferred artifact without any compiler/runtime binding; integration of remote observations into the production controller factory remains separate.
Outcome: an explicit empty command scope now admits verified artifact data without local tool bindings and reports local command readiness false. A real transferred BUILD retains exact evidence and readable artifact bytes while mocked process/tool access remains unused. BUILD, TEST, EXECUTE and independent acceptance refuse before execution. Bazel/Cargo preserve the empty scope and reject supplied unrelated tools. Seven scope/custody, twelve transferred-build, one Standard provider factory chain, eleven architecture and twelve version tests pass, with project validation and Ruff. The production controller factory still needs remote-observation integration; this adapter change does not alone establish a complete remote-only controller.
Command BUILD custody qualification: exercise the production command dispatcher from a controller with zero local tool bindings, through the configured action receiver and supervised Standard factory child, back to verified artifact custody. Require actual output bytes and empty worker job custody after completion; local BUILD/TEST/EXECUTE must remain unavailable. Use an explicit shared CAS and private worker startup configuration. This local process proof does not establish remote observation discovery or cross-host SSH support.
Outcome: the command controller now has a real configured-receiver integration proof with zero local tool bindings. Explicit private environment bindings carry the receiver identity and runtime configuration; the receiver launches the Standard factory child, builds the expected artifact and cleans its job directory. The controller verifies and registers the returned bytes, releases capacity and still refuses local command execution. A guard fails any controller-side tool observation. The fixture supplies admitted worker metadata and an explicit shared CAS; worker discovery, remote-only production composition and cross-host transport remain open. All ten command BUILD tests and twelve version-authority checks pass, along with project validation and Ruff.
Scoped Standard projection: carry the explicit local command scope through toolchain projection and assembly so a controller can retain complete contracts and observed toolchain guards without local launchers. Preserve all observed authority coverage and temporal checks; refuse assembly that widens the scope. Remove the Python wheel constructor's unconditional interpreter lookup and wheelhouse requirement only for empty command scope. Prove missing/changed authority refusal, scope widening refusal and default/full compatibility before using this projection in remote-only production composition.
Outcome: projected Standard closures now retain their explicit local command scope and require every and only its launchers, while preserving the complete observed authority set and portable closure identity. Assembly refuses widening, including when BUILD and TEST share an interpreter. Empty Python scope preserves exact target authority without a local interpreter or wheelhouse; executing scopes retain both prerequisites. Seven scoped-projection, nineteen factory, thirty-two command projection, seven command-scope, twelve actual Python wheel lifecycle, one provider factory, one command BUILD, eleven architecture and twelve version checks pass (102 total), with project validation and Ruff. Remote discovery, controller routing and cross-host SSH integration still require implementation/qualification.
Live command BUILD admission qualification: replace fixture-supplied capability and
hardware metadata in the data-only controller proof with the configured receiver's
bounded hardware and capability probes and CommandActionWorkerPool. Feed exact
observed tool identities and temporal admission guards through scoped Standard
projection and assembly. Dispatch must revalidate the admitted receiver before
publishing results. This remains a local command/shared-CAS qualification, not a
claim of cross-host SSH or automatic remote command-contract discovery.
Outcome: the command BUILD proof now obtains hardware and capabilities from the actual configured action receiver and uses the production admission pool and indexer composition. Observed BUILD tools feed explicit scoped Standard projection and assembly; the controller has no local launcher bindings. The real supervised child returns verified artifact bytes and leaves no job custody. Changing the private child profile while retaining its interpreter invalidates both projected tool authority and subsequent BUILD dispatch, preserving prior artifact custody and releasing capacity. The integration scenario and twelve version checks pass, with project validation and Ruff. Health policy and command contracts remain explicit fixture inputs; the earlier fixture-only capability admission is replaced.
Lock-derived remote projection: carry local phase scope through
project_locked_standard_toolchain_closure, constructing launchers only for scoped
commands. Empty scope must require explicit target platform, tool discovery,
dependency observation and observer identity, with explicit npm discovery when
selected. Preserve lock/Flavor derivation, SDK checks and all observed guards.
Prove projection from commands absent on the controller and refusal of implicit
host discovery before invoking any observer. Automatic remote observation transport
remains separate from this production projection boundary.
Outcome: lock-based projection now constructs only scoped launchers and carries the explicit observer identity into the unchanged portable closure record. Empty scope projects plain Python, Python wheels, npm, CMake, Bazel and Cargo from tool commands absent on the controller, while retaining live guards. Missing observation inputs and implicit npm discovery refuse before invoking discoverers. Full and empty scopes produce equal locked contracts and closure identity for identical observations. Four lock-scope, thirty-two command projection, seven scoped projection, nineteen factory, eleven architecture and twelve version checks pass (85 total), with project validation and Ruff. The observation callbacks are still explicit; command/SSH transport for complete role and target observations remains open.
Complete worker tool observation records: preserve role, command, identity, explicit environment, version and npm/Node authority in one bounded canonical document. Capture only guarded worker-owned observations, validating before and after capture; never construct a controller-local executable from received paths. Reject malformed or ambiguous inventories before projection. The subsequent observation transport must bind worker/challenge/profile/receiver/deadline and keep these data records distinct from executable authority.
Outcome: closed Standard tool observations now preserve role, identity, command, explicit environment, raw and structured versions and exact npm/Node relationship under a 64 KiB document bound. Worker capture rechecks tool and caller guards before returning; raw compiler banners retain an unknown structured version instead of guessing. Duplicate keys/roles/environment names, contradictory metadata for one identity, malformed fields and oversized/noncanonical documents refuse. Six observation tests (including the real managed Python toolchain), eleven architecture and twelve version checks pass (29 total), with project validation and Ruff. This record layer is not yet connected to receiver transport or production discovery.
Stable worker profile across receiver modes: remove the dispatcher-owned protocol marker from the validated private BUILD environment and profile. Probe modes must not create a different build identity or leak observation context into the child. Preserve all actual build settings, reject malformed environments before filtering, and prove ordinary environment drift still changes the profile.
Outcome: configured BUILD workers now remove the receiver protocol marker after environment validation, including case variants, so it neither reaches the child nor changes the build profile across probe/action modes. Actual private settings still change the profile and malformed reserved values still refuse. Five configured-worker, one live command BUILD, thirteen capability and twelve version checks pass (31 total), with project validation and Ruff. This repairs a prerequisite for comparing admitted profiles across the forthcoming tool-observation endpoint; it does not itself add that endpoint.
Bind Standard observations to configured BUILD startup: require every and only registered tool identities with exact commands/environments, capture the actual worker platform and retain the inventory identity in its profile. Revalidate metadata as well as registry/transport guards before observation and BUILD; refuse unconfigured observation requests. Preserve existing profiles when observations are absent. Qualify real interpreter binding and metadata/registry mismatch before exposing this authority through the observation endpoint.
Outcome: configured BUILD startup can now bind guarded Standard observations to its exact registered tool set, commands and explicit environments. The actual worker platform and initial inventory identity join its profile; uncaptured observations remain unavailable. Repeated capture detects metadata drift even when the original tool guard stays current. BUILD refuses that drift before source fetch or job allocation. Five binding, six configured-worker, one live command BUILD, eleven architecture and twelve version checks pass (35 total), with project validation and Ruff. Receiver transport and controller consumption remain open.
Worker tool observation transport: commit optional inventory identity in BUILD
capability facts and expose an explicitly configured --describe-tools operation
over existing command/SSH transport. Bind canonical bounded response bytes to the
challenge, admitted stable capabilities, worker, receiver, profile and inventory;
revalidate current tools around capture. Preserve unconfigured capability shape
and refuse unavailable observations. Prove real command discovery and substitution,
drift and deadline refusal before adding controller projection consumption.
Outcome: BUILD capabilities now optionally commit the Standard inventory identity,
including it in stable admission facts. Configured --describe-tools captures guarded
metadata with the challenged capability response under a total 64 KiB bound. The
controller probe requires current prior admission, caps the operation at the earlier
of the action deadline and 60 seconds, and checks complete stable facts, receiver,
worker, inventory hash and registry membership. Real command stdin/request-file
round trips pass; changed private profiles, unavailable inventory, replayed
challenges, stale admission, tampered/noncanonical/oversized responses refuse.
Four observation transport, thirteen capability, thirteen admission, five SSH
transport regression, eleven architecture and twelve version checks pass (58 total),
with project validation and Ruff. The SSH checks cover the existing transport seam,
not actual cross-host observation. Controller projection consumption and native
cross-host qualification remain required.
Controller tool observation consumer: bind received inventories to live admitted workers, expose data-only tool discoverers with exact role/command/version checks, and retain stable capability/inventory authority across fresh challenges. Preserve minimum/default runtime floors, required prefixes and exclusive upper bounds; reject unknown structured versions and unverified relative command aliases. Include the existing Zig/Zig-CC roles. Complete npm constraint handoff, target-side alias resolution, projection composition and actual SSH qualification remain part of the same 1.2 program, not deferred release scope.
Outcome: received tool discoverers now bind through the live command admission pool, retain the exact inventory and stable capability identity, and expose worker commands as data. Exact roles/commands, default runtime floors, required version prefixes, minimums and exclusive maxima are enforced; unknown bounded versions and unverified aliases refuse. npm requires a bounded constraint and retains its exact Node observation. Zig/Zig-CC roles are included. A real configured receiver proves discovery and live profile-drift refusal without controller tool access. Six consumer, six record, eleven architecture and twelve version checks pass (35 total), with project validation and Ruff. Projection composition, npm constraint handoff and target-side alias resolution remain open.
Remote npm constraint handoff: allow empty-scope locked projection to use its required explicit generic discoverer for npm, passing the merged bounded Flavor constraint. Preserve dedicated npm callbacks and local execution discovery. Prove that received npm versions satisfy the actual locked bounds, Node linkage stays exact, and controller npm discovery is never invoked.
Outcome: empty-scope locked projection now passes npm's merged constraint to the explicit generic discoverer when no dedicated npm callback is supplied. Received worker inventories with npm 11 project under the locked >=9,<13 range; npm 99 refuses. The test forbids both controller npm discovery and launcher construction. Dedicated npm callbacks and executing scopes retain their existing paths. Four scoped-lock, thirty-two command-projection, six remote-consumer, eleven architecture and twelve version tests pass (65 total), with project validation and Ruff. Full remote closure composition still requires worker-derived dependency evidence; inventory names and versions alone must not replace the observed dependency graph.
Worker dependency evidence: capture complete native graphs for exact selected registered tools under private effective environments. Retain bounded immutable canonical records, preserve separate loader contexts, and reject graph or library drift. Qualify real native interpreter observation before wiring challenged transport and remote closure assembly.
Outcome: configured workers can now capture native dependency graphs for exact registered tool selections under private effective loader environments. Canonical immutable records have a 4 MiB bound; each selected tool requires a nonempty, connected graph with unique references and valid edges. Separate tool contexts keep separate image references. Reobservation with a retained graph identity refuses changed libraries. Seven focused tests include real local interpreter/native-library observation, malformed graph refusal, selection refusal, environment overrides, missing per-tool evidence and library drift. Six configured-worker, eleven architecture and twelve version regressions also pass (36 total), with project validation and Ruff. Challenged dependency transport, controller composition and native Windows/Linux qualification of this addition remain required.
Dependency observation transport: add a challenged read-only receiver operation for exact selected registered tools and an optional retained dependency identity. Bind the complete request and admitted capability/profile to the graph, retain existing operation bounds, and prove real command/request-file transfer plus selection, replay, profile and retained-graph drift refusal.
Outcome: --describe-tool-dependencies carries a closed canonical selection and
challenge under the existing request bound. Its response binds the full request,
admitted capability/profile/inventory, graph root, selected identities and optional
retained graph identity. Only this mode permits the 4 MiB graph plus bounded
envelope; prior observation limits remain unchanged. Real stdin/request-file
transfers, retained graphs, profile/selection mismatch, replay, stale admission,
malformed responses and bounds pass. Real transport exposed a symlink-launcher
capture defect: tools now use native command resolution against an empty artifact
directory, rather than being misclassified as produced native artifacts. Three
transport, seven native-graph, four inventory-transport, thirteen capability, five
SSH-seam, eleven architecture and twelve version checks pass (55 total), with
project validation and Ruff. Controller closure composition and cross-host
qualification remain open.
Native observation outcome: exact commit
a9f5b454553af03dbf2e474d43fd1004239f0cc3, tree
04f33056ff184848be1ea544b1582059e44b8854, passes all 67 Windows tests across
twelve observation, scoped projection, command/provider BUILD and transport groups.
Terminal report/log retrieval succeeded. This excludes the subsequent npm handoff
and native dependency work; it is not full sample or cross-host BUILD qualification.
Hosted run 36827768651 at e706c0c8 separately failed the Windows health-policy
admission test with action_execution.hardware_probe_failed: action_wire.expired.
That failure remains unresolved and is not overridden by the native result.
Remote closure composition: connect locked scoped discovery to challenged worker dependency capture, retain a live graph guard on the resulting closure, and dedupe tool identity aliases without dropping role guards or accepting conflicting command metadata. Prove graph drift refusal and absence of controller launchers.
Outcome: project_remote_standard_toolchain_closure now composes actual admitted
tool discovery and challenged native dependency evidence with locked empty-scope
projection. It checks the exact selected command sequence, requests unique tool
identities and retains a graph guard that reobserves the expected identity once per
closure validation. Fresh capability checks preserve the admitted profile and
inventory. Aliased tool identities retain every role guard and reject conflicting
commands/environments. A real configured receiver projects and revalidates a locked
Python closure without controller launchers, then refuses private profile drift.
Two guard/alias, six remote-consumer, four locked-scope, thirty-two command-projection,
nineteen factory, eleven architecture and twelve version checks pass (86 total),
with project validation and Ruff. Production rebuild still needs coherent worker
placement and the remaining remote lifecycle phases; the new helper is not yet
automatic production routing or cross-host qualification.
Hosted hardware-expiry diagnosis: distinguish controller code-observation, transport and response-validation expiry without extending deadlines or changing non-expiration refusal codes. Isolated Windows measurements at a9f5b454 were 8.55s for first receiver-code hashing, 0.53s for repeated hashing and 10.97s for hardware collection; these do not reproduce the hosted failure. Existing coordinator-only pytest profiling does not capture xdist test-body stages.
Outcome: hardware observation now reports bounded code_identity_expired,
transport_expired or response_expired errors when those controller stages
exhaust the existing deadline. Earlier caller deadlines and non-expiration codes
are preserved. Ten hardware, twenty-one execution-configuration, eleven architecture
and twelve version checks pass (54 total), with project validation and Ruff.
This improves failure attribution; the prior hosted expiry is not yet reproduced
or repaired, and no deadline was extended.
Structured compiler observation: expose numeric versions from recognized existing compiler banners without changing their raw version or tool identity. Cover Clang, GCC, Swift, normalized MSVC and CUDA; preserve refusal for unknown or inconsistent banners. This enables remote version constraints without controller probes.
Outcome: compiler observations now expose numeric versions for recognized Clang, GCC, Swift, normalized MSVC and CUDA banners while preserving raw versions and tool identities. CUDA release/version disagreement and unknown or unbounded numeric formats remain unstructured. Capture respects an explicit unknown structured version instead of reinterpreting a numeric-looking banner. Four focused, six observation-record, forty-three guarded-builder, eleven architecture and twelve version checks pass (76 total), with project validation and Ruff. Worker-side authored command resolution and native qualification of this addition remain open.
Worker command selectors: verify authored command vectors against registered tools using private PATH/suffix authority and each adapter's invocation-path semantics. Reject shadowing, argument changes and ambient/current-directory fallback. Prove worker-side resolution and drift refusal before exposing challenged verification transport to remote discovery.
Outcome: configured workers can verify a selected role's command vector using private PATH and Windows PATHEXT authority without executing the incoming selector. Exact argument tails, shadowing, missing/relative search authority and changes between checks refuse. Invocation-sensitive tools retain lexical invocation paths; the C++ adapter alone uses its existing canonicalized compiler-path semantics. Inventory, tool and private-profile guards surround verification. Five selector, five configured-observation, six configured-worker, eleven architecture and twelve version checks pass (39 total), including real configured Python selection, with project validation and Ruff. Challenged selector transport, remote-consumer use and native qualification remain open.
Selector observation transport: carry unique bounded role/command batches through challenged receiver transport, bind results to prior admitted inventory and full request identity, and make remote command constraints retain live selector guards. Prove actual transfer, mismatch/replay refusal and changed-resolution refusal.
Outcome: bounded selector requests and responses bind a fresh challenge, full request identity, admitted capability/profile/inventory and exact role identities. Real stdin and request-file receivers verify private command resolution without executing supplied selectors. Remote discovery retains and rechecks accepted selectors; a real admitted consumer refuses a newly shadowing executable even when the registered inventory is unchanged. Retained role selectors cannot be replaced. Four selector-transport, seven consumer, thirteen capability, five SSH, eleven architecture and twelve version checks pass (52 total), with project validation and Ruff. These are local receiver and transport-seam checks; native selector qualification, coherent production placement and remaining remote phases are still required.
Native closure qualification at adfa28c9 passed its first fifteen checks but
refused dependency observation because the qualification process inherited an
empty trailing PATH entry. Read-only diagnostics confirmed that every nonempty
entry was absolute. The repeated qualification retains the same frozen revision,
uses fresh checkpoints and an explicit process PATH without empty entries, and
preserves production refusal of invalid search authority. Its terminal result is
pending; the failed run remains evidence and is not reported as passing.
Remote TEST admission: add a controller custody boundary that reopens transferred successful process/case records against current plan, BUILD, validated suite and locked single/multiple-entrypoint TEST authority. Require bounded record retention and a final live guard before registration. Prove actual test evidence transfer into a controller with no TEST command scope, malformed or substituted authority refusal and no registration on retention/guard failure. Receiver TEST execution, transport and production queue composition follow this boundary.
Outcome: controller TEST admission now verifies retained successful process/case records against current BUILD, validated suite, source custody and locked TEST runner authority. Multi-entrypoint admission binds every unit's export, deployment unit, command and runner. All bounded records are retained before a final authority and worker guard, and only then is test evidence registered. Five transfer checks prove actual process evidence enters a controller with no command phases, and reject missing records, substituted runner/custody/suite, unregistered plans and retention/guard failures. Twelve transferred-build, thirty-nine qualification, eleven architecture and twelve version checks also pass. The existing command adapter suite runs 43 checks with 41 passing and two existing platform skips, including actual multi-entrypoint verification and changed-unit refusal. Total: 120 passing, two skipped, with project validation and Ruff. Worker TEST execution, transport and production queue wiring remain open.
The corrected native adfa28c9 retry also failed after the first fifteen checks.
A focused receiver diagnostic identifies the next missing prerequisite: neither
dumpbin nor llvm-readobj is discoverable for Windows PE dependency inspection.
The terminal log/report were retrieved. No native closure success is claimed;
prepare and verify the required inspector before another exact-revision run.
Worker TEST handoff: bind the exact BUILD input and result into one bounded canonical TEST input; validate current authorization and complete existing source/plan/provider authority before artifact access. Bind returned test evidence and bounded record references to that complete handoff. Then execute the locked TEST phase over verified transferred artifacts, preserving controller admission.
Outcome: canonical bounded TEST input binds the exact admitted BUILD input/result; returned TEST records bind the full handoff, exact build/exports/suite and bounded unique evidence references. Current grants and deadlines are rechecked. The worker operation admits source and plan context, materializes provider custody, imports verified BUILD artifacts and runs only the locked TEST phase, then reopens process and suite evidence before exporting records. Its CAS entry point reconstructs and cleans exact source through private runtime composition. A real TEST-only runtime passes after original controller source and artifact removal without rebuilding. Seven focused, five BUILD-execution, eleven BUILD-result, ten provider-transfer, five controller TEST-admission, eleven architecture and twelve version checks pass (61 total), with project validation and Ruff. These prove the operation and handoff; supervised TEST child/receiver transport, controller result fetch, queue wiring, provider-dependent TEST and native cross-host qualification remain open.
Controller TEST result transfer: fetch only the exact bounded record references in an admitted TEST result from explicit worker return transport or verified CAS. Revalidate live worker/plan authority, retain the result envelope, then invoke current controller TEST admission. Prove real returned process evidence enters a command-free controller and corrupt/missing data, identity substitution, retention failure and changed worker authority leave TEST unregistered.
Outcome: TEST result import now verifies explicit return-source or cached record bytes against admitted sizes and hashes, preserves current plan/grant context, and rechecks worker admission before transfer and registration. It retains the bounded response before invoking controller TEST admission; no command is run. Nine real-result tests cover command-free controller admission, verified cache reuse, missing/corrupt remote data, corrupt cached data without refetch, substituted response authority, plan drift, response-retention failure and worker drift before and after retention. Seven worker TEST, five controller-admission, eleven BUILD result, eleven architecture and twelve version checks also pass (55 total), with project validation and Ruff. Supervised TEST child/receiver dispatch, shared queue integration and native cross-host proof remain required.
Supervised TEST child: share admitted BUILD/TEST process bounds while preserving existing BUILD behavior. Add supervisor-owned TEST controls and a private child entry point. Prove actual TEST execution through child stdio, cancellation, grant/action expiry, output limits, authoritative environment/path controls and unchanged BUILD regressions before configured receiver/queue integration.
Outcome: BUILD and TEST now share bounded process supervision after their respective input admission. TEST owns separate authoritative input/deadline/CAS/workspace controls, preserves earlier grant/action expiry, cancellation and descendant cleanup, and bounds both streams. The private TEST child re-admits the handoff, keeps logging on stderr and runs the CAS operation beneath owned workspace custody. A measured Python launcher preserves its environment for actual child execution; the real TEST child succeeds after original source removal and cleans its workspace. Six TEST-process, six TEST-child, nine BUILD-process, six BUILD-child, seven worker TEST, nine TEST-result, six configured-BUILD, eleven architecture and twelve version checks pass (72 total), with project validation and Ruff. Configured TEST receiver, capability/action transport, shared queue and native qualification remain open; receiver-parent-death recovery is still required by the full program.
TEST action binding: validate selected worker, deadline, canonical TEST node/predecessors and exact execution/generation payload before supervising the prepared TEST handoff. Preserve validation edges in canonical metadata; controller readiness remains scheduler-owned. Re-admit child results against the same handoff and prove altered authority cannot launch a child.
Outcome: TEST action admission now binds the selected worker and deadline, exact bounded handoff/payload records and canonical TEST node/predecessors from the full execution plan. Child result bytes are re-admitted against that same handoff. Six action checks reject substituted authority before launch, reject an actual child echoing its input as a result, and accept actual previously produced TEST evidence returned through child stdio. An isolated metadata check preserves validation predecessors; it is not cross-component execution proof. Four BUILD action, six TEST-process, nine TEST-result, nine DAG-planning, eleven architecture and twelve version checks also pass (57 total), with project validation and Ruff. Configured TEST receiver/capabilities, controller readiness/queue integration and cross-host execution remain open.
Configured TEST receiver: shared startup tool/profile observations preserve BUILD identities and give TEST a distinct profile. Every selected entrypoint's TEST runner is required, without adding BUILD-only requirements. Source, provider and completed BUILD custody are verified before allocating a job. The supervised TEST child runs beneath the owned workspace; profile/grant/deadline checks and owned cleanup surround transfer and execution. Seven focused checks cover real TEST execution after removing controller source, exact runner selection, missing tools, corrupt source/archive, profile drift and failed/cancelled child cleanup. Receiver capability advertising, wire routing and controller readiness/queue integration remain open. Six configured BUILD, eleven BUILD-result, seven TEST-execution, nine TEST-result, six TEST-action, eleven architecture and twelve version checks pass as well (69 total).
TEST discovery and routing outcome: the one-shot receiver advertises TEST only with its private TEST profile and canonical runner inventory, rejects missing/malformed phase facts and routes TEST to the startup-configured worker. Absent TEST settings preserve the previous BUILD-only facts. Combined workers retain TEST facts across BUILD tool-observation, selector and native dependency probes, with a final profile recheck. Real receiver TEST execution and unconfigured refusal pass; the combined worker stdio/request-file observation, selector and dependency checks pass. Nine configured TEST, sixteen capability, six configured BUILD, four tool-observation, four selector, three dependency, eleven architecture and twelve version tests pass (65 unique checks), plus Ruff and project validation. Controller TEST capacity reservation, readiness/queue integration and cross-host qualification remain open.
TEST ready-queue reservation outcome: an optional admitted TEST port now reserves capacity before occupying an executor. Exhausted TEST capacity leaves other ready phases runnable, and invalid reserved TEST output releases its slot and cannot reach execution. Existing local TEST ports retain their behavior. Fourteen ready-queue checks, eleven architecture and twelve version checks pass (37 total), with Ruff and project validation. The command TEST controller must still prepare the exact BUILD/result handoff, select admitted TEST runners and share the INDEX/BUILD pool; this queue interface alone does not establish remote dispatch or release readiness.
Command TEST controller outcome: successful command BUILD imports now retain an exact typed TEST handoff. The TEST controller binds it to current registered BUILD, plan, source and exports, selects every admitted TEST runner, and reserves shared INDEX/BUILD capacity. Source publication checks current authority before/after transfer and the deadline per file. Requests retain exact handoff/payload records; returned proof is imported with live worker/context guards and no local fallback. Seven controller tests cover real command transport returning previously produced TEST evidence, shared capacity, missing runner/BUILD, changed worker, wrong handoff and corrupt returned records. Ten BUILD-controller, fourteen admission, nine TEST-result, fourteen ready-queue, eleven architecture and twelve version tests also pass (77 total), with Ruff and project validation. Production composition, local-BUILD-to-remote-TEST handoff and complete cross-host execution remain open; the command fixture's returned proof is not newly executed TEST work on that route.
Hosted Windows diagnosis: run 36839967781 at published adfa28c9 terminated
with two failures: the health-policy admission test exhausted its hardware probe
inside transport (action_hardware.transport_expired), and the real interpreter
native graph exceeded the 4 MiB worker dependency record limit. This run does not
qualify the release. Native graph refusals now include serialized byte counts and
component/edge counts without paths or graph contents; oversized incoming JSON is
not parsed for diagnostics. The size limit and complete dependency evidence remain
required. This is diagnostic coverage, not a fix or waiver of either Windows failure.
Production TEST composition outcome: the Standard factory now installs command TEST when admitted, with explicit return transport for both BUILD and TEST workers. Local BUILD keeps its implementation and captures a verified completed artifact plus source, plan and accepted provider closure for remote TEST; command BUILD shares that capture logic. Three local-handoff tests include real BUILD followed by isolated TEST from CAS after original source/artifact removal. A controller without execution tools now runs actual BUILD and TEST children through a configured receiver, sharing capacity and importing evidence. Twenty-four configuration checks include local/remote BUILD composition and missing TEST return-transport refusal. Ten BUILD-controller, seven TEST-controller, eight provider materialization, one two-level provider-chain, eleven architecture and twelve version checks also pass (77 total), plus project validation and Ruff. This is command-process coverage; full cross-host lifecycle, remote closure selection and the remaining phases/caches still require qualification.
Hosted run 36852207423 at 313e7ec1 stopped in macOS Python 3.11 before release
qualification: two provider tests still patched the pre-refactor BUILD-only process
module. Both now patch shared process supervision, and both actual provider scenarios
pass locally. No stale reference remains. The earlier Windows hardware timeout and
oversized native graph remain unresolved; cancelled hosted jobs are not evidence.
Native TEST-child outcome: frozen revision
fe1b96f78ef49f7350494515caafe0d46de73688, tree
494f4f0034c4a34bd9b5e4c2544bd4f3e9fa789b, completed its Windows run:
72 tests run, 71 passed and one platform skip. The terminal log and report were
retrieved. Coverage includes supervised TEST/BUILD children, TEST execution/result
import, configured BUILD and architecture/version checks. It excludes later TEST
action binding and configured TEST changes, cross-host action dispatch, PE dependency
closure and full sample readiness. No native job from this run remains active.
Native provider BUILD outcome: exact commit
b103f93b47dae81995891ba415107fb6d29519f9, tree
47cc633be77a17dd28b4d04b9815620b5efd8a53, passes 155 tests on Windows with one
POSIX-only FIFO skip (156 run). The groups cover 58 BUILD, ten provider-transfer,
five receipt-closure, twelve queue, six child, four configured-receiver, thirteen
capability, nine hardware, nine controller, twenty-one configuration and nine
Standard-factory tests. The terminal report and log were retrieved successfully.
This includes real provider-dependent BUILD and directory/blob cleanup but excludes
later configured-provider child, three-node Standard factory and data-only controller
changes. It does not establish full sample readiness or explain the hosted hardware
probe failures. No native job from this qualification remains running.
Controller PACKAGE return verification now reopens LINK proof and imports bytes under live admission, then requires private format verification. The deterministic verifier reconstructs the result from declared inputs; a forged ZIP with internally consistent hashes and metadata is rejected. The actual three-Component command LINK/PACKAGE fixture passes for directory and ZIP returns and revoked admission during transfer; eleven architecture boundary tests also pass. These are local command-process checks, not native-fleet or release qualification. Controller PACKAGE scheduling/composition, FINALIZE and the remaining 1.2 gates stay open.
PACKAGE controller now uses shared action capacity, exact packager selection, canonical production dispatch records and mandatory independently verified result import. Eight controller regression checks cover wire binding, busy capacity, profile/worker loss, changed LINK handoff, import failure and worker failure without local fallback. These checks use a stubbed dispatcher/importer to isolate controller behavior; actual receiver/import coverage remains the separate three-Component fixture. Standard package-plan/custody composition and native-fleet qualification remain required before the full 1.2 release.
Standard PACKAGE composition now installs the command controller when advertised, requires command LINK proof and explicit result transport, and retains exact local plan construction and package custody. The bridge bounds and publishes declared input bytes and rechecks them after dispatch. Configuration tests pass (32), and local command lifecycle tests pass (43 run, two platform skips), including delegated directory-package result/custody parity. Controller input tests cover corruption before/after dispatch and oversized transfer refusal. The factory test uses admitted capability fixtures and the custody parity test a local adapter callback; a complete real receiver run through this Standard composition remains to qualify. FINALIZE, native fleet, shared-cache and remaining full 1.2 release gates remain open.
Standard command PACKAGE real-process outcome: the three-Component accepted LINK chain now runs a privately configured directory PACKAGE child using the same controller capacity pool. Standard constructs the package plan, publishes exact inputs, dispatches the child, imports/reverifies its result, materializes all linked exports, and reopens package custody. Every staged file matches its owned artifact bytes and capacity is released. The integration test passes in 75.742 seconds, including the existing ZIP forgery, revoked-admission and corrupt-LINK cases. The fixture routes public artifact reads to separate real per-Component local ports and uses simulated admitted worker facts; it does not establish live fleet admission, the entire factory-to-final-acceptance path, native SDK package coverage or release readiness. Those qualifications and FINALIZE remain open.
FINALIZE transfer preparation: a closed bounded canonical input now carries the lock with its authored definitions, every exact Component build plan, PACKAGE input and PACKAGE result reference. Seven descriptor checks pass for roundtrip, changed lock/execution, missing/reordered/duplicate plans, substituted manifest, missing lock authoring, and noncanonical/unknown fields. The decoder normalizes project-plan validation errors to FINALIZE admission failures. This is input admission only; PACKAGE/LINK proof reopening, remotely authorized root tests/execution/independent acceptance, controller verification and lifecycle composition remain unfinished.
FINALIZE proof reopening now validates the bounded predecessor record set and requires exact full-plan equality with accepted LINK inputs before independently reopening all LINK acceptance and PACKAGE format/byte evidence. The real three- Component LINK/PACKAGE fixture passes with fresh-CAS FINALIZE input transfer, changed runtime identity despite identical manifests, missing/extra/corrupt records, and admission revocation during transfer. Eight descriptor tests also pass. This establishes verified FINALIZE input custody only; remotely authorized root tests, packaged execution, independent acceptance, returned final evidence and production FINALIZE scheduling remain open along with the rest of the 1.2 program.
FINALIZE dispatch input binding is now implemented: selected receiver, deadline, production action and exact PACKAGE predecessor are checked before proof transfer. Four wire regression checks cover substitution, closed records and cancellation before CAS/verifier access. The real three-Component LINK/PACKAGE fixture also passes through FINALIZE dispatch admission and independent proof reopening. This remains input custody; the worker-side materialization, authorized root execution, independent project acceptance, final-result import and scheduler composition are not yet implemented or advertised as worker capabilities.
FINALIZE package materialization now stages exact logical package contents from independently reopened LINK/PACKAGE proof. Verified BUILD file tables distinguish directory exports from ordinary ZIP files, and byte/mode/path custody is retained through a bounded owned temporary tree. Three focused materialization tests pass for directory modes, non-expanded regular ZIP bytes and mutation refusal/cleanup. The real three-Component command chain passes with FINALIZE materialization, byte-for-byte staged inputs and cleanup. Source-suite reconstruction, private runtime/SDK composition, execution grants, root tests/execution/independent acceptance and returned final evidence remain required; this is not a remotely executed FINALIZE or full 1.2 qualification.
FINALIZE runtime inputs now reconstruct exact root source custody and generated suite beside the verified package, retaining all accepted Component BUILD inputs for private runtime composition. The actual three-Component LINK/PACKAGE chain passes source/suite identity checks and cleanup of both staging trees. Six BUILD source tests pass, including authority revocation during fetch; source INDEX regressions also pass. This is verified runtime input preparation, not remotely executed root tests or final acceptance. Private runtime/SDK binding, execution authority/supervision, final-result verification and lifecycle scheduling remain open, as do the remaining full 1.2 release gates.
FINALIZE stage sequencing now invokes the existing root integration test, packaged execution and independent acceptance ports under exact input/custody/contract checks and mandatory private execution-authority checks before/after every stage. Seven isolated runtime-port tests cover ordering and predecessor identity binding, denied or revoked authority, changed package/command custody, invalid stage identities and failure without downstream execution. These tests stub runtime IO; they are not a real remotely executed FINALIZE qualification. Private runtime construction, grant implementation/supervision, final-result transfer and controller verification remain open along with the remaining 1.2 program.
FINALIZE runtime custody now scopes verified package/source data into private Standard ports, with exact contract checks, occupied-runtime refusal and registration cleanup after errors. The real three-Component fixture now executes the ordinary root generated tests and packaged invocation and runs a verifier-owned fixed-output independent acceptance oracle against that reconstructed package. All three stage records are retained, and changed contracts/occupied runtime/exception cleanup are covered in the passing integration test. The fixture uses a synthetic authority callback and runs final stages in the test process; it does not qualify supervised remote FINALIZE, live grants or private SDK/Python bindings. Those qualifications, final-result import, scheduling and the remaining full 1.2 work stay open.
FINALIZE now has a private bounded child supervisor with mandatory exact-intent authority checks on every poll. Tests exercise real subprocess control transport, revocation and cancellation while running, refusal before launch and unsuccessful exit. This is process-boundary qualification only: private grant implementation, the FINALIZE child entrypoint, result verification and controller dispatch remain open, along with the rest of the full 1.2 program.
FINALIZE result descriptor admission now rejects request/package substitutions, missing stage records, duplicate or unordered references and oversized evidence. The command-chain fixture serializes actual root-stage results and retained records through this envelope. Referenced proof verification, private grants, worker entrypoint and controller composition remain open; this is not remote FINALIZE completion or release qualification.
FINALIZE now has a return-import boundary that reopens upstream custody and verifies returned record bytes before invoking a mandatory private stage verifier. Isolated transport tests cover corruption, missing verifier, upstream rejection and authority loss after fetch or during verification. These tests stub upstream reopening and stage semantics; they do not qualify a complete FINALIZE result verifier. Actual stage/oracle verification, child entrypoint, private grants and controller composition remain open within the full 1.2 program.
Portable FINALIZE stage verification now checks returned generated tests, packaged execution and independent oracle results against reopened source/package custody. The real command-chain fixture tests valid records and self-consistently rehashed missing cases, substituted oracle and wrong expected output. Other runtime kinds, SDK evidence, remote execution authority and complete controller/worker integration remain open; the full 1.2 completion requirement is unchanged.
FINALIZE execution composition now connects input reconstruction, private runtime, root-stage execution and bounded result capture. The real command-chain fixture exercises this composition and denied-authority cleanup. Its authority callback is still synthetic and execution remains in the test process. The supervised child entrypoint, private grant integration, non-portable verification and full controller scheduling remain open within the unchanged full 1.2 release requirement.
FINALIZE has a bounded private child entrypoint with required startup dependencies, supervisor path checks, admitted-input proof lookup and result validation before stdout. Boundary tests isolate IO/configuration with domain execution stubbed; they cover refusal, sanitized exceptions, diagnostic separation and post-execution revocation. Complete supervised worker execution, private proof-loader composition, live grants and controller dispatch remain open, as do other runtime verifiers and the full 1.2 program.
FINALIZE proof loading from staged CAS now follows the exact planned predecessor identities with per-record/aggregate/count bounds and live guards. The real chain fixture covers unrelated-cache isolation, missing/corrupt records, refusal before reading oversized records and revoked admission. Supervised child startup still needs to compose this loader with private runtime/grant configuration; full remote FINALIZE qualification and the remaining 1.2 program stay open.
Portable FINALIZE qualification now includes an isolated supervised child using the production entrypoint, staged-CAS proof loader, reconstructed runtime and actual root tests/execution/independent oracle. The controller independently reopens and verifies returned evidence and checks workspace cleanup. Authority callbacks remain synthetic test permissions; live grants, configured worker selection/dispatch, non-portable verifiers and full 1.2 completion remain open.
FINALIZE now has an exact execute-project request and private live grant adapter. Unit tests cover reread/revocation, validity times, substituted package/runtime, classification/request/revision/privilege mismatch and blocked profiles. These are synthetic issued-grant fixtures. Production grant issuance/lookup and measured private runtime-profile composition remain open; the supervised chain has not yet been changed from synthetic authority callbacks. Full 1.2 scope remains unchanged.
Portable FINALIZE runtime measurement now observes actual private ports and oracle cases. The local-stage integration uses a test-issued project grant with live measurement and checks environment/provider changes, unsupported runtime refusal and same-identity oracle case substitution. The isolated child still uses synthetic callbacks; production issuance/lookup, exact worker startup-profile composition and other runtime observers remain open within the full 1.2 program.
The configured FINALIZE worker now composes actual dispatch admission, owned preflight/source/package staging, supervised child execution and semantic return verification. The command-chain fixture uses this path and checks pre-launch cancellation/cleanup. Its worker runtime-profile and authority callbacks are still synthetic; production profile/grant composition, capability/controller selection and scheduling, non-portable runtime verification and full 1.2 completion remain open.
FINALIZE dispatch now enters through action_worker.main with an explicit private configured worker. The integration fixture sends encoded request/response envelopes through this receiver, verifies unconfigured refusal and continues through actual supervised child execution and semantic return import. Receiver IO is in-process in this fixture; the FINALIZE child is a real isolated subprocess. Capability advertisement, controller selection, production grants and full 1.2 work remain open.
FINALIZE capability encoding/decoding and exact private-profile eligibility are implemented, including configured receiver discovery. Tests cover closed fields, phase/profile pairing and profile drift. An existing PACKAGE admission regression test found below unittest.main() was moved into its class so discovery executes it. Controller FINALIZE composition, production grant wiring, scheduling and the rest of the full 1.2 program remain open.
The FINALIZE controller now builds production dispatch requests and shares worker capacity with existing phases. Isolated controller tests cover exact wire admission, busy slots, worker/profile loss, handoff drift, import failure and no local fallback. These tests stub transport and return import; Standard lifecycle/factory composition and real command-controller qualification remain open, along with production grants, non-portable support and the remaining full 1.2 program.
StandardProjectLifecycleService now exposes the optional project-finalizer port implemented by the command controller. Focused service tests cover exact evidence receipt integration, untyped/foreign evidence and finalizer failure without local fallback. These tests use fixture lifecycle ports; factory/runtime wiring and real Standard remote-finalization qualification remain open together with production grants, broader runtime support and the full 1.2 release program.
The Standard rebuild factory now connects FINALIZE-capable workers to the project finalizer with explicit private profile/verifier inputs and result transport. Factory tests cover missing LINK/authority refusal and controller/transport wiring. Persisted CLI configuration does not yet supply these private verifier inputs; production grant/profile configuration, real complete Standard rebuild qualification and the remaining full 1.2 work stay open.
FINALIZE controller qualification now connects actual capability discovery, command dispatch, private action receiver, supervised child and controller result import. The three-Component fixture retains synthetic hardware admission and execution authority; it does not attest production grants or a full factory-driven Standard rebuild. Those integrations and the remaining full 1.2 scope stay open.
FINALIZE discovery/execution profile parity now excludes the receiver protocol marker from private runtime configuration, matching the other configured workers. Three focused tests cover protocol/case parity, ordinary environment identity and immutable custody, and malformed environment refusal. Production configuration and the remaining full 1.2 qualification and release gates remain open.
Persisted FINALIZE policy now pins a configured profile and selects the built-in portable verifier in the Standard factory. Controller verification independently reconstructs package/source custody and uses the controller's acceptance oracle. Verification: 35 configuration tests, eight controller tests, a cleanup/revocation test, and the real command-chain fixture passed. The chain initially exceeded its 300-second deadline because per-read guards reconstructed the full LINK handoff; retaining full checks at import boundaries and live admission during reads passed in 161 seconds without widening the deadline. Worker hardware/grant admission in that fixture remains synthetic. Production private runtime/grant provisioning, full CLI rebuild qualification, other runtime verifiers, and the full 1.2 program remain open; this is not release attestation.
FINALIZE private authority now has a bounded file-backed grant lookup and a shared parent/child-stage adapter. Seven tests cover current and atomically revoked grants, missing/malformed/oversized/duplicate/nonobject records, changed directories, unsafe file kinds, replacement during a read, wrong scope, and revocation of a running supervised process. Grant issuance, protected deployment provisioning, measured worker startup and complete CLI qualification remain open with the full 1.2 scope.
The real FINALIZE command-chain fixture passed in 164 seconds with file-backed, measured-runtime authority in the direct parent/child path. It also verifies child refusal of a revoked grant when the parent check is deliberately bypassed. Grants are test-issued; the separate command-controller path retains synthetic authority. Production issuance/provisioning and complete CLI/runtime qualification remain open with the rest of the full 1.2 program.
Portable FINALIZE private runtime construction moved from fixture code into PortableFinalizeRuntimeFactory. The real grant-bearing child chain passed in 169 seconds using that adapter. Three focused tests verify grant-path separation, failed-construction environment/output cleanup and lock release, and changed-workspace refusal. Operator worker provisioning, grant issuance, command-controller authority, full CLI qualification and remaining runtime/1.2 requirements stay open.
Grouped verification at implementation revision fa14d06d passed 88 FINALIZE-related tests in 11 seconds, 49 project-update tests in 22 seconds, and 20 repository-update tests in 19 seconds. The update group includes disjoint three-way merges, actual conflicts, exact historical base custody, reviewed resolutions and rollback. This preserves direct evidence for UPDATE-MERGE-002 while the full 1.2 program continues. These groups do not attest the full suite, installed platforms, remote CI, shared LAN caches or publication. The migration audit above identifies the active forge and exact preserved baseline; contribution reconciliation and destination confirmation remain open. No release or landing occurred.
Published-release verification now independently checks the canonical version, policy tag prefix and declared release-line policy before consulting remote refs. A real local-Git regression rejects rehashed prepared records naming main, a feature branch, another version's release branch, or an unrelated annotated tag even when those refs select the prepared commit. The valid publication remains verifiable; all 83 existing release-core tests and the new regression pass. This addresses one RELEASE-INVARIANTS-001 verification gap. Legacy policies without a declared default branch and non-SemVer policy admission remain open; it is not complete enforcement of migrated main's broader requirement or release attestation. The migration proposal must incorporate this later local commit before adoption.
Publication now shares the prepared-name guard with published verification, rejecting an unrelated policy tag before any local tag or remote ref is written. Two real local-Git regressions cover invalid published names and pre-write publication refusal, unchanged local/remote refs after refusal, and successful publication of the original checked record. All 83 existing release-core tests pass. The remaining legacy-policy and SemVer requirements stay open, as do full 1.2 qualification and the pending public-destination decision. This follow-up must accompany the earlier local verification fix when the migration proposal is refreshed.
Release SemVer admission repair
Release planning, preparation, checks, publication, published verification, RC publication, default-branch version advancement and release-PR merging now require an explicit SemVer policy. Historical PEP 440 policies remain readable; neither policy nor bindings are silently migrated. The framework policy now selects SemVer explicitly, with unchanged already-valid version bindings. A regression exercises both policy schema generations and verifies rejection before authorization or release writes. The 83 core release tests pass, including canonical SemVer prerelease planning. Legacy policies without a declared default branch still need release-line enforcement; RELEASE-INVARIANTS-001 and full 1.2 qualification remain open.
Legacy release-line enforcement repair
Planning, preparation and branch validation no longer bypass release-line ownership
when a historical policy omits the default branch. Such a project must explicitly
check out release/<major>.<minor>.x before planning; a declared default branch
still permits planning a new line and cutting it during preparation. A real-Git
regression refuses main-branch planning and a rehashed historical plan without the
line field, completes the correct-line plan/prepare/check/publish/verify sequence,
and rejects altered published branch names. Core release fixtures now model the
repository-owned default branch. Full 1.2 qualification and release remain open.
[x] WORKER-QUAL-002 — Qualify integrated worker and remote PLAN behavior on native hosts
Priority: P1
Owner: Framework worker transport and native qualification
Direction: Continue the worker CLI work after all twenty workers pass SSH, using the current published integration and existing issue/PR repairs.
Conclusion: Verify the integrated schema/catalog and Windows cache repairs, exercise typed PLAN through real Linux and Windows SSH, and fix only reproduced gaps. Preserve exact revisions and report incomplete release gates separately.
Discovered gap: Native Windows fails before the twelve-membership regression reaches production code: fixture setup uses ordinary paths beyond MAX_PATH. Preserve the long-path challenge and use the existing native path boundary for fixture creation and cleanup.
Depends on: none
Implementation:
- Reconcile merged PR 514 and current integration evidence; record the repaired fleet.
- Run current worker, catalog, cache and remote execution checks on native Linux and Windows.
- Repair and rerun the native Windows long-path fixture setup.
- Exercise real SSH PLAN requests and refusals without weakening authorization or silently falling back.
Evidence:
- Targeted repository-managed tests pass with exact source identities on selected native hosts.
- Real SSH PLAN succeeds on Linux and Windows and malformed or unauthorized requests remain refused.
- Record discovered defects and qualification limits, with no release-readiness claim.
Qualification evidence: Published integration
4c3539b1493d343daa8ef54c880fad91425adf38(treec6589047a219db691ee576541a65bb2c6b9c47f8) includes merged PR 514 (63a4a4c6e5b1c87a45525a236d30f27ad0041ae0). The private fleet contains ten Linux and ten Windows 11 workers; all twenty passed CLI SSH testing after replacement of the previously failing Windows instance. Provisioning remains disabled unless locally configured. No provider-specific implementation was added.Native source checks: Repository-managed
make python-checkon Linux passed 248 worker, 12 version/catalog, 11 cache-roundtrip, 19 remote-execution and six PLAN tests. Windows passed the 248 worker (four skips), 12 version/catalog (one skip), and 11 cache-roundtrip tests before exposing the fixture defect.Live transport evidence: Production capability probing and
CommandLifecycleActionDispatcherover actual SSH succeeded on native Linux and Windows. Each receiver used an independently configured worker identity, returned the fixture's exact canonical plan bytes, refused revoked grants and changed generation identities withaction_plan.invalid, and left its build workspace empty. No SSH subprocess was mocked. Private result artifact SHA-256:598440909f5829b988dba13810cccee1d96d86d6dcfe6b993e0721dc88936370.Limits: This is focused worker/transport qualification, not the full release ladder, all-phase scheduling proof, generated application acceptance, or proof that an organization-specific dynamic provisioner has been configured. Native identities and logs remain private. End-of-cycle peer survey found no green reviews to absorb; the integration PR remains independently owned.
Repository verification:
litai verifypassed authority, skipped three undeclared/inapplicable gates, and refused the existing stale project test receipt (project.test_receipt_stale). This focused repair does not replace the project-wide receipt.Repair validation: macOS and native Windows each passed all 19 remote-execution tests after the fixture repair; Windows also passed all six PLAN tests. The native rerun used the published integration above plus only the revised
tests/critical/test_remote_execution.py, SHA-256aaca7479fd370366c7af81ca40f62c9703fed46e77de4f46db2a9b5d00d3c4a4. The long-path assertion, twelve distinct cache memberships, receiver short-root assertions, and cleanup assertions remain enabled. Production code is unchanged.
[ ] RETAINED-PROJECT-001 — Admit retained projects through explicit Standard lifecycle authority
Upstream: issue #22, reopened after checking the public handler on current main.
- Priority: P0
- Owner: framework lifecycle, retained custody, package and release verification
- Direction: Implement accepted ADR 0048 after explicit directing-human acceptance on 2026-10-02.
- Conclusion: Preserve original source and release authority while adding typed bounded retained admission and complete Standard execution; no conversion bypass.
- Depends on: Accepted ADR 0048; package providers retain their own qualification
- Implementation:
- Define streaming manifest, locked plan, authority mode and retained receipt contracts
- Integrate read-only planning and authorized Standard build, complete tests and docs through existing execution owners
Admit the first reviewed installed-wheel Standard binding for an adopted project whose driver and receipt policy are both absent. Reject partial configuration and policy downgrade; preserve original source authority. Focused CLI and rollback checks pass. At
4613eda2447eca5ad02b1abee2130375b83b29de, the full local Python regression passes 1,835 tests with 42 skips (1,877 selected) in 702.401 seconds. Log SHA-256:2f1555e13548a267a931cb1ed810888c8bcb95aef23446681f7e2c6b3874a7f1; report SHA-256:acb392e8ea9679c65793244a5e44166c2dc8059eca03e0c4582c1ad95a056739. Actual installed source-fork use then found a missing project-ownedtest_receiptpath. The source fork now declares that path; the framework planner also refuses its absence before apply. Seven focused binding checks pass. The full local regression for the added preflight passes 1,836 tests with 42 skips (1,878 selected) in 788.241 seconds. Log SHA-256:927c0e587dfba70adfc8b138e0051a0e994bc0b7176ecfc368ba799f75674160; report SHA-256:a42bb14e781ba2308c3ad5d3b5c885d765c5c11f67d272e0b549b159794b7125. The source fork's first binding succeeded using the prior installed4613eda2wheel. A reviewed rebind now pins the finalcffef323wheel: SHA-256e7d82a5035ce991f56ea45e2085bc9f91d81e71e25da9f7023897c6442e8391e, installed distribution identitysha256:ed899116420edda0c803acf424067f102b6face4870e180104add4da431cb534. The HP's isolated installed CLI validates/usr/src; authority and all three locks pass, while the absent retained test receipt fails as expected. Native worker execution and full installed qualification remain open.Expose the same retained-project plan and execution protocol through
litai buildandlitai test, delegating to the existing retained owner. Preserve exact plan/host authorization, original source authority, all configured gates and distinct retained receipts. Reject orphaned retained options before generated execution and keep read-only plans distinct from successful builds in operator output. Installed native project execution and package consumers remain separate qualification requirements. The combined public-frontend/catalog regression passes 1,850 tests with 42 skips (1,892 selected) in 1,063.469 seconds. Report SHA-256:d4885099d94eba41785a4b7795af11a10f20869fe0eca69aa6e8730799e1d5d6; log SHA-256:7fc7ae0393d46d09ca5561950edcf298438682e9aa6ef55fc9dd8d00de7bb255. Handler fixtures exercise actual local command/custody owners; they do not qualify canonical installed native compilation or package consumers.Connect explicit local retained execution to live workspace admission, preserving original authority, exact re-planning and retained CAS custody. Reject unsupported remote/SDK execution rather than falling back to local execution or ambient tools; preserve failed run evidence.
Implement local verification of selected OS/architecture and authored worker requirements against fresh actual local platform observations, retaining the binding in admitted evidence. Add wrong-platform refusal checks before operator deployment; matching target names and worker metadata alone do not prove this gate.
Audit configured Standard evidence requirements against retained-origin admission and public consumers. Preserve the initialized policy in the real installed fixture; do not narrow required evidence to manufacture success. Distinct retained receipts must neither substitute for generated receipts nor silently discard applicable declared gates.
Bind opt-in command-search directories to declared build exports so original tests can invoke newly built products by name without inheriting host PATH. Preserve default profile identities; reject undeclared, redirected or non-directory selections and qualify actual subprocess lookup.
- Bind package and release custody to retained origin without conversion advancement
- Evidence:
- Public installed CLI mixed source and binary fixture passes complete build, test, docs and deterministic package lifecycle with repeat, invalidation and relocation checks
- Adversarial stale inputs, unsafe custody, missing stages, substituted artifacts, worker identity drift and authority transfer fail closed; existing modes remain green
Planning foundation: bounded streaming binary manifests and immutable snapshot capture,
strict action/inventory profiles, and public read-only retained-project planning now
validate exact Standard distribution, project/Component locks, original conversion
record, worker/target, SDK/toolchain/dependency closure and original policy inputs.
make python-check passes 23 retained input/planning tests and 33 existing rebuild
CLI regressions. Execution still fails closed: typed retained runtime/receipt, SBOM,
package and release consumers and full installed-CLI qualification remain open.
The baseline audit at 7c5cbd29 verified unconditional public execution refusal.
This branch connects the development local route to existing live execution and
receipt admission, with exact plan/host authorization, fresh authority reads and
captured command diagnostics. Eight owner checks and three handler-wiring checks
pass locally in 30.151 seconds with actual command/admission owners, including
pre-execution refusal when independent acceptance is absent. The handler tests fixture
project discovery; canonical installed CLI qualification remains open, as do SDK
producer binding, remote retained dispatch and public package/release composition.
Issue #22 remains open. FreeBSD receiver/bootstrap qualification does not close
these runtime requirements or transfer retained release authority.
Local worker-context checkpoint: selected OS/architecture and authored capacity
requirements now bind fresh actual observations before commands and through
current-plan revalidation. Receipt admission retains typed initial/final context
and rejects inconsistent evidence. Nine policy checks and thirteen runtime checks
cover mismatches, architecture aliases, probe failures, platform drift, actual
local probing and CAS retention. The retained group passes 163 tests with one
native-only skip (164 selected) in 207.106 seconds; a final runtime follow-up
passes all thirteen in 57.239 seconds. Their log SHA-256 values are
f4b8d9f03c4bcec51af4c727bf047ba1a9640454983ab8f12885e8058830f1aa
and ff08d3fee1b080af85cbb7a6787dd486964b1ab78e1640e09fe3169f598a63be.
The full local regression for this context change passes 1,831 tests with 42
skips (1,873 selected) in 651.219 seconds. Log SHA-256:
c0d47628ce909be9a51ff2f16bac620fbe75add5e8ab774d808c494931a55af2;
report SHA-256:
754025dfd4bb44340f988db7f48bc2993083090380fc81957bd99d2d5dfeedec.
Installed and native qualification remain open. Configured evidence-policy
consumption remains a separate gate.
Combined local checkpoint at 3d2650134909d55ffc36f9147a652bd62faecce5:
the full Python regression passes 1,820 tests with 42 skips (1,862 selected) in
796.437 seconds. Log SHA-256:
9b67dbf8a5dd01593dde83ff4f6007dbb6765f671d5c1787fae7f1b9dcf0d5a4;
report SHA-256:
99c29ae5e393ff72e0eb0680b87a0ace704514a1e8a800217ed03d9a055fae8b.
The combined lookup/runtime tree passes lint, formatting, layout/export, both
TCB reviews and project authority validation. Actual canonical installed CLI
execution, local platform-binding audit, native and SDK/package composition
remain open; the fixture handler tests do not prove those boundaries.
Built-product lookup checkpoint: nine local environment checks pass, including
an actual subprocess that finds a newly exported executable by name and fails
without the explicit selection. Four new checks cover identity/producer/path
refusals and lookup behavior. Caller PATH stays outside the target environment;
host native inspectors retain their separate discovery context. Native,
installed/public execution and original-source test qualification remain open.
The full local regression passes 1,809 tests with 42 skips (1,851 selected) in
682.902 seconds, including the new lookup checks. Its log SHA-256 is
4f02307799e89cd624473fc4ac51f0441803faec4e7639b1f0c67204ddbce909;
the report SHA-256 is
7e9295bab9ad4c46078567af2cfb49380006df3161d4c31d438c9c9707c44b44.
Lint, formatting, layout/export, TCB pins and strict OpenSpec checks also pass.
This renews the local lookup checkpoint, not native or installed qualification.
Next action in progress: qualify the canonical installed local retained route, then join its selected SDK and package authority through the existing owners. The native FreeBSD pkg provider keeps existing ZIP wire identities. Bind a packaging Flavor actually selected by a current Component lock, exact accepted payload, authored specifications, both BOMs and retained receipt evidence. Reuse the provider's construction and independent native inspection; never place a retained project identity in a generated Component revision field. Qualify repeat, relocation, stale authority, resource collision and rehashed archive tampering. The ZIP backend slice below is complete at its recorded scope. Native pkg composition, bounded whole-system scale, installed CLI and release integration remain open; no publication grant is added. A native-format result or decoded receipt must never replace live retained admission or per-unit package evidence.
Retained pkg backend checkpoint: live custody now delegates native construction and inspection to the existing provider, with an exact selected pkg Flavor lock, accepted payload/specifications, both BOMs and complete receipt/run records. The native projection and tool metadata are retained in CAS and required during reinspection. Existing ZIP wire identities are preserved. Four portable retained pkg checks pass (five selected, one actual-native case skipped); all eight ZIP package checks pass, and 21 portable native format/ELF checks pass (24 selected, three native construction cases skipped). Actual native retained construction, the full current regression, installed/public lifecycle and per-unit source/ports execution remain unqualified. The native retained test must prove repeatable construction, reopened payload execution and missing-projection refusal without mocking native tools before this backend can receive native qualification.
Archive checkpoint: all 117 retained-project checks pass locally in 464.220
seconds, including eight actual archive cases. They prove read-only planning,
byte-identical repeat construction, executable payload preservation, complete
retained run records/specifications/BOMs, scratch retirement/CAS relocation,
stale authority and rehashed archive tamper rejection. Empty selected payload
directories refuse rather than being silently dropped by the file-only ZIP
provider. The existing package-provider group also passes 47 checks before the
final run-record/empty-directory additions. Lint/format, authority validation,
driver/documentation review, OpenSpec and documentation checks pass. Native,
installed/public CLI, release and whole-system scale qualification remain open.
At exact archive/receipt revision
f2f3c3ba0a764d72d87542f886a639f6db7c5447, all 117 retained-project tests
also pass on actual FreeBSD without skips in 3,887.772 seconds. The native log
SHA-256 is
d30ee2356f4cf5dc89dedb2b1ac08c15837e7f0b4b69b66f64a9b09d4247356a.
This renews native receipt, payload materialization, ZIP archive and SDK custody
coverage at that revision. It does not qualify later native pkg/public CLI
changes, the installed wheel or complete source/ports unit execution.
At exact receipt-integration revision cdd7379225496c2fb4d311e4eab72598e262e623,
the full Python suite passes 1,752 tests with 37 declared skips in 3,734.087
seconds. Its log SHA-256 is
972479448ccad40736528806d1c6352620954703c844d567a54f943e59a8d425.
This baseline excludes the later archive/native-pkg and incoming main-line changes.
The reconciled revision bd5d77764ab094d549fb729cb8d72b3a4c0617d7 passes
the complete Python suite: 1,795 tests with 40 declared skips in 1,027.566 seconds,
using four isolated module workers. Its log SHA-256 is
b76f369c354a95495857f561ea0480de605f95165413163e7315585c6032faae.
This includes the native pkg/public-dispatch foundation and incoming main-line
changes; it excludes the subsequent extended-tar-metadata correction and does
not substitute for native construction or installed-wheel qualification.
At ace6e5402683dba4120c5da8e6fb3fbc621516aa, the full Python suite passes
1,797 tests with 40 declared skips in 1,054.891 seconds, including the extended
tar-metadata correction. Its log SHA-256 is
51c611509b6432db64566d06fcd177d9234435b251087d6978eed007adc8b9a6.
This baseline precedes the native owner/timestamp correction and independent ELF
library metadata reader; those retain their own native/full/installed gates.
Local receipt checkpoint: all 109 retained-project tests pass in 373.215 seconds,
including ten receipt cases and the source-link execution regression. Actual
compiled exports survive scratch retirement and CAS relocation; stale authority,
corrupt payloads, missing SDK records and existing destination collisions refuse.
Lint/format, project authority, driver/documentation review, OpenSpec and the full
documentation gate pass. This establishes local admission and exact payload
materialization only. Full-suite, native and installed qualification, native
package construction and public package/release consumers remain open.
The source-link receipt fixture exposed a runtime gap: the native observer still
walks and rejects approved source symlinks. Project the complete verified manifest
onto its regular native files through the existing explicit selection interface;
retain link text/target validation and default unselected-tree refusal. Explicit
data-only native selections must remain empty rather than traversing links.
The SDK join now binds the complete selected lock/product/file/mode closure to
captured inputs, reuses existing producer materialization and native inspection,
and delegates per-command and verifier grants plus live revocation checks to
the existing SDK execution owner. Source resolutions flow into the resolved BOM;
completion retains fresh checks of the most recent verifier grants. SDK-bound
BOM execution rejects missing producer owners before target commands run.
All 98 local retained-project checks pass (243.802 seconds), including seven new
SDK policy/execution cases with a real compiled SDK and its transitive library.
At exact revision 015582a0740550d73fcf4577f6ca54b741c6e68d, all 98 also pass
on actual FreeBSD without skips in 1,907.301 seconds. The native log SHA-256 is
ca4260601e3d6c4628d7449adb9188ad994fd6513601cb3dbe97ec7a3900194f.
This qualifies the SDK checkpoint, not later receipt/package changes.
Both existing SDK execution regressions pass (38.770 seconds). The initial focused
run also passed seven existing producer checks. Lint/format, authority/driver
review, both OpenSpec changes, all 121 diagrams and 21 documentation-tool tests
pass. The configured lifecycle receipt remains stale. Native/installed/full-suite
qualification and distinct retained receipt/package consumers remain open.
The completed-run boundary now joins the full ordered command transcript, original test policy and reports, independent cases, both BOMs and sealed final exports. It revalidates live custody and final native dependency observations; partial or failed runs, mixed observations and missing package members refuse. Nested exports retain canonical producer roots while package selection may name their parent directory. All 91 local retained-project checks pass (116.818 seconds), including nine completed-run cases with real compiled exports. Lint/format, authority/driver review, both OpenSpec changes, all 121 diagrams and 21 documentation-tool checks pass. Native and full-suite qualification remain open. The joined record is not SDK admission, a lifecycle receipt, package acceptance or public execution authority.
Source/resolved BOM integration in progress: project exact retained input and SDK/dependency-file declarations through the existing retained managed graph and CycloneDX owners before execution, then bind actual frozen tool and export-native observations after the complete build and before tests. Preserve original origin, input/output manifests and policy identities; reject forged graphs, stale or substituted documents and native observation conflicts. This gate does not itself admit SDK producers, qualify a retained receipt or enable public execution. Thirteen focused BOM checks pass locally, including actual compiled-fixture build exports and data-only exports resolved before tests. The complete retained regression group now passes 82 checks (62.963 seconds). Native and installed qualification of this new bridge remain open.
Independent acceptance implementation: add an explicit opt-in verifier policy whose exact bytes and selected Component locks are bound to the retained plan. Keep it outside the materialized retained inputs. Run bounded cases against sealed build exports, checking exact exit/stdout/stderr and current input/output/native dependency custody. Reject stale policies, missing cases and substituted outputs. Legacy profile identities and the public execution refusal remain unchanged; SDK/BOM admission, retained receipts, package and release consumers remain open. The local canonical retained-project group passes 68 checks. Fourteen current focused acceptance checks pass, including a retained build/test/docs command sequence followed by execution of its compiled native fixture export, exact binary stdin/stdout, expected nonzero exits, bounded output and failed-result custody. This is internal gate coverage; full-suite, installed-wheel and native qualification remain required.
Execution work in progress: add an isolated retained command workspace using the
existing streaming snapshot, Standard tool binding and bounded process owners.
Every action must use the reviewed graph and captured tool, recheck current plan
and original/snapshot inputs, and retain exact command/output observations. These
observations are not acceptance receipts: SBOM, independent acceptance, package,
public CLI and release consumers must still be integrated before execution can
qualify. No conversion record or ordinary generated-source membership may change.
The canonical local retained-project group passes 16 tests. A compiled fixture
actually runs the complete declared command graph; failed tests, stale plans,
source/snapshot mutations, substituted tools, undeclared/missing/redirected
exports, sealed-export mutation, output overflow and incomplete profiles refuse.
This is command-owner evidence only, not an installed public lifecycle receipt.
At revision 92b56bf5, the same 16-test group also passes on actual FreeBSD,
including compilation and execution of the captured native fixture. The native
log SHA-256 is 59a98595401b8de649db3b1ec785951cd99bb1b4dd2bc55b5d9ad70d54a05bc7.
The five current CLI rebuild regressions pass locally. Public retained execution
remains closed pending the existing SBOM/acceptance/receipt consumers.
Current integration audit: action labels and zero exit codes do not prove a complete original test inventory. The next required runtime gate binds a typed reviewed case/skip policy to the project's configured receipt policy, exact test actions and sealed report outputs. Planning must reject an unrelated policy or an incomplete action inventory; execution must reject missing/extra/duplicate cases, failed outcomes, unauthorized skips and insufficient actual passes before independent acceptance. Reuse streaming input/output custody and the existing retained-case validator. A baseline exception cannot become a passing result. Qualify real compiled command execution and failed-report refusal, then continue the separate native SDK/SBOM, independent acceptance, retained receipt, package and release consumers before removing the public execution guard.
The integrated case gate passes 28 local retained-project checks, including actual
compiled command execution, zero-exit invalid reports and an all-permitted-skips
report that cannot satisfy the configured minimum. Existing retained Cargo test
execution (2) and CLI rebuild (5) checks pass. The retained-project log SHA-256 is
4fc8ca009b891766183b60916302860a7148f55629c6f2817b75a7d970e71663.
Policies and reports use bounded streaming custody and duplicate-key rejection;
verified case observations bind their actual command and report bytes. These
checks qualify this internal gate locally, not the complete public lifecycle.
Release-authority audit: retained planning currently accepts any single hashed
release-policy member, even when it is unrelated to the policy consumed by
litai release. The next implementation action in progress binds that role to
the canonical configured release-policy path and its current typed policy,
including repository-branch consistency. Reuse bounded streamed metadata custody;
reject duplicate JSON keys, stale bytes, alternate paths and policy substitutions.
This is a prerequisite to retained-origin receipt/publication integration, not
permission to publish or advance conversion authority.
The release-policy correction and shared metadata reader pass all 36 local
retained-project checks without skips, including compiled commands and the
existing test report/skip refusal cases. The log SHA-256 is
a6ee25e110d2ae4253e979057e6ab7afb7ffa40639d389aefa3abffbe59a0afa.
Native qualification of this revision and full retained lifecycle integration
remain required.
SBOM integration is the next implementation action in progress. Existing managed CycloneDX graphs require a Component root; inserting a project/manifest digest as a Component revision would misstate provenance. Add a distinct retained-project root kind and binding property, derive its identity from the reviewed retained plan, and merge every current Component-lock graph without changing dependency identities. Reuse the existing CycloneDX builder/verifier and its source-to-resolved transition checks. Qualify retained-origin/ordinary-origin separation, exact lock coverage, overlapping-graph consistency and forged managed claims. This graph foundation does not prove native tool/SDK closure, independent acceptance or a release receipt; those runtime integrations remain mandatory.
The distinct-root graph passes seven focused checks, including exact lock closure,
overlap merging/conflict refusal, schema roundtrip, source/resolved transition and
ordinary-origin/forged-claim refusal. Its log SHA-256 is
0b7ac5c4d203eb985ba7a4dea1a23f4808d4a3ea4918683b8b5d81ea1cd1cc1b.
Existing CycloneDX checks (2), dependency lifecycle checks (4) and schema catalog
checks (2) pass. Full runtime SBOM observation/custody remains open.
The next integration action in progress connects this graph to actual filesystem
planning. Extend the existing current-lock owner to expose its verified immutable
lock objects while preserving the identity-only API and catalog-selection rules.
Derive the retained planning result's managed graph from exactly those locks and
the reviewed plan, and expose it through the read-only public planning response.
Keep current-authority revalidation and the unqualified execution refusal. Test
real lock loading/staleness and graph/result origin consistency; a graph response
does not issue source/resolved runtime evidence or a receipt.
The bridge passes six current-lock/planning checks, all 46 retained-project checks
and five CLI rebuild regressions. Actual catalog/lock reads reject stale persisted
inputs and retain unselected catalog behavior; the positive planning fixture uses
explicit unit-test validation/conversion/distribution authority and issues no
receipt. Current-lock and retained-group log SHA-256 values are
036806237ddfa2a12ae7f7225f3e003cb008224f5fa18c4414db9d68579abf02
and 99a97e57211a7cf809aa346daee87f5504516316c7f371b7a25998f34d023783.
Installed public whole-project and runtime SBOM qualification remain required.
Next runtime integration: bind the retained workspace's captured tools to the existing native SDK/toolchain and recursive dependency-observation owners before source/resolved BOM admission. Current role-closure hashes and executable byte guards identify reviewed inputs; they do not yet qualify a native SDK or prove a complete compiler/runtime closure. Observe the actual effective command environment, preserve original binary inputs and distinct retained origin, and share existing SBOM/independent acceptance/receipt/package gates without inventing a regenerative execution plan or generated-source wrapper. The public execution refusal must remain until those integrations and installed mixed-project evidence pass.
Native dependency observation is the implementation action in progress. The internal workspace currently guards captured executable bytes but never observes the libraries those commands actually load. Reuse PortableHostDependencyObserver over exact captured SDK/toolchain/dependency members and tool commands, with loader controls derived from the sanitized command environment, not the caller. Freeze the observation as canonical bytes, reobserve around each command, reject drift before retaining success, and bind its identity to every command record. Qualify actual compiled command execution and simulated dependency mutation, malformed graphs, ambient loader injection and mutable-observation refusal. This runtime drift gate does not itself admit SDK products, original-language dependency declarations, independent acceptance or a release receipt; those remain required before opening public retained execution.
The implemented gate passes seven focused observation/refusal checks and all
55 local retained-project checks, including compiled commands and dependency
mutation before execution and after a real zero exit. All five CLI rebuild
regressions pass. The final retained-group log SHA-256 is
e99ca19a687467bef93103217337ab551bce7a93ebff8762921f44afeb743eb6;
the CLI regression log SHA-256 is
0c419a01d33d77f0b76711b8b2dd826ed65d63f3139ad8dda618b3acb8193a29.
Original SDK admission and public retained execution remain open. A local snapshot replay attempt correctly rejected source drift
after a command-observation identity edit during that test. Repeat it from a
frozen checkout; this rejected attempt supplies no replay qualification.
The frozen 01285c9b correction passes all three local snapshot checks in
531.896 seconds, including repeated clean replay. Its log SHA-256 is
efc0354f5cb151ab2b4baa08f083d02c14706824cce9fca28e67e6460f3221e3.
Installed-wheel qualification passes from that same unchanged checkout; wheel
identity is sha256:22d78d4992a9e7112679d17f0d28f1169aa84581db88b55e36d392034a88bdd7
and qualified manifest identity is
sha256:3d9e2343fe36961baf9138052ed368d551a4cccad8942958a3c34e545ced13d1.
Native renewal and a separate frozen full local suite remain in progress.
Next admission work must bind producer-backed SDK inputs from the current locks,
observe sealed build exports and integrate source/resolved BOM custody before
independent acceptance and retained-origin receipts. Input observation alone
does not establish those boundaries; public retained execution remains closed.
[ ] PACKAGE-ZIP-001 — Expose deterministic ZIP packaging through the standard lifecycle
Upstream: issue #17.
- Priority: P0
- Owner: Packaging Flavor, native package CLI and archive verification; Goals 1, 4 and 6
- Direction: Provide a selectable portable ZIP provider for accepted artifact closures without bypassing existing lifecycle or release gates.
- Conclusion: Expose exact package-zip authority and deterministic native ZIP construction/verification using the existing typed package contracts. Preserve both SBOMs, specifications, target and tool identities; publication remains separately authorized.
- Depends on: none
- Implementation:
- Add package-zip Flavor authority and standard CLI provider dispatch.
- Verify immutable member closure and typed plan/result bindings, including native metadata and source/resolved SBOM custody.
- Evidence:
- Public package plan/build/verify uses accepted lifecycle custody and rejects stale, changed, missing and wrong-target evidence.
- Synthetic archive fixtures reproduce bytes and reject malformed or altered archives; existing package providers remain compatible.
Local verification: make python-check with the package pattern passes 97 tests;
CLI coverage passes 19, initialization passes 60, and focused ZIP adversarial
coverage passes five tests including ZIP64. make lint format-check and
make skills-check pass. The CLI tests exercise accepted lifecycle custody via
a fixture; installed-wheel and actual downstream lifecycle qualification remain
pending. litai verify accepts authority but rejects the stale project receipt.
The initial wheel check correctly refused an uncommitted revision; the reviewed
local checkpoint will supply immutable Git authority for its retry. This work
has not been pushed, published, or installed into a derived project.
ZIP provider CI follow-up: review the seven changed lifecycle-driver inputs (ZIP adapter/CLI/initialization/templates plus bytecode-cache custody repair), refresh the exact implementation pin through the review command, and refresh documentation authority. Driver identity is now current; all 12 version-authority tests pass through make python-check. Downstream installed framework pins remain unchanged.
Post-merge follow-up: PR #12 merged as
9862b98after its checks passed, but merge CI run 36822853564 failed on Ubuntu/Python 3.11.16: the real-prefix integration test observed1.0.0from the relaunched fixture instead of2.0.0. The retained CI artifact contains the assertion, not pip's successful-command output or the temporary installed files. Ten isolated Linux/Python 3.11 runs and ten native macOS/Python 3.14 runs passed with instrumented real pip and launcher execution. This does not establish a root cause or clear the failed merge qualification. The next diagnostic action is to retain pip output, installed distribution metadata, fixture source and bytecode identity on failure, and reproduce the CI failure before changing updater behavior. No production updater fix is claimed.Migration-batch reproduction: Native macOS/Python 3.14 focused verification now reproduces the real-prefix failure. pip reports a successful 2.0.0 install; installed metadata and source both say 2.0.0, but the executed code constants still contain 1.0.0. The bytecode lives in the external
PYTHONPYCACHEPREFIXused by the test harness, outside the prefix's site-packages tree. This isolates stale external bytecode as the observed mechanism; investigate cache invalidation before claiming the updater is repaired. Preserve this failure during migration; normal CI-qualified landing remains blocked and no release is qualified.Repair in progress: The operator retained full CI as the landing gate. Preserve only the caller's bytecode-cache location and optimization mode in pip's otherwise sanitized Python environment, and explicitly compile upgraded wheel files into that cache. Add a deterministic equal-size/equal-timestamp regression with real pip and launcher execution. Do not delete shared caches, relax assertions or treat a passing PR smoke profile as full qualification.
Repair verification: Native macOS/Python 3.14 passes 14 build-identity/update tests and 18 existing/extended updater tests. The real-prefix negative control reproduces version 1.0.0 with the former sanitized cache environment; the same fixture executes 2.0.0 after the repair, even with optimization enabled and
PIP_NO_COMPILEset. No shared cache deletion is used. Lint/format and driver/ documentation review pass. Full consolidated local and hosted qualification remain required before landing; the operator explicitly declined a CI exception.
[x] ONBOARD-VIDEO-001 — Feature the continuous onboarding video in the README
- Priority: P1
- Owner: root README and onboarding documentation
- Direction: Prominently feature the onboarding video for new users.
- Conclusion: Link the existing public 13:38 film with a preview, chapters and subtitles near the top of the README. Pin public media to its published commit while PR 10 remains unmerged; do not imply a software release or completed audience review.
- Depends on: none
- Implementation:
- Add a prominent watch section ahead of the architectural overview.
- Evidence:
- Verify public media, thumbnail, chapter and subtitle links and check the documentation diff.
- Verification: Commit-pinned MP4, preview PNG and SRT return HTTP 200;
GitHub confirms the chapter file at the same published revision. The preview
was visually inspected and
git diff --checkpasses. This is documentation discoverability, not a claim that draft PR #10 or its framework changes landed.
[ ] CI-MACOS-001 — Separate macOS PR smoke from full qualification
- GitHub issue: #13
- Priority: P0
- Owner: GitHub CI workflow and diagnostic test harness
- Direction: Keep focused macOS installation, launcher, update and native-build PR checks; retain full macOS release-candidate coverage with bounded runs and useful failure evidence.
- Conclusion: Goal 4: separate explicitly named smoke checks from full conformance. Main pushes, release-branch PRs/pushes, version tags and manual qualification retain full macOS coverage. Preserve the existing checkpoint partitions and release gates; do not claim the unexplained self-update failure is fixed.
- Depends on: none
- Implementation:
- Separate the workflow profiles, add bounded test steps and retain verbose failure diagnostics.
- Extend the approved PR profile to one full Linux suite and focused Windows/macOS native installation checks; consolidate platform-neutral gates and cache dependency downloads.
- Bound publication subprocess timeouts at the reviewed policy even when floating-point deadline subtraction rounds upward; add deterministic boundary coverage.
- Measure hosted runtimes and audit redundant mock-heavy tests before further consolidation; a 10–15 minute PR target is not yet demonstrated.
- Evidence:
- Workflow regressions prove event gating, full-suite coverage, smoke selection and diagnostics; focused local macOS verification passes.
- Hosted full qualification succeeds before release or closure of issue 13.
- Local evidence: 13 workflow policy regressions and 13 build-identity/update
tests pass through
make python-check. The exact macOS smoke command passes 69 tests, including real prefix wheel upgrade/re-execution and native C++ compilation/execution. This does not qualify the full matrix or diagnose the earlier Ubuntu update failure. Issue #13 remains open for hosted evidence. - Additional checks: actionlint 1.7.12 accepts the workflow; strict lint, formatting, documentation rendering (121 diagrams), lifecycle driver and documentation authority checks pass. Documentation tooling retains one existing low-severity advisory below its high-severity failure threshold.
- PR-profile refinement: 14 workflow regressions verify nine PR cells versus
fourteen qualification cells, plus the existing four full macOS partitions.
Release/main/tag/manual selection retains complete test coverage, while shared
documentation gates run in Linux conformance instead of three standalone jobs.
pip/npm download caches and bounded pip transport retries do not retry assertions.
Independent matrix failures no longer cancel sibling evidence. All 37 publication
tests pass, including a deterministic clock reproducing the hosted Windows
120.00000000000006timeout overshoot. The subprocess budget is capped without relaxing the test assertion or extending the absolute deadline. The runtime and redundant-test audit remain open; no full hosted qualification is claimed. - Migration qualification repair: Hosted PR run 36873559937 completed the
primary Python suite with one failure: the new profile-selection checkout lacked
the repository-wide
fetch-depth: 0requirement. Preserve full history there too; do not weaken the historical-commit test. All other PR execution cells passed. Replacement exact-source CI remains required for normal landing.
[ ] COURSE-001 — Rebuildable instructional videos and onboarding demo repairs
- Priority: P1
- Owner: onboarding, retained test evidence, instructional video CLI
- Direction: Fix defects exposed by the real course sessions, support repeatable course creation in Literate AI, and publish the courses publicly.
- Conclusion: Repair starter acceptance authority and exact CTest summaries; add a portable course manifest, narration providers, captions, evidence verification and a documented CLI, then refresh the public examples.
- Review correction: The first draft failed the viewing experience: robotic speech, lecture-like dialogue, text-heavy visuals, and missing first-time setup. Goals 1 and 6 require a visual-first, engaging instructional method that children can inherit, while this repository alone owns its two-character comedy and cast.
- Second audience correction: The continuous cut still gives Sam explanatory lines rather than consequential objections. Rewrite as a ten-minute contested pitch: Sam already has C++, Make and tests; LitAI must earn adoption by showing contract/implementation separation, selective Flavors and skills, pinned repo inheritance, brownfield preservation and reviewed updates. Keep product limits visible. Audition more expressive local speech with explicit acronym pronunciation before replacing the existing public film. Obtain the latest available Opus model's independent narrative critique and address it before rendering.
- Second-revision progress: Opus 5.5 (
claude-opus-5-5, confirmed by the provider usage record) reviewed the complete 1,512-word draft and returned revise. Its critique is retained indocs/courses/play/OPUS-REVIEW.md. The revised 1,247-word/54-turn script moves taxonomy to relevant objections, explicitly concedes a lenient oracle can pass wrong code, lets Sam count both framework bugs, aligns capture/narration and ends with a limited trial. This is not a second Opus approval. Local Qwen3-TTS voices and acronym-specific speech text are being auditioned; the existing public movie is preserved. Two narrative/pronunciation regressions and eleven video regressions pass. - Audition evidence: A six-turn, 75.76-second captioned Qwen3-TTS audition
renders and verifies locally; output SHA-256
d80d0b01b40341eae223e860c7a5af75ba386cc7c51689cccfb9a9640a76382a. Local lint and formatting pass. Human listening/voice approval, final pacing, complete shot review and full-film replacement remain required; no claim of improved perceived voice quality is inferred from the media receipt. - Migration handoff: Preserve the revised source, independent review and verified audition package on the public contribution branch, then consolidate the owning video and CI branches into the operator-selected main. Keep original feedback media and incomplete review/qualification states explicit. Do not move private Git history, raw logs, credentials, model weights or disposable tools.
- Depends on: none
- Implementation:
- Fix starter oracle and CTest summary parsing with regression coverage.
- Add reusable video authoring, build, verify, and refresh commands and packaged skill.
- Refresh and publish the course bundle with current demo evidence.
- Replace stock system speech with auditioned natural narration and produce a short review cut before full rendering. User accepted the improved direction after watching the 94-second neural cut.
- Rewrite greenfield with real dialogue, a complete acquisition/install/authentication path, and visual demonstrations rather than bullet slides.
- Make the inherited skill and starter narrative-neutral; retain cast, tone, and two-character choices only in this course package. Nine video regressions pass.
- Produce one continuous video play with character introductions, respectful skeptical-engineer humor, real coding in the middle, and an updates/repository-lineage closing. The 13:38 feedback cut contains 85 turns, visible captions and labeled edited execution replays. Fresh installed-wheel generation, demo-local oracle recovery, 3-pass/2-skip verification, wheel build/verify, and TinyXML2 retained advancement passed; COURSE-003 preserves the discovered framework defect.
- Publish the continuous feedback edition to the authorized public GitHub repository with captions, regeneration sources, provenance and explicit limitations. Public course commit
e118f2cais reachable ondocs/publish-video-courses; an unauthenticated download matches MP4 SHA-256d23c1a39f8ee27423638caee670687c98f498af03c16bcb9cc3fc017f472f822. Public PR #10 remains a feedback draft, not a framework release or upstream OSS adoption. Eleven video regressions, two demo regressions, complete media decode/verification, lint/format, public-export, layout and documentation checks pass. Full audience review and broader release qualification remain separate.
- Evidence:
- Regression tests, installed CLI checks, real greenfield and TinyXML2 demos, and media verification pass.
[ ] COURSE-002 — Accepted-source continuation after an onboarding rebuild
- Priority: P1
- Owner: source cache continuation
- Direction: Investigate the runtime_absent result observed during the greenfield course despite a passing rebuild.
- Conclusion: Reproduce against the release candidate and compare exact admission keys before proposing a fix; do not weaken cache membership checks.
- Depends on: none
- Implementation:
- Reproduce and classify missing membership versus a framework lookup defect.
- Evidence:
- Same-model accepted-source continuation passes or yields an actionable exact mismatch diagnosis.
[ ] COURSE-003 — Bind inherited starter acceptance to its actual contract
- Priority: P1
- Owner: project initialization and inherited acceptance authority
- Direction: The continuous-course fresh run inherited the public parent's richer greeting-card Component but received the simple template's acceptance cases.
- Conclusion: Selecting a starter by name is not enough to select its oracle. The generator correctly followed the inherited contract; independent acceptance failed with missing
messages. Correcting the disposable demonstration oracle proves only local recovery, not a framework repair. Preserve verifier isolation and refuse unsupported assumptions rather than synthesizing expectations from generated code. - Depends on: none
- Implementation:
- Define explicit inherited acceptance ownership and bind it to the selected starter contract.
- Cover simple template, rich inherited starter, custom same-name starter and conflict/refusal cases.
- Evidence:
- Fresh public-parent installed-CLI onboarding completes without hand-editing its oracle, with independent acceptance intact.
[x] ELIXIR-001 — Add Elixir implementation-language support
Priority: P1
Owner: Elixir Flavor, generation skill, Standard command profiles and host toolchains
Direction: Add Elixir as a supported implementation language in litai.
Conclusion: Add a portable dependency-free Elixir tree strategy with explicit BEAM host runtime constraints, shipped initialization assets, and public lifecycle tests; retain Mix/Phoenix as separate future ecosystem policy.
Depends on: none
Implementation:
- Author and ship the Elixir Flavor, specification and generation skill
- Integrate toolchain discovery and Standard build/runtime execution
- Cover catalog, init/add, lifecycle and update documentation
Evidence:
- Focused Python, formatting, specification and skill checks pass
- Real Elixir host smoke passes on an available Elixir/OTP installation
Verification:
make python-checkpasses the 56 flavor tests (including the eight Elixir tests; the original native-runtime skip is now qualified), 59 project-initialization tests, 20 schema-catalog tests, six multi-entrypoint tests and six runtime-driver tests. Lint, format, repository layout, OpenSpec, documentation rendering and pinned SkillEvaluator admission pass. The new skill scores 91.5/100 in both catalog and initialized template.Qualification limits: Native macOS execution passes with Elixir 1.20.4 and Erlang/OTP 29 (ERTS 17.1). The repeated
make python-check PYTHON_TEST_PATTERN=test_elixir_flavor.pyruns all eight tests with no skips, including toolchain discovery and execution of the copied script tree after removal of the generation workspace. Live coding-provider generation/acceptance and native Linux/Windows execution remain release qualification work. The broader Standard suite passed 64 tests before its Rust verifier fixture aborted because the installed Cargo links a missing Homebrewlibllhttp.9.3.dylib;cargo --versionreproduces that failure independently of this branch. No native Rust failure is treated as a pass.litai verifypasses authority, names the three inapplicable gates as skipped, and rejects the previous project test receipt as stale after these authority changes; a current full receipt is not claimed.Next action: Complete for portable script-tree support and macOS native smoke verification. Broader live generation and cross-platform qualification remain release gates; no full release receipt is claimed.
[ ] ELIXIR-002 — Qualify the Elixir lifecycle and host prerequisites
Priority: P1
Owner: Elixir Flavor, host installation, sample and roundtrip qualification
Direction: Implement the remaining Elixir qualification work identified in branch review.
Conclusion: Host prerequisites, native negative/build-system checks and live forward application generation are implemented and executed. Native and live library/consumer qualification pass. The complete project lifecycle passes 328 checks with a current receipt, and three full-framework shards cover all test files and pass 6,101 test entries with 124 normal skips. Public retained Mix importer admission and hosted CI remain open.
Depends on: ELIXIR-001
Parity audit: The user requires Elixir to be a first-class language Flavor equal in features to Rust and Python. Native application qualification alone does not establish this. Adoption detection is repaired. Importable Elixir library projection/acceptance is implemented with native three-OS and live DAG qualification; ecosystem policy remains open. Close those gaps before claiming full parity; retain the existing dependency and execution authority boundaries.
Implementation:
- Enable Elixir sample and roundtrip selection using Standard command profiles
- Declare Elixir and OTP host prerequisites and platform realization policy with shipped template parity
- Add native syntax, artifact custody, Make/Bazel and public lifecycle qualification coverage
- Track exact minimum-version and Linux/Windows live qualification without treating mock projection as native evidence
- Detect Elixir sources in adoption/readiness plans and expose its public selector
- Implement and qualify importable Elixir library Components and consuming applications
- Complete the Rust/Python feature comparison, including dependency and packaging workflows
- Implement and qualify optional Elixir ecosystem build/dependency/packaging authority corresponding to Cargo and Python wheels
Evidence:
- Focused Elixir and affected harness/host-install tests pass
- Real native lifecycle and build-system execution passes on available hosts
- Live coding-provider generation and independent acceptance pass
- Elixir 1.18 with OTP 27 and native Linux/Windows qualification pass
- Full framework test coverage and repository gates pass on the implemented parity features
- The complete project lifecycle produces a current receipt
- Native minimum-version Linux/Windows and live provider-generated library qualification pass
Native evidence (2026-10-05): Six real parser, syntax/test failure, artifact-custody, inert JSON transport, Make and Bazel cases pass on macOS (arm64, Elixir 1.20.4/OTP 29), Ubuntu 24.04 and Windows 11 Pro 25H2 (Elixir 1.18.0/OTP 27.0 on both minimum-version workers). The macOS Elixir focused run passes 16 tests, renewed on 2026-10-06 after the custody repair. Disposable qualification VMs and private disks were removed after retaining evidence; private infrastructure is not shipped.
Live forward evidence (renewed 2026-10-06): Codex
gpt-6.1-solpasses production Standard generation, Bazel build, eight generated checks, independent acceptance and nine execution/replay invocations for the pinned Elixir regenerative-roundtrip target. Its conformance report records 11 checks and aggregate receiptsha256:1039f7279c2a24af8afc8dc1d3af7674dbbd07a42062b6cea0dd31166c5b7973.Framework/package evidence (2026-10-06): Three Make-managed Linux shards cover the complete test-file inventory and pass: 2,485, 2,252 and 1,205 executed test entries, with 104 normal platform/tool skips in total. Read-only isolated discovery confirms coverage of every declared test ID; imported duplicate cases and class-level skips account for differences in discovery/run counts. The native SDK group also passes all 74 real tests without skips. These are qualification checks, not release attestation. The installed-wheel smoke test passes with exact current runtime and shipped-asset parity; wheel identity is
sha256:593d585e2a94bf31d182164fd3ed056a32cd201f0892f96c530e4211dd82e726. Lint, formatting, layout, OpenSpec, documentation rendering, skill validation and driver/runner source reviews pass. A Chromium rendering timeout passes on unchanged retry.Regression repairs: Add full checkout history to the Elixir CI step and update the sample host-toolchain expectation for the fifth language. Native capture now rechecks content on Linux as well as Windows: same-size writes can preserve observable timestamps on the Linux worker. The same-metadata regression and all 17 focused custody tests pass without relaxing read budgets. The slow SDK integration fixture uses a real identity-scoped one-hour grant, within the existing policy maximum; the production ten-minute default is unchanged. The disposable worker uses
umask 0022for the existing strict file-mode tests.Open gates: Live coding-CLI inverse translation is unavailable for every language in the current framework; inert collector fixtures do not establish semantic or regenerative inverse qualification. Hosted CI is authored but has not run. The root lifecycle requires project scope, the complete
*sample matrix and at least 100 checks; the passing 11-check Elixir target is not a replacement root receipt, which remains stale. Mix/Hex/Phoenix and OTP releases remain outside this dependency-free profile.Adoption parity evidence (2026-10-06): Make-managed checks pass 62 initialization cases, 21 monorepo cases, two public adoption-plan cases and 63 retained-harness cases (148 total). Lint, formatting, layout and strict OpenSpec validation pass. Driver and runner review identities are current. Elixir markers are inert, mixed-language evidence is preserved, hidden/generated source is excluded, and a Mix-only tree retains the missing-driver gate. The previous installed-wheel and full-suite evidence predates this additional framework integration change and must not be claimed as current parity proof.
Next parity action (in progress): Complete optional Mix/Hex build, dependency and packaging authority. Native library qualification passes on macOS, Linux and Windows; live provider-generated library/consumer qualification also passes. Keep the portable tree export; library modules live beneath
source/<package>/, with explicit namespace/function import authority. Native import observation compiles only the retained package's.exclosure, checks module provenance and exported symbols, and never resolves an ambient module as a substitute. Independent acceptance uses an identity-bound.exsharness with the existing oracle protocol and unchanged custody checks. Then add optional ecosystem build/dependency/packaging policy corresponding to Rust's Cargo and Python's wheel workflows. Elixir marker detection does not implement Mix execution or Hex dependency custody.Ecosystem implementation boundary: Bind Mix to the selected Elixir/OTP installation before adding the optional build profile. Resolve its script and complete Mix BEAM payload from that installation, invoke it through the selected native Elixir command on every OS, and fail on drift or a different explicit pin. Discovery must not evaluate a project manifest or download Hex. The later authorized build must operate in an external projection and retain the derived dependency graph, checksums, acquired payloads and package evidence; parsing a lock alone is not acquisition proof. Do not expose a selectable Mix Flavor until its execution and evidence adapters enforce those boundaries.
Mix execution design: Use bounded declarative project intent for generated applications and libraries. The authorized builder synthesizes
mix.exsonly in its external projection; admission must not evaluate a generated manifest. Preserve the admitted tree and export the native package plus immutable build evidence. Hex dependencies must retain their exact graph, registry checksums, acquired package bytes and runtime payloads. Native compilation alone does not close the dependency or package custody gates. This is an implementation stage toward the complete ecosystem workflow, not a dependency-free substitute for it.Provider integration implementation: First retain typed compiled-provider inputs in the native producer, checking byte custody before every phase, rejecting module collisions and verifying the declared native public interface. Then bind those inputs to published Standard artifacts and direct generation/ runtime edges. Default library exports retain source, so their compilation must belong to the authorized consumer build; compiled Mix library exports must retain their own dependency closure. These steps do not replace the remaining canonical catalog, generation and portable package/capture acceptance gates.
Compiled-provider producer implementation:
MixProviderLibraryselects independently pinned BEAM bytes and a typed Elixir import surface. Standalone requests bind the exact provider identities, surfaces and byte pins through their builder identity; an unbound request cannot expose provider paths. The native producer checks original and copied bytes around every process, uses a bare VM to reject runtime shadows, duplicate modules and namespace escapes before adding code paths, and verifies exact module origins and declared exports. A framework compiler restores only selected provider paths after normal Mix code-path pruning. Retained provider paths are included in the returned runtime command, and historical verification checks them against the independent artifact/evidence identities. This primitive accepts flat compiled library closures; it does not bind published Standard library exports or acquire a Mix provider's own application/dependency closure. The Standard integration verifies registered exports against their independent blob and publication checkpoint, retain exact direct-interface bindings, compile only each declared package source closure under the existing consumer grant, and includes compiled provider paths in sealed consumer runtime dispatch. Source compilation must retain its own process/input evidence and recheck source, toolchain and publication custody around execution. Historical provider grants do not substitute for the current consumer grant. The default source-provider implementation now compiles dependency-ordered package closures, retains input/process/output evidence, and checks that evidence around subsequent native phases. A bare VM checks actual compiled module names before those paths are exposed. Extending an installed namespace is allowed; shadowing an installed module is refused. Cache admission rechecks published input custody, while source-retired execution uses the sealed consumer closure and its current grant. Native default-library and installed-parent-namespace fixtures exercise actual Standard provider publication and consumer grants. Mix library production now retains its own declared Hex application closure and binds published compiled libraries to current consumer grants. The next action is native minimum-version renewal, then complete provider acquisition/ BOM carry and shared/transitive/mixed-provider resolution for portable capture. Broader retained-library regression also exposed an outdated v2 public-resource catalog entry for the added Mix command profile. Refresh its schema entry and verify the complete catalog before claiming packaged schema qualification.Compiled-provider qualification (2026-10-06): Native snapshot
6b23cf94fa69211c91784894f70e436ba43abc4epasses the compiled-provider case and 45 focused custody/profile/authority checks on minimum-version Windows (147.927 seconds) and Linux (292.296 seconds), without skips. Both use Elixir 1.18.0/OTP 27.0 and explicitly staged Hex 2.5.1. All four native Mix conformance fixtures pass on macOS Elixir 1.20.4/OTP 29 (267.211 seconds), including acquired graph/SBOM evidence, Standard cache/current-grant checks and locked-profile runtime assembly. The new provider case refuses an unbound request, namespace escape and missing public export; it executes after the consumer/provider input directories retire and refuses retained BEAM mutation. The focused Make run passes 127 tests with 11 opt-in skips; it is not a complete root receipt. Layout, Ruff and strict OpenSpec checks pass. The reviewed source TCB issha256:da7f2b56ee66c0ff1ecf2c87c8fe3e4dab9e51f040195211c875295bbc768fdc; the runner pin remains current. Private qualification evidence:sha256:68ee3a4d3d223081ff77781219e481a20417092580c411d5d91d1fe2b8ee48fd. Standard published-provider binding, provider source compilation, Mix library dependency closure, canonical catalog/generation, portable package/capture, latest-version Linux/Windows and full framework/wheel/root-receipt gates remain open. Both qualification VMs are stopped with their persistent workspaces retained.litai verifypasses authority; receipt fails withproject.test_receipt_stale, and locks, source intelligence and HTML observability retain their three configured skips. This evidence does not close ELIXIR-002.Standard source-provider qualification (2026-10-06): Native snapshot
2cafa143a8f467e1f480521d79446b6ef90d034dpasses 51 focused checks without skips on minimum-version Windows (319.481 seconds) and Linux (592.151 seconds), including actual Standard library publication, direct interface binding, consumer-grant compilation, sealed cache reuse, provider-byte drift refusal, retained BEAM tamper refusal and current-grant revocation. Both workers use Elixir 1.18.0/OTP 27.0 with explicit Hex 2.5.1. The provider's generation workspace retires before the consumer build; both consumer source and provider publication retire before retained runtime execution. A separate namespace fixture importsKernel.Math, proving that an installed parent namespace is not mistaken for an exact module collision. macOS Elixir 1.20.4/OTP 29 passes the two namespace/source-provider fixtures (143.240 seconds) and the final pre-build-retirement case (73.410 seconds). The preceding five-case native Mix regression passes in 334.313 seconds. The focused Make run passes 133 tests with 13 opt-in skips; broader Standard, retained-library/import and Cargo-consumer regression passes 79 tests with two opt-in skips. Catalog/CI/source guards pass 32 checks after registering the missing Mix profile public resource in the v2 schema index. Layout, Ruff and strict OpenSpec gates pass. The reviewed source TCB issha256:8240c23d0322318d317203fc32c705223119d7745a9ba51a58cc9235d554c59d; the runner pin remains current. Private evidence:sha256:d9fe3f06ac0666922e29832c2b6dd01ef2d4ad189445558e3294eeca88599e68. Mix library production/own Hex closure, transitive and mixed-provider proof, canonical catalog/generation, portable package/capture, latest-version workers, live Mix generation and complete framework/wheel/root receipt gates remain open. Both qualification workers are stopped with persistent workspaces retained.litai verifypasses authority, reportsproject.test_receipt_stale, and retains the three configured locks/source-intelligence/HTML skips. Default source-library consumer qualification does not close ELIXIR-002.Library implementation evidence (2026-10-06): Typed declarations and schemas support Elixir package namespaces, predicate/bang exports and native import surfaces; generation and inverse guidance preserve those names. Native library execution, independent function acceptance, negative acceptance, missing exports, duplicate modules and consuming applications pass on macOS Elixir 1.20.4/OTP 29. The final focused library run passes 12 cases in 33.640 seconds with no skips; the broader Elixir native/Make/Bazel set passes 30 cases. Native import observation rejects duplicate definitions even within a single file, where compiler warnings alone do not suffice. Struct dependencies compile independently of filename order. Compiler-reported paths are normalized for Windows provenance comparison. Module file manifests use verifier stdin to avoid Windows command-line limits; product requests retain their normal argument-array protocol. Application entrypoint validation remains strict. Affected projection (32), authored import (9), oracle (6), schema (20), recipe (5), CI policy (11), model inverse (16) and library product (5) groups pass. CI now runs all
test_elixir*.pycases on its six Elixir/OTP rows. Wider and live library qualification were pending at that snapshot; the subsequent evidence below closes those gates. Previous wheel/live/full framework identities remain historical evidence until the completed parity source is requalified. The source-retirement and provider-root fixtures run native code; their dependency observation and package-custody lookup are metadata fixtures.Additional library qualification (2026-10-06): The frozen implementation snapshot
7fe1796a37daaa2459fb6b76c28cabc65cc93a38passes all 30test_elixir*.pychecks on Ubuntu 24.04 x86_64, Elixir 1.18.0 and OTP 27.0, in 287.911 seconds with no skips. The Make-managed run includes native retained library import, duplicate-module rejection, independent acceptance, consuming applications, adoption and Make/Bazel cases. Its evidence archive issha256:364441571eac5d951a1e679a04df10aa6f2d22cfc4ec6bc0f2544327c364e1b5. A separate live Codexgpt-6.1-sollibrary run on macOS arm64 passes production Standard generation, native build/import observation, eight generated checks, sealed packaging and three independent function cases. Its aggregate receipt issha256:87c7916db29377535a62ed3197be9eb0a486aedc5ad075380f7dc627a736b5e6; retained private evidence issha256:739a6844d6d2d7c4ff178347c9170cd05f802cad7bc133f17445ee7b90288522. This live proof uses a single library Component; it does not establish live generation of a consuming application DAG or the complete root-project receipt. Windows library qualification was pending at that checkpoint; its passing evidence follows below. The Linux cache was relocated to the disposable data disk after a Bazel extraction exhausted the small guest root disk; source and validation gates were unchanged.Live library-consumer DAG evidence (2026-10-06): A subsequent Codex
gpt-6.1-solrun passes production Standard generation of both the Elixir library and its consuming application, exact native import observation, 18 generated checks, sealed dependency packaging and three independent application cases. The consumer calls the actual retainedMathApi.Add.addfunction through the projected provider binding; generation and runtime dependency edges are both declared. Aggregate receipt:sha256:f738aeb6cc4a5898e73a1e1c355928f79a33c07990aa13143c36ae7ce39c8c88. Retained private evidence:sha256:7076285c48db34f872e63e03b4816c6ca90546d2d9181b8e295519977600def2. This closes the live consumer qualification gap of the preceding single-library run. The Windows minimum-version gate subsequently passes below. Optional ecosystem policy and the complete root-project receipt remain open.Windows library qualification (2026-10-06): Snapshot
9b55525aa86a309af6ce204f647293f0e81091f4passes all 30 Elixir checks on Windows 11 Pro 25H2 x86_64, Elixir 1.18.0/OTP 27.0, in 158.904 seconds with no skips. Evidence archive:sha256:07972a0be49fb10f12ea8f44a0bee0ab41f6882bc90739e46d445b2af7fc1a91. The minimum-version run found a Windows path defect in the independent test harness glob; normalizing the artifact path fixes it. A fresh complete run passes; the production import observer and custody checks are unchanged. Earlier worker setup failures (a dependency-download timeout and absent transferred Git origin) remain in private evidence. The repaired native library group also passes all 12 local checks in 36.292 seconds.Mix foundation evidence (2026-10-06): Exact installation-bound discovery, version/origin rejection, complete shipped Mix application byte guards and fail-closed explicit pins are implemented. Seven contract cases and one real native macOS check pass without skips; discovery and
--versiondo not evaluate a deliberately executablemix.exs. The complete expandedtest_elixir*.pyset passes 38 checks with no skips on macOS arm64 (Elixir 1.20.4/OTP 29, 132.603 seconds) and Windows x86_64 (Elixir 1.18.0/OTP 27.0, 167.651 seconds). The frozen Windows snapshot isd9782cc990e2fdc34e94dfd7b7f5c879e81e85a7; its evidence archive issha256:e294196ab3b50f541a4f71c55cd4eafc45097c7258f21c168406514bee7765a0. Native Linux Mix discovery is not yet qualified. There is no selectable Mix build profile or Hex acquisition/packaging adapter yet. Those are the next parity implementation, followed by renewed complete framework/package qualification and the root receipt.Mix intent/native prototype evidence (2026-10-06): Declarative project intent rejects executable project options, non-Hex dependency authorities, duplicate keys/dependencies, interpolation and escaping package paths. Ten contract checks pass. A real macOS Elixir 1.20.4/OTP 29 prototype fetches Decimal 2.3.0, verifies its acquired archive against the derived lock's outer SHA-256, compiles with warnings treated as errors, and builds a native Hex package. Three decimal-arithmetic cases pass from retained files after the source, compiler, dependency and acquisition workspaces are removed. The loaded Decimal module is verified to originate in the retained package. Private evidence:
sha256:a207f48ba8e6e58efd1e6f9a61e8fae73c8d3e2ba094de9c7cf91cf6c4c1a416. The published Hex 2.5.1 archive cannot loadHex.Stateon OTP 29; a native source build from exact upstream commita43131c26aeca06064959297d737991163f5ac5dworks. Package metadata must include links as well as description and licenses. This prototype validates the execution design; it does not establish Standard plan/authorization, SBOM, cache or package custody integration. Implement those production adapters next and qualify both minimum and newer runtimes without assuming that a version-only Hex probe proves a loadable plugin closure.Hex plugin custody evidence (2026-10-06): Explicit plugin discovery now binds all 132 files in the staged Hex 2.5.1 application to the selected Mix/Elixir installation. It checks native application/version agreement and loadability and origin of state, registry, solver, remote convergence, HTTP, SCM and packaging modules. Discovery does not evaluate project manifests, start Hex or acquire packages. Eight focused guard checks pass, including byte drift, additions, removals, symlink substitution, ambient origins and mutation during observation. Real macOS Elixir 1.20.4/OTP 29 accepts the source-built plugin and rejects the incompatible published installer payload. The native Elixir suite passes 50 cases without skips; repository lint, formatting and layout checks pass. Private evidence:
sha256:cd0e10f8377f8d16260bc437b1a86997085e960449cec94bbe07737f61ba5052. Linux/Windows Hex plugin qualification and production Standard Mix lifecycle, lock/acquisition/SBOM, cache and retained runtime integration remain open.Mix dependency admission and archive evidence (2026-10-06): Production dependency admission now recognizes bounded
mix-project.jsondeclarations, reconciles root and locked transitive names with the source BOM and rejects generated executablemix.exs. Standard lock projection rejects Mix inputs without lifecycle-owned lock/acquisition/runtime evidence. A bounded inert reader accepts native atom-key Mix locks, retains direct and selected optional edges and rejects executable terms, duplicates, incomplete or unreachable package graphs, private registries and unsupported managers. The Hex archive verifier checks actual bytes against both native lock checksums and a complete, regular, bounded archive envelope without extraction or metadata evaluation. Twenty focused cases, 67 dependency-lifecycle cases and 70 native macOS Elixir cases pass; the Elixir suite has no skips. The retained native Decimal 2.3.0 lock and acquired archive pass both checksum checks. Lint, formatting and layout pass. Private evidence:sha256:0fd285fa727640853e9f83626a497823cb39d1eccea8b84a4e1ff43e1dca4efa. Structural lock parsing does not prove native requirement satisfaction or acquired metadata coordinates. The authorized Mix lifecycle must bind those observations, the complete graph, compiled payloads, SBOM and package/cache custody before the optional profile becomes selectable. The supported lock reader currently requires public Hex packages built by Mix; other native build managers require their own bound execution policy and qualification.Authorized Mix builder evidence (2026-10-06): A standalone host-build adapter now verifies exact request/tool/source identities and live revocation at each native phase. It synthesizes immutable native project code in an external projection, freezes the derived lock, checks source-BOM inventory, verifies acquired archive checksums and native metadata/requirements, compiles with warnings as errors and builds a native Hex package. Artifacts retain complete compiled application/dependency payloads, original source, acquired packages, process outputs and request/authorization-bound evidence. Verification checks complete bytes against independently held artifact/evidence identities and validates native metadata and the retained graph again. A separate pre-load inventory rejects duplicate and installed-runtime module collisions before retained code can participate in validation; native load observation checks application versions and origins. Windows origin comparison accounts for native path casing; this new builder is not yet natively qualified on Windows. Fourteen focused authorization/integrity cases and the 84-case native macOS Elixir suite pass without skips. Real builds cover no dependencies, Decimal 2.3.0 alone, and Jason 1.4.4 with its selected optional Decimal edge. Nine product cases pass after source and build workspaces are removed; relocated artifacts verify and compiled-payload mutation is rejected. A JSON runtime-shadow fixture fails the unchanged warnings-as-errors gate and publishes no artifact. Private evidence:
sha256:e4177f759e3a0f05efc2daee6cfdb31c8a396509eeba9fed7c5712622a73bab0. These standalone BuildRequest fixtures use source-BOM inventory fixtures; they do not prove a complete Standard lifecycle or source-to-resolved BOM transition. The next implementation is Standard Mix profile/target/ports integration, including verified source/resolved SBOM, provider-library execution, sealed package/cache custody and current execution authorization. Then qualify native minimum/latest Linux/Windows and live generation before renewing full framework, installed-wheel and complete root-project receipt evidence. Mix remains unselectable until those production lifecycle boundaries are enforced.Mix dependency resolution evidence (2026-10-06): The production CycloneDX adapter now accepts explicit typed Mix source authority bound to the full admitted text inventory. Pre-acquisition validation requires declared root Hex coordinates and source edges; raw manifests, model-generated locks and alternate roots remain rejected. Resolution obtains the derived native lock only from a fresh lifecycle callback, rechecks archive/compiled artifact bytes against independent identities, preserves source references/ranges/hashes and requires the complete selected graph. Foreign host/additional Hex observations and serialized verification flags cannot replace acquired payload evidence. Twelve focused source/graph/identity cases and 67 dependency lifecycle cases pass. The 96-case Elixir suite passes 95 cases with its native Mix discovery case disabled; that case passes separately with explicit native opt-in. Native macOS conformance passes one combined acquired-package, source/resolved BOM, repeated observation, relocated-byte verification, tamper rejection and source/projection-retirement test (45.362 seconds). The real Jason 1.4.4 / Decimal 2.3.0 graph includes its selected optional edge and passes three product requests after retirement. Layout, lint and formatting checks pass. Private evidence:
sha256:51530228e4962ab876cd5635533114978739f49ed34391a6dc9c8979758e1f60. This proves the shared dependency adapter with real native artifacts, not a selected Standard Mix target or live provider generation. The next action is Standard Mix profile/target/ports integration with current plan/authorization, provider and package/cache custody; then native minimum/latest Linux/Windows, live generation, full framework/wheel and complete root receipt qualification.Standard Mix ports evidence (2026-10-06): Typed targets now bind native Mix production to the actual issued Standard intent, indexed grant and finalized plan, with dependency-resolution/network subactions and a required live revocation verifier. The shared producer retains Standard history without equating its canonical source-byte digest with Standard bundle/tree identities or manufacturing a second grant. Fresh BOM observation checks native history, acquired archives and compiled payloads against independent pins. Cache reuse verifies the complete outer publication checkpoint before deriving nested pins; runtime adds exact retained code paths only after sealed-tree/current-grant checks and can materialize after source retirement. Twenty-one focused Standard/native-builder cases pass. The complete Elixir group passes 103 cases with native Mix discovery enabled and no skips. Native macOS conformance passes both standalone and Standard fixtures (106.679 seconds), including sealed reuse, BEAM mutation refusal, source retirement and rejection after current-grant revocation. Dependency/npm checks pass 87 cases; Cargo/Python checks pass eight with one separately disabled opt-in Cargo native case. Layout, lint, formatting and strict OpenSpec checks pass. Private evidence:
sha256:9532c9089cd100a7de4760f97075b224b307f6583541b2271b1fa01b7b664f72. This is Standard ports qualification, not catalog/profile selection or live provider generation. Current Mix ports deliberately reject provider/SDK inputs and multiple entrypoints until those paths have owned authority; exposing a selectable Flavor remains gated on provider-library and portable package/capture integration. Then run Linux/Windows minimum/latest, live generation, full framework/wheel and complete project receipt qualification.Mix profile/projection evidence (2026-10-06): Strict command profiles accept only the declarative
source/mix-project.jsonmanifest and an explicitly bound Hex toolchain. Locked projection preserves tree exports, enforces the selected Elixir installation and Hex version constraints, and assembles production Standard Mix ports alongside Cargo targets. Five focused tests cover profile validation, three-OS projection and missing/incompatible authority. All 44 affected projection/Standard port cases pass with the configured Rust toolchain. The new native macOS test locks a test-owned Flavor, discovers actual tools, assembles the production runtime, builds and dispatches its retained artifact after source retirement (78.395 seconds). The other two acquired-dependency and Standard cache/grant native cases passed in the preceding three-case run; its profile fixture initially failed preparation and was repaired before the focused native rerun. Make discovery exposed two unqualified fixture imports; their corrected module imports pass all 12 dependency-resolution cases. The Make Elixir group passes 112 cases with five explicitly disabled conformance cases; layout, lint, formatting and strict OpenSpec checks pass. This qualifies locked profile projection and runtime assembly, without claiming canonical catalog or live Mix generation coverage. Provider-library and portable package/capture custody remain prerequisites to exposing a selectable Mix Flavor.Minimum-version Windows Mix evidence (2026-10-06): Elixir 1.18.0/OTP 27 loads the explicitly staged official Hex 2.5.1 archive. Native acquired graph, selected optional dependency edges, source retirement, sealed Standard cache reuse, BEAM tamper refusal and current-grant revocation pass. Windows exposed CRLF translation in source inventory; the shared inventory reader now preserves exact UTF-8 bytes, and the authoring fixtures write their required LF format. Twenty-three of 24 focused cases passed after those repairs; production locked projection still required a PE inspector. After staging a signature-verified LLVM inspector, that projection exposed the selected BEAM DLL being passed through executable discovery. The Windows observer now admits exact absolute regular PE DLL inputs without command lookup, rejecting relative paths, arguments, links and invalid headers. All four guards and the actual locked projection/build/source-retirement/runtime fixture then pass (203.578 seconds). The final native snapshot is
fe12f575b08ea846eade69e741ec7e4fd14a6344; the acquired graph/cache fixtures passed on3c36b6cb4c47c77837a360f52df49c8ea34f679a, before the isolated PE-input fix. Twenty-five affected PE/retained-dependency cases and ten source-admission cases pass locally. General Windows worker bootstrap remains unqualified: its package-manager Python inventory query timed out. This result claims the tools exercised by the native fixtures, not full worker readiness. Linux qualification is being reprovisioned with a persistent compiler workspace; its minimum-version tool installation is in progress. Latest-version workers, canonical Mix catalog/generation, provider libraries, portable package/capture, full framework/wheel and complete root receipt qualification remain open. Private profile/Windows qualification evidence:sha256:1a23d33ee7268f04a4925f97db79d1f05211d4cd9d1814578aa87aed8dfb0b00.Minimum-version Linux Mix evidence (2026-10-06): A freshly provisioned Ubuntu 24 x86-64 worker uses digest-verified OTP 27.0 source and Elixir 1.18.0, with the explicitly staged official Hex 2.5.1 archive. All 36 focused checks pass with no skips (741.849 seconds) on native snapshot
fe12f575b08ea846eade69e741ec7e4fd14a6344. The three native fixtures cover acquired graph/selected optional edges, strict source/resolved BOM continuity, locked-profile production runtime assembly, source retirement, sealed cache reuse, BEAM tamper refusal and current-grant revocation. The compiler workspace now persists across worker stops. General sample-worker bootstrap reports unmet capabilities outside this native fixture scope; no broader readiness is claimed. Minimum-version Mix fixture coverage now spans Linux and Windows, alongside macOS coverage. Canonical Mix catalog/generation, provider-library and portable package/capture integration, latest-version Linux/Windows, live generation, full framework/wheel and the complete project receipt remain open. Private Linux qualification evidence:sha256:e54df43f7e6af599e9620275b7ef70e693506f8daaee6484acbc9e0b2a71689a.
| Feature compared with Rust/Python | Elixir state |
|---|---|
| Catalog selectors, init assets, portable generation skill | Implemented and tested |
| Bound toolchain discovery and three-OS host prerequisite policy | Implemented and natively qualified |
| Native build, generated tests, independent application acceptance, multiple entrypoints and source retirement | Implemented; native and live application evidence retained |
| Make/Bazel application exports and inert Windows arguments | Implemented and natively qualified |
| Read-only repository adoption and monorepo candidates | Implemented; 148 affected checks pass |
| Inverse inventory, static behavioral evidence and packaged skills | Implemented; coding-CLI live inverse disabled framework-wide |
| Importable library projection, import observation, independent library acceptance and consuming applications | Implemented; native macOS/Linux/Windows fixtures and live library/consumer generation pass |
| Optional language ecosystem build and locked dependency/package workflows | Partial; typed Mix profile projection, Standard runtime assembly, fresh SBOM/runtime evidence and sealed cache reuse are implemented; default source-library and compiled Mix library consumers are integrated; Mix producers retain their own locked Hex runtime closure; provider acquisition/BOM carry, canonical catalog/generation and portable package/capture integration remain open |
| Current complete lifecycle receipt and hosted CI | Open; previous package/full-suite evidence predates the completed parity implementation |
ELIXIR-002 CI Mix qualification wiring (implemented; hosted results pending): The six declared Elixir/OTP matrix cells currently omit the Mix opt-in and explicit Hex payload. Stage the verified official Hex 2.5.1 archive compiled for Elixir 1.16, under the ignored object tree; bind its archive digest before extraction and pass its exact ebin directory to native discovery. Keep ordinary Make checks and run the twelve native application/Mix fixtures with a no-skips JUnit gate. Windows must expose a native PE inspector for locked Standard projection. Local staging and workflow regression proof precede hosted matrix results; configuring CI does not constitute a hosted pass or a complete receipt.
Local evidence: fifteen staging/workflow checks pass; Make passes 136 Elixir checks in 40.391 seconds with thirteen expected opt-in skips. Layout, lint, formatting (1,312 files), and strict OpenSpec pass. The sequential native runner passes all twelve application/Mix fixtures and two subtests on macOS Elixir 1.20.4/OTP 29 in 446.45 seconds with no skips, using the previously qualified source-built Hex 2.5.1 for OTP 29. The CI result gate accepts the actual native XML. A separate download/staging check verifies the official OTP-27-compatible archive against its existing digest; the matrix uses that archive rather than the OTP-29 source build. Pytest counts subtest reports in suite totals; the gate checks twelve actual fixture records plus zero failures/errors/skips, and the runner overrides default parallel options for these native fixtures. Tested source tree:
22f0b57fcbadfbb5a3a0a658b55bff785b6684eb; source TCB remainssha256:8240c23d0322318d317203fc32c705223119d7745a9ba51a58cc9235d554c59d. Root HEAD/index remain unchanged; both private VMs remain stopped. Private qualification evidence:sha256:88ed34fd4457d369d51ad3843683d64b41969fb1bceba6067b1a473fab387818. This supplies CI wiring and local runner qualification, not hosted matrix results, canonical Mix generation, Mix library/own-Hex closure, portable package capture, or a complete project receipt. The next implementation action remains Mix library production with its own dependency closure. Final verification passes authority/documentation review, reports the stale complete lifecycle receipt, and names three configured skips (locks, source intelligence, HTML observability). End-cycle peer survey succeeds.ELIXIR-002 Mix library production (in progress): Extend the authorized native producer to build libraries without an application entrypoint, binding exact declared package/import authority into standalone requests and retained history. Observe the produced namespace and public symbols against exact BEAM origins, and retain the library application metadata plus its own verified Hex application closure. Typed provider inputs must carry independently pinned application names/versions/bytes, guard both original and copied payloads at every native phase, reject collisions, and retain those paths for source-retired consumer execution. Then integrate these inputs with actual Standard published library exports under current consumer grants and qualify native library/Hex consumers, followed by canonical Mix selection/generation and portable capture.
Implementation now covers native library production and Standard admission of its sealed runtime application closure, including exact compiled import verification. Standalone macOS source-retirement/Decimal closure qualification passes in 72.341 seconds. The two standalone/Standard native cases pass in 201.140 seconds, including producer-grant revocation before consumer build, consumer cache reuse and current-consumer revocation. Focused unit checks pass 55 cases; Make passes 143 cases with fifteen expected opt-in skips. The full fourteen-fixture native regression is still running. Linux/Windows renewal, transitive/mixed providers and shared-dependency qualification remain required. The consumer currently retains compiled application closures and exact published-artifact identities; full provider acquisition/archive/BOM evidence must also survive portable capture. Strengthen that carry and shared Hex closure resolution before exposing canonical Mix selection/generation.
Mix library production qualification (2026-10-06): Snapshot
300c652c73fed1f75058d2f4d2246a945945b6df(treeef5c9d70170008dee5a68adaa745c9ef65d7b39e) passes all fourteen native application/Mix fixtures and two subtests on macOS Elixir 1.20.4/OTP 29 with source-built Hex 2.5.1 in 679.59 seconds, with no skips. The actual result XML passes the updated CI fixture-count/failure/skip gate. New fixtures build a library without an application entrypoint, retain its Decimal archive and compiled application closure, observe its exact compiled public interface, and compile/execute a consumer after both source trees and original provider publication retire. The Standard case uses actual issued consumer authority after historical producer-grant revocation, verifies sealed cache reuse, and refuses runtime materialization after current-consumer revocation. Fifty-five focused checks pass; Make passes 143 cases in 86.610 seconds with fifteen expected opt-in skips. Broader Standard/retained-library/import/Cargo regression passes 113 checks in 23.724 seconds with two opt-in skips. Layout, Ruff (1,313 files), strict OpenSpec and public-export audit pass. Reviewed source TCB:sha256:90d0d9b5b1e55a7896354f62c13a403b26dbc869caa33710cd648a33d80a28b8; runner pin remains current. Bundle digest:sha256:2363836aabf628ea06fa0c2f7ae8a9cac01c56e1cacef4211e737c697814c772. Private evidence:sha256:03f3ab7d2aa8965174c150e7519af632bb9b3570cdda696369c30a2fdfa451c1. Both VM objects are authoritatively Halted/Stopped; their workspaces remain available for minimum-version renewal. Root HEAD/index are unchanged. Hosted CI, Linux/Windows Mix-library renewal, latest-version worker coverage, shared/transitive/mixed-provider qualification, complete provider acquisition/ BOM carry, canonical Mix generation, portable package/capture and full framework/wheel/root-receipt gates remain open. ELIXIR-002 remains active. Provider admission currently consults the producer's latest finalized plan; qualification must also cover consumption of an older sealed publication after a producer rebuild, retaining the exact historical issued context rather than assuming the latest source plan describes the older export. Final project verification passes authority/documentation review, reportsproject.test_receipt_stale, and retains three configured skips for locks, source intelligence and HTML observability. The end-cycle peer survey succeeds.ELIXIR-002 historical-provider repair and minimum-version renewal (qualified): Published Mix libraries must be verified against the exact issued producer plan identified by sealed build history, even after a later producer rebuild changes its latest source plan. Retain finalized plans by identity, keep current execution restricted to the latest finalized plan and live grant, and use historical context only for sealed read-only provider verification. Qualify an actual later provider publication while the consumer continues to select its original library export. Then renew native library/Hex closure and authority guards on the existing minimum-version Linux and Windows workers.
Minimum-version Windows renewal found a real MAX_PATH failure copying a Standard consumer's nested provider application closure. Replace digest-named provider directories with unique ordinal slots in a versioned sealed layout, retaining full provider identities and tree pins in request/history records. Historical verification and retained runtime dispatch must agree on the exact layout, support existing digest layouts, and reject unknown layout versions. Renew the affected native consumer case and structural guards after repair.
Repaired snapshot
1c105bb603f9b0ea61dba4140521acd7dededca7(treeb43ec96c509add95336ec78bb081217dbbfdb471) passes 45 focused guards and Make's 145 Elixir checks in 177.204 seconds with fifteen expected opt-in skips. Both native macOS library cases pass in 772.424 seconds; three compiled/source provider regressions pass in 749.285 seconds, without skips. Minimum-version Windows passes 58 unit/native checks in 427.958 seconds on the repaired layout. Linux's preceding historical-plan snapshot passes 57 checks in 898.973 seconds; Windows also passes three compiled/source-provider native regressions in 402.307 seconds without skips. Linux repaired-layout consumer renewal passes 57 checks in 677.890 seconds, including the actual native rebuild/consumer case, without skips.Reviewed source TCB:
sha256:a0b976ef85dbf63720a78bd1bdd45be1aa43f021a9c94d99b2973044bdf3b87d. Repaired bundle:sha256:4d66312b89e833d81c5b4ee3c0524dfd61277b12cf0c38fa8fc64cf36a1196ff. Private renewal evidence:sha256:4e5eb9c3fdac39a82828be454d1a82b6dc1d1948f0259e2afa2fa8c1dd1a4cba. Both owned VM objects are confirmed Halted/Stopped, retaining their workspaces. Root HEAD/index remain unchanged. Final project verification passes authority and documentation review, reportsproject.test_receipt_stale, and names three configured skips (locks, source intelligence and HTML observability). End-cycle peer survey succeeds; the dirty active branch remains retained work. This closes the historical-plan/path repair qualification, not ELIXIR-002. Next: carry each provider's acquired archives and source/resolved BOM authority into portable consumer capture, then qualify shared/transitive/mixed closures before exposing canonical Mix selection/generation. Hosted CI, latest-version Linux/Windows, installed-wheel/full-framework and complete root receipt remain open.ELIXIR-002 Mix package custody and evidence carry (in progress): Generic qualification capture already retains every linked provider export plus exact source/resolved BOM records. Native Mix exports contain their acquired Hex archives, lock, source and runtime evidence. Prove that existing full-graph carry instead of duplicating acquisition metadata in the consumer. Inspection found a production gap: packaged Mix exports have no owner-bound dependency observer, so retained packaged execution fails closed. Bind each copied root to independently sealed native export identities and the current consumer plan, guarded by complete package custody. Qualify original-source/artifact retirement, current-grant revocation, retained archive/BOM reopening and tamper refusal.
Implemented owner-bound Mix package observers, copying the original native export pins rather than deriving trust from package metadata. Package custody guards the entire linked tree; native verification and current consumer grants guard execution. Native macOS proof passes in 173.340 seconds on Elixir 1.20.4/OTP 29 with source-built Hex 2.5.1. It builds the actual older library publication and consumer, packages their complete two-Component graph under an explicit service-root fixture lock, then retires both original sources and original artifacts. The copied consumer returns 42; captured provider archive bytes and both source/resolved BOMs reopen against retained managed graphs. Package tampering and current-grant revocation refuse execution. This proves native packaging and immutable build/export record carry; it does not claim a full accepted qualification run, portable importer admission or canonical Mix generation. Minimum-version package renewal, shared/transitive/ mixed Hex providers and full qualification-bundle integration remain open.
Exact native qualification snapshot:
85c4aded8c398b98853ddd35f85dafa716e852c2(tree3fa2876016470f1b1c2beb06193eaa1bc147fa0b). Bundle:sha256:b7b7ed835c6724b553524cded5fbdcfbe3907b43cbebbd954e7f6bc81bef4e0f. Source TCB remains current atsha256:f5f81c1253db2f79303c40cb912ffaf85aacbd02af29f5d4a85f4812c418bacf. Private evidence:sha256:caf7bf1d422544f4421ab803029265e9eafd18e8efdf2d9db1f8f6a03a065174. Focused Mix/capture checks pass 63 cases, and affected generation fixture checks pass 17. Final Make passes 145 Elixir cases in 44.217 seconds with fifteen expected opt-in skips. Final broader lifecycle/library/Cargo regression passes 134 cases in 11.686 seconds with two expected skips. Layout, Ruff formatting and lint, strict OpenSpec, public export and end-cycle peer survey pass. Project verification passes authority/documentation review, reports the stale complete lifecycle receipt, and names three configured skips (locks, source intelligence and HTML observability). Both VM objects remain Halted/Stopped; root HEAD/index remain unchanged. ELIXIR-002 stays active. Next action: renew the packaged consumer/source-retirement/retained-BOM proof on minimum-version Linux and Windows, then implement and qualify shared Hex and transitive/mixed provider closures before canonical Mix exposure and full accepted qualification-bundle, installed-wheel/framework and root-receipt gates.ELIXIR-002 minimum-version Mix package renewal (in progress): Resume the retained, owner-verified Linux/Windows workers and qualify snapshot
85c4aded8c398b98853ddd35f85dafa716e852c2with the native packaged consumer, original-source/artifact retirement, captured archive/BOM reopening and tamper/revocation refusal. Include the focused Mix/capture and generation fixture regressions on each platform. Preserve private endpoints and evidence outside Git, and halt both workers after terminal runs. This renews package custody evidence; full accepted bundle/importer and shared-provider gates remain separate required work under ELIXIR-002.Renewal passes on both workers: Linux runs 72 checks in 748.302 seconds, Windows runs 72 checks in 399.862 seconds, with no skips. Both use Elixir 1.18.0/OTP 27.0 and staged Hex 2.5.1 against the exact snapshot above. The native case executes the packaged consumer after original source/artifact retirement, reopens captured acquired archives and exact source/resolved BOM records, and refuses changed package bytes or revoked current grants. This closes minimum-version native package renewal; ELIXIR-002 remains active for shared/transitive/mixed provider closures, full accepted qualification-bundle admission, canonical Mix generation and the remaining matrix/framework gates. Retained renewal evidence:
sha256:f24aed53ebd358ab6d444aa1f8ed665da3f599809cdb45b3630616373ddd8e70. Both owned VM objects are confirmed Halted/Stopped with disks retained. Project verification passes authority/documentation review and reports the stale complete receipt plus three configured skips. End-cycle peer survey succeeds; the dirty active branch remains retained work. Direct forge inspection lists existing unrelated issues/reviews; none was merged or adopted in this cycle.ELIXIR-002 transitive shared native closure (in progress): Qualify an actual Mix library consuming another Mix library, then a consumer selecting both the bridge and original library. Retain the identical shared Hex closure through both imports, execute after source/producer retirement, and refuse retained dependency tampering. This tests exact-byte deduplication; it does not authorize substituting independently compiled dependency payloads with different bytes.
The new native fixture exposed a second request check that omitted the produced library's public surface when providers were selected. The check now binds the same complete input selection as outer admission. Corrected fixture source namespace and retained-path assumptions without weakening production guards. Native macOS proof passes in 113.074 seconds (Elixir 1.20.4/OTP 29/Hex 2.5.1). A real leaf with Decimal is imported by a bridge library; the final consumer selects both publications and shares exactly identical application bytes. It returns 42 after all sources and producer artifacts retire, then refuses retained indirect Decimal tampering. This lower-level native proof does not replace Standard graph/export authority, independent compilation conflict handling or complete portable qualification-bundle admission. Make passes 146 Elixir checks in 42.548 seconds with sixteen expected opt-in skips; all twelve final CI-policy checks pass. Layout, lint, formatting, strict OpenSpec and public-export gates pass. Source TCB is reviewed and current at
sha256:a863dd19d23c06080bc255d85e901325dae93e39d78b84ff3e200e9a26c7300f. Exact renewal snapshot:46e50ebea9c24a657732a6fe96d617a7dae19946(tree9b1caa065c37456218c41ae59a2e4fa03da441f5), based on the package snapshot above. Bundle:sha256:5912a170ff29a9384b3d3125231c74e897fa2ea6ce41ad3ee68c53dfb3c30409. Private evidence:sha256:9867d7ac89946083edb59f7cb41709dfc722073461b1d5c2a88e6d9a762471da. Root HEAD/index remain unchanged. Documentation authority review is current; verification passes authority, names the stale complete lifecycle receipt and three configured skips. End-cycle peer survey succeeds. Both workers remain stopped after the earlier package renewal, with disks retained. Next action: renew this transitive native fixture on minimum-version Linux and Windows using the exact snapshot, then qualify Standard transitive/mixed graph authority and independently compiled shared Hex conflicts. Canonical Mix generation, complete bundle/importer admission, hosted/latest-version matrix, installed-wheel/full-framework and complete root receipt gates remain open.ELIXIR-002 Standard transitive graph/package qualification (in progress): Native direct/transitive closure renewal runs on the owned minimum-version workers against snapshot
46e50ebea9c24a657732a6fe96d617a7dae19946. Add a distinct native Standard three-Component fixture with a locked storage library, service library and application. Issue actual indexed build grants, retain each published dependency identity, revoke historical producer grants and retire source before the next consumer builds. Package the complete graph, retire all original artifacts, execute under the current root grant and reopen exact source/resolved BOM records for every Component. This is native build, publication and packaging proof; complete accepted qualification-bundle admission and canonical Mix generation remain separate gates.Minimum-version native transitive renewal passes: Linux runs 72 checks in 491.788 seconds, Windows runs 72 checks in 283.451 seconds, both without skips on Elixir 1.18.0/OTP 27.0/Hex 2.5.1. Both use the exact frozen transitive snapshot above. This completes lower-level native transitive/shared-byte closure renewal; Standard graph and complete accepted bundle gates remain distinct.
The Standard three-Component native graph passes on macOS in 166.196 seconds (Elixir 1.20.4/OTP 29/Hex 2.5.1). Corrected fixture grant-wrapper access, dependency ordering and explicit graph driver input. All three actual indexed builds succeed after prior producer grants/source retire. Package assembly retains the exact leaf/bridge publication closure; the copied root returns 42 after every original artifact and source is removed. Captured source/resolved BOMs validate against retained managed graphs for all three nodes. Current root revocation refuses packaged execution. Add this sixteenth native fixture to CI. Inspection also identifies the next production integration gap: qualification capture decodes generic, Cargo and NPM build observations, but has no typed
literate-ai/mix-build-evidence@1branch. Implement and qualify that inert retained-byte decoder before claiming complete portable bundle admission or exposing canonical Mix generation. Cached history must remain distinct from current consumer/root execution authorization. Platform renewal of this new Standard fixture, mixed provider graphs, independently compiled shared Hex conflicts, hosted/latest-version matrix and wheel/framework/root receipt gates remain open under ELIXIR-002.Exact Standard graph renewal snapshot:
369d778a7f6de0ca9a64caf8dbda43596e9c8a5d(tree3e69c68868e245182f3338ba71ebd65d10a17c3b), based on the qualified lower-level transitive snapshot. Bundle:sha256:5d2733754b8fcf12ddf5fb1142f9aecc28c6833c41a000efc5cb891bfd023a6a. Standard graph private evidence:sha256:6970f3b123d35071498784bd176c94566ee81e83044db10a921d551d561e361c. Minimum-version lower-level transitive renewal private evidence:sha256:30728d431c7bdda86927ce440c4f32006afe239a1b77437ffb0f5292d7dffb25. Final Make passes 147 Elixir checks in 40.932 seconds with seventeen expected opt-in skips; affected fixture and CI-policy checks pass all twenty cases in 0.331 seconds. Layout, Ruff formatting/lint, strict OpenSpec and public export pass. Documentation review is current; verification passes authority, names the stale complete receipt and three configured skips. End-cycle peer survey succeeds; current unrelated forge items remain untouched. Both owned workers are confirmed Halted/Stopped, disks retained. Root HEAD/index remain unchanged. Next: implement the typed Mix capture decoder and qualify complete retained native archive/lock/request/authorization/provider history reopening without host execution. Renew the frozen Standard graph fixture on Linux/Windows in parallel with that work, then address mixed/shared conflict authority and expose canonical Mix selection/generation through full accepted bundle gates.Standard graph minimum-version renewal now passes on the exact frozen
369d778a7f6de0ca9a64caf8dbda43596e9c8a5dsnapshot: Linux 72 tests in 745.313 seconds and Windows 72 tests in 396.722 seconds, both without skips on Elixir 1.18.0/OTP 27.0/Hex 2.5.1. Both owned VMs are Halted/Stopped with no running VMI and persistent disks retained. These results qualify the earlier graph/package implementation; they predate the capture decoder.ELIXIR-002 native Mix capture admission (in progress): Implement a bounded, inert native Mix build decoder using canonical directory-export bytes. Bind historical request/grant and issued origin plan separately from current build authority, acquired Hex archive checksums and lock, native process streams, compiled provider closures and exact file/runtime inventories. Existing generic capture authorization assumes request toolchain equals language compiler; Standard Mix deliberately binds the complete Hex/Mix toolchain instead. Admit that distinction only through the exact typed Mix target identity and require native Mix evidence for such requests. Reject substitution before execution; captured history grants no new build or runtime authority. Renew the frozen earlier Standard graph snapshot on owned Linux/Windows workers independently.
Implemented the bounded native decoder and threaded independently supplied current command contracts and retained provider exports through run/product reopening. Preserve original issued Mix build observation provenance on cache reuse; the current authorization check still binds the renewed plan and grant. Convert archive/lock dependency failures to the stable capture error boundary. Native macOS proof passes in 172.041 seconds for all three actual builds, expired-origin cache reuse under renewed authority, no extraction/execution, and six rehashed negatives (archive, stream, provider BEAM, runtime module, public interface and failed phase). Private capture retention/replay is finalized below; this is build admission proof, not a complete accepted qualification run. Owner regressions pass 115 cases with two expected skips; final reader/Cargo/NPM checks pass 39 and 29 cases. Make passes 147 Elixir cases with seventeen expected opt-in skips in 42.514 seconds. Layout, Ruff, strict OpenSpec and public export pass. Minimum Standard graph renewal archive:
sha256:6cda2d5e95adba010559d0e83c568fd7558c6577b55cd3eecce4a6f2d5f948a7. Next: qualify a complete accepted Mix run through portable bundle/importer admission, then renew the decoder on minimum-version workers. Mixed providers, independently compiled shared Hex conflicts, canonical generation, SDK/package integration, hosted/latest matrix and current wheel/framework/root receipt remain open. ELIXIR-002 remains active.Reviewed lifecycle TCB:
sha256:8273e95419551a3b7771ad19280b7a56e9fc05c27e76a457ed21acd3e3aece13. Frozen capture source snapshot:9ad4fa9cace5f7dab5e0bf914c6a8da65f2a8ccf(tree927845492aa0ea4e27d58e55ae2444937128fab4), bundlesha256:4a522bf33458917d9a51d149cd0d8451a46bfba3927c71e3e7e685677081cf83. Full declared verification passes authority/documentation review, reports the stale complete project test receipt and three configured skips. End-cycle peer survey and read-only forge inventory succeed; no work is collected, and unrelated issues/reviews remain untouched. Active branch HEAD/index remain preserved; both owned VMs remain stopped with their disks retained.Final native replay proof passes in 171.756 seconds. Protected actual native capture records and export bytes reopen all three builds with current source after original source/artifact removal, under extraction/execution refusal mocks. Sealed private capture evidence:
sha256:f0bb19dda4c9a05b42317506c7035aad2fb9386564d375087489a3e883433566. The next unchecked action remains complete accepted Mix run/importer admission.ELIXIR-002 accepted Mix lifecycle/capture integration (in progress): Drive Windows renewal exposed platform-dependent path ordering in directory exports and native inventories. Normalize producers to relative POSIX string order, add mixed-case and nested-prefix regression coverage, and renew native capture qualification. Preserve canonical reader checks and exact content pins.
The repair passes 71 local reader/builder/lifecycle checks with two existing optional skips; layout, lint/format, strict OpenSpec and public export pass. The preceding accepted-lifecycle snapshot renews Linux native qualification with 72 checks in 859.987 seconds and no skips. Repaired-source native renewal on all three hosts, installed-wheel smoke and the full Python suite are active. Current project authority verifies; the configured root receipt remains stale. Repaired native macOS capture passes in 187.351 seconds. Windows passes archive admission but exposes case-folded provider BEAM traversal in the runtime module list; normalize the remaining native module producers and renew that proof. The filename-order repair passes 28 reader/native-builder regressions with no skips. Full-suite execution stops at the self-hosting snapshot-drift guard because the BEAM producer repair changed source during the proof. Rerun that gate from stable reviewed authority; do not treat it as a suite pass. Final BEAM traversal renewal passes native Windows with 100 tests in 394.631 seconds and no skips, and macOS graph/capture with one test in 174.831 seconds. Linux passes 100 checks in 753.815 seconds on the preceding archive-order snapshot; final BEAM-source renewal is active. An actual initialized project now provides a noneditable installed Standard binding, current Component lock, independently authored native baseline, verifier-owned library oracle and parity profile for the remaining two-run proof. Its driver must be rebound through the reviewed operation after the final current wheel qualifies.
provider generation through a locked test-owned Mix library profile and the actual Standard native test, execution, package and independent acceptance stages. Retain real source, process and lifecycle records before retiring custody, then reopen them through the portable capture/importer boundaries. Begin with a dependency-free Mix library to isolate lifecycle provenance; acquired Hex and transitive compiled closure remain separately qualified native evidence and require full accepted graph coverage before broad completion. Preserve current execution authorization, library oracle isolation and all source/BOM/recipe/driver bindings. Canonical Mix selection stays gated until the accepted qualification bundle is verified.
Native composition exposes a real projection/assembly defect: Mix libraries correctly project a Python verification runtime around the selected Elixir command, but the adapter required the outer runtime identity to equal Elixir. Bind library runtime identity to both phase driver bindings and retain the exact embedded Elixir command checks; direct application runtimes still bind Elixir. Correct manual fixture runtime identities and add projected assembly plus mismatched-driver refusal to the existing projection regression. This repairs authority interpretation without weakening tool or grant custody.
The projection/assembly regression passes all fifteen affected cases. Current native library/consumer and Standard transitive capture graph regression passes two cases in 343.518 seconds, including the corrected driver identities. A provider-generated dependency-free Mix library completes actual native generated tests, import observation, packaging and three independently authored acceptance cases; the typed accepted lifecycle reopens. Source and generation records also reopen after original custody retirement. The private helper initially omitted the disabled indexer's record capture, which the production qualification adapter already attaches. A fresh generation run now retains that index evidence before cleanup; no missing record is synthesized. Full run/receipt/parity/importer admission remains a separate required gate. Make passes 147 Elixir cases in 43.843 seconds with seventeen expected opt-in skips. Layout, Ruff lint/format, strict OpenSpec and public export pass.
Fresh live capture now retains the real disabled-index observation. A bounded canonical archive reopens the actual accepted lifecycle after all original generation workspaces and artifact/package roots are removed. Pure readers revalidate source and generation provenance, indexed authorization, source and resolved BOMs, native Mix build, generated tests, execution, copied package processes and the separately authored library oracle under extraction/execution refusal mocks. Native lifecycle identity:
sha256:270cec938fd867a20944171ae748060b0aac57f932696acbad0190b8f03af9f8. Record archive:sha256:ed4d1f61a41d8bd8bebfde8f9894988bad920eae7318074114164e97fad8195f. Protected native evidence:sha256:5a5518af8bf2e184659e5f10bf1ff61401690fc763c3bd136da8e18636df9908. This closes accepted native stage/capture integration for one dependency-free Mix library. It does not establish two-clean-run receipt/parity or importer admission; that remains the next unchecked acceptance action.Current source snapshot:
66f753504ed506cf6d6c9dd06719b273d5cd7896(treea42d2a926ba893b977a95bafe6b7da26e55dce6b), bundlesha256:82002b0ed241bf98af1fbaaf0f628761c04948af00682365c2fa8e5921b6585b. Reviewed driver TCB:sha256:18e18ac065bdc1bd3eea64efdb337e86aa46b536b07bf7028f871d10eda7014f. Full verification passes authority/documentation review, names the stale full project receipt and three configured skips. The installed-wheel gate requires a clean Git revision and refuses the active dirty branch; run its exact gate from a detached private qualification snapshot under the approved worktree root instead. Retain that worktree while its installed qualification is live; no landing, branch cleanup or collection is authorized. Native minimum-version decoder/driver renewal now runs on both owned workers against the same frozen source, after fresh VM/VMI/Pod UID-chain and readiness validation. Reap these jobs and halt both workers when they finish; retain their persistent disks.ELIXIR-002 canonical Mix selection (in progress): Two actual forced-generation native Mix runs now produce real receipts and independent parity, and their full library products reopen from bounded archive bytes after scratch retirement, with host execution and extraction disabled. Qualification identity
sha256:a3eac9a3207e293e49a16e5a41ead50433e016d3754c63f49217e9b98501a023; archivesha256:5b1cc887679688488fd0a03710691233d05272ec731fa94d600e89ee3121c848(1,688,578 bytes). This clears the complete-bundle gate for canonical Mix Flavor and generation skill exposure. Implement root/template parity and prove catalog selection and initialized-project installation in an isolated development tree while the preceding snapshot's full framework suite remains live. Importer admission still needs legitimate signed source promotion and independently reviewed consumer authority. The signed-human source review is pending. Canonical catalog regression passes 11 cases in 23.425 seconds with no skips; the complete initializer module passes 62 cases in 215.103 seconds with no skips. Layout, public export, lint, formatting, strict OpenSpec, documentation rendering, and root/template skill validation pass. The owner gate correctly detects initializer mapping drift in the lifecycle-driver TCB; review its nine added catalog-mapping lines and record the new pin before installed-wheel qualification. The root full framework suite remains on its unchanged preceding source snapshot; do not claim its receipt covers this new catalog.ELIXIR-002 current-toolchain Hex staging (in progress): Build the exact pinned Hex 2.5.1 source with the selected native Elixir/Mix installation for OTP 29, retaining the OTP 27 prebuilt path. Verify source bytes and bounded archive members before execution, isolate Mix homes, bind the native command, and preserve an existing plugin on refusal. Prove refusal regressions and actual source builds on all three platforms before advancing the newer CI cells to Elixir 1.20.4 / OTP 29.1.1. The current Linux Bazel disk refusal is an infrastructure issue; rerun using a task-owned cache on the data disk. The corrected helper builds actual Hex 2.5.1 source successfully on macOS, Linux and Windows with Elixir 1.20.4 / OTP 29.1.1. Its exact source archive is
sha256:386936947eec8023eeff5c6ee936ea093a7a67592b93bc66eabd32eb9628c7a2. An initial versionless archive filename caused a fail-closed member refusal; the versioned filename repair is covered by regression. Six staging cases and twelve CI pin cases pass without skips; lint and formatting pass. Native discovery independently loads the macOS result as Hex 2.5.1 and binds its 132 files. Latest native worker suites and Linux/Windows plugin discovery remain pending. The Linux Bazel retry passes one actual conformance case in 45.815 seconds using a cache on the task-owned data disk. Do not convert the original full-suite failure into a full latest-platform pass. Canonical Mix installed-wheel qualification passes against revision2aeb08d167e0047627ba5c368c09d31416458d50; wheel identitysha256:c0ec8e10f481b44e6a49a00ed217777bd6cee6526e8d7746f498113984a663db. An independent noneditable installation observes distributionsha256:4f94a07ecaa795b0cdfb385cae4d0c701f5be347e77c756b92b5933c88aa76c2with 985 members. This completes wheel/catalog qualification, while a new canonical recipe's native generation and legitimate importer admission remain separate gates. No published or hosted-CI attestation is claimed.ELIXIR-002 Mix library launcher guidance repair: The canonical two-run qualifier accepted its first native run, then refused the second generated launcher: unconditional parallel compilation redefined a module already loaded from the retained Mix runtime and the launcher halted on its warnings. The selected Mix skill repeated the default source-only compiler instruction. Correct only that build-system skill: Mix library launchers call the retained compiled exports directly; standalone source-only library launchers retain their closure compiler. Preserve module custody, warning failures, native tests and independent acceptance. Validate shipped-template parity and skill contracts, then renew real two-run qualification with the new recipe identity. Retain the failed capture; do not edit generated source or fabricate a successful receipt. The repaired skill and shipped template are byte-identical at version 1.0.1. Eleven catalog/initialization cases pass in 7.002 seconds without skips. SkillEvaluator passes the root entry point, selected Mix skill and shipped template. Two fresh provider-generated native runs now pass and their full qualification products reopen without host execution. Qualification identity
sha256:e4d9008269fae57f6afff338d71cdc3ec31f7a716bf101d784869958e11f977ebinds archivesha256:fb23fadca976c374f2ce4ea47362c8e33d87bd7c54c6a13fc316b23a9f01a524. This proof uses the accepted canonical Mix wheel with a reviewed project-owned 1.0.1 skill override. Updated shipped-wheel acceptance and importer admission remain separate gates; the earlier 1.0.0 failure remains retained. Updated shipped-wheel smoke now passes for reviewed source6f4f53db91fe54d079a2a187efb10894290e0eb3, wheelsha256:83c9553b73a463ba71fa2b0a687d7c069e6602ca430d94cb2773f370adca6418and installed distributionsha256:8385d85ebf7749fa0eeb53e622b45384def924dd8ca2ef39241ab5b057628cc1. The dedicated noneditable qualification environment uses that retained wheel. Its fixture's exact reviewed Standard rebind plan was applied through the public CLI; accepted-source membership and receipts remain stale until native renewal. The earlier successful two-run archive retains its original binding. A fresh empty library initialized through the accepted installed wheel selectslang-elixirandbuild-mix, receives the shipped 1.0.1 Mix skill byte for byte, and resolves the same installed Standard distribution without an override. This proves installed selection/template custody; it does not replace native generation or importer admission.ELIXIR-002 independently compiled shared Hex conflict: Native macOS qualification passes using the real checksum-pinned Decimal 2.3.0 archive: independently compiled debug-information variants both execute arithmetic returning 42, while the authorized consumer refuses their divergent compiled bytes with
builder.mix_provider_conflict. Versions, source checksums and application metadata remain equal.make python-check PYTHON_TEST_PATTERN=test_elixir_mix_shared_qualification.pypasses one native test without skips. The six native CI cells now include this fixture and require all seventeen tests without skips; Linux/Windows renewal and hosted CI results remain pending.ELIXIR-002 mixed-provider dependency inventory custody: The source-provider compiler now pins its compiled-dependency inventory across the native probe, alongside existing source, dependency-byte and consumer-authority guards. A regression reproduced inventory replacement before the repair and now proves refusal with
builder.mix_provider_changedafter exactly one probe, before source compilation. Five focused custody tests pass without skips. Reviewed lifecycle-driver identity issha256:8d94fa3a49d77e3422eecd73b955e08cb0e7a2644fbbd4ec2ab5c4a4babbee9c. Full native mixed-graph qualification remains separate.ELIXIR-002 mixed graph assembly requirement: Before explicit composition,
ArtifactBuildGraphrequired every manifest to use its selected exact build-driver identity, and Standard project assembly refused multiple drivers. A default source-only Elixir library binds the Python tree-build driver while a Mix producer binds its native Hex/Mix driver. Qualification must preserve those measured bindings; coercing manifest identities would not prove a complete mixed package graph. This shared framework limitation also applies outside Elixir. The next mixed graph action is to establish explicit authority for a composite driver and package execution, then prove the native graph with source and producer retirement. Separate successful import fixtures do not satisfy this gate.ELIXIR-002 active-branch integration (2026-10-08): The prepared canonical Mix catalog, shipped Mix skill 1.0.1, pinned Hex source staging, shared native Hex conflict fixture and dependency-inventory custody repair are integrated into the active branch. All 26 integration paths match their retained candidate byte identities. Strict lint and formatting pass on the nine affected Python files; the five source-provider custody tests pass on the integrated branch. The earlier checkpoint repair run completed 3,093 tests with 11 skips and requested a fresh complete run; its subsequent Make exit was 2, so it is not full-suite evidence. The next action is fresh integrated regression and owner-gate qualification. Direct management-host SSH succeeds, but VM jump connections still fail; latest remote native results remain uncollected. Mixed graph assembly, retained importer admission and required human source review remain open.
ELIXIR-002 explicit composite graph authority (implemented; native proof open): Mixed-driver graphs retain each Component manifest unchanged and bind the exact canonical driver set through a composition identity. Standard assembly derives this set from finalized manifests; missing, extra, changed or unordered driver bindings refuse. Single-driver graph bytes remain compatible. Twenty-seven artifact contract tests and six wire-schema tests pass in the isolated candidate. The fresh integrated full Python run stopped after sixteen tests because the localhost HTTP fixture could not bind a TCP socket (
Operation not permitted). Native Mix library qualification independently refuses its TCP filesystem lock; documentation validation cannot reach npm audit. These environmental failures remain failures. Native mixed-provider packaging with source and producer retirement, full regression, retained importer admission and human review remain required; composite graph implementation alone does not close their gates.ELIXIR-002 composite graph integration evidence: The explicit composition contract, v2 schema and Standard graph assembly are now integrated into the active branch. Six Make-managed affected groups pass 115 tests without skips: artifact contracts (27), wire schemas (6), Standard lifecycle (40), retained library exports (7), package/release contracts (21) and root integration (14). Full lint/format, layout, OpenSpec, public-export and current driver/runner checks pass. Current reviewed driver identity is
sha256:a8417977e1701830caa83f0281bf3ed05d4a7c057865a0f755f7b569b6add012. Native mixed-graph execution is not established by these unit regressions. Latest worker results, current installed-wheel native renewal, retained importer admission, human source review and a complete current project receipt remain unfinished.After composite integration, the Elixir regression again passes 154 tests with 18 opt-in/tool skips. Read-only all-declared verification passes authority, reports three configured skips and refuses the stale receipt. It is not a complete qualification pass.
ELIXIR-002 human source review accepted (2026-10-08): The user accepted the exact reviewed integer-addition library contract. The source inventory remains
sha256:c5aa6ffddbef83eede20c60d4327b31df8b93e8714ad4aa9497e482606e9d33c. Publiclitai spec attest,spec derive,spec reviewandspec acceptverified its local source attestation, recorded the actual human decision, resolved the static behavior uncertainty and accepted the reviewed graph. Signed review identity issha256:492d1096a1e4fc8a665c743b763c96b23b631fe3557e7d8d1bc535b9edd26119; accepted specification identity issha256:f2227944064754f169a71992b04673878942409bb8297c83d63850ab05893fd5. The accepted authority is intent only and explicitly still requires native qualification. Qualified provider promotion, current installed-wheel renewal, retained importer admission and a current root receipt remain open.ELIXIR-002 native composite graph renewal (in progress): Add a real three-Component fixture combining a default source-only Elixir leaf, a compiled Mix library with an authenticated Hex dependency and a compiled Mix consumer. Preserve their distinct measured driver bindings, retire original source and producer publications, then execute the retained root package and reject revoked current authority. Extend each native CI cell to require all eighteen fixtures. Qualify this exact source in a private remote checkout with independently measured installed toolchains; leave the worker's existing repository and host tools intact.
ELIXIR-002 mixed graph fixture and execution limits (2026-10-08): The native three-Component fixture now combines a source-only Elixir leaf with a Hex-backed Mix bridge and Mix application. It requires exact two-driver graph composition, execution after all original sources/publications retire, inert reopening of retained indexed grants/plans/builds and source/resolved BOMs, and refusal after current consumer-grant revocation. CI requires all eighteen native fixtures without skips. The actual local native attempt builds the source-only leaf then fails at bridge
deps.get: Mix cannot acquire its TCP filesystem lock (:eperm). Direct SSH inspection on the authorized remote host succeeds and confirms Elixir 1.18.3/OTP 27; a private qualification directory was prepared, but automatic approval review rejects source-transfer terminal input because approval is required and the session policy isNever. The transfer receiver exited without writing an archive; the existing remote checkout is unchanged. Native mixed-graph proof, current installed-wheel renewal and independently authorized retained importer admission remain open. Human intent acceptance is already recorded and does not need repeating. Current-source local regression completes 155 Elixir tests in 46.270 seconds with 19 native/opt-in skips; the twelve CI-policy checks pass without skips. Lint, formatting (1,316 files), lifecycle-driver and runner reviews, repository layout and public-export checks pass. These partial gates do not replace the eighteen required native fixtures or the complete current project receipt.ELIXIR-002 execution renewal and Bazel pin repair (2026-10-08, in progress): Execution access is restored. The current mixed source/Mix three-Component and existing transitive graph fixtures pass on macOS: two tests, 324.367 seconds, no skips, including inert retained evidence reopening after producer retirement. Earlier latest-version worker logs were collected and independently rehashed: Linux and Windows each pass 126 tests without skips on the older catalog snapshot. The complete current source snapshot was transferred and all 2,354 file hashes verified in a private remote checkout. Qualification staging exposed Bazelisk selecting latest Bazel 9.3.0 outside a Bazel workspace instead of the repository's 9.2.0 pin. Repair the staging helper to bind the explicit repository version; renew native gates with private caches containing only the selected version.
ELIXIR-002 renewed execution evidence (2026-10-08): The Bazel qualification stager now explicitly selects the repository's 9.2.0 pin before downloading or executing tools. Two refusal/environment regressions pass. All eighteen native fixtures pass without skips on macOS Elixir 1.20.4/OTP 29.1.1 and an authorized Linux host running Elixir 1.18.3/OTP 27. This includes the mixed source/Mix graph and independently compiled shared-Hex conflict. Exact latest-version Linux and Windows VM renewal is running; exact 1.18.0/OTP 27 jobs are prepared separately. Current runtime/shipped-asset wheel qualification passes for private revision
c7b63131b1f2d33668f0f410a990f04a96c94726, wheelsha256:94e98e638c37391b48de61f2ae66cf2b1c06e7f54c23574b0ae4c039cf60ddaa, installed distributionsha256:971609d12afb197aa46d510bdeff43119ba729f161eec04134985cb5acd2b31c. Subsequent staging-helper tests and task-status prose are outside those installed runtime assets. Two real forced-generation Mix runs pass independent parity; their complete products reopen from bounded archived bytes after both producer scratch trees retire. Qualification:sha256:e956b64cd58e4b2030f360f05c6a6b8bf2b3f7e0ec1fea458f06b99b7ce06dff; archivesha256:fca1fde13bc13bee1427f90f1d007056e29a402b936bd232b3fd2a0949b0077c(1,690,021 bytes). Public signed source acceptance creates a source-free project, but its first native qualification refuses generated empty license metadata. Resolve the operator's package-license choice without changing the accepted exact-sum behavior contract, then renew the reviewed generation inputs and qualify that promotion. Independent retained importer admission, full framework completion, hosted CI and the current complete root receipt remain open. Documentation rendering and changed-skill evaluation pass; read-only project verification passes authority review and reports the stale root receipt.ELIXIR-002 current native and accepted-source evidence renewal (2026-10-08): Current latest-version Linux and Windows VM runs each pass all eighteen native fixtures without skips on Elixir 1.20.4/OTP 29.1.1 and Bazel 9.2.0. Complete logs independently match durable supervisor identities
sha256:0b57f20770c40d1947c9f67788816381b2083a8e823a511d3c6d7bd806c67f93andsha256:902ae93e2f1cb7fc729b4b9d72fac1008b12ca0019bfb789971d1bf7ca490c50. Exact-minimum Windows Elixir 1.18.0/OTP 27.0 also passes eighteen without skips; its verified complete log issha256:3b2bf948c86ebd9350bc06a578801a4c1b2409149b1afdaceb864e3fc43de547. Exact-minimum Linux is in progress; exact-minimum macOS and hosted CI remain open. Reviewed private qualification-package metadata uses Apache-2.0, matching the repository, without changing the signed behavior contract. Public native source promotion now qualifies with two genuine clean generation runs:sha256:2c8d95320c7baf629ab1d94375c87fb61b6b1015275a123763079c2b0a7bface, qualified projectionsha256:7bfdcfbbe12c44f9c8ea13b66f0136e23d2ec10d2db8f0aad126928efbe34d61. Its bounded archivesha256:7ad08e428a848cd3e142460ed268df007db4ef29ba058d1bef108d3386410b29(1,676,885 bytes) reopens both complete products against independently resolved current provider authority without execution or temporary extraction. A separate guarded compiled Mix consumer performs an actual runtime library call after producer and consumer source retirement and rejects changed provider BEAM bytes withbuilder.mix_artifact_changed. This proves native consumption; public retained Mix import/admission service qualification remains open. The complete root lifecycle failed on an empty durable split-service generation; a subsequent bounded diagnostic reports timeout and coding CLI network routing failures. Retain both failures; neither is a passing root receipt. The full framework suite continues without recorded failures. Next qualification action: finish and collect the running minimum Linux and framework checks, then resolve the live model connectivity failure before renewing the complete root lifecycle.ELIXIR-002 exact-minimum macOS renewal (in progress): Build OTP 27.0 into a private prefix from its independently pinned source archive, stage checksum-verified Elixir 1.18.0 and source-built Hex 2.5.1, and run the same eighteen native fixtures with Bazel 9.2.0. Preserve ambient host installations. Require a terminal zero result, eighteen JUnit cases with no failures/errors/skips and an independently verified complete log before claiming this matrix cell.
ELIXIR-002 complete-root renewal (in progress): The real durable split-service diagnostic retry passes all 30 checks after the earlier model transport failures. Run the public complete-project rebuild with a new object/checkpoint root and external runtime custody. Reuse generated-source cache bytes only through the unchanged current admission, native build, test and acceptance gates. Preserve the failed attempts and the standalone diagnostic; neither substitutes for the complete fresh sample matrix and current root receipt.
ELIXIR-002 root metadata guidance repair (in progress): The fresh root lifecycle with verified Bazel 9.2.0 fails closed when the service-stack generator emits a framework test-manifest integer outside the canonical signed 64-bit range. The recipe envelope already specifies manifest shape but omits numeric representation bounds. Add the existing metadata limit explicitly to generation guidance; keep specification-defined application arithmetic and the canonical validator unchanged. Add a regression proving oversized manifest numbers remain refused and bounded boundary values remain valid. Renew the reviewed driver, affected Make checks, wheel and live sample/root evidence after this core prompt repair. The preceding full suite passes 6,108 tests in 13,578.280 seconds with 57 normal skips; it predates this repair and is not fresh post-repair attestation. Current native Elixir builders and catalogs pass all eighteen fixtures without skips on all six local latest/minimum OS cells. Exact-minimum macOS complete-log identity is
sha256:f87d9c98951969ba4d4f4af14efc9859febe7dc595cce61d90c02d733f98bb30; exact-minimum Linux issha256:d101e0e0e3e2925711007c3c2bba4ec06deb7ab94ba43cebc22edffc3b5228aa. Both owned qualification VMs are halted with persistent workspaces retained. A separate retained consumer also passes eight actual runtime vectors, including signed 32-bit extremes with signed 64-bit sums, after source retirement and still refuses provider BEAM tampering.ELIXIR-002 metadata repair qualification renewal (2026-10-08): The renewed noneditable wheel passes smoke verification with identity
sha256:a96c1e65060d27acf1e4e40dad8d89692f1687599044783937324a1559555ca9. Reviewed Standard rebind and documentation review preserve the signed human acceptance and package target. Public source qualificationsha256:6cacd46dd9f12f1aa6e59b4c92df3473eeec8356cbabae9b2798d98f20c0a04dpasses two clean runs and current-provider archive reopening, including a separate inert reopening with producer scratch absent throughout. The native consumer passes eight signed-integer vectors after provider/source retirement and refuses changed provider BEAM bytes. This remains a standalone consumer proof; public retained Mix importer admission is still open. The complete fresh root lifecycle passes 328 checks. Public receipt update installssha256:383e0f7ee131d8479a0ce8efb76569117cbcdce6304f0bf6300918e0da010a6b; all declared gates pass with three configured skips. Documentation rendering passes all 728 Mermaid diagrams. Two complete Linux framework shards pass 2,634 tests (92 skips) and 1,205 tests (14 skips), with independently verified complete logs. The remaining shard fails closed on a guest Rust library symlink introduced during disk-space repair; preserve that failure, replace compiler directory links with real mount points, and retain the successful eight-test native recheck. Install the missing native SDK prerequisite and repeat the complete remaining shard with a fresh checkpoint. The owned Linux worker remains active for that work; the Windows worker remains halted. Hosted CI and public retained Mix importer admission remain separate open work.ELIXIR-002 complete local framework renewal (2026-10-09): The fresh final Linux shard passes 2,262 tests in 4,063.924 seconds with 18 normal skips after the guest path repair and native SDK prerequisite installation. Its complete retained log verifies against
sha256:d494f9d43ae945ffacfef15124414c69470e3e305f113f3ad98e9a2d5ef6404a. All three disjoint shards pass and cover all 592 test files: 6,101 executed test entries and 124 skips in total. Imported duplicate cases and class-level skip accounting prevent treating this as a unique-test count. All 74 native SDK entries execute in the fresh final shard, and the native retained-Cargo test that refused the unsafe guest symlink now passes in that complete run. The failed attempt and separate eight-test native recheck remain retained. The current root receipt, new-wheel source qualification and retained Mix consumer proof are unchanged; hosted CI and public retained Mix importer admission remain open. Local qualification is not release attestation.
[x] WINDOWS-INSTALL-001 — Qualify native Windows installation and CLI startup
- Priority: P1
- Owner: framework host-install adapter and Windows documentation
- Direction: Test installation and basic execution on a native Windows host, and fix concrete failures.
- Conclusion: Keep prerequisite validation intact while reporting inaccessible declared tool-search paths through the typed host-install diagnostic contract; document a PowerShell source-install command. Validate isolated package installation without changing global native tools. This supports PROJECT.md Goals 1 and 4.
- Depends on: none
- Implementation:
- Report inaccessible declared native PATH augmentation through HostInstallError and add regression coverage.
- Document the native PowerShell install entry point and record isolated CLI qualification.
- Evidence:
- Focused host-install and installer regressions pass on Windows.
- Isolated installation, doctor, onboard create, project validate and launcher startup pass; record any unmet native prerequisites.
- Evidence: Native Windows/Python 3.11 runs five focused tests via
python -m unittest tests.critical.test_host_install tests.smoke.test_install_litai. Ruff lint and formatting pass. The installed editable CLI runs help, doctor and onboard-create planning. Native installer preflight now exits with a clear diagnostic instead of a traceback on inaccessible declared tool directories. - Installed-wheel evidence: A clean non-editable wheel at
6e633a7has SHA-25622f7e7b7e714fd547dccdb9afa7875588843b777d75c9658bb400a3a6258146a. Fresh isolated wheel installation resolves all dependencies;pip checkpasses. Outside the checkout, the private Windows launcher reports its embedded exact revision, imports only the installed package, and runs doctor, acknowledged onboard-create, canonical project validation, starter lock and starter plan. This proves core CLI operation, not native host-tool or generated-code readiness. The sandbox's default Git Schannel transport fails authentication; this test uses a process-only OpenSSL transport configuration, without changing host Git. - Qualification limits: Live coding-provider generation is outside this core
install/CLI qualification slice. The current restricted session cannot inspect all declared
native tool directories; GNU Make is absent, so
make python-checkcannot run. The initial isolated build-dependency install did not complete; installing the exact pinned setuptools then using--no-build-isolationcompleted the editable install. Tracker/peer survey skipped because the namedghCLI is unavailable. Existing CI runs these tests on all supported platforms and performs installed wheel qualification on Windows. Require its exact-branch result before landing. - Final CI evidence: Run 37274186953
completes successfully with all 20 jobs passing at exact implementation/test
commit
e4f58b7ead9d0319c051d5e7ff3f6d30a48ff159. Windows, Linux and macOS pass full tests/conformance, native installation/uninstallation/reinstallation, and non-editable installed-wheel verification. Python 3.11/3.12/3.14 cells are covered by the existing supported matrix. - Next action: Complete for core installation and CLI startup. Live generated applications remain a separate authorization and qualification surface.
- CI review repair: The first full run at
618e5dc(run 37271309114) passed Windows platform smoke but rejected stale documentation authority during Linux sample-composition validation. Review the narrow source/documentation diff, record the lifecycle TCB throughscripts/review_lifecycle_driver.py --record, then record documentation throughlitai project documentation-review . --record. Both authored pins are current; this is required review bookkeeping, not a relaxed gate. The regression now drives public host observation with a denied filesystem boundary and verifies fail-closed typed readiness on every platform.
[x] CI-FIXTURE-001 — Wait for POSIX child termination before fixture cleanup
- Priority: P1
- Owner: remote sample fanout end-to-end fixture
- Direction: Cross-platform qualification exposed a macOS race in the existing worker process-group termination test.
- Conclusion: Wait at most five monotonic seconds for the child signal-handler marker inside the temporary fixture, preserving the termination assertion and production supervisor behavior.
- Depends on: none
- Implementation:
- Add bounded marker polling before temporary directory cleanup.
- Evidence:
- Focused fixture regressions and lint pass; native POSIX CI verifies the real process-group case.
- Diagnosis: macOS shard 3 at
42955d8returned the expected supervisor timeout status, but checked the child marker before its signal handler finished. After the fixture removed its directory, the child raised FileNotFoundError writingchild-stopped. The failure is in fixture synchronization; production process-group termination is unchanged. - Local evidence: The focused fanout, host-install and installer batch runs eleven cases on native Windows: ten pass and the POSIX process-group case skips explicitly. Ruff lint and formatting pass. Lifecycle-driver and documentation reviews remain current. Native Linux/macOS execution remains required in CI.
- Native evidence: macOS Python 3.11 shard 3
explicitly reports the real worker process-group termination test passing at
e4f58b7; the complete 20-job full matrix passes, including Linux POSIX coverage. - Next action: Complete. Preserve the same termination assertion and bounded fixture lifetime; no production supervisor behavior changed.
- End-of-cycle survey: Supported peer survey and read-only GC planning both
report
project.peer_work_tracker_unavailablebecauseghis absent. No branches, worktrees or external reviews are collected or merged.
[x] WINDOWS-INTEGRATION-001 — Integrate Windows fixes with manual migration documentation
- Priority: P1
- Owner: framework documentation integration and reviewed authority
- Direction: Commit, push and land the Windows fixes while preserving newly merged manual 1.0.x migration documentation.
- Conclusion: Merge current main without rewriting history, retain both changelog outcomes and migration guidance, then recompute the documentation review marker through its supported command. Source behavior remains the previously qualified Windows fix.
- Depends on: none
- Implementation:
- Resolve changelog and documentation marker conflicts while preserving both contributions.
- Evidence:
- Focused Windows regressions, authority validation and review pins pass locally.
- The integrated pull request passes required CI before landing.
- Integration evidence: Merge
origin/mainat7d897bewithout rewriting history. Preserve the manual 1.0.x reinstall guidance and succession ADR, together with the Windows diagnostic and POSIX fixture changelog entries. Runtime, test and installer source is unchanged frome4f58b7, whose complete 20-job matrix passed. The focused eleven-case Windows batch passes with the POSIX-only case explicitly skipped; Ruff checks and formatting pass. Project validation and the supported documentation review pass; lifecycle driver and test-runner review pins remain current. - Next action: Push the integration commit, verify its required CI, and land through the authorized writer using merge semantics. Integration CI remains pending until evidence is observed.
[ ] WINDOWS-PROBE-001 — Preserve Windows architecture in isolated Python wheel installation
GitHub issue: #63
Priority: P1
Owner: Framework Python dependency installer
Direction: Fix the Windows offline installer target probe failure on CPython 3.11.
Conclusion: Retain only Windows architecture discovery inputs alongside the existing controlled environment; keep target identity and wheel custody validation strict. Supports PROJECT.md Goals 1 and 4.
Depends on: none
Implementation:
- Preserve PROCESSOR_ARCHITECTURE and PROCESSOR_ARCHITEW6432 in the installer subprocess environment.
Evidence:
- Reproduce the failure and pass actual offline installation, cleanup and tamper checks on native Windows CPython 3.11.
Observed evidence: The unmodified offline-install test failed at target parsing. After the repair, all 14 real-installer and shared fixture tests pass, including target identity equality, wrapper tamper rejection and cleanup.
Next action: Land through exact-commit CI, then backport to the current supported release before qualifying a replacement non-editable distribution.
Landing evidence: PR #35 merged to main. The first main push run 37365769181 reported failure only because hosted runners were never acquired for
profileand four macOS jobs during a capacity shortage; no test ran or failed. Rerunning the failed jobs completed all 20 jobs successfully at merge commit44b690ae.Next action: Complete.
Full 1.2 restart checkpoint — 2026-10-04
The work/complete-1.2 branch continues from public main adf9195a, combining
the later local lifecycle, scheduling and release repairs with the now-landed ZIP
provider, repository succession, native-worker fixes and CI/test reorganization.
It carries file changes onto public history; pre-export Git ancestry is not imported.
The full existing 1.2 scope remains mandatory, including RELEASE-INTEGRATION-003.
Completed checks on this combined working tree: 86 FINALIZE tests, 104 release
tests, 28 scheduling tests and 37 package-related tests. These are focused checks,
not full qualification. The package pattern did not select test_zip_packaging.py;
its independent rerun remains pending. The old-tree complete run failed after
147 tests at a 10-second isolated interpreter-layout probe during self-hosting replay.
That failure remains unresolved evidence and must not be described as a pass.
Resume with the four restored admission/transfer/wire regressions, explicit ZIP and shared-cache checks, real command LINK/PACKAGE/FINALIZE integration, and a complete combined-tree run. Refresh reviewed authority markers after integration review. Production grants/provisioning, full CLI scheduling, real shared LAN cache qualification, exact platform/installed/hosted CI, collateral and release gates remain open. Newly carried regressions and extracted support fixtures still need combined-suite review; this restart checkpoint is not ready for release.
Restart progress, 2026-10-05: merged current main (Windows installer fixes and
manual 1.0.x migration guidance) into this branch. All 69 branch-added or changed
test modules plus test_zip_packaging and test_shared_artifact_cache ran: 555 of
556 passed, two skipped. The one error exposed ten modules the carry had restored
whole under tests/critical although the October 2026 test audit had deleted
(five) or trimmed (five) them. Those copies are removed, applying the audit
decisions to pre-existing cases. Behavior that 1.2 changed or added is retained:
the kept smoke/E2E cases now expect LINK in capability probes, configure the
result_sources return transport and check remote PACKAGE dispatch equality; the
SemVer prerelease case joins the release E2E module; and four minimal critical
modules name their invariants (reserved ACCEPT admission, ACCEPT runtime custody,
FINALIZE execution policy and retained source-cache trust). New capability-profile
wire round trips and mock-composed factory wiring cases were not kept, matching
the audit's treatment of the equivalent ACCEPT cases. The remaining 54 new 1.2
test modules have not yet been reviewed against the test policy; the read-only
review is recorded under TEST-POLICY-1.2-001 and deliberately not yet applied.
Complete combined-tree run, 2026-10-05, at 32b6cb9f on macOS/Python 3.13 via
make python-check: 632 modules completed with one error and 11 skips. The
10-second interpreter-layout probe failure from the old tree did not recur. The
error was test_standard_action_authorization setup: its planning fixture
assembled the factory without the explicit result transport that LINK-advertising
workers now require. The fixture now supplies it and both dependent modules pass.
FINALIZE command-controller authority, 2026-10-07: the real LINK/PACKAGE/FINALIZE
command chain no longer uses synthetic permission callbacks. The receiver parent
checks file grants before staging (scope, revision, privilege, revocation) and,
after staging, measures the same portable runtime the child measures. No grant, a
grant naming another runtime, and an atomically revoked grant are each refused by
the parent; the exactly planned grant succeeds. A describe-only FINALIZE dispatch
returns the exact grant request from the receiver without executing, matching the
independently computed request, and the controller refuses descriptions for any
other input, revision, privilege set or builder. Grant issuance stays an operator
action by design (ADR 0044: the controller is not a fleet provisioner). Remaining:
a litai command that drives the describe step once full CLI rebuild scheduling
exists, operator-side signing and placement guidance, and the rest of the 1.2
scope listed above.
CLI rebuild qualification, 2026-10-07: tests/e2e/test_cli_model_free_rebuild.py
runs real litai rebuild --update-receipt on a freshly initialized starter with a
deterministic claude stand-in at the model-provider boundary; admission, Make
build, generated tests, packaged execution, independent acceptance and receipt
commit are real. A second case adds private action-execution configuration and
an admitted command worker running the built-in receiver: the CLI admits it
through hardware and capability probes and dispatches the controller-side actions
to it. That case exposed a composition defect: remote phases retain evidence in
local ports, but only qualification installed the bounded recorder, so every CLI
rebuild with admitted workers failed at BUILD. The factory now installs the same
bounded recorder whenever action workers are composed. Observed cost: one rebuild
issued 89 capability probes for 5 dispatches because admission re-probes on every
revalidation; record for QUALIFICATION-ECONOMY-001. Remaining: phases beyond the
controller-side actions need a private receiver startup that composes configured
BUILD/TEST/EXECUTE/ACCEPT/PACKAGE/FINALIZE workers for real projects.
Reference receiver, 2026-10-07: python -I -m literate_ai.standard_receiver --config PRIVATE.json composes configured BUILD/TEST/EXECUTE/ACCEPT/PACKAGE
workers from one bounded literate-ai/standard-receiver@1 operator config whose
byte identity binds every measured child launcher. Contracts come from the
admitted request but must pass the portable-starter@1 policy: exactly the
packaged Make/Python argv for this worker's own private tools, single-Component
plans only, no providers, entrypoint variants, libraries or native layouts.
Through litai rebuild with the controller's local phases disabled, BUILD, TEST,
EXECUTE and ACCEPT all completed on the worker. The run then failed at the LINK
handoff with security.authorization_expired: admission revalidation (storage
health plus a full capability-probe subprocess, about two seconds) runs inside
guard callbacks on every record and blob read, roughly 18 probes per action and
about 160 here, so a one-Component rebuild took about 7.5 minutes and outlived
its 5-minute execution grants. Maintainer decision: run the full storage-health
and capability probe once per action boundary (before dispatch and before any
result is admitted, both already in the command dispatcher); per-read guards
keep the cheap deadline, route, private catalog and hardware-observation checks
through CommandActionWorkerPool.require_current. A worker change during an
action is still refused before its result is admitted. The reference-receiver
CLI rebuild now passes in about 160 seconds with every local Component phase
disabled, and the admission/controller regression (93 cases) passes after two
controller-test stubs gained the new indexer attribute. FINALIZE in the
reference receiver and the operator grant flow are next.
FINALIZE through the CLI, 2026-10-07: the reference receiver now also composes
PACKAGE and FINALIZE (parent grant authority, oracle copy from private config,
portable child runtime) and offers --print-profiles and
--issue-finalize-grant. The planned "fail, grant, rerun" flow cannot work:
FINALIZE grants bind the exact input record, and BUILD authorization identities
carry their issue time into export, artifact-graph, link and package identities,
so every rebuild produces a new FINALIZE input (verified by diffing two runs).
Maintainer decision: wait inside the rebuild. On grant_unavailable the
controller describes the exact request on its held slot, writes it to the
private grant_request_path, and re-dispatches every two seconds for up to
grant_wait_seconds; the receiver refuses a missing grant before staging.
Project-level remote refusals previously escaped litai rebuild as tracebacks
and are now typed CLI errors. test_finalize_waits_for_the_operator_to_grant_the_described_request
passes: all six Component/project phases run on the receiver with local phases
disabled, the operator grants the described request mid-run, and the receipt is
committed. Remaining for this item: cross-host toolchain identities, a litai
surface for operators beyond the receiver module, multi-Component plans, shared
LAN cache qualification, and the platform/CI release gates.
Cross-host toolchains, 2026-10-07: done for fully remote command phases. The
factory projects the closure from the admitted BUILD worker when BUILD, TEST,
EXECUTE and FINALIZE are remote; the reference receiver's BUILD worker advertises
its Standard tool inventory. test_controller_without_the_tools_uses_the_worker_toolchain
runs the full CLI rebuild with a failing controller make and commits a receipt.
Defects fixed on the way: tool-mode capabilities omitted PACKAGE/FINALIZE
profiles; configured tool profiles re-captured observations per read; worker
dependency capture re-probed each tool per dependency (55 s to 9 s). Remaining
cost: about 50 full capability probes at action boundaries (~3.5 s each under
load) make a one-Component remote rebuild take about seven minutes; record for
QUALIFICATION-ECONOMY-001. Still open: real separate-host qualification, mixed
local/remote phases with a remote closure, multi-Component plans, an operator
litai surface, shared LAN caches and release gates.
Probe cost, 2026-10-07: the one-Component remote rebuild drops from about 421 s
to 174 s. The remote toolchain closure's discovery reads use the cheap admission
check (full capability probes 56 to 33; selector and dependency observations
still probe the worker directly). Receivers import jsonschema only to validate,
and macOS Mach-O closure levels are inspected concurrently with identical
results (cold observation about 10 s to 5 s). Maintainer decision: receiver tool
custody follows the action-boundary rule. ReceiverTools fully measures Python,
Make and the receiver interpreter at process start, after any metadata change,
and before a receiver emits a response, which it withholds if a tool changed
(tests/critical/test_standard_receiver_custody.py); reads in between compare
executable metadata only. A describe falls from about 3.1 s to 1.5 s (84 tool
subprocesses to 19). Remaining cost: the dispatcher's two full probes per action
and four cold dependency observations.
Dependency fact cache, 2026-10-07: the receiver's optional dependency_cache
persists the macOS dyld_info fact memo across receiver processes, keyed as in
process (inspector digest, image content digest and symlink chain, or boot
session). It must lie outside the workspace and CAS; a malformed file is ignored.
A warm observation of the Python closure falls from about 4.5 s to 0.2 s with an
identical result, and the one-Component remote rebuild from about 174 s to 141 s.
Linux and Windows now share the memo and file (schema
literate-ai/dependency-facts@1): ELF image and candidate-header facts and PE
import lists are keyed by inspector digest, resolved path and content digest.
Only macOS was measured; Linux and Windows gains await real-worker runs.
In-band capability attestation, 2026-10-07: dispatch boundaries no longer launch
a separate --describe probe. Requests carry the admitted capability; the
receiver measures it in process before and after the action and attests it, and
an unattested response falls back to full revalidation. Probes in the
one-Component remote rebuild fall from 29 (38.6 s) to 3 (4.2 s); health checks
stay at both boundaries (29 checks, about 1.5 s).
Local-first release qualification, 2026-10-07: release policy qualification
declares the platforms (N) and actions (M) a release must provide. litai release check (by default when declared) and the new litai release qualify cover each
platform x action with the release host, then one workers.json worker per
remaining platform, then CI only for what remains or when ci.mandatory is set.
rc and merge-pr accept an exact-revision qualification record in place of CI
when it covers every cell without CI. This repository declares linux, macos and
windows. Windows workers now run the gate natively: actions may declare a
windows_argv, dispatched through PowerShell over OpenSSH, and this repository's
is scripts/windows_release_gate.py, which runs CI's Windows steps (preflight
passed on both configured Windows workers). With every worker at the exact
revision, this host, ubuntu-24.04 and windows-11 cover the release without CI.
Automatic worker sync, 2026-10-07: each worker gate now runs in a dedicated
<workspace>/release/<repository> checkout that the controller syncs to the exact
revision with an incremental git bundle over SCP, leaving the operator's checkout
alone. Measured on real workers: first full sync 30 s (windows-11); re-sync of an
unchanged revision 2.0 s (ubuntu-24.04) and 8.5 s (windows-11); one new commit
2.4 s and 11.3 s.
[ ] FREEBSD-001 — Add first-class FreeBSD native workers and targets
Native receipt qualification exposed a missing _sqlite3 extension despite a
working Python command. Declare Python SQLite in the FreeBSD OS Flavor, map it to
py312-sqlite3, and require both native package registration and an in-memory
query through the current interpreter. Twelve host-install checks pass. The
existing declared native-package installer repairs the disposable guest with
py312-sqlite3 and its two dependencies; the probe and existing installed CLI now
start successfully. This is a capability repair, not full worker/distribution
qualification. Preserve the original import failure and invalid catalog attempts.
Current native renewal at d833ebd0 stopped after 232 tests (one error, 26
skips) because the real SSH-receiver fixture exhausted its capability deadline.
An isolated rerun reproduced the same 60-second failure. Receiver import and
code hashing complete independently; even bash -lic true hangs on this native
host. Select direct literal SSH invocation for explicit FreeBSD action workers
and make the real receiver fixture declare its actual host. Preserve existing
Linux/macOS login-path behavior, request bytes and deadline/cleanup gates; renew
the actual native fixture and complete suite before claiming qualification.
Four local SSH checks now pass in 3.350 seconds, including real receiver
capability, dispatch and indexing through the FreeBSD native-shell seam, literal
special-character arguments and workspace cleanup. This is controller-host
transport evidence; actual FreeBSD renewal remains pending.
Installed-wheel qualification correction: production initialization explicitly selects the FreeBSD OS Flavor, but the wheel smoke comparator still defaults to Linux outside macOS/Windows. Correct the comparator, cover FreeBSD versioned platform names and preserve existing platform expectations, then execute the actual native installed-wheel gate. This does not qualify retained lifecycle receipts or release publication.
Native installed HTML verification at 8f572841 exceeded the 300-second
per-command harness deadline after two full gate passes. Captured passes took
about 123 seconds each, with authority and lock checks making steady progress;
the worker retained ample resources. Give FreeBSD the same finite 900-second
installed-command budget already used on Windows, retain diagnostic tails and
qualify the new exact wheel. The failed run remains failure evidence.
- GitHub issue: #67
- Priority: P1
- Owner: OS Flavor, worker contracts, host tooling and native lifecycle
- Direction: Support FreeBSD as an explicit native execution platform, including remote or virtualized workers, without mislabeling it as Linux.
- Conclusion: Implement platform identity end to end, including registration, realization, probes, health, execution, package and acceptance custody. Existing platform regressions and real native proof are required.
- Depends on: none
- Implementation:
- Add FreeBSD OS and target contracts and Flavor; implement CLI registration, probing, paths, toolchains and alignment; support native storage and pressure checks; qualify isolated build/test/artifact and retained lifecycle execution.
- Add a real FreeBSD pkg provider with exact selected target ABI, explicit dependency coordinates, payload/ownership/mode projection, bound native tool and independent metadata/content/checksum inspection. Prove actual construction and package-tool inspection on FreeBSD before public qualification.
- Evidence:
- Real FreeBSD SSH registration and alignment pass; native build/test and failed-input/test rejection are retained; cleanup is bounded; existing Linux/macOS/Windows suites pass; exact installed wheel and CI qualify the change.
Native package implementation in progress: project accepted files and both BOMs through a FreeBSD-specific provider, bind the static native pkg executable and ABI, construct only in isolated staging without installing, and independently inspect the resulting native archive. Retain original source/Component authority; reject missing dependency coordinates, hooks, extra files, ownership/mode drift and rehashed manifest/payload substitutions. Native pkg format inspection follows the selected tool version's upstream contracts, including its actual file-checksum encoding. Retained-provider/public CLI composition and per-unit source/ports qualification remain separate required integrations. Format references are the selected pkg 2.8.4 file-checksum implementation, native manifest emitter and package construction owner. Ten portable checks pass, including bound-plan/result substitution, rehashed payload/metadata/native-checksum changes, owner/mode drift, hooks, duplicate/extra members and trailing tar/XZ data. Both actual native construction cases remain unexecuted on this macOS host; the dedicated FreeBSD slot is still qualifying the earlier retained receipt/archive revision. No native pkg pass is inferred. The package-provider regression group passes 58 checks (two explicit native-only skips) before the final executable-mode/tool-drift additions. Native construction, full-current-revision regression, installed and public-dispatch qualification remain open. Keep this development provider out of qualification claims until the actual FreeBSD construction/query/payload cases execute successfully. All 14 initialization checks also pass with the new provider authority and bundled template. Public/provider composition must reopen current accepted lifecycle custody; parsed batch/plan/result assertions alone must not supply admission. Next public integration in progress: select pkg through its actual Flavor, preflight the native tool before rebuilding, and delegate construction to the existing accepted-lifecycle observer with both BOMs. Scope initial construction to a local native host target; refuse remote package dispatch and named/cross targets until separately qualified. Verification inspects the bound plan and native bytes without granting publication or reconstructing lifecycle admission from batch JSON. Native and installed public-path evidence remain mandatory. The public CLI group passes seven checks (one explicit native-only skip), and the package-provider group passes 64 checks (three native-only skips). A further optional-codec regression proves ordinary CLI import works without lzma while native inspection refuses without it. The final native-format group passes 13 checks with its two explicit native-only skips. Native/public installed execution remains unqualified until those cases run on FreeBSD.
Native package inspection follow-up: reject unplanned extended tar attributes, including ACLs, file flags and extended attributes. Python's tar reader exposes these separately from normal ownership/mode fields, so checking only those fields can admit metadata outside the accepted projection. Preserve bounded standard PAX encodings only when they reproduce the exact accepted member fields. The regression first reproduced acceptance of an unplanned file flag after rewriting the outer package digest. After correction, thirteen portable format checks pass (15 selected tests with two native-only skips), including ACL/file-flag/xattr refusal and accepted standard PAX encodings. Actual native format compatibility remains part of the pending FreeBSD construction gate.
Native construction at 2152af97 fails its first actual package inspection;
the dependent public CLI group therefore did not run. A separately retained
diagnostic archive (SHA-256
bacd265e033efe95df4559b05dd6a3fff428e517a834ab11a754dc5bf88a2ff1)
matches pkg 2.8.4's source: metadata entries have zero timestamps and numeric
root ownership, while payload entries use fixed numeric IDs 65534 with mandatory
root/wheel names. Installation resolves those names. Correct that precise
encoding rather than accepting arbitrary numeric IDs or absent names. The tool
also emits shlibs_required from the real dynamic binary; preserve refusal until
independent accepted-payload inspection binds the exact native library metadata.
No positive native package qualification is claimed.
The native failure log SHA-256 is
00627918c6120c0caa9f08e4e0f45f3ba9768de3a097077d515a6ad46d02c355.
Fourteen portable format checks now pass (16 selected tests, two native-only
skips), including mandatory root/wheel names and exact fixed-ID/timestamp
refusal. Driver/documentation review, lint/format, layout/export, OpenSpec and
the full documentation gate pass. Renew actual native construction after
binding the shared-library metadata; do not claim this encoding correction
alone qualifies the provider.
The relevant native
packing,
installation
and ELF analysis
owners define those semantics.
Shared-library metadata binding is now in progress: inspect bounded accepted
ELF64 payload sections without execution or extraction, validate the selected
FreeBSD architecture, and derive exact DT_NEEDED/DT_SONAME inventories. Compare
both native manifests against those inventories, excluding libraries supplied
inside the same package. Reject malformed or unsupported ELF authority and
extra/missing/rehashed library metadata. Native executable and shared-library
construction must qualify this independent reader; this is format/dependency
metadata verification, not a substitute for retained lifecycle admission.
Twenty-one portable checks pass (24 selected tests with three native-only
skips), including hostile ELF offsets/counts, truncation, target drift,
termination/SONAME ambiguity and rehashed native library substitutions. The
reader also independently matches all seven checksums and the exact libc
requirement in the retained actual native diagnostic archive; that read does
not replace actual construction. Native coverage now includes a real linked
shared library, internal-provider filtering and execution of the reopened
package payload. Those three native construction cases and the public CLI
group remain the next execution gate. OpenSpec, documentation, lint/format,
layout/export and reviewed driver/documentation authority checks pass locally.
At exact revision e0ca3ba04dd57c9fce7d92e8891a909ae3c1e85f, all 24 native
format/ELF checks pass on actual FreeBSD without skips in 10.190 seconds. This
includes repeat construction, native pkg query, reopened compiled payloads and
a real linked shared library whose internal provision removes its external
requirement. All seven public CLI checks also pass without skips in 3.927
seconds. The native CLI construction case deliberately injects lifecycle
evidence, so it qualifies batch/provider plumbing rather than full installed
Standard admission. The combined native log SHA-256 is
e3d3801876e73ea5e8b6d2cd536c94ca5bcc102c7a87f2045584073e4704d4e5.
The next qualification action is the current full regression and actual native
installed-wheel gate; retained pkg composition, complete per-unit source/ports
packages, public installed lifecycle and release consumers remain open.
The full native Python run at c75fac59 stopped in sample recipe planning:
the conformance runner rejects freebsd16 before selecting the existing FreeBSD
Flavor. Extend host discovery, OS catalog and explicit receiver selection together;
exercise real recipe composition with FreeBSD identity and preserve foreign-OS
sample filtering. Local canonical sample checks pass (10 tests, six explicitly
opt-in execution skips), including actual FreeBSD recipe composition and receiver
OS mismatch refusal. The stable run log SHA-256 is
09478ca743d0b335c6e93fd04958356119e886fea10601d8e62d274cca1f8f92.
Native sample rerun passes all 10 checks (six explicit opt-in execution skips),
with log SHA-256
c94310bd9e4f5e9af0459991efca3976864911a4043569e0198c3877e6006d1e.
Native SDK target support reaches the following owners: native SDK
layout, acquisition, runtime architecture inspection and SBOM path properties
still omit FreeBSD. Extend the shared layout/schema, host matching, ELF architecture
inspection and dependency projection, then run real native build/relocation and
consumer tests with wrong-target and changed-byte refusals. Qualify those owners
before claiming native mixed-project dependency closure. Local canonical SDK
regressions pass all 26 tests without skips, covering real native builds,
relocation, dependency graphs and consumer/package acceptance. The run log SHA-256
is e97160621cc467d9c74f6fe881958c2825d22e6256422ff7a15188de087588d0.
These are macOS regressions, not FreeBSD SDK qualification. The exact native run
at 02c1abb8 passes eight SDK checks, then the public consumer lifecycle fails
because SDK and host dependency observations conflict. Diagnose the differing
identity/loader-context fields and preserve both exact file and context custody;
do not ignore conflicting records. This is the next FreeBSD action in progress.
Read-only native reproduction identifies only freebsd-filtee property differences
on identical libc/libthr file records. Program-specific filter facts belong to a
context-bound loader record, with explicit image/program/target references. Move
them without discarding facts; SDK relocation must remap embedded image references
and portable paths, then rebind the projected context identity and graph edges.
Retain strict conflict rejection for actual file differences. The private native
diagnostic's canonical identity is
sha256:bb15c3747c640fd416fe65174bd3fac347e3a528532d6d115e40b59fe5c9d89a.
The correction passes all 31 local SDK tests without skips, including relocation
and original-source consumer/package execution. The FreeBSD loader group passes
17 checks with one native-only skip on macOS; two-program context merging preserves
both inventories and actual differing file hashes still refuse. The SDK and loader
log SHA-256 values are
60f740e6ecf6625cd90b858cc99fa813eebdc0d396b5ee044ff0b1da87916f40
and 682354c938909f8da72f082d2cff60d53db108c251bcecc225490c6ebad93b37.
Exact native two-context observation, SDK and complete suite reruns remain required.
The native retained-project group separately passes all 36 tests; its log SHA-256
is 9c817b88c1bdd7f9f0a6678f85662133a76a8803d574f37f5076733b0494075d.
The frozen installed-wheel check for 02c1abb8 also passes; native SDK and full
suite qualification remain required.
The installed 88fc4bb6 retained-source run passed actual
native tests and independently refused both stale authorization and failing
behavior while preserving its previous receipt. The retained 11-file native proof
archive has SHA-256
232ffc7e1a5fb98d9f3bfb0b4bfa85a5ec70efe79d91c911d719b8f0e87f4fbb.
That small-component proof does
not close full-project or release qualification.
Additional execution audit: the existing retained legacy-harness SSH connector still allows only Linux and macOS, and its optional Ninja/uv runtime artifacts are Linux x86_64 binaries. First-class FreeBSD support must reach both coordinator and receiver validation and preserve the actual remote platform identity. Bind optional runtime tool acquisition to the selected worker's OS and architecture; never send Linux executables to a FreeBSD guest. Qualify the public installed connector with native retained commands, failure and changed-input rejection, artifact custody and bounded cleanup. Supporting a source-only harness does not qualify unimplemented native runtime-tool providers or replace the stronger mixed-project lifecycle required by RETAINED-PROJECT-001.
The connector repair is in progress: admit explicit FreeBSD SSH workers and check the observed receiver OS and any configured CPU architecture before harness execution, as well as when admitting its result. Bind optional tool archives to their selected OS/architecture; unsupported providers must refuse before network transfer, and the receiver must independently reject a foreign tool archive. Source-only harnesses need no optional binary provider. Qualify native command execution, changed input/failure refusal and cleanup separately; this connector does not substitute for retained-project Standard lifecycle admission.
The repair passes seven local platform/receiver checks, including actual unittest
execution, failed behavior, source mutation, pre-transfer provider refusal and
cleanup, plus all 13 existing retained-harness checks. Platform-selection tests
explicitly simulate FreeBSD on the local host; they are not native acceptance.
The respective log SHA-256 values are
8edd27e07caf124129b239cd6e81c91693b3d3becf3ff1ec1cd74a92b664595a
and e97073c9dfaf6e83c11fafacf743c6b747f3a20bb8ded5cf4936bf68ae94fbae.
Native and installed public connector qualification remain required.
The preceding loader-context correction at f30cbe96 passes all 31 SDK checks
on actual FreeBSD in 1972.523 seconds, including the formerly failing consumer
lifecycle and relocation. Its log SHA-256 is
f91bf793f17d6d01c5f52d1729174c729b05f603b1354d87fae0a3660de1e0d4.
The same native revision passes all 43 retained-project checks in 14.079 seconds
(log SHA-256 944001f7988f898f0fa57e1fc71cd435c9a8fe319bc42686b3990174f0154c30).
Its complete native Python ladder remains running; this evidence does not cover
the later current-lock bridge or connector repair. The separately frozen wheel
qualification at 9000d9b2 passes with qualified wheel identity
sha256:9264357d0ac3eb0e3eb09c4735ab428ec44c7f4bd726755adcb56a7998a49afd.
The full native ladder at f30cbe96 then stops after 43 checks (30 normal skips):
the self-hosting snapshot conformance helper rejects freebsd16 before its
negative lifecycle test. Both that helper and the separate replication proof
duplicate an OS selector without FreeBSD. Repair their shared platform selection
in progress, preserving explicit unsupported-host refusal and the native Flavor;
qualify the real snapshot replay and failure group before resuming the full
ladder. The previously successful SDK/retained groups do not establish full-suite
success. Keep the native slot free until the repaired exact revision is ready.
The snapshot selector passes its focused platform check and all three actual
local snapshot conformance tests in 563.317 seconds, including repeated clean
replays and negative custody checks (log SHA-256
e21bd8157394065082a4840cff031a15eff797b7c7f8412ffc75f5b15e748c38).
The native 9fc8596f retained-group run stops at its first Cargo publication
rollback test, before the connector checks: exclusive_directory._native_rename
supports only Darwin/Linux. The worker exposes FreeBSD renameat2 and header
AT_RENAME_NOREPLACE=0x0001. Add that native publication path in progress and
qualify real success, a destination appearing after prechecks, unsupported API
refusal and original Cargo rollback. Preserve descriptor/source guards and refuse
unsupported kernels/filesystems; no check-then-replacing-rename fallback.
The failed native retained log SHA-256 is
476e4275a2fc838a199dc4a0ea9d46939d4287aa77020c10ed0def7f36da5be3.
The FreeBSD rename contract
documents no-replace behavior and unsupported-filesystem refusal. Five local
publication checks pass, including a real destination-creation race and exact
stage identity, plus the original Cargo rollback test. Their log SHA-256 values
are 91ab2035360d7396068fc187cd304f1c7fcbbb3a1b987488bb15c37611ebc79b
and 5baef7cbc18942278d9315e39fcb8f415906dc39406c5f5413d93184a987db14.
Native exact-revision replay/publication/retained and full-suite renewal remain
required. The earlier diagram renderer timeout passes an unchanged retry with
all 121 diagrams; no timeout or check was relaxed.
At exact revision 75fd75cc, actual FreeBSD passes all five native exclusive
publication checks in 0.242 seconds, including the post-precheck destination race
and successful stage identity preservation. The log SHA-256 is
e5ade638d3400bce14dd48ffc25a5ebba4d71ee60652f2a3a6c0d50018cef603.
The sequential wider retained/current-lock/snapshot/full native ladder remains
active at that frozen revision; later phases are not yet qualified. A separate
frozen local full-suite/wheel ladder runs at 9fc8596f, so its results cannot
qualify the later snapshot/publication changes.
Native 75fd75cc renewal passes all 94 retained checks without skips in
1878.469 seconds and all six current-lock checks in 25.696 seconds. Snapshot
replay then reaches a second missing FreeBSD selector in the actual core
self_hosting._host_os, after the proof/helper selection correction. The first
two snapshot checks pass; repeated replay refuses freebsd16 before its build.
Repair this core selector in progress and test actual FreeBSD Flavor admission,
wrong-OS Flavor refusal and unknown-host refusal before native replay renewal.
The separate frozen 9fc8596f local suite and wheel check pass: 1,651 tests,
38 platform/tool skips, 3042.666 seconds; wheel identity
sha256:6ce5de959cbb171a77ff8bce2e1db7d90b7ce38b0a7b72cfe0f27742c8c46225.
These exact-revision results do not qualify later runtime changes.
Installed-wheel execution at d96f6b8b no longer discovers a coding agent, but
refuses before compilation because the shared Python builder searches only
python3 and python. The aligned native worker exposes the actual interpreter
as python3.12, with neither unversioned alias. Extend ordered PATH discovery to
versioned Python commands, preserving authoritative explicit pins, actual runtime
version/digest checks and per-directory preference. Qualify real interpreter
discovery with only versioned launchers, then repeat the exact installed native
lifecycle and rejection checks; do not create a compatibility symlink or bypass
toolchain admission.
The same attempt exposed an uncaught builder exception at the public CLI boundary.
Preserve its typed refusal as a JSON CLI failure instead of an unstructured
traceback; no receipt may be issued when toolchain admission fails.
The correction passes seven real-interpreter discovery checks and all seven
public CLI rebuild regressions, including structured toolchain refusal without
receipt issuance. Their log SHA-256 values are
2b741be11d25f19952bc4f44aa3ce11fff5aa753b4570350f008219697758de7
and e088baa4de593e6ce69f7d6ae27055deb1fb6d619d8d08bde5fa5687367ecd30.
Lint, formatting, layout, strict OpenSpec, documentation and reviewed TCB checks
pass. Native automatic-discovery qualification still requires a new exact wheel;
a diagnostic run with an explicit native Python pin is separate evidence for
agent-free retained execution and cannot close that discovery gate.
FreeBSD implementation checkpoint: explicit OS identity now reaches worker CRUD,
execution requirements, hardware observations, capacity records and corresponding
JSON schemas. The hardware program checks uname -s before named FreeBSD sysctls,
normalizes amd64, and leaves GPU probing explicitly unqualified. Local canonical
make python-check runs pass the worker tests (29), worker CRUD (4) and dispatch
contracts (3); shell-program tests cover named-query output and wrong-OS refusal.
These are local regression evidence, not native lifecycle qualification. Alignment
inspection found unrelated unavailable/low-space workers; no remediation or cleanup
was applied. Next: OS Flavor, host/toolchain realization and alignment, storage and
pressure observations, then native installed-wheel lifecycle and rejection proof.
FreeBSD native checkpoint: the development CLI registered a real SSH FreeBSD worker;
read-only alignment passed the full declared FreeBSD command/Python/disk template
with no installs, file synchronization or coding-model call. The first attempt
correctly timed out at 120 seconds in interactive Bash startup; a native /bin/sh
transport correction made alignment pass. Hardware probing reports FreeBSD
16.0-CURRENT, x86_64, 8 CPUs and 8145 MiB. The request-bound storage receiver measured
all four roles and preserved unsupported native quota status; three pressure
samples measured CPU ticks, conservative memory and zero swap throughput. These
are live receiver observations from the development source, not installed-wheel
lifecycle or release qualification. Private endpoint and raw observations stay
outside repository authority.
The next native gate is an exact non-editable framework wheel, native toolchain realization and isolated build/test plus failed-input rejection. Remaining work also includes retained lifecycle admission/custody, supported sandbox behavior, FreeBSD install SBOMs and quota qualification, and existing-platform CI. The OS Flavor explicitly refuses assumptions about Linux procfs/GNU utilities. Swift requires an explicit FreeBSD toolchain rather than an invented default.
Native contributor execution exposed inherited GNU Make control variables leaking
into pip's Rust source builds: the jemalloc build consumed the outer command-line
test selector before Cargo's appended jobserver flags and treated -j as a target.
Isolate pip dependency builds from the parent Make flags, preserve explicit compiler
resource limits and package-source policy, and qualify the corrected canonical
native make python-check path. Native onboarding also reports the missing
FreeBSD host-install realization; this remains required host-toolchain work.
Host-install implementation now in progress: declare the native pkg tuple and
its supported coding-agent alternatives instead of borrowing Linux binaries.
Require the complete non-alternative capability closure and at least one declared
agent provider; an explicit unavailable provider must refuse before probing or
installation. Honor tuple-specific command probes so FreeBSD's base make cannot
satisfy the GNU Make capability. Qualify parsing, selection, package provenance,
consent and native observation; unavailable packages remain missing rather than
becoming a fabricated ready host.
The canonical local host-install group passes 11 tests, including a full simulated
consent/install/re-observation flow that rejects a successful package-manager exit
when the installed coding-agent version remains too old. Lint, formatting,
repository-layout, strict OpenSpec and reviewed driver/documentation authority
checks pass. These are local contract tests; native package observation and the
installed lifecycle remain separate qualification requirements.
At c8290fa5, the seven new tests also pass on actual FreeBSD without skips;
their log SHA-256 is
56f5466e02971defa689fc3415f3523d594f9e6aa0f273249dc96807720957b1.
Read-only native package observation proves Python/venv, Git and GNU Make but
correctly reports overall host readiness false: Codex is absent and the aligned
official Git LFS binary has no pkg provenance. It does not install an unused
agent or relabel the separately verified Git LFS artifact as a package.
The CMake realization uses the observed native cmake-core command package;
the extra local tuple test verifies that mapping. Native application execution
still needs the retained-provider correction tracked in RETAINED-ADMISSION-002.
At cb38faee, all eight native host-install tests pass without skips, including
that CMake mapping. The log SHA-256 is
e0a59929cf5e41c3574e9b87291b49744a05b5b12d0f27df01991864368b4330.
The pip wrapper regression passes through the canonical Make runner: a real child
process receives the original pip arguments and package-source/compiler limits,
excludes parent Make control variables, and preserves the child's failing status.
Lint, format, repository-layout and reviewed driver-pin checks pass locally; the
corrected native contributor build remains pending.
Native Make correction checkpoint: revision ba085be6 finishes its real FreeBSD
contributor dependency installation, including native gRPC and Ruff builds, and
passes make python-check's eight FreeBSD tests. A qualified non-editable wheel at
d4d67a9f also completes public native onboard create plan/apply with an exact
reviewed plan and explicit candidate parent revision; it selects the FreeBSD OS
Flavor and pins the actual installed Standard distribution. Neither result is a
complete native application build/test/accept/package or release receipt.
The initial dependency observation audit found PortableHostDependencyObserver
refusing FreeBSD and native executable recognition omitting its ELF format. Qualifying the
native dependency closure requires a FreeBSD loader/inspector owner and current
native evidence; Linux loader-cache semantics cannot stand in for FreeBSD hints
and library mappings. This remains part of FREEBSD-001 before native lifecycle
qualification, alongside the missing host-install realization.
Loader implementation checkpoint: bind the native readelf/ldconfig tools, FreeBSD hints search order, default library directories and recursively included global libmap rules; revalidate loader inputs and exact ELF closure after inspection. Preserve typed refusal for unmodeled loader controls, constrained or ambiguous mappings, unsafe paths, changed configuration and unresolved imports. Do not execute target binaries or reuse Linux cache parsing as FreeBSD evidence. The local FreeBSD group passes 22 tests with its one actual-FreeBSD case skipped on macOS. Three real inspector-process tests enforce cleared loader/Python environment, output overflow and deadline/tree ownership. Existing alignment (4), worker-tool dependencies (1), compiler-cache dependencies (2), retained native custody (2) and retained Cargo test execution (2) groups pass. Native inspection, installed-wheel lifecycle, supported sandbox/capacity policies and retained receipt/release qualification remain open.
The installed d4d67a9f native CLI now also completes public sample lock and
plan, selecting FreeBSD authority. This is native planning evidence, not a
generated application or current lifecycle receipt.
The first real loader run at e1a6e254 correctly refused FreeBSD 16 libc's
AUXILIARY record for libsys. The observer now resolves filter and auxiliary
targets recursively, retains their kinds and potential-loading status, and
refuses unresolved or malformed filtee records. The local dependency group passes
16 cases with the actual-FreeBSD case skipped on macOS; the corrected native run
must still pass. This does not convert potential loader edges into observed
runtime execution or acceptance evidence.
At fbb31213, the real FreeBSD run passes all 24 FreeBSD tests without skips,
including compilation and static inspection of a native program's actual
interpreter/libc/libsys closure. All three real inspector-process tests pass on
FreeBSD as well. Native log SHA-256 identities are
2e58a611bfb3e9b490ff94b7330c248e108be3395f2564fd18578cb8d249a66b
and 540257cdfb43cd8a484acd885249e7f015732cb975c989cf5bac38db1bd6f4e2.
Separately, frozen 77e4dac8 completes the full canonical Python suite: 1500
tests, 37 platform/tool skips, zero failures. That earlier full-suite result does
not qualify the later retained-command or loader changes; the current exact
candidate must receive its own full regression and installed-wheel qualification.
The frozen 89278c96 candidate now completes its canonical full Python suite:
1533 tests, 38 platform/tool skips and zero failures. Its log SHA-256 is
0cb708f5735bd66f54299721043e4e3e650fd13ff62a3ca4cfbc6c0e23fbd499.
That exact result covers the loader/workspace foundation at that revision,
not later host-install or model-free retained-source changes.
FreeBSD bootstrap checkpoint: the dedicated native build VM was registered through a private SSH-compatible transport. Read-only alignment identified GNU Make/npm, then declared installs added only gmake and the existing Node-24-compatible npm. Git LFS was added to the FreeBSD prerequisite inventory. The feed's old vulnerable Git LFS was not installed; declared alignment installed the official FreeBSD amd64 3.8.0 archive only after matching its published SHA-256, then alignment passed. Private installation commands/endpoints remain outside authority. The native VM has 20 CPUs, about 80 GiB RAM and 277 GiB free; no old images/evidence were removed.
Bootstrap now accepts a bounded verified offline native wheel source for export, while normal closure identity, no-index installation and installed RECORD checks remain in force. FreeBSD platform tags no longer inherit Linux dependency markers and native receiver tags must match exactly. Versioned Python discovery supports the FreeBSD package layout. Real offline pip resolution, tamper and direct-URL refusal tests pass in the local bootstrap group. This does not yet qualify the native installed-wheel lifecycle. The earlier wheel-smoke run refused because the checkout changed during execution; a new frozen revision must run that gate.
Installed-wheel checkpoint: frozen revision 77e4dac8 passes isolated
make wheel-check. Wheel SHA-256 is
2e06aa79f3f08d0a388a0c760593d3154b3d5bf6be69fc9d6019c3f561520860;
normalized framework distribution identity is
5936ed45cd3b17703e763cf717fbf35d073f74328b1201c10b95080f3fb8ad09.
Offline export from reviewed FreeBSD cp312 wheels produces closure
c5ba582637d19451cb4aa5a8e8913306fa97571a84a9144a880219bdd1f92bcc.
An actual FreeBSD bootstrap installs that closure into a separate non-editable
runtime and verifies all installed RECORD content and the exact framework
identity. This qualifies wheel installation only; native lifecycle, source and
evidence custody, retained receipts and release enforcement remain open. The
subsequent Make-environment correction is not part of that wheel's evidence.
[x] WORKER-SCP-001 — Carry configured SSH routing through source and evidence SCP transfers
GitHub issue: #69
Priority: P1
Owner: worker SSH transport and artifact custody
Direction: Use the same private configured SSH-compatible route for commands, source staging and evidence retrieval.
Conclusion: SCP may remain the fixed transfer executable, but must carry the selected SSH program for nondefault worker transports; direct default routing cannot establish the registered worker identity.
Depends on: none
Implementation:
- Add validated optional SSH-program selection to SCP helpers; propagate it through worker uploads, downloads and file synchronization without changing default OpenSSH behavior or weakening host, path, deadline or custody checks.
Evidence:
- Invalid transport injection refuses before execution; default platform transfer contracts remain green; an actual native worker performs source/build/test/evidence round trips through its configured route.
WORKER-SCP-001 implementation checkpoint: SCP helpers accept a validated optional SSH program and the selected worker transport now reaches source staging, evidence retrieval, retained-harness staging, release synchronization and alignment file copies. Default OpenSSH argv stays unchanged. Canonical local checks pass SSH/custody (5 tests), alignment (4) and release synchronization (17), including custom-route uploads/downloads and transport-injection refusal. A live FreeBSD SSH/SFTP round trip through the configured route uploaded a 63-byte gzip fixture, matched its remote SHA-256 and downloaded identical bytes. The result is explicitly transport-only, not a complete native lifecycle receipt. Full installed native source/build/test/evidence qualification and existing-platform CI remain open.
- Closure acceptance: The current validated SSH/SCP owners complete a real Windows/Python3.12 source upload, hash verification, native compilation, three compiled-artifact behavior cases and evidence download through one registered nondefault transport. The downloaded archive (
sha256:74966a8ce468c3630d16e01406ac8d9d75d6c382e14361d3bfed25bef1cf03c1) is independently hash-verified, and its compiled artifact bytes match the native result. Five current transport/handler cases pass without skips, including exact default OpenSSH argv parity and invalid transport injection refusal. The owning code/tests are byte-identical to exact CI-qualified20508324and landedfe21a198; existing alignment/release synchronization coverage remains. Seeverification/worker-scp-native-acceptance.json. This is a complete source/build/test/evidence transfer round trip; it does not mint a framework lifecycle, retained SDK or product receipt.
[x] RETAINED-ADMISSION-002 — Qualify retained source without a generation agent
- GitHub issue: #70
- Priority: P0
- Owner: Standard source planning and retained admission
- Direction: Exact authorized retained source must build, test and accept without discovering or invoking a model provider.
- Conclusion: The installed native CLI eagerly selects a coding agent before attaching retained source. Preserve distinct original-input provenance and all post-admission gates; do not fabricate an agent or model-generated evidence.
- Depends on: Issue #70; existing retained-source authority and Standard lifecycle owners
- Implementation:
- Add explicit model-free retained source planning and execution wiring while leaving ordinary generation discovery unchanged.
- Evidence:
- Installed public CLI on a native worker without coding agents completes real build, behavior tests and independent acceptance; stale authorization and failed tests refuse without a passing receipt or regenerative cache promotion.
Installed native checkpoint: the exact qualified wheel at 89278c96 bootstraps
37 verified distributions offline. Public Standard rebind and documentation review
complete, and the retained-source review returns an exact authorization identity.
Authorized execution then refuses with coding_cli.unavailable before compilation.
Assembly constructs FilesystemStandardSourceGenerationAdapter.from_environment
before attaching the reviewed retained input. The correction must give retained
input its own non-executable source selection and avoid representing it as an
accepted cache entry, inherited IDE response or model-generated payload. The
generation model-scope, workflow invocation and cache-key owners currently assume
a coding provider; integrate a typed retained origin through these shared owners
without removing build/test/SBOM/acceptance checks or admitting regenerative cache
membership. This remains distinct from full mixed retained-project work in #22.
The stronger failed-behavior regression exposed automatic replacement retrying
the same retained bytes after their native test failed, obscuring that failure
with a competing-custody error. Retained-origin rejection must be terminal in the
shared lifecycle owner; a changed source tree requires a new exact review.
Preserve the original test failure, prior receipt and ordinary generated-candidate
replacement behavior instead of weakening registry custody or accepting any
generic failure as failed-test evidence.
Local implementation checkpoint: a non-executable retained selection binds its
exact review, fixed no-model scope and invocation identity. It never discovers an
agent, inherits a model, invokes generation or claims accepted-cache authority.
The common lifecycle makes retained-origin rejection terminal and preserves the
original failure. Six focused guard tests, six public CLI rebuild tests, four
existing repair tests, source-cache trust (1), model/workflow (3), planning (1)
and locked-generation (3) checks pass through the canonical Make runner. The CLI
test compiles real retained Python, executes current native cases and independent
acceptance, verifies exact stale-authorization and generated-test failure codes,
and preserves the prior receipt after both rejections. Its log SHA-256 is
3c92417a0366bbc1892f46e16a0e0c366f696e5454577a3ea9542adc8e6aa24a.
The editable-test distribution seam is not installed-wheel evidence: native
offline bootstrap, reviewed rebind, complete positive/rejection execution and
current matrix qualification remain open. Full mixed retained projects remain
separately unqualified under #22.
Integration checkpoint: incorporate exact main 5d92797a after its CI run
39159031754 passed. Additive requirement, roadmap, changelog and worker-probe
changes from both branches remain present; recompute the combined TCB and
documentation review pins. The refreshed OpenSpec validator requires short
individual behaviors, so retained-provider, post-source-gate and terminal-rejection
requirements retain separate scenarios. On the integrated tree, all six public
CLI rebuild cases, six retained-source guard cases and seven combined worker
probe cases pass. Strict OpenSpec, lint, formatting and repository-layout checks
pass. Exact installed-wheel/native and final release qualification remain open.
Subsequent native evidence: qualified wheel 88fc4bb6 installs its 37 verified
distributions offline. After reviewed public rebind and documentation review, its
public retained-source rebuild compiles, passes three original behavior cases
and independent acceptance with neither coding agents nor a Python override or
unversioned Python alias. Its receipt identity is
sha256:584a9f38989bfa3ec4edd9cb2128762f6b995e4ceb459327deca314c447bd522.
The automatic-discovery rejection run remains in progress. The preceding exact
d96f6b8b wheel, with an explicit native Python pin, passed both stale-review and
freshly authorized failed-behavior checks while preserving the passing receipt;
the retained evidence archive SHA-256 is
6fe64332a65d644fbe85114b2b2eb93ef3af51be6076316bbf0fca597c108d12.
Separately, the complete frozen d96f6b8b Python suite passed 1,578 tests with 38
platform/tool skips; log SHA-256
3b7603d5171be3e9c5bd4641c240c7af4276a7250229c9408ff5d9a2bb995293.
That broad baseline does not qualify later changes or full mixed retained
projects under #22, typed SSH custody under #69, or a downstream release.
- Closure acceptance: A real noneditable installed wheel (
sha256:0d2f0153c8b98afe2ac54e480ce4c4faaf35848deb1c5b027bbe69fc07bfa57f, exact source9f8b9dab) initializes from landed main and admits a reviewed retained Python tree with no coding-agent executable on PATH. Three native behavior cases and independent acceptance pass, supported receipt promotion commits the result, and public accepted-only build exports exact hash-based compiled bytes with no model selector. Real changed-source authorization and failing native behavior refuse while preserving the prior receipt and export; ordinary generation still failscoding_cli.unavailable. Thirteen current critical cases and the real accepted-export fixture pass without skips; the latter observes a new actual acceptance identity and refuses unknown/substituted origins, missing admission, corrupted cache bytes and failed fresh acceptance. All 13 relevant owner/test files are byte-identical between the qualified wheel source and mainfe21a198. Seeverification/retained-source-installed-acceptance.json; the separate hardware CI recurrence, full native SDK and product/package programs remain open.
[ ] RELEASE-INTEGRATION-004 — Reconcile and execute the 1.3 release backlog
Priority: P0
Owner: release integration, roadmap, and contribution dispositions
Direction: Complete pending 1.3 work and review open issues and PRs for scope.
Conclusion: Use current public tracker and exact implementation evidence, prioritize issue 47, include new issue 65 and maintenance PRs, and preserve all outstanding acceptance gates. Release publication remains a separate human scheduling decision.
Depends on: none
Implementation:
- Reconcile every open issue and review into a current ordered 1.3 plan
- Implement and qualify Python library wheel dependencies (issue 47)
- Complete remaining scoped fixes and qualification in dependency order
- Integrate reviewed maintenance PRs and preserve unresolved worktree evidence
- Refuse document-pair publication when a stable resource has an anonymous reader grant, and restore both 1.3 resources to their declared organization-restricted audience before publication
Evidence:
- Every open issue and review has a linked queue owner and current release disposition
- Meaningful focused tests and required consolidated qualification pass for changed behavior
- Remaining release and acceptance blockers remain explicit until proven complete
- Publisher access-policy regression passes and pair-wide preflight reports only the NVIDIA-domain reader plus resource owners/editors
GitHub pull request: #66, including the reviewed ancestry of #60–#62.
Policy reconciliation: Correct stale repository pre-release target 1.2 to 1.3 through the public release-state command; record native and installed qualification without claiming final release readiness.
PR #68 reconciliation (conflicts resolved and locally qualified): Merged current main
90d5b6e9into published FreeBSD head545c4ae6in an isolated integration checkout; frozen source is89f80bfb. Both contributions' release notes and work evidence remain intact, and driver, runner and documentation authority were renewed. The automatically merged Python projection, worker observations and test runner pass 36 focused tests and the full suite: 1,714 selected, 1,677 passed, 37 skipped, zero failed. Source/style/layout, strict OpenSpec, both changed-skill admissions, 21 documentation tests and 121 rendered Mermaid diagrams pass. Installed-wheel and offline installed-CLI checks pass; the tested wheel identity issha256:d360ac91896fbfc2a909f50172d1cf9c34f692a83a8c90476fff07dc5bd7d8e5. A fresh host lifecycle passes 229 tests and supplies the finalized current receipt through the supported promotion command. This reconciles the published review; active retained SDK/package work and native FreeBSD acceptance remain separate, unfinished gates. Hosted checks on the pushed revision remain required evidence to inspect before any eventual landing.PR #68 final qualification (in progress): Finish the review against the current retained/native package and SSH receiver corrections through
ab15e04e. Renew the complete local and actual FreeBSD regression, canonical-origin installed-wheel evidence, current framework lifecycle receipt and exact-head hosted checks before landing. Preserve the existing open acceptance contracts for public full-project execution, complete native source/ports unit packaging and downstream system installation/rollback; these are not established by internal infrastructure tests. Final title, description and completion claims must match the gates actually exercised. Active peer checkouts retain their work and evidence. Native full regression atab15e04eexposed a cancellation fixture race: its one-second process deadline could expire during cold interpreter/ledger startup, before the fixture's existing fifteen-second readiness budget. Give the process deadline a finite bound above readiness and preserve actual timeout/SIGINT, descendant cleanup and nested-evidence assertions. Production command deadlines and cancellation behavior remain unchanged. Renew the focused native fixture and complete native regression before landing.Host qualification at
ab15e04epasses all 1,830 selected cases: 1,788 passed and 42 skipped in 1,056.253 seconds (log SHA-25659a10aef8739236f15175dccf83acb5bd84eec99fff7a9b2073f3e3bc1608446). The repaired cancellation fixture atd030edeepasses locally, retaining both real interruption modes. Source/style/layout, strict OpenSpec, documentation and authority reviews pass; the offline installed CLI gate is current. The canonical-origin wheel passes installed qualification on the host, with identitysha256:857a60dd082b002118314cdfb6ea7cd4453b1c6669a10573b6c834188091717c. A newly finalized 228-test host lifecycle supplies current receiptsha256:1e55274f9b726a089fdf93e5a3a68e5a2cee4f4414cda836fab8d4c0f6a822db; supported promotion and candidate recheck pass after the test-only repair. Final native regression and isolated installed-wheel renewal remain in progress; no pending native or hosted result is counted as passing. The repaired native full run passes cancellation and then finds a shared worker-health fixture rejecting versionedfreebsd16. Audit fixture selectors together, centralize truthful test host-family selection, renew worker-health, configured finalize, model-free rebuild and projected-command cases on the actual guest, and preserve unsupported-host refusal rather than aliasing another POSIX OS. Optional Elixir fixtures must also retain the real host identity. The fixture audit atf05a8390passes the complete host suite: 1,831 selected, 1,789 passed, 42 skipped and zero failures in 1,375.551 seconds; log SHA-256a1f10e27fde77b9c149528e5d5e632db2e54e35275ee7b282ef0c77c82fb13c6. Actual FreeBSD passes the four worker-health cases and both configured-finalize cases without skips. Its worker-toolchain/operator-grant case then exhausts the fixture's health admission budget before reaching FINALIZE. Both job clones pass Git connectivity checks but inherit four borrowed object stores; transient pack-index warnings were retained. Compare the unchanged fixture budget on a fully independent--dissociatecheckout before attributing the refusal to runtime behavior or changing timing. Native full-suite and isolated installed-wheel qualification remain open. The independent replay also exhausts the unchanged 600-second action deadline during BUILD (745.833 seconds including fixture setup). Give this actual FreeBSD integration fixture a finite 1,800-second action/observation budget; other hosts retain 600 seconds. Its operator watcher must remain available for that same budget and stop when rebuild ends, including exceptional exits. Keep production deadlines, health admission, exact grant requests and the prohibition on controller-local phases intact. Renew focused host/native qualification and the complete regression before counting this repair green. The independent native full run then passes 764 cases, including all three actualpkgconstruction/inspection cases, before the isolated self-hosting replay expires at 300 seconds. The proof already grants Linux and Windows a finite 900-second candidate bound; include FreeBSD in that same policy. Keep both clean replay attempts, frozen-source and import-isolation checks, output limits and descendant termination intact. The supported driver and sample-runner review checks remain current: this separately classified offline replay helper is outside those live lifecycle closures. Recheck the existing finalized receipt and qualify the actual repaired native replay before landing. Prior incomplete native results remain predecessor evidence. Measured native generation-one completions take 1,139, 1,143 and 1,173 seconds, exceeding the initial 900-second policy. Allow each FreeBSD candidate 1,800 seconds and expose the existing parallel runner module deadline through Make. Qualify the four-generation proof with a finite 10,800-second module deadline; retain every replay, probe, source/isolation assertion and descendant limit. Other platforms and the default 3,600-second module deadline remain unchanged. The frozen host regression at45d5ce24passes 1,831 selected cases: 1,789 passed, 42 skipped, zero failures in 1,222.277 seconds. The actual FreeBSD installed-wheel gate passes the same host-qualified wheel identitysha256:857a60dd082b002118314cdfb6ea7cd4453b1c6669a10573b6c834188091717c; retained log SHA-256 is42d67d0f8b8ca21b0eb72f98c8d1339c41767ec89252805143e06910771bfe9f. Documenting the module option changes bound documentation authority despite unchanged driver/runner closures. Renew the host lifecycle rather than reuse its predecessor receipt: the fresh finalized candidate passes and its promoted receipt issha256:32cc1dfd7ec03dccc588b5468e36f55bf5844837469ae0ebb9665c69008578a7. Supported require-current and verify pass (two passes, three configured skips). The complete native regression ateb8de8cbremains in progress; its pending results and pending exact-head hosted CI are not qualification claims. Native regression then passes 1,072 cases and all four actual native package cases before receiver-custody setup pins BSD Make through its wrapper and fails GNU Make validation. Select the wrapper target through the existing GNU Make discovery owner instead of the first executable namedmake; preserve unchanged-tool success and changed-tool response withholding. This is a test fixture repair; production discovery and authority closures remain unchanged. The repaired fresh native run then passes 1,121 cases, all seven receiver custody cases and all four native package cases, before an immediate descendant state observation races asynchronous SIGKILL delivery. An unchanged isolated three-run probe observes one child as running at return and absent 10 ms later; the other two runs pass. Use a shared finite five-second observation bound in both cancellation fixtures, retain no-result, parent-exit, descendant absence/ zombie and ledger assertions, and report the last state on failure. Production cancellation remains unchanged. Expose the runner's existing start-directory selector through Make so the unqualified E2E suite can run early alongside a fresh complete regression; every selected native case still requires renewal. The early native E2E sweep catches a separate stale expected host Flavor after 16 passes: signed derivation correctly returns FreeBSD, while its test expects Linux. Audit the remaining host-dependent fallback expressions and use the existing truthful host-family fixture in source promotion, native Bazel consumer qualification and Python lifecycle projections. Keep cross-platform negative fixtures and correct POSIX shared-library suffix selection intact. All five native dispatch repetitions pass (25 cases, no skips), and the native signal/ timeout ledger case passes before the superseded full runner is stopped with its exact owner and checkout verified. With the exact locked pip fixture supplied through worker alignment, all eight native Python lifecycle cases pass without skips. The fresh full regression passes all four native package and seven custody cases; the early E2E sweep then finds a legacy rollback fixture that assumes GNU Make exit/diagnostic spelling and tries to execute the shell builtinexitdirectly under BSD Make. Use a real Python child with exit code seven and an independent direct native Make failure as the diagnostic/status oracle. Preserve exact restored bytes, typed conversion failure and the absence of partially installed authority. Renew focused host/native cases and the complete frozen native suite before landing. All eight harness-inventory cases pass on the host; lint/format, driver/runner reviews and the current 228-case receipt pass. Native renewal remains pending. The repaired eight-case rollback group then passes on actual FreeBSD. The four-worker early E2E sweep reaches the next unqualified monorepo fixture and finds its retained test command assumes a versionlesspython3alias. Bind that command to the running interpreter with native shell quoting, and keep actual per-root execution, shared-input isolation and receipt/rollback checks. Preserve non-executed shebang and transcript fixtures found by the alias audit; normalize the Make failure fixture's interpreter path for Windows shells. Renew both affected host groups and the native monorepo group before a fresh complete native run; no worker alias or ambient interpreter is hand-repaired. The five monorepo and eight harness cases pass on the host without skips; lint/format, both closure reviews and the current receipt remain green. The combined native E2E sweep passes all thirteen repaired cases and reaches 180 passes before repository child lifecycle planning reveals an actual target contract omission: discovery preserves FreeBSD, but the closed declaration allowlist excludes it. Admit canonical FreeBSD x86-64/aarch64 targets while retaining unknown-target refusal and exact native-host matching before writes. Add read-only foreign-target planning/execution refusal coverage; preserve the existing real dependency, resume, blocked-consumer and cancellation checks. This changes reviewed runtime authority: renew closure and documentation reviews, the finalized host lifecycle receipt, native/installed wheel gates and the complete frozen native regression before landing. Prior partial runs remain evidence for their actual source revisions, not current complete qualification. On the renewed runtime source, all four native package cases, all seven custody cases and the combined six repository-lifecycle, eight harness and five monorepo cases pass. The early E2E sweep then reaches worker alignment and finds another local-transport fixture declaring an ambientpython3alias. Declare the running interpreter's actual command name and expose its directory only within that fixture's PATH; keep the production name-only template contract, real probe, declared-only installation, secret permissions and backup assertions intact. Audit other live alignment templates separately from synthetic probe transcripts. Renew the whole alignment module on the host and native worker before another frozen complete native run. The isolated installed-wheel check retains its exact runtime source while this test-only repair proceeds; partial regressions do not qualify a complete suite. The focused late-worker sweep then passes nine cases and exposes a second transport fixture that always unwrapsbash -lic. FreeBSD intentionally sends the literal receiver command to its native shell. Execute that generated command through/bin/sh -cin the disposable local transport, verify the isolated Python prefix, and retain request binding, measured-volume, path privacy and no-write assertions. Leave explicit Linux Bash custody cases and the existing native FreeBSD action-transport cases intact. Require the full late-worker sweep to pass before restarting the broad native jobs, so late fixtures fail promptly. The early native smoke sweep passes 218 cases before project-guidance setup constructs a commit environment without PATH, so executable lookup falls back to system directories and misses native Git in its declared installation directory. Retain the calling PATH alongside the fixture's explicit Git author/committer identities; keep its isolated environment and exact checkout-commit CI assertions. The Git-identity environment audit finds this as the sole literal dictionary omitting both inherited variables and PATH. Renew guidance plus the remaining late smoke modules before another broad run; production guidance stays unchanged. The late native smoke subset then passes 138 cases before its executable-drift fixture inherits the installed Python binary's read-only mode throughcopy2. Grant owner-write permission only to the disposable copy before creating the tool binding, preserve its execution bits, append actual drift bytes and require the unchanged production binding to reject that mutation. Do not modify the installed interpreter or move permission changes after binding. Audit other copied-tool mutation fixtures, then renew this six-case module and the remaining late-smoke cases before broad native qualification. These predecessor results do not qualify the later original-adoption or committed-target verification changes recorded below.
[ ] PYTHON-TARGET-001 — Support target-specific Python backend imports during retained-source admission
GitHub issue: #65
Current release target: 1.3.0
Priority: P1
Owner: Python packaging command profile, source admission and Standard artifact custody (Goals 1 and 4)
Direction: Retain cross-platform source and complete marked dependency intent while admitting only the selected target's supported runtime projection.
Conclusion: Add an opt-in, locked packaging-profile source projection. The adjacent bounded manifest binds the complete wheel-lock marker environment and exact excluded Python backend bytes with a reason. Preserve the original source and requirements; omit reviewed backend files only from the build projection. Do not infer Python control-flow reachability or invent installed import aliases. Without explicit selection, retain complete conservative import scanning.
Depends on: existing Python wheel-profile source, target and retained artifact custody; no dependency on draft FreeBSD PR 68
Implementation:
- Bind explicit projection selection and manifest bytes to the profile, source authority and retained dependency evidence
- Resolve root requirement markers against the selected lock environment while preserving the full authored declarations
- Build only the declared target projection and keep original source identity and artifact/cache/acceptance checks mandatory
- Document the public profile and refusal behavior; update initialized schema copies if required
Evidence:
- Linux target fixture admits a projected application with an absent Darwin-only SDK and retains the full requirement declaration
- Missing active imports, stale excluded bytes, unsafe paths, unknown fields and changed target environments refuse
- Actual build, test, execute and independent acceptance use sealed projected artifacts; changed projection and cache payload refuse
- Meaningful focused, complete local, installed and exact-head CI qualification before landing
Current evidence: Thirteen focused projection tests pass locally, including raw-CRLF exclusion custody, all three supported manifest forms, active-import refusal, target/tag drift, strict JSON bounds, application cache reuse and relocated library independent acceptance after source/wheelhouse retirement. Twelve existing Python resolver/lifecycle/projection tests and four broader dependency lifecycle tests pass. Lint/format, repository layout/export, 21 Node tests, 121 Mermaid renders and strict OpenSpec pass; the lifecycle driver and documentation authority reviews are current. Complete local, native Linux, installed and exact-head CI qualification are the next action; no terminal release or retained-project claim is made.
[ ] TEST-PARALLEL-001 — Run release-gate tests in parallel (checkpointed, fail-fast)
GitHub issue: #56
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: Run release-gate tests in parallel (checkpointed, fail-fast)
Conclusion: The current installed checkpoint runner executes the entire suite in one process. Add bounded process-level module scheduling while preserving one controller-owned marker ledger and source/context binding. Keep the existing serial API for in-memory suites; make CLI/Make worker count explicit, defaulting to the available CPU count. The Windows gate retains pytest/JUnit and uses isolated file-group workers with fail-fast.
Depends on: existing pin dispatch, known-failure contracts and owned-process-tree cleanup
Next action (in progress): Collect final-source native timing comparisons and require the full exact-head CI matrix before landing. The complete local suite, installed wheel and newly current lifecycle receipt have passed; eight-core Windows performance acceptance remains pending capacity.
Implementation:
- Execute importable module groups in private process/temp/object environments with explicit serial barriers and configurable worker count.
- Record validated per-case outcomes only in the parent; retain exact failure/skip/subtest/fixture counts and bounded diagnostics.
- Stop dispatch on failure, terminate only owned worker/descendant processes, and preserve completed repair markers.
- Keep known-failure/context/release-evidence behavior and required repaired-exit-2 followed by a clean from-zero pass.
- Integrate Make and Windows pytest worker configuration, audit fixed shared state, and document limits and wheel-check timing findings.
Evidence:
- Real processes prove overlap, isolation, serial barriers, deterministic failure order, fail-fast child cleanup, crash/protocol refusal and out-of-order resume.
- Serial and parallel runs produce identical ordered case outcomes and receipt summaries, including duplicates, class/module fixtures and subtests.
- Measure the complete framework suite and native Linux/Windows gates on aligned workers; demonstrate the requested speedup without dropped or doubled cases.
- Pass complete local, installed-wheel, exact-head CI and a newly current lifecycle receipt before landing.
Development evidence: Seventeen focused checkpoint tests pass, covering real process overlap, private scratch/configuration, serial barriers, per-case out-of-order repair (including retained skips), owned descendant termination, crash/protocol refusal, duplicate object occurrences, fixture/subtest parity, known-failure contexts, release-evidence bypass and Windows entry-point configuration. The initial full-suite attempt exposed project-authority inheritance from scratch directories beneath the checkout; scratch now lives outside it. A later exploratory run stopped at 730 tests because source was edited while its immutable self-hosting proof ran. This is not a complete-suite pass or a performance claim. Freeze source before final qualification. Review also covered multiple cleanup failures and skipped teardown after a failing body: failure precedence is retained, other workers stop immediately, and the failing module has a bounded cleanup-report window. Make retains an ordered sidecar report even after successful repair markers reset.
Review follow-up: Eighteen focused checkpoint tests pass. A deterministic 100-case stream reproduced failure starvation before bounded polling; the controller now observes the other module's reported failure after at most eight passing-case callbacks, stops execution, and retains all 100 already-flushed passes. Class/module teardown skips preserve completed body outcomes, and subtest diagnostics retain their parameter labels. The earlier
9ce03a77and58849d2dcandidates each passed the complete 1,547-test macOS suite with 35 declared skips, plus installed-wheel qualification; final source adds the fairness regression and requires fresh complete qualification.Final local qualification: Frozen implementation
7652c2edpassed the complete macOS suite: 1,548 selected, 1,513 passed, 35 declared skips and zero failures in 879.384 seconds. All 18 focused checkpoint cases, repository/export checks, lint/format, OpenSpec, 121 documentation diagrams, 21 Node tests and current driver/runner reviews pass. Installed wheelsha256:c4dc5f2f1e8161554727af03bd792177b9bd37a368d9829c345f9a5ff8ba2df4passes its full qualification and installed two-process probe (four selected, two passed, two skipped). A fresh finalized host lifecycle passes 230 tests; supported receipt promotion, candidate comparison, require-current andlitai verifypass. This does not establish native eight-core Windows timing or the full serial/parallel three-host acceptance.Wheel timing investigation: The initial macOS candidate recorded 552.19 seconds in subprocess spans; installed HTML observability accounted for 289.41 seconds. Those HTML scenarios mutate the same golden project and cannot safely be fanned out without separate fixture custody. Independent environment setup offers a smaller opportunity. These observations came from a busy macOS host and do not establish a Windows wheel speedup. Native gate timings and the requested performance target remain open.
Native Windows follow-up: The four-worker gate stopped after 575 passes, 45 skips and 579 passing subtests when the real Cargo accounting fixture exceeded its 60-second compiler deadline. An isolated unchanged probe passes: cold compile 32.594 seconds, cached compile 0.469 seconds. The fixture now allows 180 seconds on Windows (60 elsewhere) and uses existing owned-process-tree cleanup on timeout. This is a test-fixture timing correction, not native performance acceptance; the final gate must be rerun. The failed job evidence is retained and its finite on-demand task is confirmed removed.
[x] MERMAID-SCOPE-001 — Mermaid documentation check scans gitignored build output (generated/)
GitHub issue: #53
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: Mermaid documentation check scans gitignored build output (generated/)
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Current evidence: The 1.3 implementation batch records the exact local checks and remaining native/integration gates.
Closure qualification: Landed implementation on
75d73ac2; all 21 documentation-tool tests passed and 121 tracked diagrams rendered successfully. The real temporary Git repository fixture proves invalid ignored generated/worktree Markdown and untracked files do not change candidates, while modified/deleted tracked files are respected. Exact-head CI run39790990072passed; this is the complete ignored-file acceptance scope.
[x] SOURCE-CREDENTIAL-001 — Distinguish credential literals from Python assignment expressions
GitHub issue: #52
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: Distinguish credential literals from Python assignment expressions
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Execution decision: Use inert Python AST positions to distinguish assignments of credential-free expressions from literal credentials. Exempt only exact assignment matches with no string/bytes literal in their value; preserve uncertain-language, syntax-error, secret-literal and filename exclusions. An entirely excluded inventory must produce a typed classification diagnostic without matched content.
Current evidence: See the source admission batch for local tests and remaining integration qualification.
Adversarial review repair: A literal-free assignment must not exempt a different credential literal elsewhere in the file. Add mixed assignment/dictionary/keyword/default and embedded-private-key controls, then renew qualification.
Closure qualification: Landed implementation on
75d73ac2; fresh managedtest_source_inventory_credentials.pypassed all five tests, including both complete inert portable fixtures, nine mixed-secret controls, malformed/unknown-language and private-key exclusions, Unicode offsets and typed value-free diagnostics. The full landed source qualification passed 2131 tests with 71 platform skips and no failures; exact-head CI run39790990072passed.
[x] GENERATION-REFUSAL-001 — litai test --target host: generation returns empty source when the coding CLI refuses shell use
GitHub issue: #51
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: litai test --target host: generation returns empty source when the coding CLI refuses shell use
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Execution decision: Use the existing bounded/redacted failure path for empty generation, retain stdout and stderr refusal evidence, and report the selected isolation profile. Preserve the deliberate no-retry policy for deterministic empty output. Verify refusal text, both streams, credential redaction and one attempt.
Current evidence: See the source admission batch for local tests and remaining integration qualification.
Closure evidence: The current managed generator module passes all 20 cases with no skips, including the real error classifier with synthetic successful-empty process output: bounded reasons from both streams, secret redaction, selected isolation profile and one attempt for deterministic policy refusal. The owner and regression bytes exactly match landed main
d5c7b278and qualified source20508324(CI39790990072, success). Seeverification/generation-refusal-acceptance.json; no live provider refusal is claimed.
[x] HTML-CANVAS-001 — litai render html graph canvas does not grow with its row
GitHub issue: #50
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: litai render html graph canvas does not grow with its row
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Current evidence: The 1.3 implementation batch records the exact local checks and remaining native/integration gates.
Closure qualification: A real Chromium browser loads the public installed-CLI graph and SRI-pinned Cytoscape without substitution. The canvas and all three drawing buffers grow from 470 to 1100 pixels with the inspector; zoom changes pixels, filtering changes selection and selected-node focus works. Desktop/mobile screenshots and accessibility structures were inspected: no browser errors, failed requests, invalid numeric text or mobile overflow. Relevant HTML sources match landed
a6a22996; seeverification/html-issue-acceptance.json. This is issue acceptance, not release qualification.
[x] HTML-VERSION-001 — version-check HTML view can never be current at a clean commit
GitHub issue: #49
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: version-check HTML view can never be current at a clean commit
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Current evidence: The 1.3 implementation batch records the exact local checks and remaining native/integration gates.
Closure qualification: The fresh public non-editable CLI renders declared version/graph pages into a real canonical Git project. Dirty-before-commit and clean-after-commit HTML verification both pass across different exact HEADs; changing semantic project version fails as stale and restoration returns current. The HTML owner source matches landed
a6a22996byte-for-byte; seeverification/html-issue-acceptance.jsonfor artifact, source and retained proof identities.
[ ] NATIVE-CHILD-UPDATE-001 — Support reviewed updates to registered native child projects
GitHub issue: #48
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: Support reviewed updates to registered native child projects
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Installed journey result and next action: Both non-editable installations import from site-packages. The public CLI completes reviewed registered rebind, stale-registry refusal without mutation, and reviewed unqualified-child replacement; parent validation passes after each. The retained recovery matches all 313 original files, 244 directories and 2,324,779 bytes against the pre-write plan. Final generation writes no source because the zero-argument public API cannot provide three distinct valid argument vectors. Independent acceptance and remaining refusal/rollback controls are incomplete; no candidate receipt is promoted. See
verification/registered-child-installed-partial.jsonand blocking #132. Review proposed ADR 0051 before changing the coverage contract; retain the unchanged independent oracle and existing zero-argument API.
[ ] PYTHON-LIBRARY-001 — Support verified Python wheel dependencies for library Components
GitHub issue: #47
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P0
Owner: framework authority and qualification named by the linked issue
Direction: Support verified Python wheel dependencies for library Components
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Current evidence: The 1.3 implementation batch records the exact local checks and remaining native/integration gates.
[x] README-PARENT-001 — Ensure project README links to its actual parent repository through a reusable skill
GitHub issue: #46
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: Ensure project README links to its actual parent repository through a reusable skill
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Current design: Route initialization/adoption/update/reparent agent workflows through a reusable parent-README skill. Its inert plan/apply helper reads validated direct-parent lineage, preserves authored README bytes outside its managed block, and requires an explicit browser URL for local-only parent identities.
Installed-runtime correction: Expose the helper through
litai project parent-readmeso isolated framework installations do not require an ambient Python import. Renew CLI and installed-launcher evidence before landing.Implementation:
- Route initialized and maintainer agent workflows through the reusable parent-README skill and read-only plan / authorized apply helper
- Cover actual initialized/reparented projects, arbitrary and multiple parents, authored prose, idempotency, local URL evidence and unsafe inputs
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Closure qualification: The actual non-editable installed public CLI plans without writes, creates a descriptive browser link for an arbitrary SSH parent, applies idempotently, reconciles multiple changed parents while preserving authored CRLF bytes, and invents no parent for a root project. All ten parent-README contract cases pass in the current full 2139-pass source suite. Generated and maintainer instructions route through the reusable skill. Relevant implementation matches already-landed a6a22996. See
verification/installed-maintenance-acceptance.json.
[x] WORKER-GPU-MEMORY-001 — Preserve unavailable NVIDIA GPU memory in POSIX worker observations
GitHub issue: #44
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: Preserve unavailable NVIDIA GPU memory in POSIX worker observations
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Current evidence: The 1.3 implementation batch records the exact local checks and remaining native/integration gates.
Closure qualification: Landed implementation on
75d73ac2; fresh managedtest_worker_capabilities.pyselection passed seven tests. The portable NVIDIA fixture executes the POSIX serializer for unknown, positive and failed-query memory cases; the Windows serializer emits explicit JSON null for unavailable memory. This closes the observation/serialization contract and makes no physical GPU capacity claim.
[ ] HOST-WINARM-001 — Add native Windows ARM64 host-install realization
GitHub issue: #43
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: Add native Windows ARM64 host-install realization
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
[x] REFRESH-PERFORMANCE-001 — Repository refresh input checks re-walk gitlink inventory with thousands of git launches
GitHub issue: #27
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: Repository refresh input checks re-walk gitlink inventory with thousands of git launches
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Current investigation: Replace repeated discovery of already-bound Git inventory with bounded re-observation of exact retained bytes and metadata. Keep fresh configuration/HEAD/cleanliness/worktree observations, exact root authority recomputation, complete index/parent/ref/reflog custody, and fail closed on any drift. Measure real subprocess count and all refresh tamper cases before accepting the optimization.
Implementation:
- Revalidate bound file/metadata custody instead of rediscovering unchanged Git inventory
- Retain full discovery twice at preparation and fresh Git fallback for included configuration, packed commits and shared worktree registries
- Meet the reported real-Git journey budget: 427 launches, 8.9 seconds; retain a <=500-launch regression
- Pass the existing 24 refresh tests in 210.8 seconds and expanded seven-test input/ref/registration/locator/configuration/object controls
Evidence:
- Run the issue acceptance cases and required integration qualification before closing
Closure qualification: All 26 current refresh cases pass on local macOS with no skips in 216.957 seconds (under the 300-second limit), including the real-Git <=500-launch regression and unchanged index/ref/Gitlink/registration/locator/configuration/rollback refusals. All owning refresh and orchestration source, contracts and fixture/test bytes match original optimization
b7269a9f, exact CI-qualified20508324and landed maind5c7b278. Seeverification/repository-refresh-performance-acceptance.json; this does not claim the separate entrypoint-audit suite is green.
[x] BRACES-AUDIT-001 — Remove the temporary braces audit exception once a patched release exists
GitHub issue: #24
Current release target: 1.3.0 (2026-10-18 reconciliation)
Priority: P1
Owner: framework authority and qualification named by the linked issue
Direction: Remove the temporary braces audit exception once a patched release exists
Conclusion: Include in 1.3. Preserve the issue acceptance contract and fail-closed authority boundaries. Detailed implementation follows inspection of the owning code.
Depends on: none
Implementation:
- Upgrade OpenSpec without weakening strict validation; split existing overlong requirements while preserving every normative sentence
- Implement the linked issue contract without relaxing existing validation
Evidence:
- Complete the issue’s clean-audit requirement: remove the five remaining low KaTeX-chain findings through a normally resolved supported renderer release, then require zero total findings and renew all documentation/strict gates.
- Run the issue acceptance cases and required integration qualification before closing
Current evidence: The 1.3 implementation batch records the exact local checks and remaining native/integration gates.
Current audit: The exception list is already empty in current main (ancestor 4ceedbe9). Fresh staged OpenSpec installation reports five low findings and no high/critical findings; strict validation and documentation checks pass. Review #24 for closure against its original contract after confirming the landed dependency change; no exception restoration or dependency downgrade is proposed.
Earlier staged audit (not final closure): Main contains OpenSpec 1.14.3 and no
bracespackage in the lock; the exception list is empty. A fresh clean staged install andnpm audit --audit-level=highexit zero: 0 high, 0 critical, 0 moderate, 5 low. The normal documentation gate passes all 21 tool tests and renders all 121 diagrams; all four strict OpenSpec specifications passed on this same tooling source. The remaining low findings are reported honestly and do not reinstate the removed high-severity exception.Final clean-audit qualification: A fresh install and audit at every severity report zero vulnerabilities. A normally resolved KaTeX 0.18.2 override removes the five inherited low findings; every other lock package and the Mermaid CLI 11.16.0 pin remain unchanged. The new real-library inherited-trust regression fails on 0.16.47 and passes on the patch while preserving explicit trust. All 22 tool tests, 121 diagram renders and four strict specifications pass. The unchanged CLI also renders two actual mathematical expressions with the patched library. See
verification/documentation-audit-qualification.json. No advisory exception, audit threshold change or forced dependency downgrade is used.
[ ] RETAINED-CATALOG-001 — Bind complete retained input ownership to canonical Component catalogs
GitHub issue: #74
Priority: P1
Owner: retained input contracts and canonical catalog planning
Direction: Represent complete native source trees through canonical Components while retaining original implementation authority and selected target locks.
Conclusion: Add exact canonical Component ownership to retained input manifests and revalidate it against the actual authored catalog during planning. This is input coverage only; selected native actions, packages, independent acceptance and scale qualification remain separate requirements under issue #74.
Depends on: RETAINED-PROJECT-001
Implementation:
- Bind typed ownership rules to exact canonical Component authoring identities and all retained file/directory inputs
- Revalidate ownership against the actual canonical catalog through retained planning without changing legacy identities or execution refusal
- Integrate selected native actions, variants, per-unit packages and independent acceptance with bounded full-catalog scale
- Bind exact per-unit output/source/build package ownership and typed dependencies to the admitted multi-Component closure; reject ambiguous, overlapping or uncovered package members and preserve complete receipt/BOM custody.
Evidence:
- Canonical catalog fixtures reject unknown/stale owners, uncovered or ambiguous inputs and changed shared ownership; existing retained planning remains compatible
- Public installed CLI and native multi-component execution, package custody and complete-tree scale qualification pass before closing issue #74
Current ownership checkpoint: ten portable contract tests include 40,000 files,
8,001 directories and 8,001 ownership rules; 55 retained-project regressions and
six actual-catalog lock/planning tests pass locally. At ownership revision 3badbdb7,
the full Python gate passes 1,684 tests with 36 skips in 3,095.295 seconds.
Authority validation passes; the
configured lifecycle receipt remains stale. The catalog planning fixture
uses real authored files/locks with explicit test trust for distribution,
conversion and project validation; it is not installed/native qualification.
Native selected actions, shared consumer/variant binding, per-unit package
products, installed CLI and complete native-tree admission remain open. No
retained execution or package acceptance is inferred from coverage.
The current retained package owner projects all admitted payload members into one archive selected through a packaging-provider lock. That aggregate custody is not a separate package for every Component. Per-unit qualification requires an explicit current ownership partition, version/target/options binding and typed source/build/runtime relationships. Inspect every constructed native pkg and its reopened payload, including source/build units linked into larger products. Preserve complete evidence and refuse gaps, overlap, stale ownership or dependence on retired build paths; do not infer package partitioning from the presence of several Component locks in one project receipt.
Source-link admission checkpoint for RETAINED-CATALOG-001: the pinned FreeBSD
source tree has 138 Git symlinks, all pointing to present internal inputs. Add
explicit bounded POSIX target-text/kind custody, closure/cycle validation and
snapshot preservation while leaving discovery opt-in, legacy identities and
public execution refusal unchanged. All twelve new checks pass, including the real
114,644-file, 9,856-directory source corpus and all 138 Git link targets in
226.888 seconds. Its manifest identity is
sha256:ec88abe4c9ca60865255eaf39922385193c83829b688c809001e8a6332110a7a.
The 55 retained-project, ten ownership and six actual-catalog lock/planning
regressions also pass. This is complete selected input discovery/validation and
small-fixture snapshot custody; it is not a full source-tree snapshot, canonical
native catalog registration or Component action/package/lifecycle acceptance.
Full-suite, installed and native qualification remain separate gates.
[x] RECEIPT-REFRESH-001 — Refresh the current project test receipt through the complete lifecycle
- Priority: P1
- Owner: Project receipt lifecycle and generated-test guidance
- Direction: Fix the stale current project receipt.
- Conclusion: A fresh lifecycle run rejected a generated case ID colliding with independent acceptance. Clarify generated case naming while preserving all refusal checks, then earn and promote a newly finalized passing candidate. A later run exposed a missing retry classification for rejected JavaScript bundle modules. Use the existing three-candidate budget and retain refusal evidence; authentication and post-build failures remain terminal.
- Depends on: none
- Implementation:
- Keep generated implementation case IDs distinct from independent verifier IDs.
- Retry missing JavaScript bundle modules within the existing bounded policy.
- Review and record the exact runner source closure after the retry change.
- Promote only a newly finalized all-passing lifecycle candidate.
- Evidence:
- Complete the host-eligible sample lifecycle and pass test-receipt check, require-current and litai verify.
- Recorded result: Commit
597250a9promotes the finalized passing 22-sample host lifecycle (228 tests, 26 component locks, all required evidence roles). Supported candidate check and require-current pass;litai verifyreports two passes, zero failures and three configured skips. The complete framework suite reports 1,525 tests with 37 skips; installing Elixir enables the nine class-setup omissions and all 19 explicitly gated Elixir cases, including native Make, Bazel and Mix proof.
[ ] RETAINED-FS-001 — Observe retained product filesystem effects through private verifier cases
- GitHub issue: #22
- Priority: P0
- Owner: Retained acceptance contracts and bounded verifier owner
- Direction: Qualify original filesystem utilities without replacing file effects with successful process exits; framework issue #22 owns retained lifecycle integration.
- Conclusion: Add opt-in private case fixtures and bounded file-state expectations to independent retained acceptance. Preserve legacy identities and sealed exports; retain actual observations and reject mismatches, unsafe nodes and resource overruns. Public execution, source admission and release authority remain separate.
- Depends on: Existing retained command, SDK and acceptance owners under RETAINED-PROJECT-001; this capability does not wait for the broader program to close.
- Implementation:
- Define typed optional filesystem fixtures, expectations and explicit limits with unchanged legacy case wire identities.
- Run sealed products in fresh owned case workspaces through existing process and SDK owners; independently observe bounded no-follow file states and retain mismatch evidence.
- Evidence:
- Real programs demonstrate resize and content preservation; an always-zero wrong product, extra files, links, aliases, changed fixtures and exceeded budgets refuse.
- Legacy retained cases, SDK scope, receipt/package custody and native installed qualification remain correct; no per-unit source or release completion is inferred.
Local development evidence: all 11 focused filesystem cases pass, including real compiled writes, repeated private fixtures, zero-exit wrong-output refusal, pre-execution fixture substitution, link/special-node and resource/mutation refusal, whole-run substitution and receipt retention. All eight SDK cases also pass, including a real selected producer and the new private case through live command scope. A first whole-run probe exposed that private HOME/temporary paths change dependency context; separate run/case bindings now preserve both checks. The complete retained regression passes 134 tests (133 passed, one actual-native pkg construction case skipped) in 231.322 seconds. Lint/format, layout/export, strict OpenSpec, 21 Node checks and all 121 documentation diagrams pass. Next action in progress: freeze and run the exact-head full suite, then qualify native and installed behavior without advancing public execution, conversion, release or source/ports unit admission.
[ ] RETAINED-LOADER-001 — Bind captured native runtime search paths in retained profiles
GitHub issue: #22
Priority: P0
Owner: Retained lifecycle profile and execution environment
Direction: Run captured native compilers and tools against their selected shared-library closure without inheriting ambient loader injection.
Conclusion: Add opt-in ordered input-relative runtime directories to the reviewed profile; validate captured role ownership and bind their projected POSIX loader environment to existing dependency observations. Preserve legacy identities and refuse unsupported hosts. SDK admission and public execution remain separate.
Depends on: RETAINED-PROJECT-001
Implementation:
- Define bounded canonical path selection and unchanged legacy wire identities.
- Project only captured toolchain/SDK/dependency directories through the existing credential-free environment.
Evidence:
- Run a real linked private tool in a retained workspace and reject undeclared, redirected, changed and unsupported search paths; preserve default behavior.
- Run retained regression, authority/style/documentation gates and native renewal before qualification.
Five focused checks pass, including a compiled private-library tool that fails without its declared loader path and passes all four actual retained commands with captured paths. All 139 retained checks pass locally (138 passed, one native-only pkg construction skip) in 240.266 seconds. The original probe exposed that macOS/Linux observers assumed host loader paths for build tools; explicit tool runtime context now matches execution, while host inspectors retain their separate context. Lint/format, layout/export and strict specifications pass; all 121 documentation diagrams render. Native/installed renewal remains open. Next action in progress: qualify this exact implementation through the full suite and native execution before exposing it to the operator workstation.
[ ] PROJECT-SESSION-MEMORY-001 — Opt-in project and individual CLI session memory
- Priority: P2
- Owner: Project configuration and provider-neutral agent onboarding
- Direction: Offer project-local MEMORY.md support for individual CLI sessions in a later point release, targeted at 1.3.1 rather than 1.3.0.
- Conclusion: Provide an optional small project memory index linked to separate bounded session notes for decisions, failed approaches, evidence locations and resumable next actions. Specifications, issues and the roadmap remain authoritative. Keep notes local and ignored by default, exclude credentials and sensitive transcripts, and require revalidation of stale facts before action. This entry authorizes planning only; it adds no memory files, automatic persistence or changes to user-level agent memory.
- Depends on: 1.3.0 release completion
- Implementation:
- Design an opt-in project memory attribute and provider-neutral discovery through existing onboarding; define per-session ownership, naming, bounded index and notes, timestamps and exact revision or evidence references, privacy defaults, retention and explicit sharing policy.
- Implement deterministic CLI-supported creation, reading, update and resume behavior after the design is reviewed; preserve authority boundaries and avoid competing cross-session writes.
- Evidence:
- Prove no writes when disabled, isolated simultaneous sessions, safe atomic updates, stale-evidence revalidation, secret exclusion, bounded retention and portability across supported CLI providers and hosts before shipping in a later point release.
[x] STANDARD-FIRST-BIND-001 — Migrate retained receipt-only projects to reviewed Standard binding
- Priority: P1
- GitHub issue: #107
- Owner: framework lifecycle binding and receipt authority
- Direction: Enable explicit reviewed Standard first binding while retaining project-owned receipt requirements and historical evidence.
- Conclusion: Plan against exact installed authority and current project identity, preserve custom receipt policy, reject executable driver replacement and tampered or stale plans, and retain compare-and-swap rollback. This is configuration migration only.
- Contract: Receipt-only first binding uses a distinct versioned plan with an explicit null previous binding. Preserve the entire existing receipt policy; without an old Standard driver there is no derived runner identity to advance. Existing bound-project plans keep their schema and projection semantics. A project with neither receipt policy nor driver uses the separate native initial-binding route, and an existing custom executable driver cannot migrate through this operation.
- Depends on: STANDARD-REBIND-001
- Implementation:
- Add a versioned first-binding plan/apply route through the existing reviewed command, preserving bound-project plan compatibility.
- Document receipt-only migration and keep the original acceptance contract intact.
- Evidence:
- Positive public CLI planning/apply, unchanged historical receipt, custom-policy preservation, denied authorization, rehashed weakening, project/installed drift and post-write rollback pass.
- Thirteen focused rebind/first-binding tests, lint, formatting, repository layout, public export, documentation, OpenSpec and reviewed driver closure checks pass on the controller.
- Complete full controller regression and exact clean-commit installed-wheel qualification. At
73311c69, Python 3.14.7 passes 1,801 cases with 42 explicit skips and no failures; the exact wheel and all installed smoke checks pass. - Qualify the actual installed CLI on a native receipt-only project copy; preserve original evidence and retain missing lifecycle admission. FreeBSD 16 / Python 3.12.14 verifies all 37 offline distributions, passes all five real CLI operations and preserves all 42 historical evidence files. All 13 exact committed contract cases also pass with installed imports and no skips. Two preceding harness failures remain retained; neither changed production authority.
- Pass exact-head required hosted CI before landing.
Evidence: exact wheel and native migration checkpoint. Draft PR #108 remains open pending exact-head hosted CI. First binding does not execute or admit a retained source lifecycle, SDK, package, ISO or release.
- Closure qualification: Fresh non-editable installed CLI planning binds exact installed authority without writes; denied authorization, rehashed policy weakening and replay refuse. Exact authorized apply preserves the complete receipt policy and historical receipt bytes, and explicitly retains stale-until-rebuild rather than minting acceptance. All current rebind/first-binding contract cases pass in the full 2139-pass source suite; the earlier real FreeBSD custom-policy migration proof remains retained. The implementation already landed with reviewed integration #110 and exact CI 39790990072; earlier draft #108 is superseded. See
verification/installed-maintenance-acceptance.json.
[ ] NATIVE-FIRST-BIND-INTEGRATION-001 — Qualify native original-source admission with reviewed first binding
- Priority: P1
- Owner: framework native retained lifecycle and binding integration
- Direction: Combine the reviewed first-binding repair and native original-source admission in one qualified installed distribution for retained products.
- Conclusion: Preserve both review branches and source authority. A merged source tree is a candidate until its exact full regression, installed wheel, native first binding and original-source planning pass; it does not confer downstream lifecycle or release acceptance.
- Integration contract: Preserve the native initial-binding plan for projects with neither driver nor policy and a configured receipt path; preserve the distinct receipt-only first-binding plan and complete existing policy; retain ordinary Standard rebind and reject a configured driver without policy. Never reinterpret one plan schema as another authority state. Resolve GNU Make fixture selection through the shared toolchain observer. Predecessor qualification stays scoped to its own revision until the combined candidate passes.
- Focused integration: The 18 combined binding cases pass. The original-source
refusal fixture exposed diagnostic telemetry under its complete source snapshot;
route that declared output to a separate owned
OBJ_DIR, preserve the unchanged full source-byte assertion and check that the failed rebuild span is recorded. No source or execution guard is relaxed. All 38 focused checks now pass: 18 binding, 10 original-source adoption and 10 receiver-custody cases, with no skips. Lint, formatting, repository layout, public exports, documentation rendering, OpenSpec and driver review pass. The reviewed combined driver identity issha256:27208ae96d0c7d49e1d2581358b7e105874a03addf0bdc4c07aedb95dfb62ccc. Exact combined codee90cbadbpasses the full controller run: 2,105 selected, 2,035 passes and 70 skips, no failures, in 1,081.363 seconds. Its clean-commit wheel passes qualification. Offline isolated installs verify 36 controller and 37 FreeBSD distributions. Both installed CLIs preserve the receipt-only policy, initialize a fully unbound contract, explicitly refresh documentation review, and select original authority through metadata-only writes while preserving 270 source entries. Dirty source, missing acknowledgment and regenerative execution refuse. All 18 installed FreeBSD binding cases pass without skips. The first controller probe omitted documentation review and correctly refused; its failure remains retained, followed by a fresh corrected probe. No production guard changed. Qualification checkpoint. Draft PR #109 carries the combined review branch. Next require its exact-head hosted matrix and review disposition before landing. Other branches and 26 attached worktrees remain retained; this task does not collect unrelated peer work. - Depends on: STANDARD-FIRST-BIND-001, FREEBSD-001
- Implementation:
- Integrate exact PR87 and PR108 revisions without losing source, tree package, access or binding contracts.
- Resolve shared driver/documentation authority through reviewed tools and retain the exact combined revision.
- Evidence:
Combined full controller regression, static/documentation/driver checks and exact clean-commit installed wheel pass.
Aligned native installation verifies the complete dependency closure and real public CLI first-bind/original-source planning, with historical policy preserved and no fabricated receipt.
Exact-head hosted matrix and review disposition pass before main landing; preserve parent reviews until coordinated.
[ ] ORIGINAL-ADOPT-001 — Bind original project authority without relocating source
GitHub issue: #22
Priority: P0
Owner: Original-source adoption contracts, project command and conversion authority store
Direction: Preserve conventional native source trees while adopting explicit retained project authority through the framework.
Conclusion: Add an independent original initial authority stage and read-only Git/project-bound plan with acknowledged apply. Preserve original files and hierarchy, forbid transitions into legacy conversion stages, and leave retained execution, SDK, receipt and release gates unchanged.
Depends on: RETAINED-PROJECT-001
Implementation:
- Define original initial authority semantics without changing existing wrapped/retained/drafted/qualified wire identities.
- Expose a reviewed in-place original-source plan/apply command over an already-authored canonical project; bind project authority and clean Git commit/tree without executing its build.
Evidence:
- Prove preserved source files, exact metadata-only writes, stale-plan refusal, collision/dirty/unsafe-root refusal and permanent refusal of regenerative conversion transitions.
- Run existing adoption and retained planning regression gates.
- Run full regression and native/installed renewal gates.
- Initialize an actual native source project only after authoring and validation.
Partial evidence: The managed Python gate passes all 22 adoption checks, including nine real Git/worktree and public-command original-adoption checks. All six current-lock/planning checks pass, including original-stage retained planning with a distinct authority-bound identity and no execution admission. Repository lint, format, layout and public-export checks pass. Ordinary rebuild refuses the original stage and directs the operator to retained planning. Next action in progress: full regression qualification before native deployment; complete source-project coverage and native admission remain unfinished.
An actual original native source tree now has three validated, current locked unit contracts and the explicit original authority projection. Applying its reviewed Git/project-bound plan created only authority/evidence metadata and preserved tracked source bytes. This demonstrates initial authoring/adoption; complete tree ownership, native execution and per-unit pkg qualification remain unfinished and are not inferred from those three locks.
The initial full regression stopped after 1,287 tests because the repository's documentation authority marker had not been refreshed after these documentation changes. Its managed review marker is now refreshed and project authority validation passes. This failed run is retained separately; full renewal remains required before native deployment.
The combined renewal then reached 1,470 tests and found the new public verb missing from the CLI reference inventory. Both its inventory entry and usage table are now documented; both CLI-help checks pass. The failed full log is retained separately, and exact combined full renewal remains required.
The next full run reached 1,634 tests before fixture cleanup found a recreated
Git objects/info/packs file after its assertions passed. The original-adoption
fixture now uses the existing shared Git helper with automatic maintenance and
GC disabled. A real Git trace check enables repository auto-maintenance policy
and proves the fixture still starts no maintenance/GC child. All ten original
adoption checks pass; ordinary cleanup and source-integrity assertions remain
strict. This test-only repair changes no production execution policy. Full
renewal is still required; none of the interrupted runs is counted as passing.
[x] LOCK-TARGET-001 — Verify the committed Component target
GitHub issue: #79
Priority: P0
Owner: Project lock-health observation
Direction: Report current non-host locks accurately without rewriting their target or weakening verification.
Conclusion: Read the committed target through the typed catalog-bound lock owner, then reuse current project selector and lock/audit checks. Preserve stale project configuration and input refusal.
Depends on: none
Implementation:
- Use the catalog-validated committed target in read-only project lock health.
Evidence:
- A real non-host project lock passes verify/status and exact lock checks; dependency, target/audit and project selector drift still refuse.
- Complete full-regression and installed/native renewal before deployment.
Partial evidence: All seven lock-health regression checks pass, including six real non-host target/current-policy/refusal checks and the existing installed HTML lock-state fixture. Three project-verification checks also pass. Lint, format, repository layout and public-export checks pass. No native build, package or release admission is claimed by lock-health verification.
- Closure qualification: Fresh native macOS public installed-wheel commands lock a real canonical Standard project for
native-test; verify, status, the exact lock check and the typed current-lock reader agree onsha256:5a34134ef5e43251a15db4f128d96ede0ef1c5d8eb32cd38f232fa044ee06205. Project file bytes remain unchanged. Actual selected-Flavor, target-binding and missing-audit mutations refuse, and restoration returns current. The six portable regressions pass and the complete source suite passes 2139 cases with 71 explicit skips. All relevant lock-owner code matches landeda6a22996exactly; seeverification/installed-lock-entrypoint-acceptance.json. This verifies read-only target selection, not construction for a foreign target.
[x] TRACKER-REPO-001 — Bind forge commands to the selected repository
GitHub issue: #80
Priority: P1
Owner: Tracker command generation
Direction: Preserve the chosen fork/origin identity in generated issue and review CLI commands.
Conclusion: GitHub CLI context can select an upstream parent even after tracker inspection chose the fork. Bind emitted commands explicitly to the parsed selected repository; use explicit repository arguments as the current operator mitigation.
Depends on: none
Implementation:
- Extend the existing forge command owner with explicit repository identity without changing remote-selection policy or exposing credentials.
Evidence:
- Portable fork, multiple-remote, enterprise-host and ambient-override fixtures preserve the selected repository across all emitted commands; external writes are not needed for qualification.
Closure qualification: Landed implementation on
75d73ac2; fresh managedtest_project_tracker.pypassed five tests. Every emitted issue/review/create/merge/status argv carries the selected repository explicitly across fork-style SSH/HTTPS, multiple remotes, enterprise hosts/ports and ambient forge overrides; credentials and unsupported repository paths fail safely without external writes. Exact-head CI run39790990072passed.
[x] CATALOG-FETCH-001 — Fetch immutable catalog snapshots without full history
GitHub issue: #83.
- Priority: P1
- Owner: Catalog Git source acquisition
- Direction: Import small catalogs from large upstream-derived repositories efficiently while preserving exact provenance.
- Conclusion: Use bounded shallow and filtered sparse acquisition for explicit immutable commits, then initialize only relevant selected submodules; preserve other selector behavior and fail closed on missing input. Shallow history alone still transfers the entire selected tree and is insufficient for large source repositories.
- Depends on: Git source identity and catalog DAG validation
- Implementation:
- Fetch exact commit pins without transferring default-branch history; request blob filtering and sparse selected directories, then initialize only relevant submodules at the requested revision.
- Retain canonical provenance, bounded process behavior and destination preservation on acquisition failure.
- Evidence:
- Real Git fixtures prove old pinned contents and shallow ancestry, SHA-256 repositories, selected submodule data without private Git metadata, omitted unrelated blobs/submodules, rejected traversal, and no destination mutation on failure. Eleven catalog checks pass; an actual pinned upstream-derived source import succeeds with canonical resolved-commit provenance.
- Existing catalog and full framework regression checks pass: 1,850 passed, 42 skipped and no failures (1,892 selected) in 1,063.469 seconds. Report SHA-256
d4885099d94eba41785a4b7795af11a10f20869fe0eca69aa6e8730799e1d5d6; log SHA-2567fc7ae0393d46d09ca5561950edcf298438682e9aa6ef55fc9dd8d00de7bb255. Lint/format, layout/public-export, strict OpenSpec and reviewed TCB checks pass.
[x] SBOM-SCALE-001 — Bound strict validation cost for large retained inventories
GitHub issue: #84.
- Priority: P1
- Owner: Dependency CycloneDX adapter
- Direction: Reduce elapsed native build time without dropping full per-file provenance or validation.
- Conclusion: A real 5266-member source BOM took 88.3 seconds in portable profiling, with 84.3 seconds in quadratic uniqueItems checks. Preserve the official strict schema, registry, formats and semantic joins; use a local equivalent structural uniqueness implementation, without global mutation. GitHub issue: https://github.com/jordanhubbard/literate-ai/issues/84
- Depends on: Existing strict CycloneDX and retained BOM owners
- Implementation:
- Use bounded structural JSON equality for strict validator uniqueness while preserving all other keywords and canonical BOM bytes.
- Evidence:
- Differential equality fixtures, strict schema/refusal regression, deterministic large-inventory scaling and unchanged actual BOM identity.
- Complete full framework regression: 1,855 passed, 42 skipped and no failures across 1,897 selected tests in 1,044.628 seconds. Report SHA-256
95b14ef1ed69a5c656e39d55e77627ca586a34e047f53fd57d7c939e0c1ea97f; log SHA-25690ff8bbc8b73c400188fbf90799094d8bd728907508dac0c95b52cddcfde68e8. - Complete native installed renewal. Exact installed
6e370033constructs and verifies source/resolved BOMs during the real FreeBSD retained lifecycle: all 24 original cases pass without skips, all 34 retained records reverify, independent acceptance passes and cleanup is receipt-bound. The strict CycloneDX/uniqueness and SBOM contract bytes remain identical on landedef5db15f; its exact-main CI succeeds in all 26 jobs. Seeverification/native-retained-renewal-development.jsonandverification/sbom-uniqueness-closure.json.
Partial evidence: Seven focused checks pass. Structural equality agrees with
the original validator across nested JSON, numeric/boolean distinctions, object
ordering and Unicode; non-JSON fallback, offline SPDX references, unknown-field
refusal and global-validator preservation also pass. The 6,000-object fixture
visits exactly 36,000 JSON values, with a duplicate at the end still refused.
The actual 5,266-member source inventory produces the same 4,661,185-byte BOM,
identity sha256:04db30dfa7c9e1e1e368562ba3c31d66770463eca16c20f73421c5330cdf4885.
An unprofiled comparison in the same Python 3.14.7 environment takes 20.251011
seconds with the prior validator and 1.417537 seconds with this adapter.
Baseline log SHA-256 e491cb95763ae80209daa61ecffdc06113a9d2d583c3f5ad77d18f084fc4b691;
optimized log SHA-256 964c238285967f933ff752546255c74d1be71d8c7dc84ed7dfdc32ca4c1bb77b.
These are source-BOM timings, not whole-build or native qualification claims.
Completion: Portable semantics/scaling, full regression, installed native strict-BOM execution and landed platform CI qualify issue #84. The timing comparison remains a source-BOM operation measurement, not a whole-build speedup or SDK/package/release admission.
The first full attempt retained 1,427 completed checks and no recorded failure, then was deliberately interrupted for host overload: twelve outer test workers plus nested builds saturated the twelve-core host. Its logs/checkpoint remain; it is not a passing full gate. A fresh complete run now uses four outer workers, rather than treating resumed partial coverage as release qualification.
[x] RETAINED-USER-001 — Bind secondary test identities to scoped workspace access
GitHub issue: #85.
Additional GitHub issue: #94, private allocation-prefix search delegation. Existing #85 remains the scoped identity/custody owner.
- Priority: P1
- Owner: Retained execution profile and workspace custody
- Direction: Execute complete original test suites with their privileged and explicitly unprivileged user requirements.
- Conclusion: Native run and output directories are private mode 0700; selecting a secondary account alone cannot execute captured test programs through them. Preserve private defaults and add reviewed worker/profile-bound resource grants, current UID/GID observations and permission custody. GitHub issue: https://github.com/jordanhubbard/literate-ai/issues/85
- Depends on: RETAINED-PROJECT-001 and FREEBSD-001
- Implementation:
- Add a strict numeric secondary identity and read-only POSIX currentness adapter. Nine focused controller checks pass, covering forward/reverse aliases, group and observation drift, unsupported platforms and actual local lookup. A source-level disposable FreeBSD probe also passes the exact UID/GID 2001 lookup, eight checks and one root-account skip, preserving both accounts. This prerequisite does not grant workspace access.
- Add the FreeBSD POSIX ACL descriptor backend: preserve exact original access/default ACLs, reject permission drift, hardlinks and foreign owners, and never restore through a reused descriptor onto another inode. Shared-mask widening clamps existing entries to their previous effective permissions. Fourteen focused checks select 13 passes and one unsupported-platform skip on the enabled disposable guest; five portable checks pass on the controller, with nine native skips. A separate 27-check native probe passes.
- Bind exact traversal/read/execute/fixture-write scope through existing workspace and provisioning owners; refuse mutable identity and permission drift without broad chmod or silent account creation.
- Close the private allocation-prefix ingress gap from installed original execution (#94). Preserve the preceding 22/24 failure, Kyua database, CAS output and successful mount cleanup. Scoped named-user search protects unrelated siblings, refuses inaccessible outside ancestors and restores exact permissions. Installed
6e370033now passes all 24 original cases without skips, including both previously denied launchers, and admits the retained local-runtime result after independent acceptance and cleanup. Canonical SDK, pkg and release qualification remain separate. Native source-level renewal also passes all 16 read-only-view and secondary-receipt checks with no skips, including real identity-drop access, private sibling refusal, inaccessible external ancestors, permission drift and exact ACL restoration. This protocol-peer fixture is distinct from the installed run on an actually supervised allocation. - Implement the separate FreeBSD read-only view owner with canonical disjoint backing paths, manifest alias binding, actual mount flags, vnode identity, fresh fixtures and private-root restoration before unmounting. Ten native source-level checks pass with no skips, covering writable mounts, busy cleanup, account/source/root drift, unrelated new children, actual secondary-user operations and exact normal/exception cleanup. Inspector qualification and installed workspace/receipt integration remain open.
- Integrate lower-level workspace command scoping: verify allocation/parent before capture, reserve named view/fixture arguments, mount sealed exports after build and activate/revoke only eligible test commands. Failed constructors retain private backing trees. Cleanup-bound completion/receipt retention and operator-private local orchestration are now implemented; this does not qualify the installed feature.
- Bind optional exact worker/account/test actions, read-only input/export view prefixes and fresh fixture names into profile/plan identity. Preserve absent-field serialization; reject overlapping prefixes, namespace collisions, unproduced exports and aliases escaping the selected manifest view. Twelve focused policy checks pass. The workspace requires a typed live allocation and enforcing view owner. Local orchestration resolves operator-private authority before platform/cache effects and creates sessions under its inspected prefix.
- Add a separate optional operator-local provisioning inspector and live allocation owner. Fresh nonce-bound process calls retain exact worker/plan/policy observations; instance, prefix, lifetime, configuration or process failures permanently revoke the owner. Eleven focused protocol/schema checks pass, alongside three existing provisioning smoke checks. These fixtures are not actual native allocation qualification; workspace/view/receipt integration remains open.
- Evidence:
- Identity prerequisite regression: 1,874 passed, 42 skipped, no failures across 1,916 selected checks in 1,039.060 seconds. Report SHA-256
329a5fec37f5a6d95313b2093a2f5df771c0d405f9081abf46489199e0224ac9. This does not implement scoped grants or qualify the complete feature. - Descriptor-backend full regression: 1,879 passed, 51 skipped, no failures across 1,930 selected checks in 1,015.463 seconds. Report SHA-256
62f6a447e2018599605fce03c90bb3e4a4478811e86b63d7ff0cc18dab514da0; log SHA-25670945fe918b96527b1eb0a83239d6570f8e32636abbc499da4a5e7c8715fbb1d. Native focused checks and the 24-case original-suite backend probe remain source-level evidence. - Policy-stage retained regression: 277 passed, 11 skipped, no failures across 288 selected checks in 219.171 seconds. This precedes the inspection owner and does not qualify installed scope or lifecycle integration.
- Policy/inspection retained regression: 288 passed, 11 skipped, no failures across 299 selected checks in 228.360 seconds. Report SHA-256
83b19103b7a36d1452cdd31a953889c3217cdfdae9500a67ae0415196ca3ad95. The 11 focused protocol/schema checks and three existing provisioning smoke checks also pass. Actual allocation, views and installed lifecycle remain unqualified; this is not the complete framework regression or a current lifecycle receipt. - Native view-owner source tests pass all ten checks in 39.395 seconds. Module SHA-256
7bd56c8b67c2a580b8303626962fc6afe5c13cea7f55128adba5f6156d375cc6; test SHA-2563d0dfbfc6b7bc71769ee3c65387ad766dcab290a570175b0580e7b4fb4a0cc8f. Post-test audit confirms no remaining nullfs mounts and unchanged test-account IDs. The allocation inspector is an explicit protocol fixture. An earlier seven-check run failed becausestatvfs().f_fsidreturned zero for both filesystems; its six mounts were recovered with private roots and unchanged source bytes. Failed logs are retained. - View-owner retained regression: 290 passed, 19 skipped, no failures across 309 selected checks in 301.541 seconds. Report SHA-256
1b3681f467be09aacab04ca534b5c7f1238bb34511c68e20e9d9e0328ab5e895; log SHA-256c7f18f7f811291e76bedfe2e177c4bcb7a30504450244dcdcae90c2d2f70679e. This is source-backend evidence; installed execution and actual provisioning remain open. - Command-workspace retained regression: 297 passed, 20 skipped, no failures across 317 selected checks in 263.107 seconds. Report SHA-256
6c68fa603b23d1eb13bd8f61f0c1f51842307426bc3b0aa9deb0932943ed21fe. Constructor failure retention and revocation failure after a successful command are covered. Installed execution, actual provisioner qualification and receipts remain open. - Native command-workspace source test: one pass, no skips in 224.210 seconds, including real secondary reads, private-input denial, fixture writes/removal and root read-only refusal. Execution module SHA-256
180648f4190b657eec794f69001e1a8294fded43a71b222f51ccbd833c526ebf; test SHA-256acf64e40eb712a0bbf85e9150907fa540e89c0e9c0941e9009c0ec5acc361338; log SHA-2569530e5680a64d76c4867cb516a076a1680f4bf187991fbf73bddcf1e51d46c64. Final audit confirms zero nullfs mounts and unchanged account IDs. The inspector remains a protocol fixture. The prior 11-case native run retained ten passes and one command error; its fixture used mode 0700 for the delegated export directory, corrected to explicit 0755. This does not run the original source suite or qualify an installed lifecycle. - Bind canonical secondary cleanup facts into completed-run identity after retaining live inputs/exports/observations. Exact plan/account/worker/commands, manifest mounts, activation/revocation history and fresh inspections are checked; failed retention and cleanup close resources and issue no admission. Add operator-private inspector selection, allocated-session routing and available failure diagnostics to local orchestration. Fifteen receipt, six evidence and 21 orchestration checks pass.
- Combined retained regression: 311 passed, 21 skipped, no failures across 332 selected in 271.326 seconds. Report SHA-256
1d0821dbc8f22d61026d6f71b99058fcce8f0ea12b3e31e3ab40b943c20608c4. This includes the CLI bridge but is not the full framework suite or installed qualification. - Native source-level receipt fixture: one pass, no skips in 760.742 seconds, including secondary operations, independent acceptance, cleanup-bound admission and materialized payload use after run retirement. Final audit confirms no nullfs mounts and unchanged account IDs. This exercises execution/admission owners with a protocol-peer inspector; installed CLI, actual provisioning and the original suite remain open. The initial attempt failed during import because the native Python lacked
_sqlite3; no lifecycle commands ran. That log remains retained. - Final retained regression after late-account currentness checks: 312 passed, 21 skipped, no failures across 333 selected in 275.180 seconds. Report SHA-256
22d1aa2c05a193ae2f3862004410a374b4a7ee199c8b56039557e98ad11b8b93. The exact account is checked after private content/dependency verification and cleanup; late drift prevents admission. The earlier 760.742-second native pass predates this last check. The renewed local-orchestration fixture and ten view-owner checks all pass without skips in 797.989 seconds; final audit finds no nullfs mounts and unchanged account IDs. Native log SHA-2566ce8039d4aa231c08cede6950531c618255b2ab4882141ba52ed46775bb00ddf. This uses an explicit inspector protocol fixture; installed/public CLI, actual provisioning and the original suite remain open. - Connect the source-level allocation owner to the actual supervised QEMU guest through a private SSH-forwarded socket. Two fresh inspections bind the reviewed fixture context to the same live process chain and attached overlay/seed; an insufficient lifetime refuses and permanently revokes the owner. Probe record SHA-256
f6f6b104cd7ab7641972d350e3dbe41a0e924a50aa5e0e9207c6cd1ef36d9f78. This bounded operator probe does not execute a retained lifecycle, qualify a reusable provisioner or admit an SDK. Its socket and guest configuration are removed after completion. - Repair the v2 catalog index to register both allocation-inspection schema resources. The first full regression stopped at this mismatch after 549 tests; preserve that failure. Five evidence-record and frozen-v1-schema checks pass after the repair. Full regression remains open until its checkpointed runner completes.
- Review the changed authority and user documentation, correct the earlier inspection-only development description and record the current documentation authority marker. The next full-check attempt reused 546 passes and ran 866 tests before its stale documentation marker stopped project self-description validation. Retain that failure; the documentation repair left the trusted-driver pin unchanged at that checkpoint.
- Complete an explicit author review of all fifteen changed trusted-driver files, including optional wire compatibility, operator credentials/configuration, allocation freshness, mounts/ACLs, command scope, cleanup-bound admission and SQLite realization. Author-review report SHA-256
c415083f88581049452164df5dedf4b86c34fbf84c708b99ac082ec8fb0ffb34; no blocking finding is recorded. This is not an independent review or production-security attestation. Renew the reviewed implementation pin separately from runtime qualification. - Complete the repaired full-suite coverage: 1,928 passed, 61 skipped, no failures across 1,989 selected. The final repair attempt ran 581 cases in 323.282 seconds and reused 1,408 earlier passes. The runner correctly exits 2 for repaired coverage and resets progress; a fresh complete run remains required for a passing full gate.
- Complete a fresh full framework run after the authority repairs: 1,928 passed, 61 skipped, no failures across 1,989 selected in 1,149.784 seconds. Report SHA-256
ad7792ac49072c67f1429f4020cbb37133eddbe9e07446df3cd1de2001444b86. Wheel packaging and the local fast gates pass. This does not qualify the installed native lifecycle. - Reproduce the hosted Python 3.11 FreeBSD host-install fixture failure locally, then model Python 3.12 explicitly in the simulated native host. Nine focused checks pass on both Python 3.11 and 3.14, including rejection of Python 3.11 even when package registration and the SQLite query succeed. Production probing and the declared version requirement remain unchanged; renewed full-suite and hosted CI confirmation remain open.
- Complete scope/currentness refusal fixtures plus real privileged and unprivileged original cases through the installed framework in a disposable native guest; preserve legacy identities and private defaults. Installed
6e370033completes in 1,717.496 seconds with 24 original passes, no skips, and 11 independent observations matching declared exits and stream hashes. One invalid-input case correctly expects exit 1. All 34 retained records reverify; cleanup is bound into completion, the prefix ACL is root-only and no nullfs mounts remain. Fifty-one fresh observations bind the same actual allocation. Receipt identitysha256:924264d401159e317059b69c80087ec3a9cd047ca4652a53ca7903fa6c29f559is admitted for local runtime use; canonical Standard lifecycle, SDK, pkg and release flags remain false. - Complete exact-current required CI and land the reviewed integration. Landed
ef5db15fexact-main CI 40007862532 passes all 26 jobs. Seven scoped identity/ACL/view/prefix owner and contract files, plus_DirectoryAccess, are byte-identical to installed native6e370033; the actual 24-case original-suite and cleanup-bound acceptance remain recorded inverification/native-retained-renewal-development.json. This closes issues #85/#94 only, not the broader FreeBSD or canonical Standard/SDK program.
- Identity prerequisite regression: 1,874 passed, 42 skipped, no failures across 1,916 selected checks in 1,039.060 seconds. Report SHA-256
[ ] INPUT-WALK-001 — Bound retained input ancestor traversal cost
GitHub issue: #86.
- Release target: 1.3.1
- Priority: P1
- Owner: Retained input filesystem adapter
- Direction: Reduce elapsed build orchestration without omitting source, hashing or currentness checks.
- Conclusion: A real 5266-member plan issued 716820 open calls; input verification consumed 9.023 of 12.040 profiled seconds. Reuse bounded anchored directory handles only within each verification, while checking current lineage on every access and preserving all file, inventory, symlink and replacement guards. GitHub issue: https://github.com/jordanhubbard/literate-ai/issues/86
- Depends on: Retained input custody and SBOM-SCALE-001
- Implementation:
- Add transaction-local bounded POSIX directory traversal with current-name checks, deterministic cleanup and unchanged unsupported-platform fallback.
- Extend the same bounded transaction-local traversal to discovery, snapshot input copying and private CAS validation. Preserve complete inventories, byte hashing, alias checks, current lineage before publication, cleanup and the unsupported/low-descriptor fallback. The installed source run exposed these remaining repeated ancestor walks; its installed implementation remains unchanged while this repair is developed.
- Evidence:
- Focused checks cover actual directory/root replacement, link substitution, permission revocation, added entries and changed bytes, descriptor bounds and cleanup, real low-descriptor fallback, and unchanged manifests. Twenty-four checks pass with one optional source-corpus skip on both the controller and a native source-level probe.
- Discovery/capture focused checks pass on Python 3.14 and 3.11: 26 passed, one optional source-corpus skip in 2.468 and 2.339 seconds. Real last-file parent replacement refuses before publication and removes temporary output. On a 5,141-member / 306,736,551-byte SDK corpus, a first controller comparison preserves manifest
sha256:90768a489e8cad42df4be7fcd4c7ef61ac11befbe4bccf7bcc6d2494eedcb8e2: discovery 7.131112 versus 2.312534 seconds; capture 12.908503 versus 6.979871 seconds. This is an initial operation measurement, not whole-build performance. Native comparison, full regression and installed renewal remain required. - The native source-level candidate passes all 27 input checks with no skips in 126.751 seconds, including every tracked member of source revision
d98e6c2da7571295bb3c70236afe637a987370e0: 114,710 files, 9,887 directories and 138 symlinks. Source manifest identitysha256:6bcececf720ac6a21c12e5ebf3f04eedbc2c22438bf04c28be1ae38ce770a406; raw corpus report SHA-256ad4bd6c37cbfaf03805c27fd2ec226a9095ee4dd9359c37a471fd94cd8dcf223. A balanced four-sample FreeBSD SDK comparison preserves the 5,141-member manifest; median discovery is 4.776245 versus 4.471518 seconds and capture 12.602876 versus 10.549773 seconds. Another world build was running. These are source-level operation observations, not installed-wheel or whole-build qualification. The initial native harness omitted a shared test fixture; its failed import is retained separately. - Fresh full Python 3.11 regression exits zero in 956.811 seconds with four workers. Its report records 1912 passed, 81 explicit skips and zero failures across 1993 selected cases. Report SHA-256
9f987f35edcbb91d7abd079e67c5853c518cde22bbce8dccc8991bbe9ee1adc4; log SHA-256ecee9b70e0af25d4455721b8698d445f560d5faab82647ef3aa4fcf8e4f48c2d. Installed-wheel renewal and hosted/native product lifecycle qualification remain open. - Review the discovery/capture TCB change explicitly before renewal. Author-review report SHA-256
e6cd02de84849762bfd005884b8214932b8809ff7a56233fa7ba8d73727a15eb; no blocking finding is recorded, and no independent review is claimed. - The same 5,310-member manifest verifies in 1.938397 seconds versus 7.281015 seconds in one warm comparison; profiled open calls fall from 711,962 to 7,108. Manifest identity stays
sha256:a5e6bb4c5a876022b73759193af759d375f69b1c7d802280a78eb2cffc98606a. These measure input verification, not complete build performance. - Native profiling exposed Python 3.12
Path.relative_toand repeated lexical parsing as dominant remaining costs. A checked immutable path-prefix comparison retains per-access filesystem lineage checks; three warm source-level verifications of the same 5,270-member native manifest have a median of 7.926676 seconds versus 19.794351 seconds with the installed baseline. The adapter bytes have SHA-2566811499e92de9342cd8e316ae65dc2f4316acb5610b9072392ada6e7b5245e02; the native focused log has SHA-2561e05b07e13f823a7a44b884e96cfa5dde0ef6560fef6a5b120b334f4eb518b47. This probe does not qualify an installed wheel or a complete build. - Fresh full regression of the frozen reviewed implementation: 1,865 passed, 42 skipped, no failures across 1,907 selected checks in 1,043.891 seconds. Report SHA-256
aeba051ec5d0a178f3a5451c75b4220e360efa9c7a4ba1de4483e6945f9a0277; log SHA-25681aae3d3b81d09691cf5cf879a76d207bda549b0d399a0344f62c976d4851c83. - Canonical wheel
d6070ba5qualifies through the installed-wheel gate (wheel SHA-256c36be2bb76cfd41ca0e5e185eeb95e3f73e6c4f2fd327e28e9c53241e59d7d7a). A verified native 37-distribution wheelhouse bootstraps the build worker and disposable guest. Native installed checks report 29 passes, one optional source-corpus skip and zero failures; real Ed25519 signing also passes. Three installed native input verifications have median 9.227105 seconds versus baseline 19.794351 seconds for the same manifest. This is focused runtime/input qualification, not full FreeBSD platform acceptance or whole-build performance. - Preserved renderer failure: The final gate’s managed Chromium timed out on the unchanged authority-learning-loop diagram. The supported
PUPPETEER_EXECUTABLE_PATHsystem Chrome selection renders all 121 diagrams from 621 Markdown files and passes the current driver review. Sandbox defaults and validation coverage are unchanged. - Preserved failed gate: An earlier broad run selected 1,216 checks and stopped with a self-host snapshot-currentness error after the final lexical change modified its live inputs (36 skipped). That failed gate remains preserved; the fresh complete run above passed the unchanged-snapshot proof.
[x] HOST-RUNTIME-001 — Preserve executable private runtimes with standalone POSIX Python
GitHub issue: #91
Priority: P1
Owner: Standalone worker bootstrap, stage-zero source installer and installed CLI fixtures
Direction: Keep the installed build entrypoint usable on supported Python distributions.
Conclusion: Copied standalone macOS Python 3.11 executables abort at launch because their relative libpython linkage is lost. Retain the base library in the private runtime before pip bootstrap. Keep the executable inside installation custody, preserving self-update containment, Windows environment behavior and orphaned-base detection. A symlink-only candidate starts Python but fails the existing self-update custody check; preserve that failure and retain the copied-executable contract.
Depends on: none
Implementation:
- Canonicalize the POSIX base interpreter before recording its private-runtime home; preserve copied executable custody and native Windows behavior. A fresh public prefix install through a real Python 3.14 alias fails before ensurepip because its home points to the alias directory.
- Share copied-runtime creation with the standalone bootstrap owner, source installer, wheelhouse downloader, offline worker installation and wheel smoke. Preserve the bootstrap file's standard-library-only staging contract. Eleven bootstrap checks pass on the affected Python 3.11 runtime in 6.841 seconds, including staging the single file outside the checkout and creating a working private Python/pip under isolated
-I -Sstartup. The second full run preserved a further downloader failure after 1,442 executed tests (61 skipped); it exposed the remaining direct creation paths, now consolidated. - Centralize private-runtime creation and use the production owner in the real-prefix update fixture. Standalone non-framework shared macOS Python retains its base
libpythonbeside the copied executable before pip bootstrap. Other platforms keep their preceding creation behavior; self-update containment is unchanged.
Evidence:
- Retain the failed real-alias install, prove Python/pip through the same alias with the production owner, and renew real-wheel self-update and public prefix installation.
- Pass offline wheelhouse export/tamper refusal and standalone offline bootstrap under the affected interpreter, in addition to source installation and self-update. All eleven bootstrap checks pass again in the complete Python 3.11 regression.
- The shared owner passes eleven bootstrap checks on Python 3.14 in 5.480 seconds and three source-installer checks on Python 3.11 in 2.645 seconds. Real-wheel self-update and original-command reexecution pass all three checks on Python 3.11 and 3.14 in 3.931 and 3.575 seconds. These are focused checks; the renewed full framework and installed-wheel gates remain required.
- Review the shared bootstrap change explicitly and renew its trusted-driver pin. Author-review report SHA-256
de394586676a8d7267c93466a2a59c43a72e47d14766d35b3d740a074c635629; no blocking finding is recorded. This is an author review, not an independent security attestation. Exact wheel/dependency verification, pip arguments, process deadlines, cleanup, wire identities and admission rules are unchanged. New driver identity:ecd6f7320cd8f6da0056406dea80165e4e31d753085bfba00c79a1d884f260c0. - The managed Python 3.11 suite reproduces the original native loader abort after 1,291 tests (57 skips); the macOS crash report identifies missing executable-relative
libpython3.11.dylib. After the repair, three installer checks pass in 3.789 seconds and three build-identity/real-wheel self-update checks pass in 5.599 seconds. The same groups pass on Python 3.14 in 2.899 and 4.227 seconds. These checks use real private environments, Python, pip, wheels and launcher reexecution. The earlier symlink-only experiment passed startup but failed the unchanged enrollment containment check and was replaced. - Run Python and pip from an actual new private runtime under the affected Python 3.11 distribution and pass real-wheel self-update. The fresh full Python 3.11 gate exits zero in 1,021.195 seconds with four workers; its report records 1,910 passed, 81 skipped and zero failures across 1,991 selected cases. Report SHA-256
d770be5e04081dfe8fa59374a3e3b6a9b988b2390347f6dbe459ab3cd466d24d; log SHA-25613969000d45edfbf9443089b50f1f25ee7e119032c62c85527b409d175989617. This is a complete unit regression with explicit platform/dependency skips, not release or native FreeBSD acceptance. - Qualify the exact committed wheel and pass the hosted platform matrix before closing this item. The complete installed-wheel gate at
1063ecd8passes 131 spans; its runtime/bootstrap/self-update owners are byte-identical to landedef5db15f. Exact-main CI 40007862532 succeeds in all 26 jobs, including all macOS Python 3.11 shards and Windows platform cells.
Completion: Issue #91 is qualified by the actual affected-interpreter checks, exact installed wheel, combined lifecycle and successful landed platform matrix. This closes the private-runtime repair only; native retained SDK and performance issues remain separately open.
Alias repair qualification: At implementation
625b871d, the real-alias regression passes after failing against the preceding owner. All 18 installer/bootstrap/self-update checks pass on the affected macOS standalone Python 3.11 distribution. The public make-install prefix succeeds as a non-editable installation; the fresh full source suite passes 2139 tests with 71 explicit skips and no failures (2210 selected). Seeverification/private-runtime-alias-development.json. A fresh combined lifecycle and exact package/native/CI renewal remain required; the preceding Windows-only receipt is preserved under its own authority identity.Fresh combined lifecycle: The force-generated complete framework lifecycle at authority commit
885352adpasses all 233 cases with no failures/skips. Supported receipt update/check/require-current and verify pass. Receiptsha256:35189b34504770136936cd41bbc7421a01a8681550ecde0eed5cb70a4ec8a5e5; finalized candidatesha256:e760890282ba6aaf3f9603909a06b314ea860549624c1b321d80025ba0ae5bab; driversha256:ceb559c1eaa79ce4db8210a6acd34ccf7ecbf19ad0651092e8aacb105bcd7578. This renews the integrated alias/Windows source under its actual authority and preserves the older Windows-only receipt separately.Installed-wheel renewal: Exact source
1063ecd8passes the complete official wheel smoke runner: 131 timing spans succeed, with evidence ledger state passed and wheelsha256:3e6f9f8896d7cf66261d190302f899cedbc13cc6995bd115a88df7816165d6eb. Current framework receipt remains 233 passes and verify has no failing gates. Source-full regression and Python 3.11 alias/runtime regressions are recorded inverification/private-runtime-alias-development.json; hosted CI and reviewed landing remain required.
[ ] NATIVE-SDK-ALIAS-001 — Preserve internal aliases through native SDK admission
GitHub issue: #93
- Priority: P1
- Owner: Framework native SDK contracts, custody, runtime and lifecycle owners
- Direction: Admit faithful source-built SDK trees with internal file and directory aliases, retaining full provenance and dependency authority.
- Conclusion: Extend canonical SDK authority through an explicitly selected versioned tree capability while preserving regular-file-only wire identities and refusals. Snapshot custody alone cannot issue producer admission; every consumer boundary must join the actual completed producer.
- Depends on: Existing native SDK source resolver, build authorization, runtime observation and retained SDK owners
- Implementation:
- Specify bounded internal alias target and ancestor closure, exact target text, explicit capability selection and legacy identity preservation. See the SDK contract.
- Preserve hard-link equivalence with canonical regular-file ownership and explicit target case sensitivity through source-level SDK and retained input custody; verify destination filesystem support and preserve default collision refusals. Installed/compiler SDK qualification remains separate.
- Implement canonical tree contracts/schema and bounded no-follow byte capture/relocation, including closed hard-link groups, escape/cycle/dangling/drift refusals, destination case-sensitivity verification and owned cleanup. Development evidence is scoped to the byte-custody layer.
- Bind the tree capability into canonical SDK snapshot/build-layout authority and actual completed builders. Source-level live consumers and source/resolved BOM evidence pass; retained/package admission remains open.
- Integrate live producer admission, retained placement, command/runtime observations, BOM and package provenance without self-authenticating transport claims.
- Evidence:
- Existing regular-file SDK identities and refusal behavior remain unchanged; alias graph, filesystem drift and cleanup negative fixtures pass.
- A real source-built compiler, headers, resources, sysroot and libraries remain usable after relocation and producer retirement; alias and target changes invalidate consumers.
- Full required regression, installed-wheel and native consumer qualification pass before completion.
The native-sdk-tree@1 contract and registered schema now inventory physical
members separately from aliases and resolve exclusively against that inventory.
Ten focused tree checks include finite repeated-alias traversal, cycles, root
escape, non-directory traversal, exact target-text identity and a shared aggregate
work limit. The SDK/custody/runtime/source-build/schema regression passes all 32
checks without skips on Python 3.14. This is contract-level development evidence;
no-follow filesystem capture, immutable relocation and live producer/consumer
integration remain unchecked. Next: connect this explicit tree capability to
canonical SDK snapshot/build-layout custody while preserving legacy wire behavior.
The initial complete Python 3.11 gate stopped after 1,417 tests in 996.069 seconds because project validation found a stale documentation-review marker following the driver-pin change. Its report records 1,351 passes, one failure and 66 skips across 2,008 selected cases; it does not establish full regression. The failure report and checkpoint remain retained before the next source change.
The extended tree contract now includes typed hard-link aliases with canonical regular-file ownership and explicit case-sensitive selection. Fourteen focused tree checks cover the new topology and preserve default case-collision refusals. An external source-built archive topology also constructs and round-trips through the contract with 247 directories, 4,396 files and 1,868 aliases (29 symbolic and 1,839 hard links); portable selection refuses its case-variant names as required. This is representation evidence, not filesystem capture or producer admission. The upcoming retained-input integration must carry the same naming policy through its inventory, comparison and placement owners; SDK-only acceptance is insufficient.
The tree development record
binds the current source bytes, 46 passing controller checks (42.505 seconds),
27 passing FreeBSD source-level checks (1.462 seconds), and a real native
case-sensitive CC/cc hard-link relocation after producer retirement. No checks
skip in these focused groups. Capture reuses transaction-local descriptor custody,
closes every hard-link inode group, refuses a store inside the input root, rechecks
names/bytes/link text, and verifies output topology before handing it to its owner.
Relocation refuses resource bounds before copying payloads and removes owned
staging after failures. These are source-level checks, not an installed-wheel or
admitted compiler SDK result. Next remains canonical snapshot/layout and retained
input naming integration followed by live producer and consumer qualification.
The explicit native-sdk-tree-snapshot@1 and native-sdk-tree-build-layout@1
resources now bind complete topology to input/import/license metadata, capture
bounds and naming semantics. Layout-bound capture verifies the selected output
license; snapshot relocation verifies the complete product identity. Import roots
must resolve to nonempty directories and native library declarations to physical
regular files. Batch resolution shares a local index and bounded work budget.
Legacy snapshot/layout decoders and recipe selection refuse the new capability;
there is no plain-file fallback or live producer admission from decoding.
The renewed focused group passes all 57 controller checks in 49.192 seconds and
all 38 FreeBSD source checks in 0.763 seconds without skips. Native exported source
hashes match the development record. Next: add explicit tree recipe selection and
carry the capability through the actual builder/runtime owners, then retained
input naming/hard-link custody and downstream command/BOM/package consumers.
An earlier builder refused tree layouts before accepting execution resources. The current builder now explicitly supports typed tree layouts, as described below; untyped layouts and unsupported mixed wire formats continue to refuse.
Tree recipes now have an explicit contribution kind and wire resource. Flavor
preparation and locked selection preserve dependency slots, interface/target
matching and complete source coverage. The repository builder supports the typed
tree layout explicitly and retains the actual completed product. Runtime checking
recaptures its full topology before/after inspection, supplies only verified
physical native images to the existing observer, and retains logical-to-physical
library bindings in native-sdk-tree-runtime-observation@1. Generic symlink
refusal and legacy runtime wire identities remain unchanged.
The source-level producer fixture compiles two linked native libraries, retains
hard/symbolic aliases, deletes its source checkout, relocates the SDK and calls
its public API successfully. Replacing a hard link with independent identical
bytes refuses runtime rechecking. Locked tree recipe selection and invalid-slot
refusal also pass. The focused controller group passes 61 checks in 55.929 seconds;
the FreeBSD source group passes all 41 in 15.189 seconds without skips. The native
bundle's first attempt omitted an existing fixture skill; that harness failure is
retained separately from the repaired successful source export. CMake bootstrap
uses the declared FreeBSD cmake-core realization and verifies version/provenance.
These are source-level fixture results, not an installed wheel, full Standard
consumer/receipt, source-built compiler SDK, per-unit pkg or release admission.
The live SDK consumer now uses the completed source-build owner, selected layout
limits and tree-aware materialization/rechecking. Both source and resolved
CycloneDX BOMs retain tree identity, case selection and canonical alias properties.
Forged legacy runtime schemas, substituted physical bindings and same-byte
hard-link replacement refuse; cleanup preserves unrelated siblings. The focused
consumer/legacy regression passes 50 tests in 94.432 seconds. The native source
group passes 45 tests in 69.564 seconds, with no skips (supervised 72.270 seconds).
The exported 1,574-file source bundle is hash-verified against the tested files.
Packaging explicitly refuses tree products until its input custody preserves
links. These remain source-level results, not installed-wheel or compiler SDK
qualification. Next: retained input naming/hard-link custody and placement, then
link-aware package inputs, runtime and qualification owners.
Retained tree input custody now explicitly selects retained-project-tree-policy@1.
Member hard-link targets bind canonical representatives, byte/mode equality and
closed observed inode groups. Default naming checks and omitted legacy wire
identities remain unchanged. Capture copies representatives separately from CAS,
recreates hard links and symbolic aliases, verifies actual case-sensitive placement
and rejects same-byte independent replacements. Verification and discovery read
each physical inode group once while charging every declared name to existing
aggregate bounds. Receipt and completion manifest projections carry the policy.
The retained SDK owner compares captured files, both alias kinds and every directory to the actual completed tree product, requires the explicit naming capability and rechecks its placed runtime through the live producer owner. A controller fixture retires both source checkouts, calls the relocated C API successfully and rejects later hard-link topology drift. The five tree-consumer tests pass in 41.461 seconds; the custody/schema group passes 28 tests in 0.154 seconds. These are source-level results; full retained command lifecycle, package inputs/runtime/qualification, installed-wheel and source-built compiler SDK acceptance remain separate gates.
The final native source export verifies 1,846 files and passes all 28 selected
checks in 81.553 seconds (supervised 83.753 seconds), including actual case-distinct
names, retained SDK relocation/API and rejection of linked payload flattening in
both package resource construction and receipt materialization. Archive SHA-256
7f1f2e13d3fdcc32c42142dfe367e9fadd152825a13cc332c22bc9dfb262e396.
The preceding 59-test native source group passes in 79.868 seconds, with its exact
archive retained separately. Full regression and installed/compiler/package
qualification remain open.
An explicit package-tree-input@1 resource now binds artifact/resource kind,
owned prefix, role, source, target and the complete tree. Namespace checks refuse
regular-file/tree overlap, aliased ownership, target substitution and missing
case-sensitive selection. Staging and rechecking reuse the existing no-follow tree
custody owner. Thirty-three controller custody/schema checks pass in 0.198 seconds;
five FreeBSD package-input checks pass in 0.039 seconds (supervised 0.667 seconds).
The 1,850-file native source export has archive SHA-256
e6bd7c7194f60139f40e3200edcd16764b5ea58478b69387ea0285924b3420e9.
These are structural and byte-custody results. The new input is deliberately
separate from legacy PackageInput and does not yet enter package plans/providers,
SDK package runtime or qualification. Those owners are the next integration step;
the existing unsupported-tree guards remain required until that work is verified.
The final controller retained integration group completes all 67 selected tests in 423.113 seconds, with no failures or skips. It covers legacy completion, receipt and SDK owners, explicit tree custody, live/retained tree consumers, linked-payload refusal and schema catalog validation. This is focused source-level regression, not the full framework suite or installed/compiler/package acceptance.
The explicit tree package plan/result now has a deterministic PAX TAR provider. It stages the complete bounded namespace through existing no-follow custody and independently verifies member order/type/mode/ownership/epoch, bytes, exact link targets, empty directories and the zero-only end trailer. Extended metadata is bounded before allocation, including on Python versions with different tarfile read strategies. Namespace checks now also reject differently spelled implicit ancestors. Fifteen controller contract/custody/schema tests pass on Python 3.14 and 3.11 (0.303 and 0.288 seconds).
The live SDK tree-package owner binds the exact lock, root, target and completed
products; changed projections and actual builder ownership loss prevent successful
completion. Its separate package index binds complete tree input identities and
original snapshot/binding records. A structural consumer-plan fixture packages two
real source-built linked libraries, retires source and producer CAS, extracts and
relocates the archive, and calls the C API successfully. This is not Standard
lifecycle or full compiler SDK admission. The FreeBSD source group passes all 14
selected TAR/input/API checks in 14.417 seconds (supervised 18.095 seconds), with
no skips. Its verified 1,856-file source export has archive SHA-256
d096592262f95bb24994e5aa2768219f5a7586d04d29aa10a01b42a5f8f8df67.
Native pkg, default packaged runtime, qualification codecs and full compiler SDK
acceptance remain open; the legacy unsupported-tree guards stay active.
The fresh complete Python 3.11 controller regression exits zero with four workers.
Its dispatcher report records 1,981 passed, 86 skipped and no failures across
2,067 selected tests. The raw unittest runner separately reports 2,047 tests,
73 skips and 967.835 seconds; these layers' counts are retained without merging.
Report SHA-256 0a9f3bfdbb8a264d09fa4a121b8c9bcc014af6431be9dd4f64608b31d655af6f.
The run uses a new checkpoint without known-failure annotations. This is a full
controller unit gate, not installed, native project or release acceptance.
While source was fixed for that run, an independent native pkg 2.8.4 probe
preserved real hard links, exact symbolic target text, case-distinct names and an
empty directory. Native manifests hash symbolic target bytes, record hard-link
aliases with the representative checksum and count physical bytes plus symbolic
target bytes in flatsize. Archive payload numeric IDs are reproducible 65534,
with root/wheel names; native installation resolves them to root ownership.
A script-free 896-byte fixture installs and removes correctly in a fresh private
root/database inside the disposable worker: link inodes, targets, bytes, empty
directory, ownership, removal and an empty final private database all verify.
The worker's normal package database is unchanged. Archive SHA-256
f8173765adce11c47019cd1b97713b30e92b989b6026954ef8112a6237da2ba2.
These are native-format/installation discovery results; the framework's tree-aware
pkg projection and verifier still require implementation.
Clean revision 9411185a9b94ed256184ffc7925e707fb5c04184 passes the installed-wheel
gate. Retained wheel SHA-256
70745868e7a65b956aeae91d8664435b0b11dfc2bf9b0d350f3e73153b7ff8cd
binds distribution sha256:c1706b8fd78a6a4d197103ae5734c6ddb7085ec9836bd7d070412092280c1139
(1,227 members). That exact wheel installs offline with the reviewed 37-distribution
FreeBSD dependency closure in a separate disposable-worker prefix. All 14 focused
tree TAR/input/API checks pass without skips in 21.383 supervised seconds; every
framework import resolves within the installed prefix. The real library API still
works after producer retirement and relocation. These checks qualify the installed
tree/TAR mechanism, not the complete native lifecycle, compiler SDK, pkg provider,
default CLI or release. Draft PR #87 carries the code; exact-current hosted CI
remains a separate gate.
Native tree pkg source integration now constructs packages through the real pinned tool and the live SDK tree resource owner. A distinct projection/result binds the whole tree plan, native tool/ABI, package coordinates and installation prefix. Owned staging moves by rename so hard-link groups survive. Independent verification checks bounded XZ/TAR decoding, exact files/links/directories, symbolic target text, hard-link owners, modes, ownership, epoch, native checksums, physical flatsize and ELF summaries. Rehashed topology changes, hooks, changed manifests, extra frames and unplanned extended attributes refuse. Environment/device requirements remain in the original plan without fabricated native package coordinates.
The first live-library probe exposed a private SONAME summary mismatch and remains
retained as a failed 21-case run. Native pkg only summarizes names starting with
lib; the corrected projection preserves all imports in the actual SDK dependency
observation and source/resolved BOMs. The final 1,858-file source export has SHA-256
8bd66e993c3ad78a46be424b643b9030a09b7ad8f61c756642f5a8f8168623d6.
All 28 native source checks pass with no skips in 39.680 test seconds (43.252
supervised). This includes repeat construction with identical bytes, live producer
ownership-loss refusal and a real compiled-library API after extraction, producer
retirement and relocation. Python 3.11 focused checks pass 25 cases with one native
construction skip. Full controller regression and exact installed-wheel renewal
for this new native provider remain pending. Flavor/default lifecycle dispatch,
qualification codecs, artifact-root joins/directory expansion and full compiler
SDK admission remain open; the preceding installed TAR wheel does not qualify this
new native source batch.
The frozen pre-Unicode batch completes the full controller regression: 1,988
passed, 88 skipped and zero failures across 2,076 selected cases. The raw runner
separately reports 2,056 tests, 75 skips and 1,161.072 seconds. Report SHA-256
b58d6b6fd67ebf64bfd1d23d805a50a5af751c664cecd08206c8ae09c66e2573.
That pass is retained separately from the subsequent naming corrections.
Actual native naming probes expose libarchive's hdrcharset=BINARY marker and
PAX directory trailing slash. The verifier now admits those exact forms while
retaining exact decoded paths/targets and refusing other charsets or extended
attributes. The renewed 1,858-file source export has SHA-256
be385a2d54b67be35fb9599786cfc7039c0ec6b4d54fa45af241ca37492037a6.
All 29 native source cases pass without skips in 35.469 test seconds (39.746
supervised), including case-distinct hard links, long NFC file/target names and
Unicode empty directories through actual native construction and system tar.
The failed preceding naming probe and archive remain retained.
Exact pushed 79bae2df hosted CI also exposes Windows fixture failures already
addressed by PR #89.
Its reviewed executable-filename, isolated interpreter and explicit loader-platform
fixture repairs are integrated here. A further output-PATH fixture now gives its
captured Windows placeholder an executable filename and refreshes the exact manifest
and tool binding. All 37 affected controller cases pass in 33.103 seconds. Native
Windows validation of the additional fixture remains pending; production receiver
timeout #90 remains a separate
failure. Full regression renewal, exact wheel/native installation and current CI
must pass before this source batch is pushed or treated as qualified.
The actual isolated Python 3.12.10 Windows check now runs all 37 affected cases:
27 pass, nine existing platform skips remain and one fails in workspace PE
observation because the retained command environment lacks SystemRoot. Its
source archive is sha256:4942ade26758b57aa9fe189e7f3134c90c950c34accc52ab1b6a3cb201b0fb76.
The repaired executable filename reaches the real dependency guard; no command
executes and no receipt is admitted. Preserve this failure under
issue #102. Do not relax
the guard or replace this failure with an empty dependency observation.
[ ] RETAINED-WIN-CONTEXT-001 — Bind native Windows retained system context
- GitHub issue: #102
- Release target: 1.3.1
- Owner: Retained execution environment, dependency observation and native runtime custody
- Direction: Supply explicitly bound native Windows system context and complete captured tool runtime while preserving caller-injection refusal and POSIX identities.
- Evidence: The real native source check fails at the
SystemRootrequirement after the fixture's executable naming repair. Subsequent runtime closure remains unproven. This is separate from receiver observation deadline issue #90. - Acceptance: Native workspace/command checks pass with actual PE closure; source/context/runtime drift refuses; existing loader-policy assertions and finite observation deadlines remain intact. Renew full, installed and exact CI gates.
[x] WINDOWS-PE-OBSERVE-001 — Bound native Windows PE dependency observation
- GitHub issue: #90
- Priority: P0
- Release target: 1.3.1
- Owner: Framework PE dependency observation and receiver custody
- Direction: Complete native Windows dependency closure within existing finite receiver and retained-command limits; issue #90.
- Conclusion: Integrate the reviewed independent-image frontier implementation from peer commit 1fbc7e7f, retaining deterministic resolution, image and inspector hashes, complete graph semantics and owned failure cleanup; qualify it on actual Windows before acceptance.
- Depends on: none
- Implementation:
- Inspect independent images in bounded concurrent frontiers; merge through the existing loader resolver in canonical queue order.
- Preserve content-bound fact caching and cancel/join outstanding bounded inspections on refusal.
- Run the real admitted-receiver case outside xdist contention in its own profiled Windows CI step; retain the unchanged 300-second bound on every production observation and fail the job on any omitted or failed isolated case.
- Evidence:
- Serial/parallel graph equivalence, real overlap, image substitution and inspector mutation refusals pass.
- Actual native Windows retained workspace and admitted receiver complete inside unchanged deadlines; full regression, exact installed wheel and CI pass.
Native Windows source qualification of the context and concurrent PE observer
passes 53 cases: 39 pass, 14 existing skips, no failures in 167.082 test seconds
(176.172 supervised), inside the unchanged 300-second limit. The source archive
is sha256:7ec3355dc0480542ec71040361cafc65f4d14e9727c93eada9275591b7f28874.
The preceding serial run exceeded its 300-second bound and remains retained.
A separate actual captured-command/drift probe initially refuses its malformed
test profile because acceptance lacks the new stage dependency. Correct the
fixture DAG before retrying; this is not evidence of command execution or
installed/runtime admission. The admitted receiver and full renewal gates remain
open.
The corrected-DAG captured-command probe reaches actual Windows execution: both
commands return zero, but relocated whoami /? produces no help text and the
new test's duplicate raw rmtree cleanup fails on read-only snapshot blobs.
The probe fails in 288.374 test seconds (295.969 supervised); drift assertions
were not reached. Preserve that failure. The next source probe uses actual
whoami identity output and the fixture's existing TemporaryDirectory cleanup
instead of duplicate raw deletion. No production guard or deadline is changed.
Native FreeBSD context/package regression runs 55 cases with two existing
Windows-only skips, but receiver custody subtests fail because the fixture wraps
BSD /usr/bin/make while receiver discovery correctly requires GNU Make.
Track this fixture repair under existing FreeBSD support issue #67:
select available gmake before make, quote its executable path, retain actual
before/after receiver measurements and all tool-substitution assertions. Do not
relax the production GNU Make requirement or add a FreeBSD skip. Renew the native
group after the fixture repair; retain the failed 101.916-second supervisor result.
The renewed actual Windows captured-command probe passes both context/source
subtests with no skips: whoami executes successfully in each retained workspace,
then the next execution refuses a changed native system context or changed original
source without recording another command observation. Test time is 279.381 seconds
(286.500 supervised), inside the unchanged 300-second limit. Source archive:
sha256:3f8702850abf911950dfeab1ebb3d80c8c16c401c9709f9a1e86cd44a6edffde.
The admitted receiver is being qualified independently; current full regression,
exact installed wheel and hosted CI remain required before landing this batch.
The current implementation completes its frozen full controller regression:
1,997 passes, 90 skips and zero failures across 2,087 selected cases. The raw
runner reports 2,067 tests, 77 skips and 911.576 seconds. Report SHA-256:
88bcdb5128cfe8822c760c57389671267cc64c3fbd367a1cb4109d0a537b1328.
The frozen source inventory remains unchanged through terminal completion.
Lint, format, layout, public-export audit, skills, runner review, OpenSpec and
rendered documentation gates pass.
Native FreeBSD source renewal passes 55 cases (53 passes, two existing
Windows-only skips), including POSIX execution, repaired GNU Make receiver
custody, actual tree pkg construction and both relocated C APIs. Time:
100.241 test / 103.775 supervised seconds. Source archive:
sha256:3c8ba342527e417e51d14eafe3d3f42253b0044fa1d87f940842769dc906e9c8.
The actual native Windows admitted-receiver discovery/profile-guard test also
passes without skips: 463.266 test / 472.344 supervised seconds. Each receiver
observation retains the production 300-second cap, and the test retains its
existing 1,800-second dispatch budget. The first operator probe incorrectly
capped this entire multi-observation test at 300 seconds and is preserved as a
harness timeout; the corrected harness reads both existing policies from verified
source. No repository deadline changes. Native archive remains
sha256:3f8702850abf911950dfeab1ebb3d80c8c16c401c9709f9a1e86cd44a6edffde.
Exact-main run 40428755660 then passed 25 of 26 jobs but reproduced the same
receiver expiry in Windows shard 3 twice, including a failed-only rerun. The fresh
interpreter remained nested under an xdist worker while the rest of the shard
continued competing for the hosted runner. Preserve both failures. Keep the real
case and all production deadlines unchanged; deselect it only from the parallel
shard and run it once, explicitly and without inherited pytest parallelism, in a
separate bounded/profiled Windows step whose failure still fails the same job.
These are source-development gates. Next: commit the reviewed batch, build and qualify its exact wheel, repeat the 55-case FreeBSD group from installed modules, then push the draft and obtain fresh exact-revision hosted CI. Current installed renewal, compiler SDK admission, package transport/default lifecycle integration and source/ports full-catalog and release-matrix goals remain open.
Exact wheel qualification for code commit 42f1caa1 passes, and offline FreeBSD
installation succeeds. Its first installed 55-case run exposes a nondeterministic
mutation fixture: concurrent inspection can read the deliberately truncated
inspector header and correctly refuse dependencies.pe-image-invalid, whereas
the test only names later hash-change refusals. Preserve that failed installed
run (79.310 test seconds); current installed qualification remains open.
Under WINDOWS-PE-OBSERVE-001 / issue #90, make the fixture's inspector the first
sorted seed and require its inspection before the two-image mutation barrier.
Then assert the specific final inspector-change refusal and empty inspector cache.
Do not broaden accepted error codes or change production behavior. Renew focused
mutation checks, complete controller regression and exact installed-module tests.
The deterministic inspector fixture now orders the canonical first seed ahead of
the a/b barrier, asserts that inspection happened, and requires exactly
dependencies.windows-inspector-changed plus an empty inspector cache. Fifty
controller repetitions and fifty actual Windows repetitions pass without skips;
Windows time is 3.930 test / 9.703 supervised seconds. The accepted error set is
narrower; production code and all deadlines remain unchanged.
Code commit 42f1caa1 passes exact clean-wheel qualification:
wheel sha256:e76ea9b48bb128ef75bbbf486fbb71939cd8ca054103baeafc35a25c56f347cb,
distribution sha256:9b5627b6ed08eb4f1663a6725923ef7d9cd353e9ff574b1726b691b7e70baefd.
Its offline FreeBSD installation succeeds; the corrected verified test bundle
passes 55 cases (53 passes, the two named Windows-only skips) in 81.360 test /
83.600 supervised seconds. Every framework module remains under the installed
prefix. Native package construction/topology, receiver custody, POSIX execution
and relocated C APIs pass. This qualifies the focused installed provider, not
compiler SDK, canonical lifecycle or release admission.
The refreshed full controller run passes 1,997 cases with 90 skips and zero
failures across 2,087 selected cases. The raw runner separately reports 2,067
tests, 77 skips and 938.046 seconds. Report SHA-256:
297c8e89a665c0566347719cabc9d27d20dee962d323c877a228c3e6dd17ea35.
The entire frozen source inventory stays unchanged through terminal completion.
Next: commit the fixture/evidence update, push the draft PR and require fresh
exact-revision hosted CI. All larger SDK, runtime, source/ports catalogue and
release-matrix gates remain open.
PR #151 isolates the unchanged real admitted-receiver case from xdist contention
while preserving its production 300-second observation bound and its existing
1,800-second test budget. Exact merge a4dd27c01b6cfc918a2a749a76b59871baa40e6b
is contained by exact main commit
3b606d42c93b04b3be354f78152a0b3ac11e3059; CI run 40460869302 passes all
26 jobs, including every Windows partition and exact installed-wheel gate. This
completes issue #90 without weakening dependency closure, live receiver custody or
failure propagation.
[ ] NATIVE-TREE-WIRE-001 — Transport complete native package tree contracts without flattening
GitHub issue: #93
Priority: P0
Owner: Native SDK packaging contracts and PACKAGE worker admission
Direction: Carry complete source-built SDK package trees through selected native providers and worker records while preserving provenance and live admission.
Conclusion: Refine NATIVE-SDK-ALIAS-001 and existing issue93. Begin with exact bounded projection/result codecs and published schemas, preserving current wire identities. Descriptor decoding grants no SDK producer, runtime, worker or release admission. Then bind source/final provider plans and actual LINK proof transport.
Depends on: none
Implementation:
- Add exact bounded native tree projection/result decoders and schema contracts; preserve field identities and reject mixed or malformed documents.
- Integrate selected source/final native provider plans and tree-aware worker transport without weakening legacy guards or LINK proof.
Evidence:
- Round-trip real tree plans/results through Python and schema validation; refuse schema drift, extra fields, invalid dependencies, epoch/media mismatch and over-budget arrays.
- Require provider verification and live runtime/producer scope plus full and native qualification before claiming canonical PACKAGE admission.
NATIVE-TREE-WIRE-001 descriptor codecs now pass 26 controller cases (25 passes,
one native-only skip), all five portable codec cases on actual Windows Python
3.12 with no skips, and a 60-case native FreeBSD source group (58 passes, the two
existing Windows-only skips). The v2 catalog verifies 102 schema files and 514
resources. Native source time is 79.552 test / 82.644 supervised seconds; archive
sha256:ef0b58ae876233f7495b1790500bc7a4b3fb6c47594783f2a7b140b136192d84.
Decoding retains complete tree authority and still feeds the independent archive
verifier; cross-provider records and rehashed archive corruption refuse.
Selected source/final native provider binding now passes the qualification below.
Next integration: real LINK proof in tree-aware PACKAGE worker records, after
the current batch renews its exact-wheel, installed and hosted CI qualification.
NATIVE-TREE-WIRE-001 source/selected binding decision: retain the original plan in its projection, derive the native selection by replacing only the base packager identity, and verify that the full original plan can be reconstructed exactly. Keep explicit source-plan calls compatible; selected worker admission will require the selected form plus real LINK/live-owner proof. Exercise altered limits, provenance and provider identities, and require source/selected native construction to produce the same physical archive with distinct exact result-plan bindings.
[ ] RETAINED-WIN-FIXTURE-001 — Capture complete Windows retained fixture executable inputs
GitHub issue: #103
Release target: 1.3.1
Priority: P0
Owner: Shared retained execution test fixture and platform coverage
Direction: Repair actual hosted Windows failures without bypassing executable checks or PE runtime dependency observation.
Conclusion: Issue103: shared fixture needs a Windows executable filename and actual adjacent Python native DLL inputs. Venv-only source probes missed the base-interpreter layout used by hostedCI. Centralize platform paths in the shared fixture, preserve all drift checks and validate base plusvenv native runs.
Depends on: none
Implementation:
- Bind the shared runner filename, hash and profile once and capture base interpreter Python/VC runtime DLL inputs on Windows.
- Use the same fixture in PATH/runtime-role tests and exercise both base Python and private venv layouts without new skips or production guard changes.
Evidence:
- Hosted failing workspace/PATH/source-drift cases pass on actual base and venv Windows interpreters; missing sidecars still refuse.
- Renew focused, native, full regression and exact CI gates; preserve failed cbcd337d shard3 logs.
Native selected-plan source qualification passes 61 FreeBSD cases (59 passes, two existing Windows-only skips) in 74.547 test / 77.883 supervised seconds. Source and selected plans produce identical actual native archives; result IDs bind the exact submitted plan, and altered limits, ownership, provider IDs and stripped environment/device obligations refuse. Canonical worker LINK admission remains open.
RETAINED-WIN-FIXTURE-001 centralizes runner.exe naming and captured adjacent
Python/VC native DLLs in the shared Windows fixture; removes the subclass-only
rename; retains the same positive and negative runtime guards. Three controller
groups pass 56 cases (54 passes, two existing Windows-only skips) in 133.220
seconds. All six actual Windows cases pass across base Python and a private venv in
992.391 supervised seconds, each under the unchanged 300-second case bound.
The exact source archive is sha256:d233a824da3bded5ac4924184e40a603757d3ccd3ab4cc02969d04ff8f5a146f;
all 2,030 production/test/schema file hashes still match. Current installed
qualification and fresh hosted CI remain required.
Combined native tree wire/selection and Windows shared-fixture regression passes 2,093 selected cases: 2,003 passes, 90 explicit skips and zero failures. The raw runner reports 2,073 tests, 77 skips and 921.262 seconds; dispatcher accounting is retained separately. Frozen source matches through terminal completion. Lint, format, lifecycle/documentation review, layout, public export and strict OpenSpec checks pass. Next in progress: clean exact-commit wheel and installed native renewal, then fresh exact-head CI. The preceding hosted receiver timeout remains open under issue90; the fixture103 repair does not claim to fix it.
The combined code batch is committed at fb791575583b8549dc0e8d82e79f4b7adf7db2dd.
Its exact clean wheel sha256:55a6b70590497671c8d09fdd28af38254b28bbb1331d83d1cf34b7220517e0f9
qualifies a 1,230-member Standard distribution, installs offline, and passes 61
FreeBSD checks: 59 passes, exactly two existing Windows-only skips, no failures
or errors. Test time is 85.267 seconds; supervised time is 87.913 seconds.
All framework imports resolve inside the installed prefix. The current code
now has full controller and scoped installed qualification; fresh exact-head
hosted CI and canonical tree worker/live SDK integration remain open.
Current main failure renewal: Exact main CI
39922312793, Windows/Python 3.12 shard 2 (120310290199), rejectstest_actual_windows_command_and_late_source_or_context_driftwithretained.execution.tool-mismatch. Its rediscovery after copying whoami.exe omits explicit executable intent for both that tool and the existing shared runner. Restore the complete sorted executable declaration in this fixture; keep production executable, PE closure, native command and late context/source drift checks unchanged. Next action: validate the corrected case on actual Windows base and venv interpreters, then renew complete regression and exact review CI.Consolidated source renewal: Frozen implementation
d5b11cc8passes a fresh uninterrupted complete local suite: 2139 passed, 71 explicit platform/tool skips, zero failures across 2210 selected. Static gates, zero-finding documentation audit, all 22 tooling tests, 121 diagrams, strict OpenSpec and current reviewed driver pass. The framework receipt remains current with 233 passes and verify has no failing gates. Packaged runtime source and wheel/install drivers are unchanged from the passing 131-span installed-wheel source1063ecd8. The corrected identity fixture has an observed native base-interpreter pass; private-venv and complete native qualification plus exact review CI remain open. Seeverification/runtime-install-windows-integration.json.Native corrected-fixture renewal: The unchanged Windows production execution/context/input owners and shared base/venv fixture run the exact corrected environment test file (
sha256:ea316103b0e0b05c43073dfc294a3fcbc24f2fbe032a24ddc98bc677930d98b5) on actual base Python and a private venv. Each run passes six cases with four existing POSIX-only skips, including the real whoami command and both late source/context drift refusals. Both terminal exits are zero. Downloaded evidence is independently hash-verified (sha256:96a9476c96ea1c4dd249a55cff9fe217dfeafe969f9441a5ed17e40156f15bf9); seeverification/windows-identity-fixture-native.json. Complete native packaging/regression and exact PR128 CI remain required before landing.
[ ] RETAINED-SDK-PUBLIC-001 — Connect public retained execution to live native SDK producers
GitHub issue: #22
Release target: 1.3.1
Priority: P1
Owner: Retained public runtime and native SDK acquisition
Native FreeBSD renewal: Add a manually dispatched, source-bound installed-wheel qualification on an ephemeral FreeBSD 14.4 VM because no configured FreeBSD runner is available. Use the real authenticated loopback Git source fixture, actual CMake SDK acquisition and public retained CLI, authorization refusals, independent acceptance and loader-less negative control, followed by 40 installed owner controls. Record bootstrap/compiler and product-release boundaries honestly; validate all production imports remain inside the non-editable prefix, retain timeout diagnostics, and never upload fresh SSH private keys. This is development acceptance before final prepared-candidate qualification, not a substitute for it.
Bootstrap renewal: Run
40630671341built the exact patch wheel but stopped at package catalogue refresh: the repository requires userland1404000while the selected 14.3 guest reports1403000. FreeBSD ended 14.3 support on June 30, 2026. Select the supported 14.4 guest already available in the pinned action. Retain both failed native attempts and their artifacts; never bypass package OS-version checks or describe them as SDK test results. The same canonical scenario and 40 owner controls must still pass before this item closes.Owned framework staging: Run
40631668336passes package provisioning on 14.4, then Git refuses the foreign-owned checkout's.gitduring bare-clone staging. Its existing command-scoped trust covers the checkout path but not the upload-pack repository path. Add only that exact source.gitpath to this staging command, and use a real Git ownership-refusal regression to prove other repositories remain refused. Do not change global Git trust or the unprivileged consumer's configuration. Retain this bootstrap failure separately; no SDK scenario has run yet.Failed-guest evidence: Run
40632599324passes package provisioning, bare staging and actual non-editable wheel/dependency installation, then the installed CLI refuses initialization. The VM action throws on the guest exit before copyback, so the artifact contains the wheel and binding metadata but lacks the guest's detailed refusal logs. Capture the original guest status in an exit trap, export only the reviewed report/log whitelist even after failure, and require a separate host verdict after copyback. Prove real nonzero subprocess status and partial diagnostics survive while the host still fails; reject symlinked evidence and keep SSH private keys outside the whitelist. Inspect the actual initialization refusal before selecting its repair; do not infer a cause from missing evidence or weaken initialization/native gates.Observed stdlib prerequisite: The repaired copyback in run
40634138619retains the original guest exit 1, collection exit 0, four hash-bound diagnostic files and the exact 1.402-second initialization refusal: CPython cannot import_sqlite3. FreeBSD packages this standard binding separately by Python flavor. Install the SQLite package matching the selected pip/interpreter flavor, and exercise an actual in-memory SQLite query before building wheel dependencies. Add a real missing-extension negative control for that preflight; do not bypass the public CLI or its source-index requirements. Native SDK acceptance remains unearned until the renewed canonical scenario and all owner controls pass.Native ELF spelling compatibility: Run
40635872330passes actual public initialization, authenticated source acquisition, SDK compilation and bound native dependency observation, then refuses SDK architecture admission. The consumer recognizes GNU'sELF64/Advanced Micro Devices X86-64, whereas FreeBSD 14.4's readelf source emitsAdvanced Micro Devices x86-64for the sameEM_X86_64. Add this exact known ELF64 spelling, retain raw observation properties, and include expected/observed architecture detail in future refusals. Keep unknown machines, ELF32, foreign hosts, changed runtime bytes and unsupported targets refused. Require deterministic source controls and exact-source native renewal before claiming this explains and repairs the observed failure; no architecture check is waived.ACL probe ownership correction: Run
40640435133refuses the newly added preflight withretained.acl.exclusive-root-owned-resource-requiredbefore initialization. The harness incorrectly invoked a root-owned-resource custody API as the unprivileged consumer. Run the actual installed reversible backend during root setup, project the actual consumer UID, retain streams and terminal status before ownership transfer, and require that success before the unprivileged SDK scenario. Keep production root/inode/ACL guards unchanged. The private-inspector owner controls use a mocked workspace and do not establish native allocation; separate disabled/enabled UFS negative/positive evidence remains mandatory. No native confirmation of the ELF spelling repair is claimed from this failed run.Actual 14.4 SDK success and publication boundary: Run
40641794273, artifact12796914474, qualifies the canonical installed SDK microfixture in 1218.206 seconds: actual initialization, authenticated Git source, native SDK compilation/runtime observation, reviewed execution, independent acceptance and the loader-less negative control pass. The raw host header confirms the lowercasex86-64spelling. Root ACL setup passes. All 40 owner controls run without skips: 39 pass; payload materialization correctly refuses because the selected 14.4 image lacksrenameat2. Keep the overall failed verdict. The existing Flavor contract requires native no-replace support and already refuses unsupported systems. Select the capable 15.1 release for the full positive cell, whose release source exports that API, and require five real installed publication controls before SDK work. Preserve 14.4's partial evidence and require the unchanged canonical scenario plus every owner control on the eligible target; no fallback, goal move, deferral or acceptance waiver.15.1 filesystem provisioning: Run
40648299407boots the selected 15.1 image, then stops before package or SDK work because its root filesystem is ZFS and setup assumed UFS. Leave that root intact. Provision a root-owned sparse vnode-backed UFS workspace withacls, assert its actual filesystem/free space, and place the consumer's temporary directory there. Keep the real root ACL probe and all five publication controls before the unchanged SDK scenario and 40 owner controls. The backing image stays outside the consumer's home and artifact whitelist; ephemeral VM disposal owns teardown. Preserve the failed setup verdict; no native acceptance is inferred.Direction: Execute original-source projects with their complete selected source-built SDK closure through the public retained CLI.
Conclusion: Issue22 already owns this gap. Reuse current locked-authority snapshots and production SDK acquisition, live revocation, authorization and command evidence; never accept transported producer claims or relabel SDK inputs. Planning stays read-only and exact reviewed authorization precedes SDK builds.
Captured loader composition (issue #118): An installed native probe reaches the first retained SDK command and refuses the reviewed captured loader variable. Reuse the existing complete retained dependency guard as a typed, plan-bound runtime context; compare the SDK native dependency subgraph under that environment before authorizing each command. Record the context with the command grant and keep ambient overrides, shadowing, drift and revocation fail-closed. Native installed positive/negative renewal remains required.
Identity evidence: A real CMake SDK is built twice under fresh producer grants: locked selection and complete SDK snapshot identities are equal, while live consumer-input identities differ. The legacy input-bound policy therefore cannot be reinterpreted as a stable public review contract. Add a distinct explicitly selected policy binding exact lock, recipe selection, snapshot and placement; fresh production owners must still match that entire closure. Keep the existing policy schema and byte identities unchanged.
Focused results: The initial two-build identity check and source-build regression passed eight cases. Twelve legacy/selected-policy custody checks pass without skips (190.396 seconds). A real public-runtime adapter run now acquires fresh SDK owners and retains six SDK command records through independent acceptance; its three-case group passes in 96.096 seconds. Project discovery and local Git routing are fixture-supplied in that group; this is not installed canonical-project or native compiler SDK qualification. The first wrapper omitted shared class fixture setup and failed before execution; it is retained. The final seven-case source group passes without skips in 166.185 seconds, including wrong selection/snapshot, post-build authority change and revocation after an actual command. Existing runtime compatibility passes all 21 cases in 91.158 seconds after restoring the original missing-producer refusal code; the first changed-code failure is preserved. Lint, formatting, layout, exports, documentation, OpenSpec and reviewed driver/documentation authority pass. Exact code candidate
f65e0c62now passes full controller regression: 2,046 passes, 70 skips and no failures across 2,116 selected tests (1,172.745 seconds). Clean wheel qualification passes with 1,231 members; its exact offline FreeBSD installation verifies 37 distributions. That 40-case installed native batch timed out after 1,800.047 seconds with nine observed passes; it did not complete. That batch does not establish canonical public CLI or compiler SDK qualification. See the scoped record.Captured-context controller renewal: Exact code
4eab5e25passes all 2,198 selected regression cases: 2,128 passes, 70 declared skips and no failures (2,440.464 seconds, two workers). All seven real native-loading cases and three graph-equivalence cases pass, including caller environment mutation. Static, OpenSpec, documentation and driver reviews pass. Its clean 1,235-member wheel qualifies, and the complete configured host lifecycle passes 223 tests and independent acceptance. Supported receipt promotion and current verification pass. This result keeps its own test count, distinct from the predecessor's 227-test lifecycle. Exact-wheel offline FreeBSD installation verifies all 37 distributions. All ten installed native context cases pass with 469 production modules verified from the installed prefix. The fresh canonical native CLI passes SDK production, original adoption, planning and separate missing host/plan refusals, then exceeds its unchanged 3,600-second execution bound. Partial products and original test output earn no receipt or independent admission. The default receipt policy and captured loader requirements remain intact. Compiler SDK admission and release authorization remain open. See the scoped record.Depends on: RETAINED-PROJECT-001,NATIVE-SDK-001
Implementation:
- Bind complete current per-lock SDK owner closure in the local public runtime after plan and host authorization, preserving owners through admission and cleanup.
- Wire production command grants and retained SDK evidence through existing custody and revocation owners without relaxing non-SDK behavior.
Evidence:
- A real locked source-built SDK fixture passes the canonical installed public CLI retained build/test/docs/independent acceptance; missing authorization, producer drift, policy mismatch and revocation refuse before accepted evidence.
- Full regression, static/driver/documentation checks, installed wheel and native renewal pass at the exact resulting candidate.
[ ] MERGE-STACK-001 — Resolve and qualify the remaining retained integration stack
- Priority: P0
- Owner: Retained lifecycle integration and review landing
- Direction: Merge the remaining reviews after the maintainer consolidation request.
- Conclusion: Compose the current main and PR105 repair into PR110 with both histories preserved. Resolve overlapping retained runtime and PE observation changes deliberately, retain PR82 unique history, and require exact combined CI before default-branch landing.
- Depends on: none
- Current direction (2026-10-22): Merge #110 and #115, then reconcile open issues. Compose the exact Windows executable-intent head
5faea3b93f4706157883ad23bb2c6dbefcf808e2into the retained SDK branch before landing. Preserve descriptor-authorized access, hardlink/tree-policy custody and both executable-intent selection and verification. Refresh the reviewed driver and require a fresh combined suite, current lifecycle receipt and exact-head hosted CI. Earlier receipts and source-only results retain their original scope. Issue #116 / PR #119 remain a separate test-contract contribution. - Implementation:
- Merge current PR105 repair and main into the retained SDK integration; preserve its FreeBSD and native SDK additions.
- Reconcile PR82 unique history with the combined implementation and retain its evidence without claiming new qualification.
- Evidence:
- Focused runtime, PE observer and adoption checks and the full local combined regression pass.
- Current driver/documentation reviews and exact-head CI pass before landing; retain uncompleted native/package gates.
Windows integration renewal: Composed code 49a7d52e preserves #115 head 5faea3b9 by merge ancestry. A fresh uninterrupted six-worker full suite exits zero: 2,202 selected, 2,131 passed, 71 declared skips and no failures in 1,042.865 seconds. Focused retained checks pass 203 with four skips; all 12 descriptor-walk checks pass and the new executable-intent/hardlink/descriptor composition regression passes. Lint/format, layout/export, four strict OpenSpec changes, current driver/documentation reviews, documentation tooling and all 121 diagrams pass. The complete configured host lifecycle passes 226 tests; supported receipt promotion and verify pass. Current receipt: sha256:5f0551e4738d04b9bc2dd17ba3f07bb9f02115e285b83be32394dddaf25364ff; finalized candidate: sha256:e7ea4dfdf355c07cf836393db20c12048d32a0edec8fcc62d723a2494ea64836; reviewed driver: sha256:eca0dd79ccc80f0cd33eb90c15d6989473049c2f45d6df9c9c5b853d9685c12e. Earlier source-only and native checkpoints retain their scopes; exact combined hosted CI and landing remain required.
[x] REBUILD-ENTRY-001 — Normalize or safely reject Component file entry points in Standard rebuild
Priority: P1
Owner: framework rebuild CLI
GitHub issue: #75
Current release target: 1.3.0
Direction: Resolve the installed-wheel native-library defect without weakening authority or acceptance.
Conclusion: An installed-wheel native journey exposed an uncaught authority-reader exception for a Component file argument. Normalize supported file entry points or report a bounded CLI error before provider invocation; preserve project and symlink boundaries.
Depends on: none
Outcome: The implementation is already landed in the reviewed main integration; fresh installed native acceptance is renewed below.
Implementation:
- Resolve the documented Component entry point before locked authority loading and normalize invalid-input diagnostics.
Evidence:
- Pass full exact-head hosted CI and land the reviewed combined change.
- Installed-wheel file and directory cases, unsafe paths and no provider invocation on invalid input.
Local evidence: The full unchanged production-source suite passes: 1,580 selected, 1,545 passed, 35 skips and no failures in 779.102 seconds. Eight focused CLI tests cover file/directory equivalence, lexical symlink refusals (including relative paths), unavailable/outside/unrelated inputs and a real missing-Component authority error before lifecycle assembly. The missing-authority assertion is strengthened after the full run and rerun in the focused group. Static/export/style checks, strict specifications, current driver/runner/documentation reviews, 21 Node tests and all 121 Mermaid diagrams pass. The subsequent combined acceptance is recorded below; hosted CI and landing remain open.
Installed native file-input evidence: Noneditable implementation
a46e5e3b8780f21184da6cd4fdb807351b61622apasses the copied tiny-librarycomponent.mdrebuild in 72.058 seconds after reviewed Standard rebind and documentation renewal. Its existing verifier-owned harness remains unchanged (sha256:64c2a0fd2a118b406b4e340278bf2b8db7823bca290719ca0f140b1f49981b1b), including isolated startup, module origin and expected value 7. Generated tests, independent acceptance, current three-test receipt andverifypass. This is a standalone copied-library check, separate from #48 registered-parent evidence, and it does not execute the #76 refusal case. Retained proof identity:sha256:e2230e775cbf47ad5a70442ac6def65a3917b0336296d627d9feb3fb1d508e1d. The combined installed qualification is recorded below.Acceptance evidence: Combined implementation
8746155526cecb46de83202fc26cd4733b13dd62passes the full 1,582-case suite (1,547 passed, 35 skipped, no failures; 648.937 seconds), all 19 focused cases, the installed wheel (sha256:456a7bea81cf93d42892eab9cfd1926f86642281e2a6c133f73d44258584eb93), strict source/specification/review gates and all 121 diagrams. The installed CLI refuses the exact retained incompatible Bazel library profile before generation. A separate supported native profile rebuilds through itscomponent.mdpath with the unchanged isolated, module-origin-checking oracle and expected value 7. Its current native receipt has 4 passing tests andverifypasses. Installed API regressions also pass all eight entry-point and four profile cases. The fresh framework lifecycle receipt is current with 231 passing tests; candidate comparison andverifypass. Native proof custody:sha256:4007c044d3fd7ed8c18bc4a7e451a5ec2812c0feb71074af7bb379cfa16b2e28. This is one successful rebuild per temporary fixture, not regenerative qualification. Full hosted CI and landing remain open.
Current integration renewal: Merge the reviewed entry-point and library-profile implementations with current registered-child and retained-project qualification, preserving both sets of requirements and original native proofs. Earlier 1,582-case and installed two-wheel results remain historical. Run the combined current focused/full suite, native installed journey, fresh lifecycle receipt and exact review CI before landing this batch.
Fresh installed selection proof: The real Standard directory and component.md forms select the same exact host lock; read-only typed-return tracing and unmodified public CLI calls agree. Accepted-only mode deliberately stops at
source_cache.runtime_absentafter lock selection. All five invalid path cases return their precise bounded JSON error with unchanged project trees and no runtime/candidate/build/object roots. No product function or guard is replaced. This proves input selection/refusal; the separate full native library journey is being renewed before closure.Closure qualification: The fresh non-editable installed CLI completes a force-generated source-derived tiny Python library through its component.md path in 78.522 seconds. Its explicit import map, isolated/module-origin-checking oracle and expected value 7 are unchanged (harness
sha256:64c2a0fd2a118b406b4e340278bf2b8db7823bca290719ca0f140b1f49981b1b). Generated tests, import execution and independent acceptance pass; the current receipt has 3 passes, no failures/skips, and verify passes. The exact retained default Bazel profile refuses with its actionable profile error before any coding-CLI launch, with no candidate and only an empty owned runtime allocation. All four cross-platform projection regressions and the complete 2139-pass source suite pass. Directory/file selection and all five pre-artifact invalid-entry refusals are separately recorded. Relevant implementation files match landeda6a22996; exact review CI39790990072passed before its main integration. Seeverification/installed-native-profile-acceptance.jsonandverification/installed-lock-entrypoint-acceptance.json. This closes the entry/profile contracts and does not claim broad regenerative equivalence or release admission.
[x] LIBRARY-PROFILE-001 — Validate Python library build and export profiles before generation
Priority: P1
Owner: framework library profiles and generation preparation
GitHub issue: #76
Current release target: 1.3.0
Direction: Resolve the installed-wheel native-library defect without weakening authority or acceptance.
Conclusion: The default promoted Bazel profile exports a file while library test preparation requires a directory, wasting generation retries. Reject unsupported profile combinations before generation or provide a supported directory export without weakening acceptance.
Depends on: none
Outcome: The implementation is already landed in the reviewed main integration; fresh installed native acceptance is renewed below.
Implementation:
- Validate library artifact shape against the selected build profile before generation and provide actionable profile selection.
Evidence:
- Pass full exact-head hosted CI and land the reviewed combined change.
- Default promotion profile and supported native Python profile through installed-wheel library acceptance; incompatible profiles refuse before provider invocation.
Local evidence: The standalone profile implementation passes all 11 focused projection/CLI tests, including pre-discovery refusal of Bazel and Make file profiles on Linux, Windows and macOS, unchanged native directory exports and existing wheel-library acceptance. The full standalone suite passes 1,579 selected cases: 1,544 passed, 35 skipped and no failures in 703.524 seconds. Static/export/style, strict specifications, driver/runner/documentation reviews, all 121 diagrams and the pinned root skill evaluation pass. Exact production/test source slices are consolidated with the #75 entry-point fix; subsequent combined acceptance is recorded below, with hosted CI and landing still open.
Combined checkpoint: All 19 focused entry-point/profile/qualification cases pass in 9.795 seconds. The combined source passes layout/export, strict lint/format, specifications and current driver/runner/documentation review. The source slices preserve both standalone implementations exactly. Combined local qualification is complete as recorded below; hosted CI and landing remain open.
Acceptance evidence: The full combined evidence is recorded under REBUILD-ENTRY-001 immediately above. The installed CLI rejects the exact retained default Bazel library profile before generation and accepts the supported native directory profile through real generated tests and unchanged independent acceptance. All four installed profile tests pass across the declared Linux, Windows and macOS projections, including existing wheel behavior. The 1,582-case combined suite, package check and fresh current framework receipt pass; full hosted CI and landing remain open.
- Default promotion profile and supported native Python profile through installed-wheel library acceptance; incompatible profiles refuse before provider invocation.
Closure qualification: The fresh non-editable installed CLI completes a force-generated source-derived tiny Python library through its component.md path in 78.522 seconds. Its explicit import map, isolated/module-origin-checking oracle and expected value 7 are unchanged (harness
sha256:64c2a0fd2a118b406b4e340278bf2b8db7823bca290719ca0f140b1f49981b1b). Generated tests, import execution and independent acceptance pass; the current receipt has 3 passes, no failures/skips, and verify passes. The exact retained default Bazel profile refuses with its actionable profile error before any coding-CLI launch, with no candidate and only an empty owned runtime allocation. All four cross-platform projection regressions and the complete 2139-pass source suite pass. Directory/file selection and all five pre-artifact invalid-entry refusals are separately recorded. Relevant implementation files match landeda6a22996; exact review CI39790990072passed before its main integration. Seeverification/installed-native-profile-acceptance.jsonandverification/installed-lock-entrypoint-acceptance.json. This closes the entry/profile contracts and does not claim broad regenerative equivalence or release admission.
[ ] NATIVE-SUPERVISOR-READY-001 — Bind process-group timeout evidence to child readiness
GitHub issue: #95
- Release target: 1.3.1
- Priority: P1
- Owner: Native process-group termination fixture
- Direction: Finish native qualification without confusing interpreter startup with failed signal delivery.
- Conclusion: The earlier FreeBSD full run at 6f933e54 stopped after 1278 passes and 36 skips because the child shutdown marker was absent. Establish explicit handler readiness at the real spawn boundary with bounded setup and failure cleanup, then retain the existing one-second timeout, real process-group signals and shutdown assertion. Production supervision is unchanged.
- Depends on: none
- Implementation:
- Wait for actual child handler readiness before starting the existing supervision deadline.
- Evidence:
- Pass focused POSIX checks and a fresh full native regression with no new skips; retain current source identity and exact landing CI.
[x] JAVASCRIPT-REGISTRY-LEX-001 — Distinguish bundle registries from inert writer text
GitHub issue: #96
- Priority: P1
- Owner: Inert JavaScript lexical observation and generated-source handoff validation
- Direction: Complete lifecycle qualification without rejecting a valid bundle writer as its emitted executable.
- Conclusion: A controlled valid application and bundle are rejected when a writer string or leading inert registry text is added. Use the existing lexer for actual registry identifiers and source offsets, while preserving real-bundle module, local-extension, shebang and CLI-dispatch guards and independent execution/acceptance.
- Depends on: none
- Implementation:
- Reuse the existing inert lexical owner for bundle classification and registry location.
- Evidence:
- Pass valid-writer, leading-inert-text, real broken-bundle refusal and actual Node execution checks; renew full source regression, driver/document review, lifecycle/receipt, native/installed qualification and exact required CI.
Focused results: All six fanout checks pass on the host and Linux and in the actual FreeBSD preflight. All four JavaScript handoff/bundle cases and all three retry cases pass on the host, Windows, Linux and FreeBSD preflight. Complete native/installed and exact CI gates remain pending above.
Closure audit: All four current handoff cases pass without skips. A real non-editable installed guard on native Windows accepts all six inert forms in both writer locations, performs 12 actual Node invocations with exact expected test/smoke payloads, and preserves all four missing-module/extension/shebang/dispatch refusals. Its guard, lexer, callers and fixture bytes match landed fe21a198, exact fully qualified 76ac4c7a and the complete installed wheel at 52c8b6eb. That original snapshot also passes a fresh 230-case framework lifecycle. verification/javascript-registry-acceptance.json retains the source/wheel/receipt and hash-verified native archive identities; this does not declare the unrelated entrypoint or HTML-performance branches qualified.
[ ] NATIVE-PACKAGE-BUDGET-001 — Keep complete packaging proof fixture within its test grant
GitHub issue: #98
- Release target: 1.3.1
- Priority: P1
- Owner: Complete command LINK/PACKAGE integration fixture
- Direction: Make native qualification reach its intended archive-format and custody assertions under a fresh valid test grant.
- Conclusion: The FreeBSD run at 7625cc05 reaches malformed-archive validation after its shared 30-minute test grant expires, correctly refusing with action_wire.expired. Give only this complete multi-component, multi-format fixture two standard budgets while retaining one grant across all phases. Preserve production deadlines, individual subprocess limits, dedicated expiry coverage and all proof-format assertions.
- Depends on: none
- Implementation:
- Use two standard test budgets only for the complete multi-component packaging-chain fixture.
- Evidence:
- Run the affected host fixture and dedicated expiry checks, renew fresh complete native and exact CI qualification, preserve failed-source evidence, and keep the production source, trusted driver and current receipt unchanged.
Observed failed native gate: source 7625cc05 retains 1,149 passes, 34 existing skips and one expired-grant failure across 1,859 selected cases after 2,097.788 seconds. The negative archive-format oracle must run before its fixture grant expires; accepting the earlier expiry code would erase that format coverage. Only this full-chain fixture receives two standard test budgets.
Second native refusal: The 425ac341 rerun retains 1,149 passes, 34 skips and one action_build.input_invalid at package proof reopening after 2,105.044 seconds. Standard build grants have their own 30-minute lifetime; dispatch headroom alone does not extend them. Use a test-only authorization-input/port subclass to issue one-hour grants for this complete chain, preserving production defaults, grant validation, the single dispatch grant, all format/custody oracles and dedicated expiry controls. Run the focused actual native chain before the next fresh full run.
Completed native renewal for PR #81: The fresh complete FreeBSD run at
7db3a7dcbf289142bce20191e05ea4e41f2e085c passes 1,801 cases with 58
platform/tool-dependent skips and no failures across 1,859 selected cases.
The four actual native package cases, complete multi-format packaging chain and
process-group termination case all pass. Independent hash-verified archive:
sha256:6ebba986ea614ea262d6a707a31cb2dad76fc13a4ed7825976fb12be61cad537.
The identical host-built wheel sha256:44327bdd7a76121c16449ed5a2c6014a8992faac03ac49193325f4b24b6cc259
passes native installation with its harness pinned to its actual source
58c9d8a058b9c9c2adc6d69ae86152140fb48bef: 73 preflight cases pass without
skips and all 127 installed-wheel spans succeed. Independent wheel archive:
sha256:bd5cd91d89c92b4813fb14dd6220e418157ddc9c7804d551601f72135db305b2.
Later fixture/roadmap-only commits leave production source and the reviewed driver
unchanged. The supported finalized receipt remains current at
sha256:e68395dc91d3bcb4016b82cf8865c84ec80cbe105734ba1c629011bcfd618ffb.
Exact 7db3a7dc CI run 39519805647 passes. Landing also requires exact CI on
the final review head. Failed and interrupted native attempts above retain their
original source identities and are not successful qualification. The broader
original-source SDK and accepted-retained export programs remain separate.
[x] ACCEPTED-RETAINED-EXPORT-001 — Export verifier-admitted retained source without a coding CLI
GitHub issue: #97
- Priority: P1
- Owner: Accepted-source provider reconstruction
- Direction: Make accepted-source-only build consume a qualified retained source entry and export its artifact.
- Conclusion: Issue #97 reproduces an admitted retained origin being rejected by the coding-CLI provider allowlist. Preserve RetainedSourceSelection semantics with no executable or model claim; merely adding a provider spelling is insufficient. Recover the review only from verified Standard accepted-cache membership at the existing portable cache root. Reconstruct the same no-model/no-executable retained selection and require its canonical identity to equal the dispatched tool binding; carry the recovered review into the existing retained request/semantics namespace. Keep independent acceptance, origin/tree/tool bindings and unknown-provider refusal intact. This remains separate from the original-adoption work in PR #81.
- Depends on: RETAINED-PROJECT-001 and CACHE-RETIREMENT-001
- Implementation:
- Reconstruct accepted retained origins through their existing provider-neutral selection without invoking or inventing a coding CLI.
- Evidence:
- Admit a tiny real retained tree, publish its accepted cache entry, build from accepted source and export unchanged bytes/provenance after fresh independent acceptance; refuse unknown origins, missing admission, changed tree/review/tool bindings and stale acceptance.
Admission gap found by the real fixture: The planned keys now match, but the first complete retained lifecycle publishes full accepted cache membership, not the distinct verifier-owned source-admission evidence required by accepted-only execution. Keep that refusal intact. Extend canonical admission with explicit retained-origin evidence and no invented coding-agent transcript, mint it only from a live reviewed retained qualification with actual passing verifier facts, and retain it alongside the complete accepted membership in one exact cache entry. Old entries without admission must still refuse; reuse still rebuilds, retests and independently reaccepts.
- Closure acceptance: A real noneditable installed wheel (
sha256:0d2f0153c8b98afe2ac54e480ce4c4faaf35848deb1c5b027bbe69fc07bfa57f, exact source9f8b9dab) initializes from landed main and admits a reviewed retained Python tree with no coding-agent executable on PATH. Three native behavior cases and independent acceptance pass, supported receipt promotion commits the result, and public accepted-only build exports exact hash-based compiled bytes with no model selector. Real changed-source authorization and failing native behavior refuse while preserving the prior receipt and export; ordinary generation still failscoding_cli.unavailable. Thirteen current critical cases and the real accepted-export fixture pass without skips; the latter observes a new actual acceptance identity and refuses unknown/substituted origins, missing admission, corrupted cache bytes and failed fresh acceptance. All 13 relevant owner/test files are byte-identical between the qualified wheel source and mainfe21a198. Seeverification/retained-source-installed-acceptance.json; the separate hardware CI recurrence, full native SDK and product/package programs remain open.
[x] CACHE-RETIREMENT-001 — Keep explicit retired cache history verifiable
GitHub issue: #100
- Priority: P1
- Owner: Accepted source-cache membership
- Direction: Keep supported cache refresh usable without discarding immutable history.
- Conclusion: Issue #100 shows that deliberate retirement removes a key pointer while verified enumeration still demands it for the preserved immutable manifest. Record an exact key/entry retirement before pointer removal; recognize only that record as intentional history. Preserve refusal of unexplained missing pointers, corruption, unsafe paths and ambiguous active entries.
- Depends on: none
- Implementation:
- Persist exact retirement records and distinguish them from active membership during lookup and verified enumeration.
- Evidence:
- Prove current lookup and read-only enumeration after retirement, unchanged immutable history, missing/corrupt-record refusal, safe reactivation and portable archive restoration.
- Complete the combined fresh host suite, current framework lifecycle receipt, installed package qualification and exact review CI before landing.
Current retained-export implementation evidence: The real public CLI fixture passes live reviewed retained admission, accepted-only build/export with byte-identical hash-based Python output, a new independent acceptance identity, failed-fresh-acceptance refusal without changing the prior receipt/export, refusal of legacy complete entries without source admission, explicit fresh requalification upgrade, and tampered retained-cache byte refusal. Four admission/closed-wire cases, eight no-agent selection cases, the existing retained-cache guard and all three retirement cases pass. Existing model admission and the combined admission regression also pass. Fresh complete host, lifecycle, installed-wheel and exact review CI gates remain open.
Combined-suite repair: The first complete host run at bb40b136 stopped after 310 passes, 29 existing skips and one error in the existing real command-generator regression. Ordinary cached generators may implement the supported adapter seam without a coding-provider selection object. Restrict retained lookup key reconstruction to an explicitly present typed retained selection; preserve ordinary planned keys. Retain that failed report and the deliberately interrupted prior lifecycle separately, merge the latest native fixture grant repair, and start fresh complete and lifecycle qualification after the focused real command receiver cases pass.
Current-source qualification: At 9941a6c4c1c4fe0e0e05c474135d204346041f79,
the fresh complete host suite passes 1,827 cases with 42 declared skips across
1,869 selected cases. A new force-generated framework lifecycle completes
build, generated tests, execution and independent acceptance; supported receipt
update/check/current and verify pass with receipt
sha256:31b15788308e9ed7cd762d0a5e230598f102465cedfe44cba00a2dbf8fc9fcad
and finalized candidate
sha256:48f264fb8f428cd814a0b7f876aaa1edca0ce135fc26138b0e053712431d5b08.
Actual Windows qualification passes all 21 selected retained/admission/retirement,
ordinary command and public export cases without skips; independently collected
archive sha256:65291999d77cad4917d0d05a1d2925a1271891914a21fcd7db23cc7b7248b1a4.
The preceding bb40b136 native FreeBSD 19-case proof remains separately bound
to its actual source, archive
sha256:51c642d0e49cbd13ff929810b063e7f560c4dea2a47cf062b3b23f707caf0fef.
The current-source native renewal has passed all 44 focused cases, including
ordinary command receivers and all four actual native package cases; its final
public export case remains in progress. Installed-wheel and exact final review
CI qualification remain required. The earlier invalid generated candidates and
interrupted launchers are retained as unsuccessful attempts; no acceptance
oracle was relaxed to obtain the fresh successful lifecycle.
Closure audit: All 11 current cache cases pass with no skips, including all three retirement cases. Every cache-package source file, source-materialization/archive guard and retirement regression is byte-identical across native/lifecycle-qualified 9941a6c4, exact CI-qualified 20508324, installed wheel 1063ecd8 and landed main d5c7b278. verification/cache-retirement-acceptance.json records each criterion and original qualification scope; no broader SDK or release acceptance is inferred.
[x] SWIFT-ENTRYPOINT-001 — Align Swift generation and native single-executable compilation
GitHub issue: #104
Current release target: 1.3.0
Priority: P1
Owner: Swift generation skill and native build contract
Direction: Repair the Swift lifecycle failure blocking 1.3 qualification.
Conclusion: Require one top-level main.swift dispatcher, declaration-only Swift support files and compilation of the same complete source set as the native builder. Keep native build refusal and all acceptance requirements.
Depends on: none
Implementation:
- Update the owning generation guidance and shipped template, preserve exact versioned skill references and record issue104.
Evidence:
- Pass actual Swift compilation and execution including support/tests, competing-entrypoint rejection, skill/template checks, a fresh current lifecycle and required CI.
Swift repair development evidence: Skill version 1.0.7 and both authored/shipped Flavor contracts require the native builder's complete single-executable source set. Two actual Swift compiler tests pass, including three conflicting-entrypoint refusal variants and successful support/test linkage and execution. Ten skill/template tests, SkillEvaluator, lint/format, strict OpenSpec and supported authority reviews pass. A fresh live macOS LaunchAgent sample succeeds on the first generation attempt (one source-cache miss): 3 generated tests, 3 independent verifier tests and 2 assertions, with 6 invocations. The earlier exhausted three-candidate attempt remains retained. A current complete project lifecycle receipt, installed wheel and exact-head CI remain required before landing.
Current Swift-repaired integration lifecycle: At implementation 595da5b25931eaf5bfa94977512596b7eccd7570, the complete project lifecycle passes. Supported receipt update/check/require-current and litai verify pass with 230 tests, no failures or skips. Current receipt: sha256:40585141e6ec627f44b1573bf8ca10868ffd945f0938dc59455feeb4f241d5b0; finalized candidate: sha256:37c2663be538e67fadd94d5ce8f760c66209608e2c04e05c8b2bd142b40bb759; driver: sha256:5d1b8a0f8f67ac284a33b72af22ab8cff9de19b7ddbacf42c0978a7f4be905b6. This run revalidates eligible admitted source through the complete current lifecycle; the separately recorded Swift sample was freshly generated. Final package/native renewal and exact-head CI remain open.
Closure audit: All three current real-Swift tests pass without skips, including support/generated-test linkage, direct compiler alias execution and three competing-entrypoint refusals. Version 1.0.7 authored/shipped guidance and Flavor contracts match their actual qualified wheel bytes. The guide remains identical to the separately recorded fresh Swift generation; current owner/test bytes match landed main and exact CI-qualified 20508324. A forced-fresh framework lifecycle at 52c8b6eb passes 230 tests and its complete installed wheel passes all 131 timing spans. verification/swift-single-executable-acceptance.json retains each original source/receipt/wheel boundary; the unrelated entrypoint-audit final full run remains pending.
[ ] CI-BAZEL-ACTION-001 — Review the Bazel setup action patch for release 1.3
GitHub PR: #106
Current release target: 1.3.0
Priority: P2
Owner: GitHub Actions C++ native qualification workflow
Direction: Reconcile the newly opened Dependabot PR #106 during the release contribution sweep.
Conclusion: Include the independent pinned 0.19.1 CI-action patch. The subsequent explicit maintainer merge request prioritizes this already-green review while PR #105 is repaired. It fixes warning reporting, adds a restore timeout option and updates action dependencies; it changes one workflow action pin and no runtime or native package code.
Depends on: none; the action pin has no runtime dependency on PR #105
Implementation:
- Review and land PR #106 through normal merge semantics after the explicit maintainer merge request; preserve the upstream action SHA pin. Merge
ccd4c030retains the exact upstream 0.19.1 commit104e3eea9447cdaa4b00d0fb46191a3985d26ab3; all non-placeholder checks on review headd95e3aaapassed. Exact postmerge CI remains pending.
- Review and land PR #106 through normal merge semantics after the explicit maintainer merge request; preserve the upstream action SHA pin. Merge
Evidence:
- Inspect the one-line workflow diff and upstream release; require green exact PR #106 CI and exact postmerge main CI before release mutation.
Consolidated integration qualification at c3d15a2c44c0ff025905fa7f51d0683d09c76f33: PR #105 contains the current public heads of #77, #78, #81, #89 and #99 by Git ancestry. The complete host suite passes 1,873 cases with 44 declared skips across 1,917 selected cases. The exact installed host wheel sha256:0b0d7cd302c0103566060a38df2d92b478674cb83dc4f0397febe82994b31c2e passes all 131 spans. Current receipt sha256:40585141e6ec627f44b1573bf8ca10868ffd945f0938dc59455feeb4f241d5b0 remains valid with 230 passing lifecycle tests.
Fresh installed old-wheel 90d5b6e9 to current-wheel journeys pass coordinated parent/child rebind, signed replacement, exact recovery retention, native rebuild, standalone component-file rebuild and incompatible-profile refusal before generation. Both native receipts are current with three passing cases and the unchanged isolated/module-origin/result-seven oracle sha256:64c2a0fd2a118b406b4e340278bf2b8db7823bca290719ca0f140b1f49981b1b; parent validation passes. Private archive: aa6a7011d7325ac08e721b77ff67bb73fcb95f9a594eee0efec71c9c1ea896ec. A separate real installed retained-source admission and accepted-only export uses the actual framework distribution with no mocked framework observers or model selector, preserves exact checked-hash bytecode, and checks every framework import is installed. Private archive: a3406f643f4bf00a34aa46571fa078b47c956b4ea2303cf6a47403e07000dd33. These are bounded individual flows, not regenerative qualification or transfer of parent release authority.
At baseline composed source bb3a8727, the native FreeBSD full run passes 1,828 cases with 78 skips across 1,906 cases, including the four actual package cases, complete chain, process supervision and 45 retained-source/export/package cases (archive b15c89eb7d73cfd843c7161aaaca231b46f873e074fabc61e79722f9035bdb39). Its invocation omitted the explicit pinned-pip input, causing 20 Python cases to skip. A separate six-module run with the staged, digest-verified installer passes all 21 cases without skips, covering every previously skipped ID plus one previously passing case (independently collected archive 3a90e6ad331398b260096b3ba763eb74f518c1daf75031c661be3bd8d5f19eb0). The original full report is retained unchanged.
Local native Elixir 1.20.4/OTP 29 with source-built pinned Hex 2.5.1 passes all three library and both graph qualification cases with no skips, including the four Hex-fetch failures observed in the superseded PR #99 run. PR #81 final-head CI 39545486434 passes at 5543f5cc. PR #105 still requires exact current-head CI and the active provided-wheel FreeBSD run pairing the c3d15a2c harness with those identical wheel bytes. Later qualification-note edits change metadata only; they do not relabel these evidence origins. Broader native catalog/compiler SDK and actual Windows ARM64 acceptance remain open.
[x] WORKTREE-CONSOLIDATION-001 — Consolidate reviewed worktrees and superseded pull requests
- Priority: P1
- Owner: Repository worktree and review inventory
- Direction: Consolidate existing worktrees and PRs while retaining unfinished work and qualification evidence.
- Conclusion: Retain independent review scopes and their full Git histories. Close only reviews whose exact heads are ancestors of retained integration reviews; archive ignored state before retiring clean inactive checkouts. Do not merge failing or pending candidates or bypass branch garbage-collection policy.
- Depends on: none
- Implementation:
- Inventory exact review heads, local commits, active checkouts and ignored state.
- Retire redundant clean inactive worktrees after preserving ignored state and proving every head remains reachable.
- Close superseded reviews with explicit links to retained integration reviews; preserve unique review and branch scope.
- Evidence:
- Revalidate worktree status and ref reachability immediately before removal; retain a local migration journal.
- Verify final worktree inventory, open review inventory and untouched unique branch heads.
Consolidation evidence: The operator-authorized pass reduced 27 registered
worktrees to four: the main checkout and the integration checkouts for #105,
#110 and #82. All 23 retired worktrees were clean and inactive; their exact
heads remain reachable through unchanged local branches. All 893 ignored paths
were preserved by same-volume rename, with device/inode identity rechecked after
retirement. The local migration journal SHA-256 is f1c221b37977b11cc01e931c8ad6849b91597f0e7f7bfbf5c0dfa0f2f4eacb9e;
its ignored archive remains under the repository build output. No branch was
deleted, and the policy-driven garbage-collection plan admitted no candidates.
Closed #77, #78, #81, #89 and #99 into #105, and #87, #108 and #109 into #110.
Each closed review's exact remote head was verified as a Git ancestor of its
retained integration review immediately before closure. Branches and review
history remain available. #82 retains five additional merge/evidence commits
outside the combined #105/#110 ancestry and therefore remains open. Unique local
heads bf4ee21e, fb35e56d, 51291de9 and 491bc807 remain unchanged on their
original branches; retirement of their checkouts is not a completion claim.
At that pass, remaining review scopes were #105 (retained lifecycle/runtime integration), #110
(native SDK public execution, including #109/#108/#87), #82 (public execution
merge/evidence history), #112 (qualified-library recertification) and #106
(setup-bazel action update). #105's prior exact-head Linux run fails in the
Swift builder integration test. #110/#112 still have queued macOS CI. #106 is
green but retains its existing sequencing after #105. None was merged by this
maintenance pass. Worker alignment refused the configured template with
worker_alignment.invalid; no user-worker qualification jobs were dispatched
or worker configuration repaired. This operational audit does not close WORKTREE-002's
reusable migration-contract or platform-qualification obligations.
Windows review consolidation: PR119 exact head
1a4d3e6eis an ancestor of retained PR127 head62ce16a0; the latter has a complete green hosted matrix and fresh host qualification. Close PR119 as superseded while preserving its branch, histories and all issue116 native/landing gates. PR122 and PR124 remain retained: their optional-import and timing runtime/test slices match the accepted #127 source, but their exact receipt-bearing heads were deliberately not merged. Their final disposition follows complete qualification of the consolidated successor. No source contribution is represented as landed by this review closure.Landed review disposition: PR128 exact head
76ac4c7apasses its normal CI and complete platform matrix39936620110(one retained hardware expiry, followed by only that failed shard retry). It merges asfe21a198, and local main fast-forwards cleanly. GitHub recognizes PR127 through ancestry, associating existing integration merge874da1ba. PR122 and PR124 close as superseded after exact contributed source/test/documentation byte comparison to landed main; their historical heads and receipts remain retained. Two further clean inactive checkouts retire after process/container checks, with all ignored state and Git metadata preserved by verified same-volume rename and every ref unchanged. Nine checkouts remain. Seeverification/review-consolidation-landing.json; exact-main CI39948443185and #129 native performance renewal remain separate pending gates.Additional inactive checkout retirement: Two clean, redundant checkouts are retired after process/open-file and container-mount checks. Their exact branch heads and all other Git refs remain unchanged; ignored files move by verified same-volume rename and per-worktree Git metadata is retained. See
verification/worktree-consolidation-followup.jsonfor the journal identity and observation limits. Ten checkouts remain, including active controllers and unfinished reviews. This manual operation does not satisfy WORKTREE-002 automation; moved environments need path reconfiguration before reuse.
[ ] SWIFT-DRIVER-MODE-001 — Preserve Swift compiler mode after executable resolution
- Priority: P0
- Owner: Native compiler discovery and Swift qualification
- Direction: Merge the remaining reviews after repairing their required CI gates.
- Conclusion: The exact PR105 Linux failure resolves the swiftc symlink to swift-driver and loses its compiler-mode invocation. Bind an explicit Swift compiler mode into the resolved command while retaining executable-byte verification and source/artifact custody.
- Depends on: none
- Implementation:
- Preserve swiftc compiler mode when the resolved executable is swift-driver; leave ordinary compilers unchanged.
- Replay the pinned SDK environment for direct Swift compiler invocations; native testing exposed that the Swift builder omitted the selected SDK environment.
- Add portable symlink-driver regression coverage and requalify the affected native builder path.
- Evidence:
- Focused compiler discovery and native Swift tests, format/lint, and reviewed driver/documentation authority checks pass.
- Require green exact review-head CI before merging the composed PR110; PR105 is retained by ancestry and superseded. Keep remaining qualification honest.
Current local repair evidence: All three native Swift builder cases pass on macOS, including direct resolved-compiler compilation, both executable modes, explicit-mode identity parity and competing-entrypoint refusal. The first direct compiler probe correctly failed on missing SDK state; replaying the pinned SDK environment repaired it without changing source/output authorization. Lint and format pass across 1,647 files, driver/documentation reviews are current, strict OpenSpec checks pass and all 121 diagrams render across 616 Markdown files. The full local regression and exact updated-head CI remain required before land. The installed ambient CLI could not parse the current worker template; the source-tree managed CLI performed alignment and found five aligned workers, one unreachable endpoint and one worker with 735 MiB free. No jobs were sent to the unavailable workers and no data was deleted.
The first full local regression was deliberately interrupted after 850 completed cases when concurrent PR #112 changed main. Its checkpoint is retained as partial evidence; the merged candidate requires a fresh full run.
MERGE-STACK-001 reconciliation retains the SDK branch's later native and installed evidence for shared owners and imports the integration branch's additional owners. Earlier qualification details remain reachable in PR105 commit b6e36582. PE observation uses the newer versioned cache facts, whole-capture invalidation and deterministic mutation controls; FreeBSD read-only views and typed performance-span assertions remain composed. This does not advance unfinished native SDK or package gates.
MERGE-STACK-001 also retains PR82 head 6e7b94c3 by merge ancestry. That merge changes no production or test source: its unique merge/evidence history is retained while the newer combined driver pins, roadmap and existing receipt remain selected. No historical receipt was promoted as current qualification.
SWIFT-DRIVER-MODE-001 combined-main local qualification: Exact code
b6e36582 passes all 1,936 selected Python cases: 1,892 passes, 44 declared
skips and zero failures in 765.817 seconds. The complete fresh host lifecycle
passes 230 tests and independent acceptance, and supported receipt promotion
succeeds. Current receipt:
sha256:93ea919ab6091e4b0bef38d2e54a02b8caf607c4cf8c5f7de301b97f1571403b;
finalized candidate:
sha256:e8a465c22569065501f73d056a235ce58ef4bdc16c0d5560e5d15430488e23f9;
reviewed driver:
sha256:64d7cb48a685fbba3c1c0d4d7c97edce79c718612c7cdde2b2f90590be114747.
litai verify passes authority and current receipt; three unconfigured gates
skip. This proof remains scoped to PR105 plus merged main. MERGE-STACK-001
separately composes PR110 and PR82 and requires its own current evidence and
hosted matrix; none of this evidence is relabeled for that larger code closure.
MERGE-STACK-001 local qualification and publication: Composed code 7ef6a3e9
and metadata ancestry 91347211 have identical source and test trees. The clean,
uninterrupted make python-check passes all 2,188 selected cases: 2,118 passes,
70 explicit skips, zero failures and zero known failures, in 735.513 seconds,
with command exit 0. A preceding resumed run accounted for the same cases but
returned exit 2 because checkpoint repair is not final qualification; that run
is retained separately and was not substituted for this fresh pass.
All 12 PE-custody cases pass. Lint, format, repository layout, public export,
four strict OpenSpec changes and all 121 diagrams across 625 Markdown files pass.
The configured host lifecycle passes all 227 tests and independent acceptance.
Supported receipt promotion succeeds, and litai verify passes authority and
current receipt with three unconfigured gates skipped. Current receipt:
sha256:bdd4db5b31326e915ec70833127df7c8e74cd93778e93aa533fa423e94194b39; finalized candidate:
sha256:b43100845924856b28eb4cd74fa3cb3d33f90d52aa0391a064ee7becf22cabe3;
reviewed driver:
sha256:3dc534c54d4a2e8e279b76437fca185959d63a1130fb7d504347e9703f9fbb3e.
This 227-test result belongs to the composed candidate and does not relabel the
predecessor PR105's 230-test result. The source tree is
f307198c84cb72ec97a2516ffaa939a8e67910bb, and the test tree is
db4292a5392923d36a372f1349d341678244bf50.
The remaining PR105/PR82 checkouts were clean and inactive, and every head was
already an ancestor of this combined branch. Ignored state was preserved by
same-volume rename and revalidated device/inode identity. Only main and the
combined review checkout remain; all branch refs and unique earlier work are
retained. The second migration journal SHA-256 is cccdceec7e771fcde80a7642931aec205778c51a7fec2ad26bdec1334dc32a55.
Queued runs 39687824995 and 39693800706 were canceled only after verifying
closed PR108/PR109 heads are ancestors of the active review; histories remain.
No main qualification run was canceled. PR105 and PR82 are superseded by PR110,
which retains their exact public heads and their full histories. The combined
branch still requires its own exact hosted CI before landing. Canonical installed
public SDK execution, actual compiler SDK, native packaging and release admission
remain open in their owning items; this controller/sample proof does not close them.
[ ] RETAINED-WIN-EXEC-001 — Qualify reviewed Windows retained executable intent
GitHub issue: #114
GitHub PR: #115
Priority: P0
Owner: Retained input, output admission and packaging executable intent
Direction: Reconcile late PR115 and issue114 during the requested merge pass.
Conclusion: The peer review reports a reproduced current-main Windows shard3 failure and 51 focused passes, one skip and 60 passing subtests. Full local and hosted matrices remain pending. Review sealed executable intent independently of native POSIX mode bits and compose the qualified fix with current SDK/PE custody before Windows admission.
Depends on: MERGE-STACK-001
Implementation:
- Review PR115 at its exact current head; retain its author-owned qualification boundary.
- Qualify and compose the fix without losing current native SDK or PE observation guards.
Evidence:
- Complete clean local regression, real Windows input/output/admission/package proof and green exact-head hosted CI before landing.
[x] ENTRYPOINT-AUDIT-001 — Audit original-source agent entry points
GitHub issue: #113.
Priority: P1
Owner: Agent onboarding and original-source adoption
Direction: Reconcile open GitHub issue #113: report missing or stale agent delegates on authored projects.
Conclusion: Preserve metadata-only adoption and custom instructions. Use the issue-authorized read-only audit plus explicit authoring-requirement route: report missing/stale/unsafe owned delegates against the declared agent_skill, expose readiness in original-adoption planning/apply results, and require reviewed authored repair before onboarding is described as complete. The audit never writes agent files, pinned parents or retained snapshots; it does not grant lifecycle admission.
Depends on: none
Implementation:
- Add supported read-only entry-point auditing and an explicit reviewed authoring requirement without modifying pinned parents or retained evidence.
Evidence:
- Cover initialization, original adoption, nested projects, custom skill paths, custom shims and unsafe paths.
- Complete exact review CI and reviewed landing with current qualification.
Completion: Exact review head
a5609e1epasses ordinary CI39971938723and all 26 cells in full comparison CI39971961215. PR #130 is merged at9d62ce09; the primary checkout is clean and synchronized, and supported receipt require-current plus all-gate verify pass. The source suite, lifecycle and real noneditable CLI acceptance below retain their exact scope. This completes onboarding discovery only; #116 and #129 remain open, and no native lifecycle/product/release acceptance follows.Custom-path authority: Current v2 definitions admit bounded portable relative onboarding paths through the shared canonical path owner; optional shim validation follows the declared field. Published v1 schema inputs retain the root SKILL.md rule before legacy conversion. Custom-path provider metadata must name the file explicitly. Positive configured projects and original-adoption planning, default-delegate staleness, cross-platform path refusal and frozen-v1 compatibility are covered; no automatic instruction repair or lifecycle admission is added.
Focused development qualification: 22 audit cases, 12 original-adoption cases and three documentation-graph cases pass with no skips or failures on the controller; two schema-catalog checks also pass. Positive custom-path original planning/apply preserves source and authored delegates after the required documentation review. V1 root-only parsing, cross-platform path refusals, owned/absorbed/nested slots, empty/comment-only references, reparse/symlink refusal and self-only documentation-spine refusal remain tested. Skill admission passes. See
verification/agent-entrypoint-development.json; complete qualification remains open.Retained full-suite refusal: Frozen source
af620be3retains 12 passes, 23 skips and one error from 2,235 selected cases at clean two-replay self-replication because the new yaml import is absent from the package manifest/source BOM. Declare the exact runtime PyYAML dependency, retain the failed attempt, qualify replication again, then start a fresh complete run; dependency admission remains enforced.Parser resource follow-up: A 379-byte valid YAML merge-alias graph expands to 4,096 mapping pairs with ordinary SafeLoader. The byte limit alone does not bound that work. Before landing, bound composed nodes and depth, permit scalar aliases only, and refuse shared container aliases in both onboarding frontmatter and provider pointers. Preserve every input byte and report the existing typed invalid finding. The pre-hardening snapshot
9f8b9dabpassed all 2,235 selected source cases (2,164 pass, 71 explicit skips), its 230-case lifecycle and complete 131-span installed-wheel gate; these facts do not qualify the upcoming parser change.Final installed public CLI acceptance: Exact qualified wheel
1e848368passes all nine public discovery cases plus real YAML container-alias, onboarding alias, depth and node-limit refusals. Scalar aliases remain ready; every audit preserves exact file bytes and mtimes, and authored inputs restore ready. Installed module bytes match the reviewed source. Seeverification/agent-entrypoint-installed-final-acceptance.json; no lifecycle admission is asserted by the discovery command.
[x] RETAINED-ACL-PREFLIGHT-001 — Preflight retained workspace ACL support
GitHub issue: #92.
- Release target: 1.3.1
- Priority: P1
- Owner: Retained workspace grant admission
- Direction: Reconcile open GitHub issue #92: detect unsupported execution filesystem ACLs before expensive capture.
- Conclusion: Probe the actual selected ACL backend and workspace with reversible named-user/default grants; keep worker mount policy and account custody unchanged.
- Depends on: none
- Implementation:
- Run bounded capability preflight before capture and emit an actionable unsupported-filesystem diagnostic.
- Add an explicit negative regression proving unsupported ACL brands refuse before text conversion and still release the native ACL handle; the production guard is unchanged.
- Evidence:
- Real disabled/enabled UFS probes establish early refusal and exact cleanup in native job
122392255232, review run40561422042. The unchanged unsupported-brand guard has an explicit three-brand negative port regression; the combined ACL/execution suite passes 36 tests with 12 platform skips. Production source remains byte-identical to the qualified review. See bounded evidence and limits; this does not qualify a complete FreeBSD lifecycle or the final patch candidate.
- Real disabled/enabled UFS probes establish early refusal and exact cleanup in native job
Current direction: Before retained input capture, create one private probe directory inside the already authorized allocation prefix, hold it by descriptor, apply and read back a real named-user access plus default POSIX ACL, restore the original ACLs, and remove the empty directory. Translate native unsupported-filesystem refusal into an actionable POSIX.1e mount-option diagnostic while retaining all existing brand, account, path, descriptor and cleanup guards. This preflight does not change worker mounts.
Controller result: The ACL and retained-execution groups pass 33 tests, ten
declared platform skips and 37 subtests. They prove the preflight precedes input
capture, projects both named-user access and default ACL entries, reads current state,
restores custody, removes its probe after success, translates native
EOPNOTSUPP into the actionable filesystem diagnostic, and removes the probe after an
open failure. Static lint and formatting pass. Actual disabled/enabled FreeBSD UFS
probes remain required; no configured aligned worker currently supplies that platform,
so a SHA-pinned FreeBSD 14.3 VM cell now provisions separate UFS mounts without and
with POSIX.1e ACLs and runs those two native acceptance cases. Review run
40561422042 for 2380afa031cf59182ad2d31ca1ece7aa703e3d87 now succeeds,
including native job 122392255232. Production source, project pins, execution
tests and the two native acceptance cases remain unchanged. The additional
negative test supplies native-port brands 0, 2 and 3 and proves refusal before
conversion or mutation plus exact handle release. This is a controlled negative
fixture, not native NFSv4 filesystem acceptance. All 48 selected ACL/execution
tests complete: 36 pass and 12 have explicit platform skips. The bounded goal is
complete; final 1.3.1 candidate and broader FreeBSD qualification remain separate.
[x] UPDATE-CLOSURE-001 — Check prospective update scaffold dependency closure
GitHub issue: #88.
Priority: P1
Owner: Project update planning
Direction: Reconcile open GitHub issue #88: newer installed scaffold additions must not mix incompatible pins into older parent catalogs.
Conclusion: Compare the complete prospective closure before apply, retain explicit parent selection and overlays, and offer a safe compatible subset.
Depends on: none
Implementation:
- Align plan/apply compatibility diagnostics and preserve atomic rollback for incompatible additions.
Evidence:
- Older pinned parent plus newer installed scaffold fixtures cover mismatched dependencies, safe subsets and destination preservation.
- Required review CI, landing and exact-main confirmation pass: PR #131, review run
39990970425, merged mainef5db15f, and all 26 exact-main jobs in40007862532.
Implementation: Planning now projects exact current, inherited and selected framework skill bytes before apply. It reuses canonical dependency validation, binds incompatibility diagnostics to the plan and excludes incompatible additions from the safe subset. Parent selectors, overlays, currentness checks and atomic rollback remain intact. Published v1 schema bytes and dependency identity rules are unchanged. Complete: required review CI, merge and exact-main confirmation all pass.
Combined pre-write guard: A local provider outside the inherited file set could change between planning and apply. The repository adapter now runs a read-only combined preflight after its currentness checks and before inherited, provenance or baseline writes. The public CLI regression changes a local provider immediately before apply and forbids entering the lineage writer; it failed before this guard and passes after it.
Focused implementation evidence: Ten portable compatibility cases pass through the managed checkpoint runner, including read-only planning, safe-subset apply, unchanged published-wire identity, actual JSON Schema validation, concurrent local-provider drift before the lineage writer, and invocation from a nested directory while updating inherited bytes. Existing lineage/rollback cases (three) and adapter cases (two) also pass.
Complete local qualification: Exact implementation
e1d3e94bpasses all 2,262 selected source cases (2,191 passed, 71 existing skips, zero failures) in 1,246.156 seconds. The exact-source installed-wheel gate passes with wheelsha256:e3c5852b83d857030243048364223063af3b8b0ecde53a6a9d501a384c7ad4cb. A forced-fresh lifecycle passes all 232 cases with no skips; supported receipt update, check, require-current and verify pass after the metadata-only integration. Receiptsha256:f0b3fa15b34b5d138bd0f9480a02796e216a6df704cabf6975f6796e6a40a9acremains a local assertion. Seeverification/project-update-closure-qualification.json. PR #131 passes required review CI and lands atef5db15f; exact-main CI40007862532passes all 26 jobs. Seeverification/project-update-closure-landing.json. No unrelated native issue is qualified by these portable results.
[ ] SDK-OBSERVATION-COST-001 — Bound repeated installed distribution observation
GitHub issue: #117.
- Release target: 1.3.1
- Priority: P1
- Owner: Installed retained SDK authorization
- Direction: Reconcile open GitHub issue #117: repeated full distribution observation dominates installed FreeBSD preparation.
- Conclusion: Investigate operation-scoped reuse and bounded revalidation while preserving exact member identity, live revocation, source and command custody; do not use process-global success caching.
- Depends on: none
- Implementation:
- Measure the installed public SDK route and reduce redundant observation without weakening drift detection.
- Evidence:
- Compare equivalent profiles and uninstrumented native timings; prove changed, redirected, missing or altered members fail closed during commands and qualify independent consumer acceptance.
[x] WINDOWS-TEST-CONTRACT-001 — Repair Windows test contracts
GitHub issue: #116.
- Priority: P1
- Owner: Portable runtime and retained loader test fixtures
- Direction: Reconcile open GitHub issue #116 and stacked PR #119.
- Conclusion: Keep copied Python aliases bound to their native base runtime and exercise structural loader checks on a supported platform while preserving explicit Windows refusal.
- Depends on: none
- Implementation:
- Reconcile PR #119 after #115, diagnose its Linux driver-pin failure, and land its reviewed fixture contribution through the integrated review.
- Evidence:
- Focused alias ordering and loader cases plus exact-head Linux and Windows CI pass without weakening production checks.
Completion evidence: PR #119 head 1a4d3e6e is retained by ancestry in
main 9d62ce09. The Python alias fixture retains its real base executable,
versioned runtime DLL and pyvenv.cfg without new test skips; the loader-role
fixture selects Linux, and the separate Windows unsupported-loader assertion
remains active. Exact-main run 39980361698 passes all 26 jobs, including both
Linux Python jobs and all three full Windows/Python 3.12 test shards. See
verification/windows-fixture-contract-closure.json. This completes #116's
fixture-contract acceptance. It does not establish the cause of the separately
reproduced hardware observation timeout or qualify the complete provided-worker
native gate; #90 and #129 retain those remaining requirements.
Review finding: Exact-head Linux job 119840524271 in run 39783402916 fails the lifecycle driver review: retained_project_execution.py changed while the pin still names c27617cb. The contribution also projects ambient SYSTEMROOT, overlapping #110's already-bound system-context owner. Reconcile the production delta against the integrated custody path before re-reviewing and repinning; do not treat the failure as only an infrastructure retry.
Current integration: Preserve PR #119 head 1a4d3e6e by merge ancestry. Retain the current bound Windows system-context owner and captured Python/VC sidecars; reject the peer's ambient SYSTEMROOT shim and its superseded direct-helper test. Existing typed context tests own currentness/refusal, and the loader structural case already selects Linux in current main. Compose the peer's deterministic base-runtime alias/DLL fixtures and latest controlled remote toolchain probes. The old Windows Elixir failures occurred during upstream strict-version discovery before tests; both exact OTP tags are currently available. Fresh combined controller and native Windows acceptance remain required.
Integrated host qualification: Exact implementation
dd8a9f35passes a fresh uninterrupted complete source suite: 2138 passed, 71 explicit skips, no failures (2209 selected). The fresh force-generated project lifecycle passes all 228 cases with no skips; supported receipt update/check/require-current and verify pass. Receiptsha256:0037edcc8b082a9b2554851e6cd9cc1598ccb8715750e45de6b8a9f59638b857; finalized candidatesha256:03fd1ef649f40933ffb35c52a380bc18ae5d9638407e0a9ca27cfb10258f8217. Seeverification/windows-integration-host-qualification.json; preserve the earlier failed SSH response attempt. Exact-head hosted CI and finalized-receipt native/package renewal remain required.Retained development failure: The native Windows run at
dd8a9f35passes preflight/environment/compile/lint/OpenSpec (21 tooling tests and 121 diagrams), then reaches its unchanged 5,400-second owned-tree deadline during wheel checks. It does not reach the unit gate. All 112 completed timing spans succeeded, but that is not a complete wheel pass. The evidence archive is downloaded through the configured nondefault transport and independently hash-verified (sha256:d802e2da8e91835de502d692f1d280cccb748637d706e13a0726b34e95122e39); no routing configuration is published. Seeverification/windows-development-timeout.json. Finalized-candidate qualification and the corrected Windows identity fixture remain open.PR128 hosted hardware observation: Full qualification
39936620110, Windows/Python3.12 shard 3 job120357700322, stops attest_public_factory_automatically_uses_private_configurationwithaction_hardware.transport_expired. The identical target test and unchanged Windows hardware/configuration owners pass all three cases with no skips on an aligned native Windows worker in 48.875 seconds. Its independently verified evidence archive issha256:00333ea078b62610dd8116a293c19ce6017ba1f212763cef2df2f613fe4ede59; seeverification/windows-action-configuration-diagnostic.json. The native source baseline and its POSIX-only source difference retain their exact scope: this diagnosis does not replace exact-head CI. The cause of the hosted expiry is not established; no production timeout or guard changed. GitHub refused a failed-job retry while the rest of the workflow was active; retain those healthy jobs and retry only the terminal failed cell after workflow completion.Finalized-source native timeout retained: Provided Windows qualification at
62ce16a0terminates at its unchanged 5,400-second owned-tree deadline (5,400.761 seconds), during wheel checks and before unit tests. Preflight, environment, compile, lint, 21 documentation-tool tests and 121 diagrams pass. All 111 completed wheel timing spans succeed; the longest installed Python/HTML operation is 3,312.078 seconds, and operator golden paths take 807.891 seconds. Independently verified archivesha256:e0b1357c9cd6f28a148d959087376f86377c4fa6dd8f9b91ba29c5072a7447d7retains the original result, log and timings. Seeverification/windows-final-head-timeout.json. Inspect the expensive native operations before another full native gate; this is incomplete qualification and does not replace PR128 exact-head hosted CI.Repeated exact-main failure: Run
39948443185, job120396818599atfe21a198fails the same real hardware-probe transport deadline after 497 passes and 84 skips. The candidate retry had passed; recurrence requires stage-level diagnosis before another retry. The 180-second observation bound and 1,800-second action grant remain unchanged. Seeverification/windows-main-hardware-recurrence.json.Recurrence diagnosis before repair: Exact-main run
39948443185is now terminal with the hardware expiry. Its exception identifies transport but discards whether the shared 180-second lease was first consumed by controller receiver-code observation or by the child transport. Add bounded scalar timings to the existing real factory regression on failure, delegating to every unchanged production call and preserving the original exception chain, positive assertions and execution bounds. This is diagnostic coverage, not a timeout fix or green main claim. Renew that exact fixture before the next combined CI run; do not blindly retry the failed main cell.
[ ] ISSUE-RESOLUTION-001 — Resolve all open issues with verified closure
Detailed execution and acceptance: Open issue resolution.
- Priority: P0
- Owner: Framework issue resolution and acceptance qualification
- Direction: Resolve all open issues, preserving the acceptance criteria and scope of each issue.
- Conclusion: Use the live GitHub tracker as the issue set. Reuse reviewed peer work, fix gaps, qualify at the requested native and installed scope, land through exact-head CI, and close only after evidence proves the complete issue contract.
- Depends on: none
- Implementation:
- Maintain the live issue-to-authority plan and reconcile peer reviews before starting duplicate work.
- Implement and integrate every outstanding issue without weakening security, native, packaging, release or execution custody boundaries.
- Evidence:
- For each closed issue retain a criterion-by-criterion acceptance result and a landed commit with the required tests and native evidence.
- Completion audit finds no unresolved open issues; uncertain, partial and pending qualification remains open.
[x] DOC-DEPENDENCIES-002 — Refresh DOMPurify after critical documentation dependency findings
GitHub issue: #120
Priority: P0
Owner: OpenSpec and Mermaid documentation tooling
Direction: Resolve newly reported critical and high DOMPurify advisories without weakening the audit gate
Conclusion: The pinned transitive DOMPurify 3.4.16 is affected by GHSA-cg2g-xh64-v4q7 and GHSA-mrv2-3pqr-j5jr; both identify 3.4.17 as patched. Update only the compatible transitive lock and preserve exact prior qualification scope.
Depends on: none
Implementation:
- Update the lock with the normal npm resolver; retain audit policy without exceptions
Evidence:
- Fresh clean install, dependency gate, documentation tool tests and full diagram rendering; renew the native gate after integration
Implementation: the normal npm resolver changes only DOMPurify's version, registry URL and integrity, from 3.4.16 to 3.4.17. A clean installation and dependency gate pass without exceptions; all 21 documentation-tool tests and all 121 diagrams across 625 Markdown files pass on the controller. At that controller checkpoint, native Windows renewal remained required after composition. No Python production code changes.
Completion evidence: The integrated native Windows attempt at 28371242
completed a fresh npm ci with zero reported vulnerabilities, the unchanged
high/critical audit gate, all 22 documentation-tool tests with no skips, and all
121 diagrams from 626 Markdown files. Its later wheel timeout remains retained
under issue #129; that timeout does not contradict the completed dependency and
documentation checks. The documentation package manifests and lock are byte-for-byte
unchanged between that native revision and exact main 9d62ce09, whose required
CI run 39980361698 passed all 26 jobs. See
verification/documentation-dependency-closure.json. This closes the dependency
repair scope and makes no claim that the complete provided native gate passed.
[ ] CLI-IMPORT-001 — Defer optional MAC schema parser initialization
Owner: framework CLI project command dispatch and MAC contract projection
GitHub issue: #121
Release target: 1.3.1
Direction: Ordinary project commands must not initialize optional MAC schema parsers.
Conclusion: The native installed-wheel profile attributes 235.62 seconds to importing the MAC projector, including 228.89 seconds and 39 parser constructors in RFC3987 grammar initialization. Load that adapter only for
project mac-contract. Keep strict BOM validation unchanged. Profiling overhead is included; these timings do not establish an unprofiled speedup or explain the entire full-gate timeout.Implementation and evidence:
- Move the optional import into the MAC command handler.
- Prove ordinary project CLI import avoids the adapter and grammar in a fresh process.
- Prove MAC command dispatch and strict malformed-BOM rejection remain intact.
- Measure native import startup: one baseline/deferred pair took 7.48/2.91 seconds; installed bytes stayed unchanged. See the diagnostic record.
- Renew exact-candidate native wheel/full qualification.
Next action: qualify a wheel built from the exact candidate in a fresh native checkout, preserving the previous gate's temporary evidence. Two focused tests and seven CycloneDX tests pass through
make python-check; the fresh-process regression fails against the original eager import. Catalog costs and full-gate renewal remain open.Renewal evidence retention: Before another full Windows renewal, replace the gate's destructive startup cleanup of the legacy temporary tree with a fresh short per-invocation sibling directory. Retain failed fixtures, both per-run JUnit reports and prior timing evidence; preserve Git-discovery isolation, the complete test inventory and unchanged deadlines. Qualify repeated real child failures without deleting either earlier-run or legacy evidence. This harness repair does not complete native wheel/full qualification.
Integrated host qualification: Exact implementation
dd8a9f35passes a fresh uninterrupted complete source suite: 2138 passed, 71 explicit skips, no failures (2209 selected). The fresh force-generated project lifecycle passes all 228 cases with no skips; supported receipt update/check/require-current and verify pass. Receiptsha256:0037edcc8b082a9b2554851e6cd9cc1598ccb8715750e45de6b8a9f59638b857; finalized candidatesha256:03fd1ef649f40933ffb35c52a380bc18ae5d9638407e0a9ca27cfb10258f8217. Seeverification/windows-integration-host-qualification.json; preserve the earlier failed SSH response attempt. Exact-head hosted CI and finalized-receipt native/package renewal remain required.
[ ] WIN-GATE-001 — Retain native Windows wheel timing evidence
GitHub issue: #123
Release target: 1.3.1
Priority: P1
Owner: Native Windows release gate
Direction: Retain existing wheel-smoke per-operation timing spans through the full native gate without dropping checks or widening execution bounds.
Conclusion: Issue #123 tracks a 5400.328-second wheel timeout with no stage timing artifact despite an existing timing-report option; isolated successful validation takes 9.187 seconds and does not identify the aggregate bottleneck.
Depends on: none
Implementation:
- Repair the exact-main Windows fixture failures from run
40610757747: roadmap regression fixtures now use explicit UTF-8, and synthetic FreeBSD ACL cases simulate their descriptor port. All 30 cases pass on actual Windows 11 / Python 3.12.10 with defaultcp1252and zero skips. Production guards, real FreeBSD acceptance and the full-gate HTML bottleneck remain unchanged. Seeverification/windows-portable-fixtures-qualification.json. - Give these fixture-only changes explicit native Windows/macOS/Linux CI cells rather than unrelated product builds. Product PRs that also change these fixtures retain normal coverage plus portability cells; release refs, manual qualification and unknown changes retain full coverage. Ten focused CI-policy checks pass.
- Pass a unique per-attempt timing report to wheel smoke and document its diagnostic scope.
- Match hosted Windows CI's isolated admitted-receiver dependency test in the native release gate, then run the remaining suite once with that exact case deselected. Preserve production deadlines, failure propagation and all existing test roots.
- Repair the exact-main Windows fixture failures from run
Evidence:
- Completed spans survive partial-write failure on macOS and native Windows; the original writer fails the same check. Eight focused tests, lint, format and driver review pass. Two controlled gate attempts keep distinct reports after deliberate stage failure.
- Prove serial-before-parallel sequencing and failure propagation with a focused orchestration regression. Four controller orchestration checks plus eight CI-policy checks pass. They cover serial isolation, exact deselection from the remaining roots, distinct JUnit reports, single-worker selection, and refusal to continue or report success after either stage fails. These are controller sequencing checks, not a claim of native execution.
- Retain both native JUnit reports on the next full run. Audit found that hosted CI had the contention repair while the provided native gate still placed the 60-second live dependency case inside the parallel suite; final native/full qualification remains required.
- Renew the configured host lifecycle/receipt and exact native wheel/full qualification.
Evidence: Timing development record. The documentation authority review is recorded; the old receipt is stale until complete renewal. Timing artifacts remain diagnostic and never imply a passing wheel or gate.
Integrated host qualification: Exact implementation
dd8a9f35passes a fresh uninterrupted complete source suite: 2138 passed, 71 explicit skips, no failures (2209 selected). The fresh force-generated project lifecycle passes all 228 cases with no skips; supported receipt update/check/require-current and verify pass. Receiptsha256:0037edcc8b082a9b2554851e6cd9cc1598ccb8715750e45de6b8a9f59638b857; finalized candidatesha256:03fd1ef649f40933ffb35c52a380bc18ae5d9638407e0a9ca27cfb10258f8217. Seeverification/windows-integration-host-qualification.json; preserve the earlier failed SSH response attempt. Exact-head hosted CI and finalized-receipt native/package renewal remain required.
The dependency correction passed all three unchanged self-hosting checks (0 skips, 568.703 seconds), including both clean stable replay cycles. A fresh full-source run remains required; the earlier failed full run is retained.
Command-reference qualification repair: The dependency-corrected full source attempt passes 1,711 cases with 70 skips and one failure before fail-fast termination: the canonical command list omits litai project agent-entrypoints. The one-line reference correction passes both current help/reference tests and receives documentation authority review sha256:e6175f267ceac818d933c46d3a6008f7beb269f80dbbecc957a863814b0beb13. The unchanged driver remains sha256:c9d1c7650e2c5b78391c73348485498ed2b29d1871dceb8bf59e45889ec48232. Before that documentation correction, exact source 52c8b6eb passes a forced-fresh 230-case lifecycle and all 131 installed-wheel timing spans, plus the real non-editable public CLI audit cases. Original snapshot and failed harness provenance remain in verification/agent-entrypoint-development.json. Renew the complete source suite and current authority-bound qualification; no failed full run is relabeled green.
[ ] HTML-VERIFY-COST-001 — Bound repeated installed HTML verification and catalog observation cost
GitHub issue: #129.
- Release target: 1.3.1
- Priority: P1
- Owner: HTML verification and immutable catalog observation
- Direction: Use retained native timing evidence to repair the repeated Windows full-gate timeout without changing execution bounds
- Conclusion: The instrumented installed verify call spends 49.759 of 73.5 seconds in HTML verification; seven Flavor-catalog loads and five authority-graph observations repeat work. Preserve complete staleness, source, asset and framework identity checks while investigating bounded operation-scoped immutable reuse.
- Depends on: none
- Implementation:
- Inspect actual caller overlap and bind reusable parsed catalog or framework observations to exact current bytes within one operation
- Retain independent currentness checks and refuse changed, replaced, missing or redirected inputs before completing verification
- Evidence:
- Compare equivalent profiles and uninstrumented native timings; retain the original 5400-second failures and all raw evidence
- Pass real mutation and stale-artifact controls plus full regression, installed-wheel and exact CI; renew the complete native Windows gate without skipped phases or increased deadlines
Initial source development: Pure current-artifact reconstruction reuses the first complete immutable input frame, including excerpts and assets. Both independent full input observations and both installed-framework observations remain; the final comparison checks the whole frame. All seven staleness cases and all 15 selected HTML cases pass without skips, including live source/framework/output drift refusal. Lint, format, layout/export and reviewed driver pin checks pass. See verification/html-reconstruction-development.json. Native comparison, full regression/lifecycle/installed gates and complete Windows renewal remain required; no performance improvement was claimed at that source-only checkpoint.
First native comparison: Exact development wheel d8ab44d2 preserves current HTML in every paired call, with identical retained non-HTML verification failures. Two uninstrumented ABBA trials per wheel measure baseline 35.375/40.078 seconds and candidate 28.297/34.063 seconds (medians 37.727/31.180). Instrumented totals are 73.438/68.234 seconds; complete source loads fall from three to two while installed-distribution observations remain two. verification/html-reconstruction-native-comparison.json retains exact source, wheel, profile and independently verified archive identities. Cache/scheduling effects remain uncontrolled and this small diagnostic is not a complete native or release-performance pass. Inspect remaining costs before the unchanged full Windows gate renewal.
Schema check development: Nine focused catalog checks pass without skips, including changed bytes with identical size/mtime and missing-reference refusal. Only exact JSON meta-schema successes are shared within one complete catalog operation (maximum 512); registry construction, file reads and fingerprints remain independent. No second-patch native timing or complete qualification is claimed.
Combined native diagnostic: Exact candidate
d56857cdand wheelsha256:3e7e1abe5ff3c6fe883163b8b7aab1a6ac477fbf7973380d44b7442f4aa6c912preserve current HTML in all ABBA and instrumented calls, with the same original non-HTML refusal states. Unprofiled baseline 28.750/33.656 and candidate 28.859/28.172 seconds are a small uncontrolled pair. Instrumented complete input observations fall 3→2, framework observations remain 2, schema checks 136→120 (the candidate also adds a schema), and stat calls 84,911→60,243. Seeverification/combined-observation-native-comparison.json; full native qualification remains open.Renewed renderer observation: The retained non-editable source
42e99cddb1dd2d0b37011b997492a62b1d84928d, wheelsha256:48a421cc6151d935342be8bdf1fcd3549139ce62dcfbba40ad783bedaa72bff5, renders the actual installed graph on Windows / Python 3.12.10. A 64-second instrumented call makes three full input and three framework observations. A later paired instrumented diagnostic takes 45.672/44.250 seconds, demonstrating substantial timing variation on this worker. These are observations of the retained baseline, not qualification of the newer governance TCB or final patch.Meta-check counterfactual rejected: An in-memory diagnostic reuses only the exact schema values whose checks passed in the same native runtime. It eliminates 120 recursive meta-schema checks while preserving all three input/framework observations, twenty catalog fingerprints, both fresh reference-registry validations and the same render-input/source identities. Unprofiled ABBA results are baseline 27.562/32.875 and diagnostic 31.015/27.938 seconds (medians 30.2185/29.4765). Two trials per mode with uncontrolled scheduling and cache effects do not establish a reliable wall-time benefit. No cross-process facts cache or other runtime change is selected. Any future design must bind exact validator, meta-schema and Python/runtime semantics; these diagnostic facts are not general cross-platform proof.
Retained diagnostic evidence: The original profile, paired diagnostic, native-generated facts, ABBA child programs, raw streams and terminal results remain in a 29-file native archive,
sha256:cb64691451cc48c90a63297ddb0f3d5bffeee3d783d60aae024bade3aeb7f865. The independent controller ABBA record hassha256:37491541b73c1702659f1c79bdf4862479e29037036c7ca21f000d68604c8514. None of this is software/native release admission. Next measure coarse wall and process-CPU costs without tracing every recursive validator call, including the actual costly verify/health commands, before selecting another optimization or repeating the full provided gate.Read-only lineage catalog candidate: A real installed committed-lock probe on Windows / Python 3.12.10 binds six measured modules to baseline
42e99cdd; four full legacy catalog loads consume 10.129 of 28.534 coarse seconds. A bounded candidate retains only immutable Flavor graph metadata within one check/diff operation, rechecks exact source closures, catalog membership and nearest-project discovery, and still builds four fresh authority graphs. Writers and independent operations remain fresh. Eleven new source controls plus seventeen related source checks pass, including same-size/mtime byte drift, missing/added/redirected members, nearer project creation, a real component self-cycle and invalid skill authority. Initial native source-copy ABBA observations preserve reports and restore the fixture: baseline 29.024/31.500 seconds; candidate 28.952/25.389, with full catalog loads 4→1 and graph builds unchanged at four. This small uncontrolled development comparison is not a reliable speedup or installed-wheel qualification. A larger repetition and exact-wheel/full qualification remain required; this goal stays open.Candidate qualification boundary: Thirteen focused controls now pass, including factory-only construction, refusal of transported or untyped success claims, specific public drift errors and an explicit POSIX-link platform scope; all thirty scoped source checks pass. The larger native repetition retains three completed samples, then stops when a baseline child exceeds the unchanged 150-second diagnostic deadline. Fixture restoration passes. The subsequent worker health probe times out; hold further timing work while health is unknown. Preserve the failed repetition, keep exact-wheel/full native qualification mandatory, and make no reliable wall-time improvement or release-admission claim. See
verification/lineage-flavor-observation-development.json.Post-stall resource observation: A bounded connectivity retry succeeds. Direct Windows APIs then report 9.0–9.8% CPU across three five-second windows and at least 58.1 GB available RAM; required volumes have 27.7 GB free of 535.4 GB, still a disk warning. This recovers resource visibility after the CIM timeout but does not explain the baseline stall. Preserve the failed operation and diagnose it before another full-gate renewal; no deadline, test inventory or admission gate is weakened.
[ ] RETAINED-OBSERVATION-PERF-001 — Bound retained authority and native observation cost
GitHub issue: #117
Release target: 1.3.1
Priority: P1
Owner: Standard installed-distribution, retained runtime and native dependency observers
Direction: Make the installed public retained SDK lifecycle complete within reviewed native bounds while preserving exact authority, loader and revocation checks.
Conclusion: Issue117 owns the measured bottleneck. Profile the public planning path and native dependency guard separately, then reduce redundant work at its owning boundary with current byte and topology validation. Never cache stale success, omit freshness checks or raise the one-hour deadline to label the current attempt passing.
Depends on: RETAINED-SDK-PUBLIC-001
Implementation:
- Record exact installed public-plan and native observation call counts and costs before selecting the optimization.
- Implement operation-scoped observation reuse or lower-cost equivalent verification with current member bytes, native graph, authorization and revocation intact.
Evidence:
- Changed, replaced, redirected, missing or unreadable members and changes during actual SDK commands fail closed; all existing tamper and revocation cases remain covered.
- Compare equivalent instrumented counts and uninstrumented native timings, then pass full regression, exact wheel and canonical installed public CLI build/tests/docs/independent acceptance.
The exact installed native dependency observer now has a successful read-only profile: 14.613 instrumented seconds, 34 components, 97 edges, 217 inspector processes and 10,520 stat calls. The public retained-plan profile passes in 105.045 instrumented seconds: four installed-distribution observations consume 75.589 cumulative seconds, including 32.782 seconds in the metadata library inventory existence prefilter. These are scoped preparation measurements, not an uninstrumented release benchmark or accepted lifecycle. The first dependency-profile attempt refused retired inputs; its replacement captures a fresh verified diagnostic snapshot without repairing the retired run.
Next in progress: read the wheel RECORD inventory directly in each fresh distribution observation, avoiding the metadata library existence prefilter. Every selected member still undergoes current byte verification; missing recorded members must refuse rather than disappear from the inventory. Keep the existing non-RECORD distribution fallback and canonical identity format. Measure the exact installed path before deciding whether additional observation work is required.
The initial direct-RECORD implementation passes five focused installed-distribution cases, including a real wheel metadata fixture, unchanged canonical identity, missing nonmandatory members, mutation across observations and malformed/oversized inventories. Full regression and native comparison remain required.
The direct-RECORD candidate 760bfa09 now passes all 2,201 controller cases:
2,131 passes, 70 declared skips, no failures (2,336.332 seconds). Exact clean
Linux wheel qualification passes in 524.198 seconds with 1,235 framework members.
Offline FreeBSD installation verifies the reviewed dependency closure, and fresh
project initialization passes. The canonical installed public SDK replay reached authorized execution but
timed out at the unchanged 3,600-second budget (4,162.132 seconds supervised
total). Its owned source server exited successfully. No admission was earned;
profile the actual execution path before selecting further observation changes.
The complete configured framework host lifecycle now passes 233 cases in
1,385.562 seconds, including execution and independent acceptance. Its finalized
candidate is promoted through litai project test-receipt update; litai verify
confirms the receipt is current. Canonical installed FreeBSD SDK qualification
and exact-head hosted CI remain required before landing the performance repair.
A 300-second diagnostic of actual authorized execution records 202,949 stat calls and 19 full distribution observations. Broad alternating metadata probes find equivalent pathname APIs similarly costly; repeated access to one warm member is fast. Descriptor-first no-follow reads now hash every member and compare current descriptor/path identities. A new open-boundary symlink control reproduces the prior acceptance of a link to the original inode; the candidate refuses with and without a platform no-follow flag. Six focused controller and six native source-import cases pass. The uninterrupted controller regression passes 2,132 cases with 70 declared skips. The exact clean Linux wheel passes, and six binding controls pass from the installed FreeBSD prefix. A fresh complete configured host lifecycle passes 228 tests and independent acceptance in 1,823.130 seconds. Its candidate is promoted through the supported command and verifies current; the preceding 233-test receipt retains its original scope. Canonical installed FreeBSD SDK execution also timed out at the unchanged 3,600-second command budget (4,103.472 seconds supervised total); its owned source server exited zero. This newer failure preserves the preceding direct-RECORD failure as separate evidence. No native SDK admission was earned. Profile the installed descriptor candidate before another canonical replay. A separate directory-relative metadata probe was slower and was not adopted. No cached distribution success or expanded execution deadline is authorized.
The isolated FreeBSD public CLI qualification
now passes exact wheel code 4ed7e5a1 in 575.845 supervised seconds, without
changing the 3,600-second authorized execution limit. Three original consumer
cases, documentation and two withheld acceptance cases pass. The CLI admits
original source at local-runtime scope; all 28 retained records reverify from
current CAS bytes. The sealed app fails without the reviewed loader context.
Both authorization refusals remain intact and the owned source server exits zero.
Six binding controls pass from this new installed prefix. The primary worker's
timeouts remain retained. Its bounded diagnostic identifies vnode processing
latency alongside a root-owned periodic scan; the scan and kernel settings are
unchanged. The isolated comparison also changes kernel/filesystem/load, so it is
not a single-variable performance attribution. All ten installed context controls
now pass with zero skips; 469 production modules resolve from the installed prefix. Compiler SDK, package, product
receipt and release admission remain unearned. Renew exact composed
Windows/descriptor regression, wheel and lifecycle qualification before landing.
Combined qualification cohort: Entry-point audit/YAML bounds (#113), retained installed-distribution observation (#117/#118), and HTML/catalog cost (#129) now preserve all source and evidence branch heads in one integration candidate. The combined driver is reviewed and recorded through the supported command. Next: freeze the source for fresh full source, forced-generation lifecycle and clean installed-wheel gates, then renew native evidence and exact review CI. Prior scoped passes retain their original source; the retained receipt is stale until supported promotion of the new passing candidate. Exact-main Windows hardware recurrence (#116) remains separately open.
Final combined local qualification: Exact source 28371242 passes all 2,252 selected source checks (2,181 pass, 71 existing skips, zero failures) in 1,245.271 seconds and the complete 131-span installed-wheel gate (sha256:1e8483682163652f58fec34621a9ea106f83a46d3cc8636100b7c671316fdaf0). The forced-generation 231-case lifecycle at d56857cd has a supported current receipt (sha256:61cba87b45fd0918b1e69ee05de96a9dedd6e84935e7dbeb862b361e189464ca); all production/schema/harness bytes remain identical, while the current source suite includes the failure-only hardware diagnostic. Require-current and all-gate verify pass. See verification/issue-resolution-cohort-local-qualification.json. The provided native gate preserves its 5,400-second bound; it and exact-head review CI remain pending.
Windows fixture correction pending for #117: PR #130 full Windows shard 2 found that CSV's CRLF rows were translated a second time by Path.write_text. The resulting CR-CR-LF creates empty RECORD rows, correctly refused by the production parser. Write the fixture's exact UTF-8 CSV bytes; retain strict production inventory validation. Re-run this owner through the managed runner and confirm the same cases on Windows before claiming cross-platform closure.
The exact-byte RECORD fixture correction passes all six owner tests on hosted Windows/Python 3.12.10 with zero skips in 0.146 seconds (run 39966279564). The same managed owner suite passes locally. This confirms the narrow fixture repair; the full matrix's hardware timeout is separate and remains unresolved.
Windows receiver stage diagnosis is retained in
verification/windows-hardware-stage-diagnosis.json. The reversed comparison
rejects the earlier GPU lookup attribution; actual warm OS CIM queries dominate
at about 19 seconds, with 56 seconds for the first OS query. No production
change or widened deadline follows from these diagnostic observations.
The native selected-property ABBA comparison (39967811302) returns identical hardware payloads but no warm improvement: original OS queries 23.005/23.024 seconds, selected-property warm query 23.167 seconds. No production hardware change is selected. Keep #116 open; preserve these rejected attributions. Next landing action: integrate the independently Windows-confirmed exact-byte RECORD fixture correction when the current candidate's healthy jobs finish, then renew the exact candidate gates. Ordinary PR CI 39960853983 is green; full Windows wheel job 120438737834 is green at source 55e775c7. Neither is a complete passing full matrix or provided native gate.
The complete entrypoint/observation cohort and verified Windows CSV fixture
correction are now integrated locally for a fresh full managed source run.
Production, schema and harness bytes are unchanged from PR #130 head 55e775c7.
The review branch remains frozen until its healthy CI jobs finish.
Combined observation candidate 28371242 still times out in the provided
native Windows gate after 5,400.482578 seconds, at the unchanged 5,400-second
owned-tree bound. All 112 completed wheel timing spans succeed; wheel completion
and unit execution remain unearned. The installed HTML subprocess accounts for
3,125.984 seconds. Hash-verified archive
sha256:02d73db303b72d79bdd6d145bfe343f674152fdaaa88eebcaf61a53e25c5aa9e
retains the exact terminal result, log and timing frames. See
verification/windows-combined-observation-timeout.json. Preserve all previous
timeouts. Keep #129 open; profile the complete expensive HTML scenario before
another provided full native replay. Hosted Windows wheel CI passes separately,
which does not turn this native gate into a passing result.
The exact integrated fixture candidate 35306ad7 passes a fresh complete
2,252-case managed source run (2,181 pass, 71 existing skips, zero failures)
in 1,224.064 seconds and all 131 installed-wheel spans. Its wheel is
sha256:456801162efc3c80966e7b757ef2b80119389b71daab3cc167aa95b7ab89cace.
The supported retained lifecycle require-current check passes; production and
harness bytes are unchanged. See
verification/windows-record-fixture-cohort-qualification.json. All earlier
CI jobs are terminal (24 pass, the two known Windows shards fail). Next:
update PR #130 and renew exact-head required CI. Keep #116 and #129 open;
no native full-gate or hardware timeout correction is claimed.
The bounded project-parse experiment for #129 is not selected for production.
A native Windows source comparison preserves the 41-Flavor identity and all
246 manifest reads, but does not show reliable improvement: baseline
2.8339/2.4375 seconds, candidate 2.9388/2.5934 seconds. Host-only improvements
therefore do not justify this as the native fix. Nine preliminary native cases
pass; the later copied-context lifetime and concurrent-budget corrections pass
twelve local cases but remain an unlanded experiment. Its interrupted full
source/lifecycle attempts are not qualification. The complete experiment remains
on local branch fix/catalog-project-parse at becbcc7e; no implementation from
that branch belongs in the landing queue. See
verification/windows-project-parse-negative-comparison.json and archive
sha256:6e930ea7d84003dbdd4e472e36dc781c806fc3b030d437359564108003de1d1f.
Next for #129: capture per-command costs for the complete expensive installed
HTML scenario with the qualified baseline wheel. Do not repeat the full provided
native qualification before further profiling. Keep the earlier timeouts.
Current landing state: PR #130 is merged at 9d62ce09; its exact-main
CI run 39980361698 passed all 26 jobs. This closes the hosted integration gate,
while the independent provided-worker native timeout remains open.
Complete-scenario diagnostic setup: An isolated attempt using exact source
35306ad7 and its qualified wheel stopped before HTML profiling. The standalone
launcher omitted the canonical Windows gate's declared tool paths, so the
unrelated adoption fixture could not find printf; no HTML assertion or timing
result was earned. Its 698.843-second failed terminal result, launcher and logs
are preserved in a separately hash-verified 5,796-byte archive. See
verification/html-profile-setup-failure.json. A fresh diagnostic uses the
canonical gate's template-derived native and fallback paths and prepares only the
created-project prerequisite. All complete HTML scenario assertions, original
900-second CLI deadlines and the 5,400-second owned-tree bound remain unchanged.
The first failed directory, source checkout and installed wheel stay retained.
#129 lock-check investigation in progress: The unchanged native public lock gate passes in 47.531 instrumented seconds; four plan preparations include four complete authority graphs, five catalog captures and ten input revalidations. Prototype reuse of the already captured immutable catalog only within one read-only check/diff transaction. Retain fresh bound-byte and membership checks at every existing revalidation boundary and rebuild current authority; mutating publication retains its existing preparation path. Require actual in-operation source/Flavor/membership mutation refusals, unchanged lock/audit bytes, operation isolation, and a native before/after comparison before keeping the optimization. The prior project-parser prototype remains rejected.
Complete HTML timing diagnostic for #129: All five original installed HTML stages and 58 CLI commands complete on native Windows. The scenario takes 2,977.625 seconds, with 3,443.5 seconds for setup plus the scenario. Repeated verify/render/update calls dominate; this is an observation, not an optimization result or a full native-gate pass. See verification/windows-complete-html-diagnostic.json. Keep the original failed setup and full-gate timeouts. Next: trace operation-local repeated observations and select a causally tested improvement before renewing the unchanged complete native gate.
#129 prototype qualification and review: Prototype d8f84b98 passes the complete 2,264-case source suite (2,193 passes, 71 existing skips) and full installed-wheel harness. Native A/B calls retain identical passing reports and fixture restoration; three-call medians are 36.141 seconds baseline and 29.531 candidate with warm-cache/ordering variation. Catalog captures fall from five to two while ten input revalidations and four current authority graphs remain. This is scoped evidence, not a complete native-gate result. Review adds a cache-key control: changed requested Flavor roots must use fresh planning rather than be hidden by the captured catalog; its regression fails before the control and passes after. The root lifecycle correctly refuses the prototype's stale driver pin before execution. Record the reviewed final TCB pin through review_lifecycle_driver.py, renew documentation authority and qualify the corrected exact source before promotion. Retain all preceding wheel/source reports and lifecycle refusals.
#129 qualified read-only catalog reuse: Exact source 74417e1a passes the full 2,265-case source suite (2,194 passed, 71 existing skips, zero failures), all installed-wheel assertions, 14 focused cases including actual in-operation mutations, and the forced lifecycle with 229 passing checks and no skips. The generated suite count is producer-bound; the declared conformance inventory and minimums are unchanged. Supported receipt update/check/require-current and all-gate verify pass on the metadata-only consolidated tree. The native Windows public lock check returns identical passing reports across both installations and restores its fixture; three-call medians are 35.172 seconds baseline and 28.187 candidate, with cache/order variation. Catalog captures fall from five to two; all ten input revalidations and four current authority-graph observations remain. See verification/lock-check-catalog-qualification.json. The next action is ordinary review CI and landing of this scoped improvement, then complete unchanged provided-worker native renewal before closing #129. No generator-diversity exemption, dependency, release, or native admission is claimed.
[x] RETAINED-PACKAGE-CONCURRENCY-001 — Diagnose parallel retained-package ancestor replacement
- GitHub issue: #140
- Release target: 1.3.1
- Priority: P1
- Owner: Retained package fixture lifecycle and parallel test isolation
- Direction: Determine whether parallel fixture setup or cleanup can retire or replace a test-owned retained temporary ancestor between workspace execution and admission. Preserve fail-closed retained-root verification.
- Conclusion: The first exact 1.3.0 tiered qualification produced one changed-ancestor refusal, while repeated isolated execution, the checkpoint repair pass, the required 2,267-case reset/full rerun and exact-main CI all passed. A one-off green rerun does not explain or close the concurrency risk.
- Depends on: Retained root ancestor verification and parallel package qualification
- Implementation:
- Add deterministic concurrent ancestor-replacement coverage and report the exact changed lineage depth, name, reason, and expected/current filesystem identities without weakening the refusal.
- Evidence:
- Exercise the exact parallel retained-package path repeatedly with the new coverage or diagnostics and retain the original refusal plus current passing controls.
- Pass focused mutation/refusal checks, full parallel regression, exact installed wheel and exact-head CI with unchanged production guards. Review run
40561422042passes 12 jobs with one intentional skip; its four-worker source regression completes 2,312 tests (2,221 passed, 91 skipped), including all nine retained-package and fourteen input-walk cases. Its exact source-tree wheel passes the installed gate outside the checkout and contains the byte-identical repaired adapter. See source-bound evidence and limits; final 1.3.1 candidate qualification remains separate.
Current direction: Extend the existing descriptor-lineage guard rather than changing retained-package cleanup or accepting a replacement. A synchronized test will replace an intermediate test-owned ancestor with an identical tree between descriptor capture and transaction completion. The transaction must still refuse, and its message must identify whether the observed ancestor was missing, redirected or replaced plus the lineage position and both identities when available. This is diagnostic hardening, not a relaxation of root currentness.
Focused result: The descriptor-walk group passes 14 tests plus seven subtests,
including synchronized byte-identical replacement of an intermediate ancestor and
separate missing, redirected and identity-replaced diagnostics. The original
retained-package case passes three consecutive exact invocations under the repository's
parallel test configuration, and its complete file passes nine tests plus two subtests.
The post-format combined group passes 15 tests plus seven subtests. No retained-root
comparison, production deadline or package-cleanup behavior is relaxed. The later
completed review run supplies the full parallel and installed-wheel evidence above.
Its synthetic merge and review head have the same Git tree. All current production
source and the relevant package/input tests remain byte-identical; the wheel's
repaired module hashes to current aa3e5a2a3d10bc1ce82c91775c91ff2690fb40e0069a9f74cd654d59cf26bd93.
The bounded concurrency goal is complete; this development-wheel proof does not
publish or qualify the future 1.3.1 distribution. The original sporadic trigger is
not attributed to a particular fixture or process. The completed scope supplies
the deterministic replacement coverage and stronger diagnostics requested by #140;
it does not assert a causal fix for the historical event. The issue remains open
for maintainer disposition and still participates in the release contribution gate.
[x] DOC-DEPENDENCIES-003 — Refresh vulnerable transitive Zod in documentation tooling
GitHub issue: #134
Priority: P1
Owner: Pinned OpenSpec and documentation dependency lock
Direction: Resolve the high Zod advisory blocking required CI and the provided Windows gate; preserve the audit and all qualification bounds.
Conclusion: Refresh the compatible transitive resolution, prove clean locked audit/docs/OpenSpec checks, then renew the failed qualification. This is dependency maintenance, not native performance acceptance.
Depends on: none
Implementation:
- Update the existing Zod resolution to a patched compatible 4.x release without new dependencies or audit exceptions.
Evidence:
- Clean npm ci, strict audit, documentation tests/diagrams and strict OpenSpec validation pass; exact-head CI (16 successful jobs and its placeholder skip) and exact-main CI (all 26 jobs) pass. The renewed provided Windows gate passes strict audit/OpenSpec, all 22 documentation tests and 121 diagrams. Its later 5400-second wheel timeout is retained under #129; no complete native qualification is inferred.
DOC-DEPENDENCIES-003 dependency selection: The affected graph contains root Zod 4.4.3 and Chromium BiDi's nested Zod 3.25.76. Puppeteer 25.16.0 keeps the existing Node 22.12 floor and uses upstream Chromium BiDi with a Zod 4 dependency, permitting patched Zod without forcing a new major into a v3 consumer. Refresh that existing browser-tool pin, its matching allowed install-script entry, and the locked Zod 4 resolution; retain every audit and documentation check.
DOC-DEPENDENCIES-003 local qualification: A fresh canonical staged npm ci installed the exact lock with zero vulnerabilities. Strict OpenSpec validation passes all four items; the unchanged audit and 22 documentation tests pass, and Puppeteer renders all 121 Mermaid diagrams across 627 Markdown files. The supported receipt check remains current; all-gate verify reports two passes, three existing declared skips and zero failures. The prior exact-head CI and supplied-worker gate failures remain retained. Next: publish this fix through existing PR #133 and renew exact-head CI and the unchanged provided-worker native gate before closure.
HOST-RUNTIME-001 closure: All required private-runtime acceptance is complete. The affected macOS standalone Python 3.11.14 executes Python and pip and passes real-wheel self-update/reexecution; the public non-editable prefix install and complete source/wheel/lifecycle qualification pass. Source owner parity is checked against landed ef5db15f, whose exact-main CI succeeds in all 26 jobs. Retain the original loader abort and symlink-only containment failure. See verification/private-runtime-closure.json; this is not FreeBSD/native SDK or performance admission.
RETAINED-USER-001 closure: The installed original suite already qualifies privileged and unprivileged execution under a private 0700 allocation prefix, with all 24 cases passing, no skips, exact ACL restoration, no remaining nullfs mounts, current observed account/allocation custody, 34 reverified records and independent cleanup-bound acceptance. Landed platform CI and unchanged scoped owners complete the recorded remaining requirement. See verification/retained-secondary-closure.json; whole execution/SDK modules have later changes and are not asserted byte-identical or newly natively qualified here.
DOC-DEPENDENCIES-003 closure: PR #133 lands the existing browser-tool upgrade and patched Zod lock at d17881fa; exact-main CI 40031696168 passes all 26 jobs. The actual provided Windows audit/documentation gates also pass. This completes dependency maintenance only, as issue #134 explicitly separates native-performance issue #129. The renewed full gate times out later in wheel smoke after 121 completed spans, with no test phase reached; its immutable failure bundle and source identity remain retained. See verification/documentation-zod-qualification.json and verification/windows-lock-reuse-native-timeout.json.
#129 / WIN-GATE-001 current native outcome: Supplied-worker source 2615e568 has the same tracked tree as merged d17881fa. The unchanged 5400-second gate reaches 121 completed wheel operations but times out before wheel completion and the test phase. The complete five-stage HTML scenario passes in 2871.062 seconds; default and scoped initialization take 252.563 and 196.578 seconds. These are retained operation observations, not a controlled whole-gate speedup or admission. Existing timing evidence survives the timeout. The last completed graph-export scenario is followed by an uninstrumented missing-CodeGraph run probe and update planning; identify the unfinished operation and remaining initialization/observation costs before another full renewal. Keep #121, #123 and #129 open; do not increase deadlines, skip assertions or promote this failed outcome.
[ ] ACTION-RESOURCES-001 — Reserve action resources and serialize mutable authorities
- GitHub issue: #144, refinement of #4
- Priority: P1
- Owner: framework action DAG scheduler
- Direction: Bound aggregate CPU, memory, disk and network reservations and serialize named side effects across compatible workers.
- Conclusion: Extend existing exact scheduler with optional identity-bound reservations; resource admission remains caller-owned and claims serialize one coordinator only. Issue #144 refines broader #4.
- Depends on: WORKER-DAG-001
- Implementation:
- Bind optional action demands and worker budgets into schedule identity; preserve omitted-policy identities.
- Reserve aggregate budgets and exclusive claims before dispatch; release only with accepted success/recovery or proven owned terminal evidence, holding unknown workers and claims.
- Evidence:
- Controller concurrency, failure-release, capacity refusal, identity and fresh per-request artifact-admission regressions: eight focused tests pass via
make python-check; legacy scheduler failure-isolation regression passes. Immutable payload production coalesces within one coordinator, while every current request obtains fresh admission. - Dependency-ready dispatch (a successor waits for its accepted predecessor and binds its result identity while an independent action overlaps) and distinct package-database/signer claims (overlap when disjoint, serialize when shared) have focused controller regressions; these are fixture checks, not native receipts.
- FINALIZE grant-wait resends after
grant_unavailableno longer leave the worker held: the finalizer resolves only the exact boundary-verified refusal on its still-held reservation (CAS-retained evidence), and resolution never frees a held slot. Three focused slot/finalizer tests and the real-receiver grant-wait fixture cover it; fixture evidence only. - Independent review follow-ups: a retry blocked by unresolved ownership returns its schedule result (accepted results, attempts, unresolved ownership) instead of raising; only the receiver's pre-staging grant check reports
grant_unavailable, while any later grant loss (staging, prepared authority, supervision, post-run) isgrant_lostand stays unknown; self-resolution requires a re-decoded verified response and a slot the live reservation still holds, checked before any evidence is persisted; unknown adapter actions are coded refusals. Each has a focused regression; fixture evidence only. Open follow-ups:resolve_productionhas no production caller under opt-in coalescing, and the unactivated adapters spend single-use grants before the final re-check.
- Controller concurrency, failure-release, capacity refusal, identity and fresh per-request artifact-admission regressions: eight focused tests pass via
- Next action: qualify the explicit semantic payload re-admission contract against complete native producer closures and current trusted receipts, then obtain actual multi-machine/shared-cache and worker-loss qualification under #4.
- Concrete controller checkpoint: opt-in command BUILD integration uses real transport plus verified archive/support-record CAS custody; exact-input reruns obtain fresh controller admission, original native build evidence and existing TEST handoffs. Nonzero owned receiver exits retain diagnostics and failed attempt metadata before explicit retry. Bounded declared-safe scheduler retry retains each attempt and a distinct request identity; package/signing side effects cannot opt into retry. Native physical-worker loss and cross-release semantic re-admission remain unqualified.
- Actual native multi-worker/shared-cache qualification remains in issue #4.
ACTION-RESOURCES-001 / issue #4 semantic contract checkpoint: Distinct semantic re-admission and signed-release binary-input adoption contracts are implemented behind verifier-owned current retained planning, explicit current policy, actual signed evidence graph verification and single-use grants. Sixteen cryptographic fixture tests pass; these do not supply native producer or application receipts. Existing source BUILD profiles remain unchanged; a policy-declared alternate acquire action never becomes a new BUILD result. Unknown old compiler facts remain explicit and cannot establish a build-key cache hit. Activation, complete native closure, installed-runtime qualification and actual physical-worker speedup/loss evidence remain open. Unknown dispatch custody now quarantines worker slots/resources/claims and coalesced keys until matching trusted resolution; the barriers are per instance, with durable cross-controller worker-side custody still open.
[x] DOCS-CI-SCOPE-001 — Document the HTML explorer and scope documentation CI
- Release target: 1.3.1
- Priority: P0
- Owner: front-door documentation, HTML observability user guidance and CI feedback selection
- Direction: Make the built-in HTML authority-graph explorer discoverable for the 1.3.1 symposium and prevent documentation-only changes from launching unrelated native product qualification.
- Conclusion: Document the exact implemented explorer, provenance contract, command path, verification behavior and code-navigation boundary. Select documentation and presentation checks from exact pull-request paths and exact before/after default-branch push paths; select a focused policy regression for the classifier itself. Product changes, unknown comparisons, manual qualification, release branches and tags retain their full qualification. The earlier default-branch exception caused documentation handoff commits to rebuild the product matrix and did not satisfy the user's requested scope.
- Depends on: RELEASE-019
- Implementation:
- Add a task-oriented user guide and stable README/documentation-index links for the built-in HTML repository explorer.
- Distinguish graph-bound Markdown/JSON excerpts from the separate debug specification-to-source map and from unimplemented arbitrary code browsing.
- Add fail-closed documentation and CI-policy profiles selected from the exact pull-request base/head diff.
- Keep full qualification for product-code pushes to main and release refs, plus the ordinary cross-platform profile for unknown or product-code PR changes. Documentation-only default-branch pushes use their scoped checks.
- Land the original PR-only scoped workflow and documentation through reviewed CI; its historical exact-main full qualification is retained below. The later push-scoping correction follows the user's explicit instruction to publish conference updates without waiting for product CI.
- Extend documentation and policy selection to exact default-branch push changes, preserving complete release/tag/manual and product qualification. The separately declared five-cell macOS qualification job now depends on the same profile instead of bypassing it with an unconditional push predicate. Initial run
40569986418exposed that independent job path; it is retained as corrective evidence, not a successful scoped run.
- Evidence:
- The preceding documentation-only PR run
40467590036launched the complete 17-job ordinary PR matrix, including native C++, Elixir, samples, wheel and platform work; this is retained as the motivating over-selection evidence rather than relabelled efficient. - PR #154 exact-head run
40469396361selected onlyDocumentation and presentation integrityplusCI change-scope policy; both passed, alongside the independent GitGuardian check. - The latest exact-main commit
8f93802adf5ce77a9b3600e28a002b940239ce1eran the complete 26-job qualification matrix in run40494175198; all 26 jobs passed. The earlier exact-main run40469746346also selected the full matrix but was correctly cancelled when PR #155 advancedmain, so it is not relabelled green. - Verify default-branch push selection, unknown-change refusals, exact push endpoint comparison and release/tag/manual controls with the focused CI-policy suite. Eight focused CI-policy tests pass, including exact endpoint selection, missing/failed/timed-out/invalid-UTF-8 comparisons and full product/release/tag/manual controls. Running the actual selector over conference documentation commits
0ef44bcd7→2d37d577fselects only documentation withfreebsd_acl=falseandfull_qualification=false. Actual main-push run40570436040for579b73932ae310627d6bf8577f38b5e23520b08ecompletes its profile successfully and selects only documentation, CI-policy and the workflow-policy-owned FreeBSD check; the independent macOS qualification job is skipped. The superseded full run is cancelled. Remaining CI results are not relabelled green or awaited as a conference publication prerequisite.
- The preceding documentation-only PR run
[x] RELEASE-DECK-001 — Publish the Literate AI 1.3.1 release briefing
- Release target: 1.3.1
- Priority: P0
- Owner: release collateral and presentation publication
- Direction: Publish an editable slide deck that explains the release scope, Literate AI core concepts, lessons from the first release through 1.3.1, current evidence, ETA, and the compliant path to publication.
- Conclusion: Treat the requested briefing as release scope rather than an ignored local build artifact. Keep its readiness claims synchronized with the explicit roadmap manifest, link it from stable repository documentation, and retain structural, layout, font, visual and re-import evidence for its exact bytes.
- Depends on: RELEASE-019
- Implementation:
- Create the 12-slide editable briefing with source-backed speaker notes and the approved Literate AI visual language.
- Update the readiness slides after reconciling the full 1.3.1 goal and milestone scope.
- Publish the exact validated deck, specification and receipt at stable repository links.
- Evidence:
- Structural package, layout geometry, Aptos font-policy and first-party re-import checks pass with zero findings; complete montage review finds no clipping, overlap or unreadable content.
- PR #154 exact-head documentation integrity passed in run
40469396361; post-merge public-export and link checks passed in exact-main run40494175198for the originally published package at SHA-2561f6293c799ca7d85c62eb2e54127f91f6c71db7027755f2c851e399d566bea07. The subsequent readiness refresh is locally finalized at SHA-2565d2ec41961624b26fa0ce66e6935117eda80f02dce949fe40bc6c3cc5d15e9ca; its PPTX, README and receipt agree exactly.
The synchronized 27 October deck reports exact-main run 40494175198 as
26/26 green and records WINDOWS-PE-OBSERVE-001, DOCS-CI-SCOPE-001 and
RELEASE-DECK-001 complete, leaving 15 of 18 release goals open. The deck also
documents the built-in HTML repository explorer and
its code-navigation boundary. Its exact PowerPoint SHA-256 is
5d2ec41961624b26fa0ce66e6935117eda80f02dce949fe40bc6c3cc5d15e9ca
(161,540 bytes, 12 slides). Structural package, layout, Aptos font-policy and
first-party re-import checks pass with zero findings; every rendered slide and the
complete montage pass visual review. PR #154 and exact-main run 40494175198
complete repository publication plus exact-head/main link and hash verification.
[x] COURSE-004 — Animated onboarding conversations with auditioned neural voices
- Priority: P1
- Release target: 1.3.1
- Completion prerequisites: none
- Owner: docs/courses/animated-onboarding, docs/courses/full-onboarding, front-door onboarding documentation, and author-instructional-videos craft
- Direction: Use the approved Motion design for the next onboarding video, with animated Sam and LitAI characters, livelier conversation, and natural speech selected after inspecting NVIDIA inference and codex-ios.
- Conclusion: Implement a project-owned offline Motion/SVG authoring pilot and a short recorded-voice review cut before a full episode. Preserve the existing film and native qualification work. codex-ios supplies live Codex voice discovery, not standalone downloadable model weights. NVIDIA Magpie is an explicitly requested speech provider; retain generated audio, discover voice support, bind source and renderer inputs, and require separate human viewing/listening review before publication.
- Depends on: none
- Implementation:
- Record source-backed storyboard and characterize voice providers without changing codex-ios.
- Add isolated locked authoring toolchain, articulated characters, audio-driven cues, fixed-time export and explicit reduced-motion/static mode.
- Synthesize representative two-voice audition, retain WAV and provider provenance, render captioned review cut and offline companion.
- Record review boundaries and the next full-episode production step without replacing accepted media.
- Evidence:
- Validate actual demo evidence, voice selection and audio regeneration identities without credentials.
- Run deterministic seek, offline, reduced-motion, keyboard and negative-input checks; inspect representative frames and media streams.
- Retain captions, transcript, integrity result and complete listening/viewing review state; do not equate integrity with human approval.
- Record the user's voice approval and animation rejection separately from technical verification.
- Pair approved dialogue with purposeful character, listener, prop and attention beats; strengthen reusable motion-review guidance.
- Implement and render the directed animation with approved audio and no generic gesture substitution.
- Obtain the user's visual validation of the new moving cut.
- Research public Literate AI projects and author the full annotated pre-CI narrative with a skeptical Sam, sharper LitAI banter, languages, OS targets and substantial worker testing.
- Compile the full 12-chapter/86-turn narrative into bounded measured-audio inputs; add the offline Motion player, fixed-time renderer, retained-input provenance, reduced-motion behavior and deterministic synthetic structural QA.
- Refresh the explicitly selected NVIDIA credential, observe the live voice catalog, synthesize every turn with the approved Jason Neutral and Aria stock voices, and complete line-by-line listening and pronunciation review without fallback speech.
- Capture and retain fresh execution evidence for the film's current Literate AI claims, preserving native, retained-source and benchmark boundaries.
- Render and verify the complete film, captions and media receipts; inspect representative frames and watch the assembled film at normal speed with separate factual, accessibility, listening and visual approval recorded against exact identities.
- Publish the approved 1.3.1 media and provenance on GitHub, then update README, getting-started, installation, course-index and video-authoring links to the exact asset without removing the prior film. Publication commit
11841cefc49bc62c5b77b6cfcea8900da2c9186bis onmain; the remote MP4 hashes to approvedd01ce010654c55d6a1b3de16fa3cd8d640b758fe3559783236cfc9754e7d8e97, and all five entry points link to it. Final patch qualification remains open. - Complete approved film delivery and its exact media reviews and published links. The release-goal gate and final candidate qualification remain mandatory in the same-release execution checklist, rather than depending on this goal's own completion checkbox.
- Pilot result: Authoring package and QA retain nine unit checks, seven browser checks, five repeatable timeline frames, an actual read-only source-CLI adopt plan and the independently verified 38.437989-second/eight-caption local film. Stock voice requests use NVIDIA Magpie Jason Neutral and Aria; model checkpoint and separate effective-voice confirmation are unreported. The accepted film and Windows native qualification evidence remain intact. The user validated the voices and rejected the animation as unhelpful arm flapping. Generic gesture labels, a repeated renderer cycle and missing semantic motion review all contributed. The performance score now pairs all eight unchanged lines with purposeful action, listener reactions, phrase cues and holds. Both craft skills and their initialized copies require explicit visual direction and complete moving-cut review. Technical skill checks and exact dialogue/audio/media identity checks pass; they do not approve acting. The new directed cut is implemented and independently media-verified: 46 finite beats, 23 locally estimated phrase cues, nine browser checks, ten score-admission and ten input-drift refusals pass. Approved WAVs remain unchanged. See current QA for its media identity and limits. The user has now passed visual inspection of that exact directed cut. This approves the short treatment, not new dialogue or a full episode. The full narrative and research ledger now cover five verified project integrations from sixteen inspected public snapshots, with concrete implementation use and explicit native/adoption limits. Sam's escalating coffee/laundry/garage excuses carry the comic arc. The full narrative now has a compiled, offline 12-chapter authoring and capture path whose synthetic fixture passes deterministic seek, caption, arm-continuity, reduced-motion and no-network QA. That fixture is not candidate media. A second NVIDIA credential supplied by the user exposed the approved live catalog; all 86 lines were recorded with paced, no-retry requests, and the 12:04.896 local candidate passes deterministic capture QA plus independent continuous-media verification. Exact-revision fresh evidence records a ready host and read-only adoption plan over an unchanged eight-file native fixture, without claiming apply or build. The user approved the complete film at normal speed; exact approval evidence binds the reviewed candidate and byte-identical review-bound rebuild, including listening, factual, accessibility and visual scope. No eight-hour-to-minutes benchmark or replacement of mandatory CI, native qualification or release gates is claimed. An initial authority-renewal attempt rejected a generated publication-sample bundle whose smoke path retained an unresolved module import. The failed-generation observation preserves its identity and diagnosis; no failed receipt or patched generated source is promoted. Narrative and documentation checks pass independently.
[x] RELEASE-019 — Require explicit completion or approved deferral of every release goal
- Priority: P0
- Release target: 1.3.1
- Completion prerequisites: COURSE-004
- Owner: release workflow, roadmap authority, and initialized-project template
- Cycle prevention follow-up (user directed): Investigate the two 1.3.1 goal/gate cycles in Git history; explicitly model completion prerequisites and release-phase dependencies. Reject self, transitive and cross-release cycles before supported roadmap writes/imports and during validation/CI. Preserve all 18 goals, rejected-write bytes and valid dependencies. Arbitrary prose is not a reliable dependency language; document its limits.
- Adoption audit follow-up: The native rewrite helper also appends ADOPT-002 after lift-and-shift. Its complete queue proposal now passes the shared guard before companion decision/program/index writes. Twenty dependency tests and eight real adoption/harness tests pass; rejected writes preserve the entire file snapshot. See
verification/roadmap-adoption-cycle-qualification.json. - Direction: For 1.3.1 and every subsequent release, document every release goal in the roadmap and block publication until every goal is complete. An agent may propose moving a goal to a future release, but only explicit user approval authorizes that scope change.
- Conclusion: Make roadmap release scope machine-checkable. A goal assigned to the release remains blocking until complete; deferral requires a recorded proposal, explicit user approval, and an atomic roadmap move to a named future release before the release can become ready. The user's instruction in this session explicitly moves COURSE-004 and its full replacement onboarding film to 1.3.1.
- Depends on: none
- Implementation:
- Add shared dependency validation to roadmap record/close, update-derived imports, template initialization, update application, documentation/project validation and release readiness; retain actionable cycle paths and deterministic incident/negative coverage. Model-assisted documentation batches and inherited imports also preflight their proposed bytes. All 79 focused source tests pass; see
verification/roadmap-cycle-qualification.jsonand the root-cause analysis. Final installed/native release qualification remains in the same-release execution checklist. - Add roadmap goal and approval records to the canonical release contribution policy and CLI.
- Reject release readiness when a goal is missing from the roadmap, incomplete, or deferred without explicit user approval and a future release target.
- Update release-project and record-user-directed-work skills plus initialized-project copies with the same approval boundary.
- Always load an existing release policy during contribution sweeps, even when both the version and current milestone are supplied explicitly, so callers cannot bypass the policy-bound roadmap goal manifest. Preserve standalone explicit-version sweeps only when the policy file is genuinely absent; malformed policy remains an error.
- Record the reviewed lifecycle-driver identity after the release CLI policy correction; exact-head CI exposed the stale TCB pin after the complete 2,301-case source suite passed, so no failing run is relabeled green.
- Reconcile every open GitHub milestone 1.3.1 issue into the release-goal manifest and an explicit roadmap target; keep every incomplete item blocking.
- Complete WINDOWS-PE-OBSERVE-001 after repairing the exact-main Windows dependency-observation failure without weakening live receiver or dependency-closure checks.
- Move COURSE-004 and all replacement-onboarding production work to 1.3.1, then complete and publish the film before the patch release; exact approval and media evidence are retained under COURSE-004.
- Add shared dependency validation to roadmap record/close, update-derived imports, template initialization, update application, documentation/project validation and release readiness; retain actionable cycle paths and deterministic incident/negative coverage. Model-assisted documentation batches and inherited imports also preflight their proposed bytes. All 79 focused source tests pass; see
- Evidence:
- Deterministic release-contribution tests reject undocumented, incomplete, and unapproved-deferred goals and accept only completed or explicitly approved future moves; 35 focused release, initialization, and CLI tests plus 33 subtests pass.
- Root/template skill copies are byte-identical; repository layout, SkillEvaluator, 22 documentation tests, and all 121 Mermaid renders pass.
- Focused CLI regressions prove explicit version and milestone arguments retain
the policy goal manifest, absent-policy standalone sweeps remain available, and a
malformed existing policy cannot be bypassed. Ten focused contribution tests plus
three subtests pass. After milestone reconciliation, the real explicit
1.3.1sweep originally reported all 17 reconciled roadmap goals fromdocs/roadmap/release-goals.json, with one complete and 16 open. The later user-directed symposium documentation and CI-scope goal raises the current exact manifest to 18 goals. The later symposium publication and CI evidence complete DOCS-CI-SCOPE-001 and RELEASE-DECK-001, leaving three complete and 15 open; release readiness remains false. - The supported lifecycle-driver review passes against the recorded exact
src/literate_ai/cli/release.pybytes, followed by exact-head and exact-main CI. - The 1.3.1 manifest resolves all 18 declared roadmap headings and explicitly covers milestone issues #86, #90, #92, #95, #98, #102, #103, #117, #118, #121, #123, #129, and #140 plus the requested release briefing and symposium documentation/CI-scope goal. Issue #117 spans
SDK-OBSERVATION-COST-001andRETAINED-OBSERVATION-PERF-001; issue #118 is the captured-loader scope ofRETAINED-SDK-PUBLIC-001. Scope reconciliation inferred no completion; exact-main evidence later completed #90. - A focused deadline regression and the exact post-merge Windows partition pass with dependency observations still bounded by the caller deadline.
- The complete replacement onboarding film passes voice, motion, factual, accessibility, media-integrity, and full-playback review gates; see
verification/onboarding-1.3.1-approval.jsonand COURSE-004. - Implement and test the enforcement mechanism and initialized-project controls. The actual 1.3.1 plan, qualification, publication, verification and synchronization remain unchecked mandatory steps in the same-release execution checklist.
Approved cycle correction: The user explicitly approved clearing the circular
checks during the realtime exchange, then reiterated that no goals may be dropped
or gates relaxed. All 18 goal IDs and all 1.3.1 release targets remain. Film delivery
and the tested enforcement implementation are complete; final release execution
remains mandatory and incomplete. See
verification/release-goal-cycle-correction.json for the approval and boundary.
Lifecycle-driver pin repair: The supported recorder reviewed the sole changed TCB
file, src/literate_ai/cli/release.py, and advanced the driver identity from
sha256:67e843f8c183463ab0fb0ba49f4083f42877873801293196f575d8dea5ac996a to
sha256:81c7b3cd7f7a5bdbade5be8e591790fd8005ba14d7ba6a6bcc34ad73e3089189.
The current documentation authority, including the synchronized release briefing,
is sha256:0a3e2414af9a1459656fa09821f7d152e4b2409c46c4b8a2c8d53a574ce7e774.
PR #153 exact-head run 40457678449 passes all 16 jobs. Its merge commit
3b606d42c93b04b3be354f78152a0b3ac11e3059 passes all 26 exact-main jobs in
run 40460869302, including the repaired isolated Windows receiver gate.
Selective 1.3.1 patch-content decision: Start from the existing
release/1.3.x line, not the 1.4 development tree. Stage the explicit-goal guard
(79903e680), packaged manifest (2704931a3) and explicit-sweep correction
(fca515383) first. The bounded follow-on source fixes are latest-README policy
(04668ac3d), changed-ancestor diagnostics (c3b0c13d1), ACL preflight
(849c5cc7a), the additional ACL refusal test (b79cf33a0, reviewed authored
slice), native Windows test isolation (8f6015f28), and the wheel's roadmap-JSON
package declaration (77eaf1619). Bring the approved film,
its authoring/provenance and corresponding documentation as their own authored
collateral; reconcile the complete existing 18-goal manifest on the patch line.
Do not cherry-pick broad integration merges. Exclude the 1.4 resource-dispatch,
coalescing and semantic-payload feature work, the 1.4 version advance, and catalog
version mirrors for that development release. Any copied lifecycle pin must be
reviewed and regenerated for the selected patch tree with the supported recorder;
the development-tree digest is not a patch attestation. Qualification and release
publication remain pending, and the proposed correction to the two self-referential
goal criteria remains unapplied while awaiting user approval.
Selective backport checkpoint (27 October): The patch line is pushed at
14dea5b83, with the full 18-goal ledger and existing acceptance criteria intact.
The approved film, authoring sources, captions and review provenance match main;
the decks and HTML-explorer guidance are included. The patch has its own reviewed
lifecycle pin and documentation authority. Managed focused checks pass: 10
contribution, 17 release-policy, 10 initialization, eight CI-policy, four Windows
controller and four film cases. The retained group completes 353 selected cases
with 322 passes, 31 platform skips and no failures; its directly affected owners
include all nine retained-package cases. Changed-skill admission, changed Python
lint/format, layout/export checks, 22 documentation tests and 121 Mermaid renders
pass. These are backport checks, not final native release qualification. A fresh
sweep reports 13 open goals, no invalid goal records, 13 open included issues and
34 unclassified contributions. The old receipt correctly refuses as stale; renew
it through the configured lifecycle rather than copying a 1.4 receipt. See the
patch line's verification/patch-backport-scope.json and
verification/patch-backport-validation.json.
Cold-wheel packaging correction: Exact patch CI run 40585686603 passes the
FreeBSD ACL preflight but its Windows installed-wheel job correctly refuses
onboarding because the wheel lacks project_template/docs/roadmap/release-goals.json.
The initial selective backport omitted the separate one-line 77eaf1619 package-data
declaration; the earlier 2704931a3 initialization change alone did not package it.
The correction and scope record are pushed on fix/p131-package-goals at
37dd413b7. Ten managed initialization cases pass, and a clean wheel contains the
exact source manifest. The canonical isolated installed-wheel gate now passes on
that exact source, including actual installed create/adopt paths and a 1,239-member
Standard binding. Its retained wheel is
sha256:f92c3e659d3eecb339c7da821c46b63dcdca250e33ea9e0cc4763d9bbdb28816;
fix/p131-package-goals also retains the scoped qualification record. This is an
unprepared 1.3.0-versioned development wheel, not a published 1.3.1 artifact. The native Windows
attempt for the known-bad 14dea5b83 package was explicitly stopped through its
verified owned process tree, with checkout, logs and terminal failure retained.
Fresh configured host lifecycle qualification continues on its frozen source.
No software release or native success is claimed.
[x] DOCS-LABS-001 — Modernize 1.4 documentation, conference evolution deck, and visual labs
- Priority: P0
- Owner: front-door documentation, conference collateral, samples, and HTML observability
- Direction: Synchronize user documentation with the 1.4.0 development feature set; create a conference-ready deck on Literate AI goals and evolution; and add progressively more complex, cheeky, independent visual labs spanning component DAGs, audio, video, 3D, music, mathematics, and physics.
- Conclusion: Treat general documentation as 1.4.0 development authority while preserving 1.3.1 release-specific collateral. Build one DRY lab kit with independent lab entry points, lesson-flow diagrams, and deterministic browser-friendly artifacts. The original claim that those diagrams were resolved Component graphs was incorrect; LAB-AUTHORITY-001 owns the correction and real canonical curriculum. Produce an editable local conference deck through the repository presentation pipeline; do not publish externally without separate authorization.
- Depends on: current 1.4.0 main authority; existing HTML explorer and presentation toolchain
- Next action: Complete. Keep the current-feature page synchronized with release authority, rebuild the deck from its checked-in source when claims change, and extend the lab sequence only when each new artifact remains offline and independently verifiable.
- Implementation:
- Audit and reconcile front-door and user documentation against current commands and features; add a labs curriculum with shared support and progressively richer independent examples; create an editable conference deck with speaker notes and source ledger; link all new surfaces from stable indexes.
- Evidence:
-
make documentation-checkrenders 121 Mermaid diagrams from 639 Markdown files; the 1.4.0 current-feature page distinguishes published 1.3.0, patch 1.3.1, development, and open qualification. - Six standalone lab artifacts pass
build_labs.py,verify_labs.py, desktop browser interaction checks, offline-resource checks, and a 390-pixel viewport bounds check; each exposed its authored Markdown and illustrative role flow. Those checks did not establish canonical Components, Flavor selection or lifecycle admission; LAB-AUTHORITY-001 adds the missing curriculum. - The 14-slide editable PPTX has 14 speaker-note pages. Package integrity,
layout geometry, font policy, slide bounds, render count, and full-slide visual
review pass with zero structural findings or layout warnings; exact deck SHA-256
is recorded in its checked-in
validation.json. - The reviewed documentation authority marker is current at
sha256:6f40bac8e467374e03aaa0fa72b656f8d6a52fff2fb0c0f8c8fe551f24d636d5;litai project validate,make lint repository-layout-check, and the clean fullmake python-checkpass (2,332 tests, 70 skipped).
-
[ ] LAB-AUTHORITY-001 — Make lab diagrams, specifications and source provenance accurate
- Priority: P0
- Owner: labs documentation and offline artifact builder
- Direction: The user found that Grumpy Counter graph roles look like real Components while its short specification omits visible UI behavior. https://github.com/jordanhubbard/literate-ai/issues/159
- Conclusion: Labs are authored offline documentation examples, not locked canonical Component realizations. Correct the diagram and bundle claims, expose exact source inputs, fully specify and verify Grumpy Counter without inventing Components or receipts. Follow-up to DOCS-LABS-001 under PROJECT Goals 2 and 4.
- Depends on: DOCS-LABS-001
- GitHub issue: #159
- Release target: 1.4.0 (same development curriculum scope as DOCS-LABS-001).
- Next action: Convert every lab to independently resolvable canonical Components and explicit Flavor selections, then qualify actual locks, generation and browser lifecycle evidence in increasing complexity.
- User clarification: Self-contained means no dependency on earlier labs or external repositories; all labs must use Literate AI. Start small, progressively add real Components/Flavors and other harness dimensions, and finish with a visually substantial composed capstone. A labels-only correction is not completion.
- Implementation:
- Distinguish lesson roles from resolved Components across the shared lab shell; expose exact bundled sources and provenance.
- Convert all six lessons to standalone canonical lab graphs with full UI specifications and progressively richer real Flavor/skill/workflow selections; derive displayed graphs from exact framework resolution, never hand-authored role counts.
- Complete Grumpy Counter layout, labeled modulus control, rendering, input behavior and acceptance contract; align implementation.
- Separate lab behavior from color-keyed surrounding inputs and harness context; distinguish manual selection from actual canonical bindings.
- Evidence:
- Rebuild and structurally verify all six offline artifacts; reject changed embedded source or false graph/custody claims.
- Actual desktop/mobile browser checks verify Grumpy Counter default, bounds, keyboard/pointer input, source parity, graph selection and offline behavior; authority and required repository checks pass.
LAB-AUTHORITY-001 development checkpoint: six offline bundles and five tamper/refusal checks pass. Actual offline Chromium at 1440 and 390 pixels verifies pointer/keyboard input, 239 rendered arithmetic dots, eight exact source/context records, graph role activation, six shared shells and no page errors or network fetches. The canvas is positioned independently of its backing-store size to prevent intrinsic sizing feedback. Canonical curriculum and generated lifecycle admission remain open.
[ ] RICH-HTML5-PRESENTATIONS-001 — Rich HTML5 presentation authoring and delivery
- Priority: P0
- Owner: presentation authoring, browser verification, and release collateral
- Direction: Deliver the current conference deck now as a self-contained browser-native HTML5 presentation, while treating reusable Rich HTML5 presentation authoring as a 1.4 feature alongside PowerPoint and Google Slides.
- Conclusion: Make the checked-in HTML deck the primary conference artifact now: offline, accessible, keyboard/touch navigable, speaker-note capable, printable, and independently browser-verified. Keep the reusable authoring skill open for 1.4 until its routing, component contracts, publication behavior, and cross-browser acceptance are generalized beyond this deck.
- Depends on: DOCS-LABS-001 conference narrative and factual source ledger; current presentation authoring guidance; browser verification
- Implementation:
- Build and check in a deterministic single-file HTML5 conference deck from repository-owned content and assets; make it the primary local artifact and retain PowerPoint only as an editable compatibility export.
- Stage the exact accepted HTML file as the 1.3.1 conference release asset and remove the superseded PowerPoint asset only after fresh-download verification.
- Generalize the proven deck architecture into a Rich HTML5 presentation skill for 1.4 and integrate it alongside PowerPoint and Google Slides.
- Evidence:
- Fourteen slides and notes, four embedded-only image uses, restrictive offline policy, stable controls, and print behavior pass deterministic structural checks. Real Chrome passes desktop and portrait-mobile layout, keyboard/click navigation, notes, URL state, external-request, console-failure, and viewport-overflow checks; all fourteen desktop slides pass contact-sheet review.
- Draft release asset
literate-ai-1.3.1-conference-deck.html(asset ID682314847) fresh-downloads as 1,353,936 bytes with SHA-25688d552df6d9829a1ab059e393436ee3468f3f2ccb567ce08af0cd6505ac58ca5; the draft now contains only that HTML asset after removal of the superseded PowerPoint asset. - Close this roadmap item only after the reusable 1.4 skill, routing, publication contract, and cross-browser acceptance are independently qualified.
[x] CONFERENCE-WEB-001 — Publish conference attendee documentation and materials on the web
- Priority: P0
- Owner: documentation website and conference materials
- Direction: Commit and push all updates without waiting for CI; prioritize a usable public documentation website and attendee materials before the conference in two hours.
- Conclusion: Publish a GitHub Pages attendee hub from the reviewed repository, with browsable documentation, offline HTML deck, truthful labs, approved film and captions, downloads and an explicit release-status boundary. Use scoped local browser/link checks and deploy independently of product CI.
- Depends on: none
- Implementation:
- Integrate pending reviewed updates and publish a reproducible static documentation site with a conference landing page and a dedicated deployment workflow. PRs #158 and #160 are merged; site source
0ef44bcd7282c8d3efb904e9049669b98de0d3a8deployed successfully in run40567956679to https://jordanhubbard.github.io/literate-ai/.
- Integrate pending reviewed updates and publish a reproducible static documentation site with a conference landing page and a dedicated deployment workflow. PRs #158 and #160 are merged; site source
- Evidence:
- Verify desktop and mobile pages, live deployed links, deck navigation, film/caption downloads and publication status; record any CI still running without making release-success claims. The 442-page build passes 4,149 local-link checks. Live Chrome passes fourteen navigation/interaction checks at widths 1440 and 390, including search, film metadata/captions and lab input; all eight framework-flow diagrams render. The fourteen-slide deck passes desktop/mobile controls and layout checks. Fresh public deck, film, caption and downloaded-kit content hashes match reviewed sources; archive CRC passes. See publication evidence. Product CI remains separate and was not awaited by explicit user direction; 1.3.1 software qualification and the canonical lab curriculum remain open.