fix(ci): register release-notes with moon and fix its manifest path spread (RIG-3731) - #1174
Merged
trunk-io[bot] merged 3 commits intoSep 13, 2026
Merged
Conversation
…pread (RIG-3731) tools/release-notes carried a moon.yml with typecheck/test/ci tasks but was absent from .moon/workspace.yml. moon discovers projects only from that explicit map, so the project was invisible — `moon project release-notes` returned project_graph::unknown_id, and its 22 tests and typecheck had NEVER run in CI, while the release lane depends on it to generate the Release body appendix and the nix-outputs.json manifest. This is the same hazard the macos-bundle entry already warns about in situ: an unregistered tool is silently inert and ships untested. Registering it immediately surfaced a real defect the missing gate had hidden: index.ts(312,49): error TS2783: 'path' is specified more than once, so this usage will be overwritten. In the keyed form of `nix path-info --json`, the object KEY is the authoritative store path, but it was spread BEFORE the value, so a `path` field inside the value would overwrite it and record a wrong store path in the manifest. Spread the value first and let the key win. Not a type silencer — it corrects which store path the manifest reports. Audited the whole repo: release-notes was the only unregistered tool project, so this gap is isolated rather than systemic. Verified: `moon project release-notes` resolves (was unknown_id); `moon run release-notes:ci` is green — 22 pass / 0 fail, typecheck clean (was exit 2); the generator's --dry-run emits 8 named nix outputs each with a narHash and real /nix/store paths; biome clean; sea-ref-gate and orion-ref-gate clean. Ledger-impact: none — CI project registration and a local bug fix. Refs RIG-3731
|
😎 This pull request was merged. |
|
Compass engineering docs preview: https://compass-repo-rig-3731-regist.compass-eng-docs.pages.dev Deployed from |
…y (RIG-3731)
Review follow-up, and a correction to the parent commit's claim.
The parent said reordering the spread to `{ ...v, path }` "corrects which store
path the manifest reports". That is WRONG, and I verified it against real nix
rather than reasoning about the type: `nix path-info --json` (2.34.7, the CI nix)
emits the keyed form, and its values carry
ca, deriver, narHash, narSize, references, registrationTime, signatures,
storeDir, ultimate, version
with NO `path` key. So both spread orders already produced the authoritative
key, and the shipped manifest was never wrong. The reorder was a TS2783 silencer
that happened to also be correct in principle.
The actual root cause was the type model: PathInfoEntry was used for BOTH the
array element (which does carry `path`) and the keyed-form value (which does
not, because the path IS the key). Declaring `path: string` on the keyed value
made TS believe `v.path` exists, which is what produced the duplicate-key error.
Model the two shapes distinctly — `KeyedPathInfo = Omit<PathInfoEntry, "path">`
in the Record position — so the type matches what nix actually emits and the
spread order stops mattering at all.
Deliberately NOT adding a regression test for the duplicate-`path` divergence:
it is unreachable with real nix, so a test would assert behaviour on a shape nix
never emits. That is padding, not coverage.
Verified: `moon run release-notes:ci` green — 22 pass / 0 fail, tsc rc=0; probed
`nix path-info --json` directly to confirm the keyed value has no `path` field.
Ledger-impact: none — type model only, no behaviour change.
Refs RIG-3731
rigel-mintaka
added this pull request to stack #1191
September 12, 2026 23:35
mattwilkinsonn
approved these changes
Sep 13, 2026
|
Stacked PR 1190 failed testing in the merge queue. Please investigate the failure and re-submit the stack. |
mattwilkinsonn
approved these changes
Sep 13, 2026
trunk-io
Bot
deleted the
compass-repo/rig-3731-register-release-notes
branch
September 13, 2026 22:29
|
This pull request was merged into |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR is part of a stack containing 2 PRs:
maintools/release-notes carried a moon.yml with typecheck/test/ci tasks but was
absent from .moon/workspace.yml. moon discovers projects only from that explicit
map, so the project was invisible —
moon project release-notesreturnedproject_graph::unknown_id, and its 22 tests and typecheck had NEVER run in CI,
while the release lane depends on it to generate the Release body appendix and
the nix-outputs.json manifest. This is the same hazard the macos-bundle entry
already warns about in situ: an unregistered tool is silently inert and ships
untested.
Registering it immediately surfaced a real defect the missing gate had hidden:
index.ts(312,49): error TS2783: 'path' is specified more than once, so this
usage will be overwritten.
In the keyed form of
nix path-info --json, the object KEY is the authoritativestore path, but it was spread BEFORE the value, so a
pathfield inside thevalue would overwrite it and record a wrong store path in the manifest. Spread
the value first and let the key win. Not a type silencer — it corrects which
store path the manifest reports.
Audited the whole repo: release-notes was the only unregistered tool project, so
this gap is isolated rather than systemic.
Verified:
moon project release-notesresolves (was unknown_id);moon run release-notes:ciis green — 22 pass / 0 fail, typecheck clean (was exit 2); thegenerator's --dry-run emits 8 named nix outputs each with a narHash and real
/nix/store paths; biome clean; sea-ref-gate and orion-ref-gate clean.
Ledger-impact: none — CI project registration and a local bug fix.
Refs RIG-3731