Skip to content

autoloop/20260425T063445Z/w4/4 4.d model pricing capability registry fixtures - #35

Closed
XelHaku wants to merge 27 commits into
mainfrom
autoloop/20260425T063445Z/w4/4-4.d-model-pricing-capability-registry-fixtures
Closed

autoloop/20260425T063445Z/w4/4 4.d model pricing capability registry fixtures#35
XelHaku wants to merge 27 commits into
mainfrom
autoloop/20260425T063445Z/w4/4-4.d-model-pricing-capability-registry-fixtures

Conversation

@XelHaku

@XelHaku XelHaku commented Apr 25, 2026

Copy link
Copy Markdown
Collaborator
  • test(autoloop): cover health flush failure path
  • feat(autoloop): selection honors row health
  • test(autoloop): cover penalty population and selection-reason annotation
  • feat(autoloop): report repair pass salvages noisy worker output
  • feat(planner): consume row health and preserve across regen
  • test(autoloop): end-to-end reactive lifecycle
  • fix(goncho): guard streaming chat persistence
  • fix(goncho): report honcho queue status
  • fix(autoloop): commit run health after promotion
  • docs(progress): refresh completed Goncho queue slices
  • Add Goncho file import ingestion
  • autoloop: record run health
  • docs(progress): refresh Goncho file import status
  • provider resilience status coverage
  • feat: add bedrock converse payload mapping
  • feat(hermes): add provider context resolver
  • feat(skills): add preprocessing slash commands
  • feat(cli): add pty bridge adapter
  • feat: add native chat completions api server
  • Add context engine status contract
  • Add tool parity manifest harness
  • autoloop: record run health
  • fix(autoloop): integrate phase five worker results
  • docs(specs): planner self-healing design
  • docs(plans): planner self-healing implementation plan
  • fix(autoloop): gate health on post-promotion suite
  • feat(hermes): add model metadata registry fixtures

XelHaku and others added 27 commits April 24, 2026 21:51
Adds TestRunOnce_HealthUpdateFailedEventOnFlushError to verify that a
failed run-end Flush both emits the health_update_failed ledger event
and propagates the error back to the caller. The failure is induced
by chmod'ing the progress.json parent directory to read-only inside
the runner callback, so atomicWrite fails after the initial Load.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds TryRepairReport infrastructure that reconstructs a FinalReport from
secondary evidence (git commit + non-empty diff + PASS token + acceptance
match) when ParseFinalReport fails on a worker's stdout. Also adds the
RepairContext / RepairNote types and a writeRepairArtifact helper for
forensic logging.

Repair is conservative: it never accepts work without (1) a new commit on
the worker branch vs base, (2) a non-empty diff, (3) a PASS token in
stdout, and (4) every acceptance line present in stdout (or, if no
acceptance set, PASS evidence alone is sufficient). Synthesized
Acceptance strings satisfy the existing acceptanceEvidence() contract
(RED with exit 1, GREEN with exit 0) so downstream gates see a valid
shape.

Scope adjustment vs the plan: the plan's Step 6.5 calls for wiring
TryRepairReport into the production promotion flow as a fallback for
ParseFinalReport. That call site does not exist in the current Go
autoloop -- ParseFinalReport is only referenced from report.go and
report_test.go. The promotion path in run.go promotes any worker that
produces a commit without parsing the report; the report_validation_failed
ledger events seen in production come from the legacy shell orchestrator,
not the Go autoloop. So this commit ships the repair infrastructure with
full unit-test coverage but does not touch run.go or promote.go and does
not emit a report_repaired ledger event. The infrastructure is ready for
whoever wires ParseFinalReport into production in a future task.

Tests: 6 TryRepairReport scenarios (no commit, no PASS, missing
acceptance line, empty acceptance accepts on PASS, all acceptance lines
present accepts, empty diff fails) + 1 writeRepairArtifact JSON shape
test. Existing strict ParseFinalReport tests untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brainstormed design for Phase C autoloop-planner feedback loop.

Five-commit layered design that closes the loop in the autoloop→planner
direction (Phase B closed it the other way). Six layers total (L6 folds
into L1's commit):

- L1: planner ledger (.codex/architecture-planner/state/runs.jsonl) with
  per-run records: trigger, before/after stats, rows changed, retry attempts
- L2: event-driven trigger via .codex/architecture-planner/triggers.jsonl;
  autoloop emits on quarantine_added / quarantine_stale_cleared; systemd
  path unit fires planner within seconds (rate-limited to 1/60s); cursor
  tracks consumption
- L3: retry-with-feedback when validateHealthPreservation rejects a regen;
  re-prompt LLM with "you dropped row X" up to N times in same run
- L4: self-evaluation correlates planner ledger with autoloop ledger; per-
  row outcomes (unstuck / still_failing / no_attempts_yet) feed next prompt
- L5: PlannerVerdict typed field on Item (planner owns; autoloop preserves
  structurally via Phase B round-trip); sticky NeedsHuman after N reshapes;
  autoloop selection skips NeedsHuman rows; status surface lists them with
  suggested actions
- L6: keyword arguments for topical focus runs (`go run ./cmd/architecture-
  planner-loop run honcho memory`); mechanical context narrowing + LLM
  topical clause

Symmetric ownership rule: autoloop owns Health (Phase B); planner owns
PlannerVerdict (Phase C). Both blocks structurally preserved via Phase B's
typed-struct round-trip.

Out of Phase C scope (deferred): external notifications, adaptive cadence,
preview-via-dry-run, auto-unset of NeedsHuman.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
13-task TDD plan for the spec at
docs/superpowers/specs/2026-04-24-planner-self-healing-design.md.

Tasks (each ends in one commit):
1.  Add PlannerVerdict schema in internal/progress (typed field on Item)
2.  Symmetric preservation regression test (both blocks survive both writers)
3.  Planner ledger types + AppendLedgerEvent / LoadLedger / LoadLedgerWindow
4.  Wire planner ledger into RunOnce (computeStats, diffRows, status)
5.  Topical focus mode: matchKeywords + FilterContextByKeywords +
    cmd positional args + topical prompt clause
6.  Autoloop side: classifyForTrigger + FlushWithTriggers + emit to
    triggers.jsonl from run loop
7.  Planner side: AppendTriggerEvent + cursor + RunOnce wires reads +
    trigger context section in prompt
8.  systemd path unit alongside timer for event-driven cadence
9.  Retry-with-feedback on validation rejection (RetryFeedback +
    extractDroppedRows + RunOnce loop)
10. Self-evaluation: Evaluate correlates planner ledger ↔ autoloop ledger;
    PreviousReshapes section + SELF-EVALUATION SOFT clause
11. StampVerdicts post-processing pass (deterministic; ReshapeCount
    monotonic; sticky NeedsHuman after threshold)
12. Autoloop selection skips NeedsHuman; status surface lists rows with
    suggested actions per failure category
13. End-to-end lifecycle test (7 simulated runs across all 6 layers)

Self-review notes:
- Tasks 4, 9, 12, 13 have deliberate t.Skip stubs because the existing
  planner test fixtures use a fixture style the implementer must follow.
  Required test names and scenarios are pinned; only the wiring is
  implementer discretion.
- Cross-package import cycle risk flagged in Task 6: autoloop importing
  architectureplanner.TriggerEvent. If circular, plan calls for a new
  shared internal/plannertriggers package.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@XelHaku

XelHaku commented Apr 25, 2026

Copy link
Copy Markdown
Collaborator Author

Closed as superseded by rescue PR #42. Useful work was rescued into main; remaining differences are patch-id drift or unrelated branch-base noise.

@XelHaku XelHaku closed this Apr 25, 2026
@XelHaku
XelHaku deleted the autoloop/20260425T063445Z/w4/4-4.d-model-pricing-capability-registry-fixtures branch April 25, 2026 08: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