feat(reconcile): reconcile OperationsCenter .console (prune + scrub + enforce)#238
Merged
Conversation
OC's pytest --collect-only takes 4–8s; the 5s timeout caused intermittent TimeoutExpired → status=unknown, which ObservationCoverage- Deriver misread as a persistent signal gap and kept emitting "Restore repeated missing test_signal coverage" proposals. Blocked task a0409885 failed 3× (timeout/session-limit/stage failure) before root cause was found by watchdog direct investigation. Affected repo: OperationsCenter (self_repo_key) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…lback Bare "pytest" is not on PATH in subprocesses (venv PATH is shell-only). This caused OSError → status=unknown on every fallback discovery call, producing persistent test_signal=unknown observations for OperationsCenter. Now prefers .venv/bin/pytest relative to repo_root; falls back to sys.executable -m pytest when absent. Adds two tests covering both paths. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nal state
fail_task() unconditionally overwrote any external state change to Blocked,
creating a dead-remediation loop: watchdog cancels a task, improve executor
finishes (or is killed), fail_task() writes Blocked, board-unblock Rule 4
(SELF_MODIFY_REQUEUE) moves it back to Ready-for-AI, improve worker picks it
up again — indefinitely.
Fix: fetch current state before writing Blocked; if the task is already in a
terminal state (Cancelled or Done), log and return without overwriting. Falls
back to the original transition if the fetch fails, preserving prior behavior
for transient Plane API errors.
Root cause observed on task a0409885 ("Restore repeated missing test_signal
coverage"): 7+ failed attempts after root cause was fixed in 930c79a; task
kept bouncing Cancelled → Blocked → R4AI due to this missing guard.
Added 6 tests: skip on Cancelled/Done (4 parameterized variants), fallback on
fetch error, proceed when state is non-terminal.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Run the .console/ reconciliation pass (PlatformManifest console-reconciliation spec). Authored an untracked .console/reconcile.yaml worksheet classifying every backlog item (done/partial/incomplete + owner); cross-repo work routes to CxRP, SwitchBoard, Warehouse, PlatformManifest, Custodian, and a private downstream repo. Filled doc homes so 'cl reconcile check' is GREEN with no DOC GAPs. Scrubbed remaining scrub-target names from tracked docs/ (genericized to a private downstream repo; numbered detector IDs left intact). Ran 'cl reconcile prune --apply': completed log+backlog history moved to the private archive, source trimmed to active sections + recent-N + an archive pointer (log 3144->132, backlog 622->368 lines); CHANGELOG records what shipped. A second --apply is a no-op. Flipped audit.reconcile_enforce: true in .custodian/config.yaml. Tracked .console/ + docs/ are scrub-target clean (R2 / boundary I2). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
7adf0d5 to
cc557c8
Compare
ProtocolWarden
added a commit
that referenced
this pull request
Jun 4, 2026
…port (#242) Two pre-existing CI failures on main: - Custodian doctor (--strict): the audit key `reconcile_enforce` (added in #238) was never registered in `plugin_audit_keys`, so doctor flagged it as an "unknown audit key (typo?)" and --strict turned the warning into a non-zero exit. It is a legitimate OC plugin config flag — add it to plugin_audit_keys (matching the existing oc1_exempt/oc7_exempt/known_values registrations). - Lint (ruff): `unittest.mock.call` was imported but unused in tests/test_check_signal_collector.py (F401). Removed via `ruff check --fix`; `call` is not referenced elsewhere in the file. Verified locally with the repo's .venv: ruff check . -> All checks passed! custodian-doctor --strict --repo . -> OK pytest tests/test_check_signal_collector.py -> 16 passed Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Paused-loop-window reconciliation of OperationsCenter's
.console: worksheet (52 items: 33 done/19 incomplete, 9 cross-repo routed), scrubbed 32 private-name leaks,cl reconcile prune(completed history → private side; log 3144→147, backlog 622→368),reconcile_enforce: true. Gate GREEN, leak-clean. Loop paused during the operation; restarted after.🤖 Generated with Claude Code