Skip to content

feat(reconcile): reconcile OperationsCenter .console (prune + scrub + enforce)#238

Merged
ProtocolWarden merged 4 commits into
mainfrom
reconcile/console
Jun 4, 2026
Merged

feat(reconcile): reconcile OperationsCenter .console (prune + scrub + enforce)#238
ProtocolWarden merged 4 commits into
mainfrom
reconcile/console

Conversation

@ProtocolWarden
Copy link
Copy Markdown
Owner

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

ProtocolWarden and others added 4 commits June 4, 2026 11:43
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>
@ProtocolWarden ProtocolWarden merged commit cdf97c2 into main Jun 4, 2026
9 of 13 checks passed
@ProtocolWarden ProtocolWarden deleted the reconcile/console branch June 4, 2026 15:44
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>
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