Release prep#39
Merged
Merged
Conversation
The initial codebase was built by the .sandcastle agent pipeline working through issues/*.md specs. That phase is over: all 21 issues shipped and closed, and development is now ordinary branch-and-PR work. - issues/: deleted. Every spec is preserved in git history and as a closed GitHub issue (#1-#22); a directory of completed specs in the repo root reads as open work to a newcomer. - AUTOBUILD.md -> .sandcastle/README.md. The pipeline is kept for batch work but is no longer the story the repo tells about itself. Reframed as optional repo tooling; the host-side-agent risk note now says the repo is public and issue text is attacker-controllable. - scripts/bootstrap-github.sh: deleted. A one-time launch switch that created a repo which now exists, from an issues/ directory that no longer does. - CLAUDE.md: no longer prescribes the autonomous loop; points at .why/ as the decision memory and CONTRIBUTING.md as the workflow. - CONTRIBUTING.md: new. Setup, workflow, and the invariants (promoted from .sandcastle/CODING_STANDARDS.md, which was agent-only until now). The .why/ bundle's autobuild decisions are left active on purpose - the pipeline is retired as the default, not erased from the record.
main was failing its own PR gate before this branch: `why anchor --check` exited 1 and two tests were red. Both causes were pre-existing. 1. Whole-file line ranges are fragile anchors. 31 anchors were written as `lines: 1-N` where N was exactly the file's line count — file-level anchors carrying redundant line numbers. A line-by-line blame trace can't carry a whole-file range through a rewrite, so five had rotted to `lost` even though every file still existed, and the other 26 were latent. Dropped `lines:` from all 30 live ones; a line-less anchor (`path: src/blame.ts`) resolves by path and was already the shape that never rotted. Genuine sub-file ranges are untouched. 2. docs/ci.md had drifted from why-capture.yml by one line — the `head.ref != 'why-drafts'` guard added in 3f498ba, which stops a capture PR from re-triggering capture. The doc-cannot-drift test caught it and had been red since. 3. decisions/ui-data-contract -> DESIGN.md:178 was lost since the line's text was edited after as_of 58dc0db. Line 178 is still exactly the right target (the CLI bullet describing `why export` and the contract); re-anchored to 0f75578 after reading it. Pinned to a commit already on main rather than to this branch, so it survives the squash-merge. 4. decisions/vscode-decoration-lanes anchored to issues/504-decoration-toggle.md, deleted in the previous commit. That spec was never filed as a GitHub issue, so the anchor is dropped and citation [3] now points at the file's last living commit — the evidence stays checkable. why anchor --check: exit 0. 0 lost, 57 live. 277 tests pass, lint clean.
spanHoldsAt now verifies span *identity* via reverse blame instead of text equality, and classify() repairs an orphaned as_of on an otherwise-current claim: whole-file and symbol anchors whose claim re-verifies at HEAD without reading as_of are re-stamped, but only to a durable commit — HEAD on the integration branch, the merge-base on a diverged branch when the span verifiably holds there, and otherwise nothing (no branch-HEAD stamps for the next squash to re-orphan). Bare path+lines orphans stay unverified: nothing verified them. This makes doctor's not-ancestor finding actionable again — the ground as-of-is-provenance kept it on — and clears the three .sandcastle orphans on the first post-merge run. Recorded in .why/decisions/orphaned-as-of-is-repaired.md; DESIGN §4, README, docs/ci.md, HOWTO updated to stop promising untracked work. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
dantheuber
marked this pull request as ready for review
July 15, 2026 20:14
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.
No description provided.