Version Packages - #725
Merged
Merged
Version Packages#725
Conversation
🌱 graft blast radiusNothing outside this diff depends on it. 0 areas changed; no indexed dependents at depth 2.
Open the interactive graph → — click an area to see the code that changed, and the line that reaches it. |
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 was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
ai-engineering@2.2.1
Patch Changes
#724
a045fa9Thanks @soydachi! -ai-securityfindings now say where they stand, not only that they were real. A confirmed finding carriedverdict: "confirmed"and nothing else, so one fixed in the same session kept reading as a live vulnerability: the next audit re-derived it,REPORT.mdwas the only artifact that said "fixed", and the milestone CHECK "zero open HIGH findings" had nothing in the machine-readable half to evaluate.Every confirmed finding now carries a
disposition—{"status": "open"}while the vulnerability is in the tree, or{"status": "fixed", "landed_in": "<sha>"}once the fix has landed. The schema refusesfixedwithout the commit that carries it, so no report can claim a fix nobody can resolve. Phase 5 requires the field, and the prior-run ledger reads it: afixedfinding is closed ground, anopenone is where the next run digs.A
findings.jsonwritten before this change is refused byvalidate-findings.cjsuntil it is stamped, which is the point — the two runs this repository keeps were stamped with the commits that carry their fixes.#724
a045fa9Thanks @soydachi! - The session can write its own artifacts again:self-protectwas denying the session everything under.ai-engineering/.That protection was a plain directory literal, so it covered every child of the directory — the four milestone slots (
spec.html,plan.html,brainstorm.md,recap.html), the receipts, the cache, and the artifacts the canon's own nodes promise in theirWrites::ai-researchwritesresearch/NNN-{name}.html,ai-securitywritessecurity/run-N/findings.jsonandREPORT.md,ai-designwritesdesign/direction.html. Nothing else writes those files, so the guard denied the only writer there is — abrainstorm.mdcame back as "this file governs you", and a research or security node could not leave the artifact its own contract requires. It also shadowed the pin check: an approved contract is frozen by the sha256 in the lock, and that check was never reached while the directory literal answered first.The fence is now the machinery and only the machinery: the four files the chain itself reads (
config.toml,overrides.toml,ai-eng.lock,arch.rules.json), the git floor, the machine-side canon and carriers, andspec.htmlonce its sha256 is in the lock. Everything else under the directory is the session's own material. The directory itself is matched as a terminal segment, never a prefix —rm -rf .ai-engineeringnames the machinery in one word and stays denied, while.ai-engineering/research/002.htmlis not the directory and is a write like any other.The four slot names still live in one place,
src/shared-slots.ts, becausespecsweeps them atspec close; the guard no longer needs the list, since it no longer carves an exemption out of a directory literal.#724
a045fa9Thanks @soydachi! -ai-eng updatereports both halves it owns, and a no-op is no longer printed as a write. The machine half was visible only when something was wrong: a healthy canon, an unchanged git floor and a carrier already at the binary's bytes printed nothing, so a run that verified everything looked exactly like a run that never looked — and the module carriers were rewritten and counted every time, which is how "all 7 assets current — nothing to sync" arrived with a line claiming the machine side was the work.The repo and the machine now each report as one block, every part named with its outcome:
Repo assetslists the files it holds when there is nothing to write,Machine sidenames the canon, each declared surface's carrier, the git floor and the machine ledger, and the closing line says whether anything was written at all. Identical bytes are skipped rather than rewritten, sowrittenmeans a change.What an existing install will notice: the second
ai-eng updatein a row now ends in "Nothing written — the repo and the machine already match ai-eng " instead of the counts of a run that looked like it had done something.