Skip to content

The real producer: self-extend cycles land in the gate store - #380

Merged
IanFrelinger merged 1 commit into
masterfrom
claude/producer-wiring
Aug 23, 2026
Merged

The real producer: self-extend cycles land in the gate store#380
IanFrelinger merged 1 commit into
masterfrom
claude/producer-wiring

Conversation

@IanFrelinger

Copy link
Copy Markdown
Owner

The working version's last build item. A self-extend cycle inside an ashlar project records its outcome through the admission gate — the same store ashlar gates reads. The overnight loop is real end to end: runner works, gate holds, a person seats the stone in the morning.

  • No-op outside ashlar projects (host registrations untouched)
  • The proposal claims only what the cycle evidences (the sandbox course from the policy engine's denial count); a policy demanding more rejects fail-closed with "did not run"
  • Unreadable policy = loud GATE ERROR, never a skipped gate; sealed records the rejected attempt
  • Honest scope in the class doc: v0 records after mediated writes; propose→hold→apply ordering is the M1 item (SPEC-004)

8 bridge tests · Tests.BackgroundAgents 506/506 both TFMs · cert gate 178 · kernel build 0/0

🤖 Generated with Claude Code

…ate store

The last build item of the working version. When a self-extend cycle runs inside
an ashlar project (ashlar.policy.yaml at the repo root), its outcome is recorded
as an ExtensionProposal through the admission gate — the same store `ashlar gates`
reads. The overnight loop is now real end to end: the runner works, the gate
holds, a person seats the stone in the morning.

Design points:

  - No-op outside ashlar projects: five host registrations untouched; the runner
    behaves exactly as before anywhere without a policy file.
  - The proposal claims ONLY what the cycle evidences — today the sandbox course,
    from the policy engine's own denial count. A policy requiring gates the cycle
    did not run REJECTS with "did not run": the runtime may not claim courses it
    did not run, and the operator's policy decides whether the evidence suffices.
  - An unreadable policy is a loud GATE ERROR in the run summary, never a skipped
    gate. Sealed mode records the rejected attempt: it refuses, it does not forget.
  - SelfExtendRunResult grows an additive GateOutcome field (default null) so
    every existing construction site keeps compiling.
  - Honest scope, in the class doc: v0 records AFTER the cycle's mediated writes —
    a ledger plus the human queue. Moving admission BEFORE the write lands
    (propose -> hold -> apply) is the M1 enforcement ordering, SPEC-004.

8 bridge tests. Verified: kernel build 0/0, Tests.BackgroundAgents 506/506 both
TFMs, cert gate 178.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@IanFrelinger
IanFrelinger merged commit 04073a1 into master Aug 23, 2026
6 checks passed
@IanFrelinger
IanFrelinger deleted the claude/producer-wiring branch August 23, 2026 20:22
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.

2 participants