Attempt 6

Back to durable goal · Attempt history

Why Attempt 5 was rejected

Attempt 5 passed every repository gate, but the required second independent review found release-blocking lifecycle and compatibility defects: worker termination could orphan detached ctx.exec() children, promotion was outside shutdown admission, unavailable candidates could cross the persistence/swap boundary, and the new always-partial output contract made retained package versions lie about completeness. The same review found narrower package and imported-skill correctness gaps. The candidate is rejected despite green tests.

Strategy reset

  1. Preserve backward compatibility by making partial output an explicit ctx.exec() option. Existing package versions retain rejection on overflow; new versions opt in and receive an explicit output-limit reason alongside truncated.
  2. Close worker disposal admission before spawning, clean child process groups both before and after admitted handlers settle, and replace immediate parent termination with graceful disposal followed by the existing bounded forced fallback.
  3. Track complete promotion operations in the runtime admission barrier and stage candidate availability across persistence so a failed candidate cannot replace or persist over the working generation.
  4. Publish sole new immutable starter versions after correcting unexpected signal/error handling, exact-boundary flags, omitted-record flags, Git read-only behavior, robust history framing, and containment checks. Delete every rejected untracked hash candidate rather than retaining it as history.
  5. Pin LF checkout semantics for hash-addressed source and test retained-version compatibility, exact output boundaries, outer timeouts, settlement-after- group-confirmed settlement, late-spawn disposal, promotion shutdown, and candidate failure.
  6. Finish the PR 24 merge by keeping generic goal invariants generic and making the manual decision-review eval isolate subject and judge state.

Boundaries

  • Do not change any previously tracked hash-named source bytes.
  • Do not add PR 24 paths outside projects/agents.
  • Do not run the credentialed manual Promptfoo target.
  • Linux is the supported supervised-execution platform for this repository target. The guarantee covers the direct child and live descendants that stay in its original process group; deliberate new sessions are excluded.
  • Keep one writer per runtime source group and one writer for all active content-addressed package candidates/manifests.

Acceptance packet

  • No live member of a supervised original process group survives inner timeout, outer invocation timeout, disposal, shutdown, or successful truncation settlement.
  • Shutdown waits for every admitted mutation, including promotion, and never publishes a candidate observed unavailable during persistence.
  • Historical package versions reject overflow under their original contract; only explicit opt-in versions return a marked partial prefix.
  • Every result field distinguishes complete, locally clipped, host-limited, failed, and unexpectedly signaled outcomes.
  • Exact limits are complete until one additional logical record is observed.
  • All content hashes, LF attributes, skill validation, offline eval configs, focused regressions, integrated tests/build, and Buildifier pass.
  • A fresh review of the final Attempt 6 diff reports no release-blocking issue.

Work performed

  • Restored the historical ctx.exec() contract: overflow and invalid UTF-8 reject by default, while new packages opt into a bounded marked prefix.
  • Moved process launch and output accounting from the disposable worker into a parent-owned Linux supervisor. Launch admission is atomic in the parent’s event loop, direct exit terminates the original process group before inherited pipes can hold settlement open, and timeout/disposal results wait for group non-liveness.
  • Narrowed the documented contract honestly: a package that deliberately calls setsid() or otherwise creates a new session is outside the trusted original- group guarantee; non-Linux execution fails closed.
  • Made shutdown actively dispose both active and draining retired generations, and staged candidate persistence so an unavailable candidate rolls back without displacing the working generation.
  • Published one current source candidate per starter package. The hashes are 04b06a7d6277c4a6e8513d970f549ad980a780b68755f28d7b402fe8be26c279 for git_worktree and 94131e058f82328f091613dc68d2717484378066a9c64940d99522c14b48b4d7 for repo_context; historical source bytes remain unchanged.
  • Made ripgrep byte-valued JSON fields explicitly incomplete rather than returning empty text under a false completeness claim.
  • Imported PR 24’s agent skills, added current validation/eval packaging, generalized goal policy, and moved this complete goal directory into the reusable project docs hierarchy.

Verification so far

  • Static syntax, manifest/hash, LF-attribute, local-link, and git diff --check checks pass on the corrected working tree.
  • Focused process, unavailable-shutdown, and retired-generation tests pass 3/3 in Bazel invocation 9b1b2d34-8490-474a-b12c-e2052bf2d90b.
  • Process, package-byte-field, and retired-generation tests pass 3/3 in Bazel invocation 7c680be8-e2a6-4b5b-9b45-4a0390f39a5a.
  • The earlier 14/14 integrated packet, complete affected build, validation aspects, and Buildifier passed before the supervisor and final package-byte corrections. Those results are preserved as progress evidence but are invalidated for final acceptance and must be rerun.

Independent-review result

The first final review rejected the candidate despite green tests. It found that outer timeouts settled before cleanup, a signal was mislabeled as reaping, the shared PID publication window made disposal unbounded, inherited pipes could delay successful commands, retired generations were not actively disposed by shutdown, ripgrep byte fields could masquerade as text, and the durable records were stale. The strategy changed from worker-side process ownership to parent-owned supervision; every other finding has a direct source or regression correction. Fresh review of that new strategy is pending.

Acceptance status

  • Criteria 1-8: pass on implementation and existing executable evidence.
  • Criterion 9: unverified after the latest source changes; full exact-candidate validation and delivery remain.
  • Criterion 10: focused regressions pass; fresh adversarial source review is still pending.

Progress, approach, and process audit

Attempt 6 improved compatibility, package completeness, promotion admission, and teardown coverage in absolute terms. The repeated late lifecycle findings showed that PID publication inside a terminable worker was the wrong ownership boundary, not merely an under-tested implementation. Moving execution to the parent removes that race and makes cleanup ordering directly observable. The highest-leverage remaining work is review and full validation of this new boundary, not more feature expansion. The attempt remains open until that review accepts one frozen candidate and delivery verifies the same bytes.

Decision

Refine within Attempt 6: the review changed an implementation strategy without changing the recorded goal or acceptance contract. Do not freeze or deliver until fresh review and the complete invalidated regression set pass.