Skip to content

Epic #170: "tmp-first" artifacts - #177

Merged
sameera merged 8 commits into
mainfrom
epic-170-tmp-first-artifacts
Jul 30, 2026
Merged

Epic #170: "tmp-first" artifacts#177
sameera merged 8 commits into
mainfrom
epic-170-tmp-first-artifacts

Conversation

@sameera

@sameera sameera commented Jul 30, 2026

Copy link
Copy Markdown
Owner

No description provided.

sameera and others added 8 commits July 29, 2026 22:19
…ourced epics (#171)

The analyze receipt's home is now stated, not incidental: an issue-sourced
epic's analyze-receipt.md lands under .nexus/tmp/epic-<n>/ beside the
materialized epic.md as ephemeral hand-off content; an old-contract
committed entry keeps its committed placement unchanged; --pr mode keeps
publishing a PR review and writes no receipt file.

Refs #171

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t is the durable record (#172)

An issue-sourced local close now resolves its epic into .nexus/tmp/epic-<n>/
and writes close-record.md there as ephemeral hand-off content — never
committed, never described as committed, no manual git step to hand off to
/nxs.distill. Old-contract committed entries and --pr mode are unchanged.

Per record #176: the epic issue's close comment becomes the single durable
copy of a local close's rationale (invariant 4 — a failed post ends with
ACTION REQUIRED and a preserved body, never a success report), and it gains
the marker-anchored nexus:close-record machine block stamping the record
reference + full hash, conformance verdict, and full-SHA landed range in
every mode (invariant 5).

Refs #172

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…commit first (#173)

Input Resolution now scans .nexus/tmp/ alongside the committed queue: a
tmp directory is a drainable entry only when it carries both epic.md and
close-record.md (an epic-only materialization is resolver scratch), and
consumption is derived, not marked — an ephemeral entry is consumed
exactly when the concept store at the fetched trunk carries its
provenance in a structured position, so a PR closed unmerged leaves it
rediscoverable and an unconsumed entry is never auto-deleted.

Per record #176: the merge precondition for an entry absent from the
trunk is the two-test form — range-head reachability, else merged-PR
resolution (squash-safe for a local close that stamped the pre-merge
branch tip); an unresolvable range is the named hard error
range-unresolvable. The consumed-entry removal is re-aimed, not skipped:
the committed git rm targets the epic's per-user scratch directory, and
no .nexus/tmp/ path is ever staged. The checkpoint digest names each
entry's source and which deletions land with the merge. Ephemeral
entries never enter drain-SLO accounting.

Refs #173

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…174)

New --recover <epic-issue> mode rebuilds a named entry from durable
GitHub state: the epic re-derives through the resolver, and the
rationale, record reference + full approved-body hash, conformance
verdict, and full-SHA landed range come from the epic issue's close
comment — the durable close record in every mode, local and --pr alike
(record #176 rewrote this story's third AC: the no-GitHub-surface
premise for a local close is false once the close comment carries the
machine block). Where a PR exists, its published analyze review supplies
the conformance verdict.

Recovery is explicit and per-entry, never a discovery scan of closed
epic issues (invariant 14). The genuinely unrecoverable cases are named
per-entry hard blocks — no-close-comment and range-unresolvable — never
"not yet closed", never a drain with fabricated or empty rationale.

Refs #174

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…facts plus committed scratch (#175)

The migration's unit is now the epic, with source-relative and
destination-relative paths derived separately. For an ephemeral
.nexus/tmp/epic-<n> source (the tmp-first local close, #172) the hub
entry is the union of the ephemeral artifacts and the epic's committed
per-user scratch at .nexus/queue/epic-<n>/ — one durable entry, verified
byte-for-byte (the walk hashes filesystem content directly, so the
gitignored source changes nothing) — and both local copies are removed
after verification, so no tmp copy survives for a later /nxs.distill in
the member checkout to rediscover as a second drainable entry.

This also fixes the tracked-file-check defect the record names: the
helper previously reused the destination-derived relative path for the
code-repo removal, so an ephemeral source with same-named committed
scratch would try to commit a removal of files it never deleted —
failing after the irreversible hub commit had landed.

Old committed-entry sources and single-repo/hub mode are unchanged.
Specs updated: /nxs.close Phase 7.5 and the nxs-close-migration skill.

Refs #175

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pre-existing on main: parity.spec.ts failed because the committed pin
recorded 4422f3e9f4c1… while a fresh build hashes 13dec1e4708f….
Regenerated via the named remedy (pnpm nexus:vendor-tools; pin updated
in place, no artifact copied). Unrelated to epic #170, fixed so the
branch's full suite runs green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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