Skip to content

Spec S-001: stale proposals - #71

Merged
romamo merged 1 commit into
mainfrom
spec/001-stale-proposals
Oct 19, 2026
Merged

romamo merged 1 commit into
mainfrom
spec/001-stale-proposals

Conversation

@shipmill-romamo

Copy link
Copy Markdown
Contributor

Spec for #26 (its last open part, stale, back for a decision after 0.6.0 shipped stable).

docs/specs/001-stale-proposals.md, status: approved. Merging this PR approves the spec; no build starts before then.

What the spec settles, for review:

  • Rule: a proposed decision is stale when a host its basis.observedAt names now has a later observedAt in the basis folder. The observation timestamp only: the basis records no repository commit, so a commit rule needs the basis to grow first (out of scope)
  • Derived, not stored: staleness is worked out on read. No schema enum change, no write on read, no sweep command, and a record still loads in an older cloudfall. This departs from D-1's pattern of a stored status, on purpose: a stored stale would need a trigger that writes records
  • Surface: stale and staleHosts on proposed decisions in decisions list, decisions show and why; a --stale filter on decisions list and why
  • Approve doesn't refuse: with timer-driven observations (the M10 pattern) every proposal goes stale within minutes, so a refusal would block them all. The attestation prompt names the stale hosts instead

specs.py check passes.

🤖 Generated with Claude Code

S-001: a proposed decision is stale when a host its basis names has a
newer observation; worked out on read, never stored, shown in decisions
list, show and why, filtered with --stale, and named in the approve
prompt without refusing it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shipmill-romamo

Copy link
Copy Markdown
Contributor Author

@romamo Decision needed: approve spec S-001 (stale proposals, #26)?

Merging this PR is the approval, so triage won't merge it under "merge when green". The choices it makes, for you to confirm or change:

  1. Merge as is (recommended): staleness by observation time only, derived on read (no schema change), reported in decisions list / show / why, --stale filter, approve prompt names stale hosts but doesn't refuse
  2. Same, but decisions approve refuses a stale proposal with PRECONDITION until it's proposed again. Safer, but with timer-driven observations every proposal goes stale within minutes
  3. Store stale as a status value (D-1's pattern) with a sweep command that writes it. Filterable with --status stale, but a new enum value an older cloudfall refuses to load

Merge for 1, or reply with a number or your own answer; shipmill takes this up on the tick after your reply.

@shipmill-romamo shipmill-romamo Bot added the needs-decision A shipmill session asked a question here; waits for a reply label Oct 10, 2026
@shipmill-romamo

Copy link
Copy Markdown
Contributor Author

Decision by @romamo, relayed by Claude Code

1, merge as is. Roman merges this PR himself.

@shipmill-romamo shipmill-romamo Bot removed the needs-decision A shipmill session asked a question here; waits for a reply label Oct 19, 2026
@romamo
romamo merged commit 9cd1c75 into main Oct 19, 2026
1 check passed
@romamo
romamo deleted the spec/001-stale-proposals branch October 19, 2026 17:40
@shipmill-romamo shipmill-romamo Bot added this to the 0.7.0 milestone Oct 19, 2026
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