Skip to content

Release prep#39

Merged
dantheuber merged 5 commits into
mainfrom
release-prep
Jul 15, 2026
Merged

Release prep#39
dantheuber merged 5 commits into
mainfrom
release-prep

Conversation

@dantheuber

Copy link
Copy Markdown
Member

No description provided.

dantheuber and others added 5 commits July 14, 2026 10:51
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
dantheuber marked this pull request as ready for review July 15, 2026 20:14
@dantheuber
dantheuber merged commit 8403ce9 into main Jul 15, 2026
1 check passed
@dantheuber
dantheuber deleted the release-prep branch July 15, 2026 20:15
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