Skip to content

Advance v18 migration scratch proof and command wrapper#104

Merged
flyingrobots merged 23 commits into
mainfrom
v18-continuum-slices-46-55
May 24, 2026
Merged

Advance v18 migration scratch proof and command wrapper#104
flyingrobots merged 23 commits into
mainfrom
v18-continuum-slices-46-55

Conversation

@flyingrobots
Copy link
Copy Markdown
Member

@flyingrobots flyingrobots commented May 24, 2026

Summary

  • adds v17 fixture and scratch operation reading construction for genesis equivalence
  • wires command-owned reading providers, scratch readback conformance, provider-backed finalization coverage, and divergence blocking
  • adds deterministic command report output, a non-finalizing migration CLI wrapper, v18 public release blockers, and a BEARING replan for slices 66-70

Verification

  • npm run test:local
  • npm run lint
  • npm run typecheck
  • npm run lint:md
  • npm run lint:sludge
  • npm run lint:semgrep
  • git diff --check
  • pre-push IRONCLAD M9 gates passed, including static gates and unit tests

Summary by CodeRabbit

Release Notes

  • New Features

    • Completed v18 graph-model migration command with dry-run planning, scratch history writing, equivalence gating, and finalization workflows.
    • Added CLI wrapper for running migrations with deterministic operator reporting.
    • Implemented archive-preserving finalization safety with explicit confirmation requirements.
  • Documentation

    • Completed design documentation for all V18 migration phases and tooling components.
    • Added v17 golden graph fixture with manifest for migration testing.
  • Tests

    • Comprehensive test coverage for migration command, scratch operations, finalization, and conformance verification.

Review Change Stack

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 24, 2026

Warning

Review limit reached

@flyingrobots, we couldn't start this review because you've used your available PR reviews for now.

Your plan includes 1 review of capacity. Refill in 13 minutes and 22 seconds.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more review capacity refills, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 606005cd-b099-4cb6-ad61-97ea30872d02

📥 Commits

Reviewing files that changed from the base of the PR and between a8e184b and 45003df.

📒 Files selected for processing (40)
  • CHANGELOG.md
  • docs/design/0196-v18-scratch-migration-writer/v18-scratch-migration-writer.md
  • docs/design/0197-v18-scratch-equivalence-gate/v18-scratch-equivalence-gate.md
  • docs/design/0198-v18-migration-finalization-safety/v18-migration-finalization-safety.md
  • docs/design/0200-v18-migration-finalization-implementation/v18-migration-finalization-implementation.md
  • docs/design/0201-v18-migration-command-wiring/v18-migration-command-wiring.md
  • docs/design/0202-v18-post-migration-runtime-conformance/v18-post-migration-runtime-conformance.md
  • docs/design/0203-v18-content-property-closeout-audit/v18-content-property-closeout-audit.md
  • docs/design/0204-v18-legacy-fixture-reading-construction/v18-legacy-fixture-reading-construction.md
  • docs/design/0205-v18-scratch-operation-reading-construction/v18-scratch-operation-reading-construction.md
  • docs/design/0206-v18-command-reading-providers/v18-command-reading-providers.md
  • docs/design/0207-v18-scratch-runtime-conformance-provider/v18-scratch-runtime-conformance-provider.md
  • docs/design/0208-v18-command-provider-finalization/v18-command-provider-finalization.md
  • docs/design/0209-v18-provider-divergence-coverage/v18-provider-divergence-coverage.md
  • docs/design/0210-v18-migration-command-report/v18-migration-command-report.md
  • docs/design/0211-v18-migration-command-cli-wrapper/v18-migration-command-cli-wrapper.md
  • docs/design/0212-v18-public-release-blockers/v18-public-release-blockers.md
  • docs/design/0213-v18-replan-after-command-cli/v18-replan-after-command-cli.md
  • scripts/v18.0.0/migrations/graph-model/GitMigrationCommandRunner.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationCommand.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationFinalizer.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationScratchReadingBuilder.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationSourceInventoryCollector.ts
  • scripts/v18.0.0/migrations/graph-model/V17GoldenGraphFixtureRestore.ts
  • src/domain/migrations/GraphModelMigrationArchiveRef.ts
  • src/domain/migrations/GraphModelMigrationScratchRef.ts
  • src/domain/migrations/V17GoldenGraphFixtureGenesisReading.ts
  • src/domain/migrations/V17GoldenGraphFixtureManifest.ts
  • src/infrastructure/adapters/V17GoldenGraphFixtureManifestJsonAdapter.ts
  • test/unit/domain/migrations/GraphModelMigrationConstructorGuards.test.ts
  • test/unit/domain/migrations/GraphModelMigrationReviewGuardCoverage.test.ts
  • test/unit/domain/migrations/V17GoldenGraphFixtureGenesisReading.test.ts
  • test/unit/infrastructure/adapters/GraphModelMigrationDryRunRequestJsonAdapter.test.ts
  • test/unit/scripts/v18-content-property-closeout-audit.test.ts
  • test/unit/scripts/v18-graph-model-source-inventory-collector.test.ts
  • test/unit/scripts/v18-migration-command.test.ts
  • test/unit/scripts/v18-migration-finalizer.test.ts
  • test/unit/scripts/v18-scratch-reading-builder.test.ts
  • test/unit/scripts/v18-v17-golden-graph-fixtures.test.ts
  • vitest.config.ts
📝 Walkthrough

Walkthrough

Adds full v18 graph-model migration pipeline: fixtures and manifest, source inventory, operation lowering, scratch writer/reader, equivalence gate, finalization safety/finalizer, orchestration/CLI/report formatter, comprehensive design docs, and tests validating end-to-end flows and failure-closed behavior.

Changes

V18 graph-model migration end-to-end

Layer / File(s) Summary
End-to-end migration functionality and evidence
src/domain/..., scripts/v18.0.0/migrations/graph-model/*, fixtures/v17/..., src/infrastructure/adapters/..., docs/**/*, CHANGELOG.md, test/unit/**/*
Implements and documents fixtures→inventory→lowering→scratch write/read→equivalence→safety→finalization, plus command/CLI/reporting; adds comprehensive tests and release/backlog docs.

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant CLI
  participant Command
  participant Git
  participant Domain
  Operator->>CLI: repo, request, manifest, scratch-ref
  CLI->>Command: run with providers
  Command->>Domain: plan + lower
  Command->>Git: write scratch commits
  Command->>Domain: build readings + gate
  Command->>Domain: safety (with runtime conformance)
  Command-->>Git: optional archive+live CAS finalization
  Command-->>CLI: formatted deterministic report
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • git-stunts/git-warp#102 — Earlier PR wiring lowering/command pieces that this PR extends with scratch, gates, finalizer, and CLI/report.
  • git-stunts/git-warp#100 — Prior bearing updates; this PR’s BEARING.md advances posture and slice ranges beyond that.

Poem

I nibbled through refs where the branches twine,
Wrote scratchy commits with a timestamp fine.
I gated the genesis, ears up for drift,
Archived the past with a careful lift.
Now I thump out reports—deterministic delight—
Hop hop, v18’s trail glows in the night. 🐇✨

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v18-continuum-slices-46-55

@github-actions
Copy link
Copy Markdown

Release Preflight

  • package version: 17.0.1
  • prerelease: false
  • npm dist-tag on release: latest
  • npm pack dry-run: passed
  • jsr publish dry-run: passed

If you tag this commit as v17.0.1, release workflow will publish.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

🧹 Nitpick comments (1)
docs/design/0200-v18-migration-finalization-implementation/v18-migration-finalization-implementation.md (1)

4-4: ⚡ Quick win

Standardize status field value across design documents.

The design documents in this PR use inconsistent status values: some use status: Complete (docs 0194, 0195, 0199) while others use status: Completed (docs 0196, 0197, 0198, 0200). This inconsistency should be resolved by standardizing on a single value across all design documents in the repository.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@docs/design/0200-v18-migration-finalization-implementation/v18-migration-finalization-implementation.md`
at line 4, Several design docs use inconsistent status values; change the
YAML/status field in this file (the "status: Completed" entry in
v18-migration-finalization-implementation.md) to the project's canonical value
("status: Complete") and ensure the same replacement is applied across the
related design docs (0194, 0195, 0196, 0197, 0198, 0199, 0200) so all documents
use the identical "status" string; update only the status field value and run a
quick repo-wide search for "status: Completed" to replace any other occurrences.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/v18.0.0/migrations/graph-model/GitMigrationCommandRunner.ts`:
- Around line 66-70: When options.deterministicIdentity is true the child spawn
call replaces the entire environment with MIGRATION_GIT_IDENTITY causing
PATH/HOME to be lost; update the spawn options in the branch that returns
spawn('git', args, { cwd, env: MIGRATION_GIT_IDENTITY }) so the child env merges
the parent process.env with MIGRATION_GIT_IDENTITY (e.g., env: { ...process.env,
...MIGRATION_GIT_IDENTITY }) while keeping cwd the same; ensure you modify the
code where options.deterministicIdentity, spawn, and MIGRATION_GIT_IDENTITY are
referenced.

In `@scripts/v18.0.0/migrations/graph-model/GraphModelMigrationCommand.ts`:
- Around line 96-99: The call to writeGraphModelMigrationScratchHistory uses
options.scratchRefName without validating it; add a boundary check in
GraphModelMigrationCommand (e.g., in the command's constructor or run method
before calling writeGraphModelMigrationScratchHistory) to ensure
options.scratchRefName is a non-empty, non-whitespace string and throw/return a
clear Error when invalid; this enforces the invariant at the command boundary
and prevents passing an empty scratchRefName into
writeGraphModelMigrationScratchHistory.
- Around line 143-147: The provider outputs from options.readingProviders are
used without validation; call the existing validation function (requireReading)
on both await results from options.readingProviders. Specifically, await
options.readingProviders.legacyReading() and
options.readingProviders.scratchReading(scratchWriteResult), pass each result
into requireReading(...) to enforce the reading contract, and only then return
Object.freeze({ legacyReading: validatedLegacy, scratchReading: validatedScratch
}); ensuring any bad provider output fails with a clear contract error instead
of later obscure failures.

In `@scripts/v18.0.0/migrations/graph-model/GraphModelMigrationFinalizer.ts`:
- Around line 134-138: The requireFinalizationString function currently only
rejects null; update it to also reject empty or all-whitespace strings by
checking (value === null || value.trim() === '') and throwing
GraphModelMigrationFinalizerError with the same message; ensure callers that
pass names like heads/ref rely on this invariant so invalid empty finalization
strings are caught here instead of during git execution.

In
`@scripts/v18.0.0/migrations/graph-model/GraphModelMigrationScratchReadingBuilder.ts`:
- Around line 180-184: The parseHexByte function currently uses
Number.parseInt(hex, 16) which allows partial parses (e.g., "0g" → 0); update
parseHexByte to first validate the input string is exactly two hex digits (e.g.,
with a /^[0-9a-fA-F]{2}$/ test) and only then parse it, otherwise throw
GraphModelMigrationScratchReadingBuilderError with the invalid input; ensure the
error message includes the original hex string for easier debugging and keep the
rest of the function behavior unchanged.

In
`@scripts/v18.0.0/migrations/graph-model/GraphModelMigrationSourceInventoryCollector.ts`:
- Around line 34-38: The function collectGraphModelMigrationSourceInventory
validates graphId but not repositoryPath; add a precondition check using
requireNonEmptyString(options.repositoryPath, 'repositoryPath') at the top of
the function before any Git/child-process calls (e.g., before calling
listWriterRefs) and use the resulting repositoryPath variable for subsequent
calls; apply the same defensive validation wherever this function later makes
other Git calls (the later calls around the listWriterRefs usage) so
repositoryPath is validated at the boundary.

In `@scripts/v18.0.0/migrations/graph-model/V17GoldenGraphFixtureRestore.ts`:
- Around line 33-35: Validate the input paths before performing any file-system
or Git operations: at the start of the routine that calls readManifest (the code
surrounding the readManifest(options.manifestPath) call in
V17GoldenGraphFixtureRestore), check that options.manifestPath and
options.targetDirectory are non-empty/defined and throw or return a clear error
if they are missing; only then call readManifest and compute repositoryPath =
resolve(options.targetDirectory) and bundlePath =
resolve(dirname(options.manifestPath), manifest.bundlePath) so the invariants
are established before I/O happens.

In `@src/domain/migrations/GraphModelMigrationArchiveRef.ts`:
- Around line 30-32: validateRefName currently assumes refName is a string and
directly accesses refName.length, and the constructor/validator that calls it
(requireFields / fields.refName) doesn’t ensure fields.refName exists or is a
string; add type guards so validateRefName first checks typeof refName ===
"string" and non-empty (e.g., typeof refName !== "string" || refName.length ===
0 returns the fatal GraphModelMigrationNotice), and update the caller
(requireFields / any code reading fields.refName) to verify fields.refName is
present and a string before passing it in; ensure all early-return validation
paths use GraphModelMigrationNotice rather than allowing native TypeError to be
thrown.

In `@src/domain/migrations/GraphModelMigrationScratchRef.ts`:
- Around line 30-32: The guard in validateRefName doesn't check for undefined,
so calling validateRefName with undefined causes refName.length to throw and
breaks constructor invariants; update
GraphModelMigrationScratchRef.validateRefName to treat undefined like null
(e.g., if (refName == null || refName.length === 0)) and return the same
GraphModelMigrationNotice.fatal path, ensuring no I/O or side effects and
preserving the invariant expected by the constructor.

In `@src/domain/migrations/V17GoldenGraphFixtureGenesisReading.ts`:
- Around line 53-90: The code currently branches on fact.kind string values in
projectionFor, compatibilityProjectionFor, and nonVisibleLifecycleProjectionFor;
replace those tag-string checks with runtime type dispatch using instanceof
checks against the concrete classes that implement
V17GoldenGraphFixtureVisibleFact (e.g., V17GoldenNodeFact, V17GoldenEdgeFact,
V17GoldenPropertyFact, V17GoldenContentFact, V17GoldenRemovalFact,
V17GoldenMultiWriterFact). Update the three functions to import and test fact
with instanceof (for example: if (fact instanceof V17GoldenNodeFact) { return
projection(...); } ), remove string comparisons, and keep the final WarpError
throw for unsupported types; ensure imports for the concrete classes are
added/updated so the runtime instanceof checks work.

In `@test/unit/scripts/v18-content-property-closeout-audit.test.ts`:
- Around line 74-75: The test collects OS-specific file paths with
files.push(relative('', path)) which causes Windows backslashes to fail
POSIX-style expectations; normalize the collected path before pushing by
converting it to POSIX separators (e.g., replace platform path.sep or
backslashes with '/') so the files array contains consistent POSIX-style paths
for assertions.

---

Nitpick comments:
In
`@docs/design/0200-v18-migration-finalization-implementation/v18-migration-finalization-implementation.md`:
- Line 4: Several design docs use inconsistent status values; change the
YAML/status field in this file (the "status: Completed" entry in
v18-migration-finalization-implementation.md) to the project's canonical value
("status: Complete") and ensure the same replacement is applied across the
related design docs (0194, 0195, 0196, 0197, 0198, 0199, 0200) so all documents
use the identical "status" string; update only the status field value and run a
quick repo-wide search for "status: Completed" to replace any other occurrences.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 52d243b2-b279-44ec-bd68-c7f59cdda67d

📥 Commits

Reviewing files that changed from the base of the PR and between b274bbc and a8e184b.

📒 Files selected for processing (72)
  • CHANGELOG.md
  • docs/BEARING.md
  • docs/design/0194-v18-real-source-inventory-collector/v18-real-source-inventory-collector.md
  • docs/design/0195-v18-migration-operation-lowering/v18-migration-operation-lowering.md
  • docs/design/0196-v18-scratch-migration-writer/v18-scratch-migration-writer.md
  • docs/design/0197-v18-scratch-equivalence-gate/v18-scratch-equivalence-gate.md
  • docs/design/0198-v18-migration-finalization-safety/v18-migration-finalization-safety.md
  • docs/design/0199-v18-v17-golden-graph-fixtures/v18-v17-golden-graph-fixtures.md
  • docs/design/0200-v18-migration-finalization-implementation/v18-migration-finalization-implementation.md
  • docs/design/0201-v18-migration-command-wiring/v18-migration-command-wiring.md
  • docs/design/0202-v18-post-migration-runtime-conformance/v18-post-migration-runtime-conformance.md
  • docs/design/0203-v18-content-property-closeout-audit/v18-content-property-closeout-audit.md
  • docs/design/0204-v18-legacy-fixture-reading-construction/v18-legacy-fixture-reading-construction.md
  • docs/design/0205-v18-scratch-operation-reading-construction/v18-scratch-operation-reading-construction.md
  • docs/design/0206-v18-command-reading-providers/v18-command-reading-providers.md
  • docs/design/0207-v18-scratch-runtime-conformance-provider/v18-scratch-runtime-conformance-provider.md
  • docs/design/0208-v18-command-provider-finalization/v18-command-provider-finalization.md
  • docs/design/0209-v18-provider-divergence-coverage/v18-provider-divergence-coverage.md
  • docs/design/0210-v18-migration-command-report/v18-migration-command-report.md
  • docs/design/0211-v18-migration-command-cli-wrapper/v18-migration-command-cli-wrapper.md
  • docs/design/0212-v18-public-release-blockers/v18-public-release-blockers.md
  • docs/design/0213-v18-replan-after-command-cli/v18-replan-after-command-cli.md
  • docs/method/backlog/v18.0.0/INFRA_graph-model-migration-tool.md
  • docs/method/backlog/v18.0.0/README.md
  • docs/method/backlog/v18.0.0/RELEASE_v18-public-release-blockers.md
  • docs/method/backlog/v18.0.0/TRUST_genesis-replay-equivalence.md
  • fixtures/v17/graph-model-golden/README.md
  • fixtures/v17/graph-model-golden/manifest.json
  • fixtures/v17/graph-model-golden/v17-golden-graph.bundle
  • scripts/v18.0.0/migrations/graph-model/GitMigrationCommandRunner.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationCommand.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationCommandCli.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationCommandReport.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationFinalizer.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationScratchReadingBuilder.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationScratchRuntimeConformanceProvider.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationScratchWriter.ts
  • scripts/v18.0.0/migrations/graph-model/GraphModelMigrationSourceInventoryCollector.ts
  • scripts/v18.0.0/migrations/graph-model/V17GoldenGraphFixtureRestore.ts
  • scripts/v18.0.0/migrations/graph-model/migrate.ts
  • src/domain/migrations/GenesisEquivalenceGate.ts
  • src/domain/migrations/GenesisEquivalenceGateResult.ts
  • src/domain/migrations/GraphModelMigrationArchiveRef.ts
  • src/domain/migrations/GraphModelMigrationFinalizationConfirmation.ts
  • src/domain/migrations/GraphModelMigrationFinalizationRequest.ts
  • src/domain/migrations/GraphModelMigrationFinalizationResult.ts
  • src/domain/migrations/GraphModelMigrationFinalizationSafety.ts
  • src/domain/migrations/GraphModelMigrationFinalizationSafetyResult.ts
  • src/domain/migrations/GraphModelMigrationLoweredOperation.ts
  • src/domain/migrations/GraphModelMigrationLoweredPatchPlan.ts
  • src/domain/migrations/GraphModelMigrationOperationLowerer.ts
  • src/domain/migrations/GraphModelMigrationOperationLoweringResult.ts
  • src/domain/migrations/GraphModelMigrationRuntimeConformanceResult.ts
  • src/domain/migrations/GraphModelMigrationScratchRef.ts
  • src/domain/migrations/GraphModelMigrationScratchWriteResult.ts
  • src/domain/migrations/GraphModelMigrationScratchWrittenPatch.ts
  • src/domain/migrations/V17GoldenGraphFixtureGenesisReading.ts
  • src/domain/migrations/V17GoldenGraphFixtureManifest.ts
  • src/infrastructure/adapters/V17GoldenGraphFixtureManifestJsonAdapter.ts
  • test/unit/domain/migrations/GenesisEquivalenceGate.test.ts
  • test/unit/domain/migrations/GraphModelMigrationFinalizationSafety.test.ts
  • test/unit/domain/migrations/GraphModelMigrationOperationLowering.test.ts
  • test/unit/domain/migrations/V17GoldenGraphFixtureGenesisReading.test.ts
  • test/unit/scripts/v18-content-property-closeout-audit.test.ts
  • test/unit/scripts/v18-graph-model-migration-command-cli.test.ts
  • test/unit/scripts/v18-graph-model-source-inventory-collector.test.ts
  • test/unit/scripts/v18-migration-command.test.ts
  • test/unit/scripts/v18-migration-finalizer.test.ts
  • test/unit/scripts/v18-scratch-migration-writer.test.ts
  • test/unit/scripts/v18-scratch-reading-builder.test.ts
  • test/unit/scripts/v18-scratch-runtime-conformance-provider.test.ts
  • test/unit/scripts/v18-v17-golden-graph-fixtures.test.ts

Comment thread scripts/v18.0.0/migrations/graph-model/GitMigrationCommandRunner.ts
Comment thread scripts/v18.0.0/migrations/graph-model/V17GoldenGraphFixtureRestore.ts Outdated
Comment thread src/domain/migrations/GraphModelMigrationArchiveRef.ts Outdated
Comment thread src/domain/migrations/GraphModelMigrationScratchRef.ts Outdated
Comment thread src/domain/migrations/V17GoldenGraphFixtureGenesisReading.ts
Comment thread test/unit/scripts/v18-content-property-closeout-audit.test.ts Outdated
@github-actions
Copy link
Copy Markdown

Release Preflight

  • package version: 17.0.1
  • prerelease: false
  • npm dist-tag on release: latest
  • npm pack dry-run: passed
  • jsr publish dry-run: passed

If you tag this commit as v17.0.1, release workflow will publish.

@flyingrobots
Copy link
Copy Markdown
Member Author

Resolved the outstanding CodeRabbit review feedback in fba2827.

Area Outcome Commit
Git command environment Deterministic Git identity now preserves the parent environment before applying migration identity variables. fba2827
Command boundaries Scratch ref names and provider-returned readings are validated before writer/gate use. fba2827
Finalization boundaries Safety-approved heads/ref strings now reject blank values before Git ref updates. fba2827
Scratch reading payloads Hex byte parsing now rejects malformed partial parses such as 0g. fba2827
Source inventory and fixture restore Repository/manifest/target paths now validate before Git or filesystem work. fba2827
Ref nouns Archive and scratch ref validation now handles omitted runtime fields without native TypeError escapes. fba2827
V17 fixture projection Fixture fact projection now dispatches through runtime-backed fact classes. fba2827
Cross-platform audit test Collected paths now normalize to POSIX separators. fba2827
Design docs Completed status values are standardized to status: Complete. fba2827
Coverage Added adapter and boundary regression coverage; local npm run test:coverage passes at 92.05% lines. fba2827

@github-actions
Copy link
Copy Markdown

Release Preflight

  • package version: 17.0.1
  • prerelease: false
  • npm dist-tag on release: latest
  • npm pack dry-run: passed
  • jsr publish dry-run: passed

If you tag this commit as v17.0.1, release workflow will publish.

@github-actions
Copy link
Copy Markdown

Release Preflight

  • package version: 17.0.1
  • prerelease: false
  • npm dist-tag on release: latest
  • npm pack dry-run: passed
  • jsr publish dry-run: passed

If you tag this commit as v17.0.1, release workflow will publish.

@flyingrobots flyingrobots merged commit 9113039 into main May 24, 2026
16 checks passed
@flyingrobots flyingrobots deleted the v18-continuum-slices-46-55 branch May 24, 2026 19:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant