Skip to content

fix(Custodian): collapse extra-root call-graph walks for sweep timeout - #52

Open
ProtocolWarden wants to merge 1 commit into
mainfrom
oc-watchdog/20260714-1525-callgraph-sweep
Open

fix(Custodian): collapse extra-root call-graph walks for sweep timeout#52
ProtocolWarden wants to merge 1 commit into
mainfrom
oc-watchdog/20260714-1525-callgraph-sweep

Conversation

@ProtocolWarden

Copy link
Copy Markdown
Owner

No description provided.

@ProtocolWarden

Copy link
Copy Markdown
Owner Author

Self-review concerns — auto-fixing (up to 6 attempts; re-queued if still unresolved):

Failed checks: code_quality

@ProtocolWarden

Copy link
Copy Markdown
Owner Author

Needs human attention (reason=fix_pass_no_progress). Left open — not merged (unresolved) and not closed (work preserved).

The automated fix passes exhausted the Self-Heal Ladder (reached L2/2) without changing the branch; a fresh self-review on the same PR head still finds concerns. Further autonomous retries would repeat without progress.

Latest concerns:

Failed checks: code_quality

ProtocolWarden added a commit that referenced this pull request Aug 3, 2026
First `cl reconcile prune --apply` this repo has had. The workflow was
unrunnable here until ContextLifecycle #52 gave the lock an msvcrt backend --
`reconcile_lock` raised on any non-POSIX host, which is why this log kept being
hand-trimmed instead of reconciled.

Six sections moved to the private archive (PrivateManifest
archive/console/Custodian/log-2026-08-03.md): INJ1, DC10 and the four D12
entries -- exactly the work #68 documented. The DOC GAP gate holds the rest
back, correctly: pattern-collision masking, the orphan-scaffold cleanup and the
`--only` gate still have no durable doc, so they stay `partial`.

Ran with `--recent 20` rather than the default 10. At 10, prune also sweeps
unclaimed sections past the tenth purely by age, which would have archived the
undocumented work the gate had just declined to release -- the recency rule
silently outranks the DOC GAP gate, which is worth knowing before running this
with defaults.

The archive pointer is hand-corrected. `cl reconcile prune` writes the archive's
ABSOLUTE local path (prune.py `_pointer_section`), which on this machine put a
home directory and a real name into a public repo, and would be meaningless on
any other host. Replaced with the spec's own `<private-manifest>/...` form
(boundary rule I2 -- the private repo is resolved at runtime, never hardcoded).
Verified safe: `_ensure_pointer` is idempotent on the heading plus the pointer
prefix rather than the path, so a re-run leaves the correction in place. The
generator bug is ContextLifecycle's and is not fixed here.

399 -> 346 lines, 372 with this entry. Verified nothing was lost: every non-blank
line of the pre-prune log is present in either the trimmed log or the archive.
Re-running prune is a no-op and post-prune check is GREEN. Audit 0 findings.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ProtocolWarden added a commit that referenced this pull request Aug 3, 2026
First `cl reconcile prune --apply` this repo has had. It was unrunnable here
until ContextLifecycle #52 gave the lock an msvcrt backend (`reconcile_lock`
raised on any non-POSIX host) -- the mechanical reason this log has been
hand-trimmed for months rather than reconciled.

Six sections went to the private archive: INJ1, DC10 and the four D12 entries,
exactly the work #68 documented. The DOC GAP gate held the rest back, correctly
-- pattern-collision masking, the orphan-scaffold cleanup and the `--only` gate
have no durable doc, so they stay `partial`.

What this actually rescues: by the time it landed, #66/#67/#69 had each
hand-pruned to fit under RC1 and all six sections were ALREADY DELETED from
main. ADR 0001 named that pattern in the abstract ("D12's 'ships OPT-IN -- was
red-walling consumers' shaped C16's default in #69, and entries from that era
are now gone"); this is the concrete instance. The archive is therefore not a
tidier copy of what main holds, it is the only copy outside git history.

Ran with `--recent 20`, not the default 10. At 10 the prune also sweeps
unclaimed sections past the tenth purely by age, so the recency rule silently
outranks the DOC GAP gate and would have archived the undocumented work the gate
had just declined to release.

The pointer is hand-corrected. `cl reconcile prune` writes the archive's
ABSOLUTE local path (`prune.py` `_pointer_section`), which on this machine put a
home directory and a real name into this public repo, and is meaningless on any
other host. Replaced with the spec's `<private-manifest>/...` form, which is what
boundary rule I2 requires anyway. Safe to edit: `_ensure_pointer` is idempotent
on the heading plus pointer prefix rather than the path, verified by re-running
prune. The generator bug is ContextLifecycle's and is not fixed here.

No narrative log entry, deliberately. main sits at 389/400 and a full entry runs
~36 lines, so adding one would have meant pruning history to land a commit about
not pruning history. ADR 0001 argues rationale belongs in commit messages rather
than duplicated into the log; this follows that. The pointer is the log's record.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ProtocolWarden added a commit that referenced this pull request Aug 3, 2026
First `cl reconcile prune --apply` this repo has had. It was unrunnable here
until ContextLifecycle #52 gave the lock an msvcrt backend (`reconcile_lock`
raised on any non-POSIX host) -- the mechanical reason this log has been
hand-trimmed for months rather than reconciled.

Six sections went to the private archive (PrivateManifest #14): INJ1, DC10 and
the four D12 entries, exactly the work #68 documented. The DOC GAP gate held the
rest back, correctly -- pattern-collision masking, the orphan-scaffold cleanup
and the `--only` gate have no durable doc, so they stay `partial`.

What this actually rescues: by the time it landed, #66/#67/#69 had each
hand-pruned to fit under RC1 and all six sections were ALREADY DELETED from
main. ADR 0001 named that pattern in the abstract; this is the concrete
instance. The archive is the only copy outside git history.

Ran with `--recent 20`, not the default 10. At 10 the prune also sweeps
unclaimed sections past the tenth purely by age, so the recency rule silently
outranks the DOC GAP gate and would have archived the undocumented work the gate
had just declined to release.

The pointer is hand-corrected. `cl reconcile prune` writes the archive's ABSOLUTE
local path (`prune.py` `_pointer_section`), which on this machine put a home
directory and a real name into this public repo. Replaced with the spec's
`<private-manifest>/...` form, which boundary rule I2 requires anyway. Safe to
edit: `_ensure_pointer` is idempotent on the heading plus pointer prefix rather
than the path, verified by re-running prune. The generator bug is
ContextLifecycle's and is not fixed here.

No narrative log entry, deliberately. main sits at 389/400 and a full entry runs
~36 lines, so adding one would have meant pruning history to land a commit about
not pruning history. ADR 0001 argues rationale belongs in commit messages rather
than duplicated into the log; this follows that.

Co-Authored-By: Claude Opus 5 <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