Skip to content

Release 0.4.4 — reconcile unshipped META-101/102 spec fixes + @workspacejson/cli - #19

Merged
qmarcelle merged 4 commits into
mainfrom
release/0.4.4
Jul 22, 2026
Merged

Release 0.4.4 — reconcile unshipped META-101/102 spec fixes + @workspacejson/cli#19
qmarcelle merged 4 commits into
mainfrom
release/0.4.4

Conversation

@qmarcelle

Copy link
Copy Markdown
Contributor

Summary

Reconciles previously unshipped spec work into a governed 0.4.4 release. The fixes for META-101 (VR-639) and META-102 (VR-640) were marked Done on 2026-07-12 but never reached main — the published 0.4.3 line still ships the tuple contradiction and the unanchored fileIndex key format. This branch lands them through the canonical PR path.

Basis: reconciliation audit in docs/audits/worktree-reconciliation/2026-07-22/ (committed separately on docs/reconciliation-audit-2026-07-22).

What this ships

  • META-101 / VR-639coChange.files typed and documented as an unordered two-file set (string[]), not a positional tuple. origin/main (0.4.3) still has files: [string, string].
  • META-102 / VR-640fileIndex keys pinned to repository-root-relative POSIX paths (anchor present in schema/v1.json + src/schema.ts). Absent on 0.4.3.
  • @workspacejson/cli — dbt-manifest→workspace.json path-normalization shim (new package; absent on main).
  • Strict packaged-schema AJV validator reconciled with the VR-639/640 contract fixes.

Commits:

  • 0566ee9 fix(spec): pin fileIndex key format + reconcile coChange.files to set semantics
  • 8dca4e7 feat(cli): scaffold @workspacejson/cli
  • 5ded233 release: reconcile 0.4.4 spec contracts
  • 3a77e1b docs(spec): record npx bin fallback

Validation (run 2026-07-22 on branch head 3a77e1b)

  • pnpm -r build — pass
  • pnpm -r typecheck — pass (spec, rules, cli, agents-audit)
  • pnpm -r test275 passed, 0 failed (spec 36, cli 6, rules 173, agents-audit 60)
  • Runtime spot-check: types.tsfiles: string[]; schema anchor present (2 sites).

Not in scope of this PR (deferred, evidence in the audit)

  • Two extra agents-audit CLI hardening tests exist only in an uncommitted working tree (--check+--dry-run drift gate; --force invalid-file recovery messaging). They are regression tests for two uncommitted cli.ts behavior changes and fail against this branch as-is (proven: exit 0≠1; missing invalidFileMoved branch). Landing them requires porting the coupled cli.ts implementation — a scope decision left to a maintainer. The work is fully preserved (git tag preserve/vr-639-640-worktree-2026-07-22 + preservation/tracked-changes.patch).

Remaining steps (NOT done here)

  • This branch is 2 commits behind origin/main (docs-only, PR docs: clarify generated and manual workspace evidence #17). Use "Update branch" before merge.
  • This PR does not release 0.4.4. Publishing is a separate, authorized step via the Release workflow after merge.
  • Linear META-101 / META-102 have been moved out of Done (→ In Review) to reflect implemented-but-unreleased; they return to Done only after 0.4.4 is published and verified.

Refs: META-101, META-102, VR-639, VR-640. Context: META-31 (Merged-vs-Done pipeline).

qmarcelle and others added 4 commits July 19, 2026 03:01
… semantics

VR-640: pin fileIndex/fragility.file/coChange.files to repository-root-relative
POSIX in schema/v1.json + schema.ts + types.ts. Documentation catching up to the
emitter (both key paths already emit git-root-relative, verified via HAC-75 probe);
the canonical form the CLI normalization shim targets.

VR-639: CoChangeEntry.files [string,string] -> string[] with a documented
two-element, order-independent (set) invariant; join must use membership, not index.
Adds order-independence + anchor-pin tests (30 pass; VR-640 guards proven red-first).

Refs VR-639, VR-640, HAC-75.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…alization shim

The HAC-75 fix as a package: normalize dbt manifest original_file_path
(dbt-project-root-relative) to workspace.json fileIndex keys
(repository-root-relative POSIX, per @workspacejson/spec VR-640) before joining,
so a nested dbt project doesn't silently produce zero rows.

- normalize.ts: computeProjectPrefix / normalizeModelPath (+ null guard for a
  project outside the git root)
- dbt.ts: extractModels + findDbtProjects (VR-640 multi-project enumeration)
- join.ts: membership join (order-independent, no positional assumptions)
- cli.ts: bin — reads manifest.json + workspace.json, exits non-zero on 0-row join
- tests (6 pass): red-first nested join 0/5 naive vs 5/5 normalized (HAC-75
  treatment fixtures), control-at-root, out-of-root rejection, multi-project guard

Declares @workspacejson/spec as a workspace sibling. Full typecheck/build/publish
pending `pnpm install` (adds @types/node, builds spec dist). Refs HAC-75, VR-640.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 22, 2026 23:41

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

qmarcelle added a commit that referenced this pull request Jul 22, 2026
…gration pass

Records: SAFE_DRIFT check, triple preservation, PR #19, validation
(275 tests green), META-101/102 Done->In Review, and the G2 test/impl
coupling that requires a follow-up authorization.
@qmarcelle
qmarcelle merged commit d0a19f6 into main Jul 22, 2026
2 checks passed
@qmarcelle
qmarcelle deleted the release/0.4.4 branch July 23, 2026 00:50
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.

2 participants