The stale-CA warning names a remedy that cannot work, and AGENTS.md omits openclaw_capture (#831) - #833
Conversation
…mits openclaw_capture (#831) Two independently reachable findings from the #815 triage, both pre-existing on master and outside that PR's diff. `aigw.proxy_mode_stale_ca` fires when `proxy_mode` is off but an interception CA is still on disk, and told the operator to "run `hyp attach claude` to move it back to base-URL mode". Attach derives its mode from that same CA (LLP 0232 #proxy-attach-preflight), so in exactly this state a re-attach picks proxy mode again: the named remedy is a no-op. The warning now names the two that land, removing the CA with `hyp detach claude --purge` and re-attaching, or turning `proxy_mode` back on. The existing blind-tunnel test pins the reason string so the wrong remedy cannot come back. AGENTS.md's "Written acceptance procedures" list has named only `codex_desktop_capture` since #570 added `openclaw_capture` to docs/ACCEPTANCE.md, so the second written procedure was invisible to anyone reading the repo guidance rather than the doc. Listed it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review round 1 - cleanReviewed the three-file diff at The substantive claim holds: the old remedy really could not workVerified from the code rather than from the PR body.
So in the exact state the warning fires in (config The replacement remedies both land
Neither named remedy is the same defect in new clothes. The reason-string pin is genuinely load-bearingVerified by perturbation, not by reading. I reverted Unperturbed the same file is 18/18. The worktree was restored to
|
Conflict was AGENTS.md's "Written acceptance procedures" list. #818 (LLP 0262, the OTEL telemetry attach change set) already added an `openclaw_capture` bullet there, plus a new `claude_otel_shape_check` bullet. This branch's Finding 1 was the same addition, so master's already covers it. Took master's two bullets and dropped this branch's duplicate rather than listing `openclaw_capture` twice. `hypaware-core/plugins-workspace/ai-gateway/src/source.js` merged textually but conflicted in meaning. The branch's Finding 5 fix argued the stale-CA warning must not say "re-attach", because attach read its mode off the CA and so re-selected proxy mode while the file was on disk. After #818 that reason is gone: `hyp attach claude` is OTEL-only and explicitly never re-attaches by proxy (LLP 0258 #version-floor, LLP 0262 #migration), and LLP 0232's proxy-attach preflight is superseded for this client. The conclusion still holds for a different reason, so the remedy text is kept and the reasoning is restated on the ground that survives: attach leaves the CA on disk on purpose, offering the trust back rather than taking it, so a re-attach cannot clear this state. `hyp detach claude --purge` is the remedy merged master's own migration notice prints. The `@ref` moves from LLP 0232#proxy-attach-preflight to LLP 0262#migration in both the source and the test that pins the message, since that is the decision now constraining the behavior.
…#853) `test/core/repo-scratch-hygiene.test.js` has been failing on `master` since it merged: `x/npm-test.log` and `x/typecheck.log` are tracked, and the test's first half asserts no `.log` is. Both came in on `adb448ab` (#785) via the `git add -A` sweep that #786 wrote this test to catch; the files predate the test, so it was red on arrival. Every branch cut since inherits it, currently blocking #833, #849, #850 and #851 for a reason none of them caused. The transcripts are deleted rather than the test relaxed, which is what its message asks for. `.gitignore` needs nothing: `*.log` is already committed and the rule test already passes, since an ignore rule cannot reach a path that is already tracked. That asymmetry is the whole reason the file carries two tests. Scope is exactly the two `.log` paths. The other eight files under `x/` are untouched: the hygiene test forbids tracked transcripts and nothing else, and sweeping up scratch it does not name would be a judgement this fix has no authority to make. Fixes #852 Co-authored-by: test <test@test.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Neutral review: approve, no actionable findingsReviewed the PR's own delta against the merge base ( Gates re-run at The core claim holdsI verified the defect and the fix independently rather than taking the PR body's word for it:
The new string is also consistent with what the claude adapter already prints to the operator at Non-blocking observations, deliberately not changed1. Info. 2. Low, test robustness. VerdictApprove as-is. Nothing pushed to Two notes on the PR description, neither a code issue and neither worth an edit to the body: it says the annotation carries a |
Works the two findings in #831 that are reachable from
mastertoday, and records why the rest are not. Gates:npm test4257 pass / 0 fail / 1 skipped,npm run typecheckclean, both at this branch's head.Closed here
Finding 5, master's stale-CA warning names a remedy that cannot work.
hypaware-core/plugins-workspace/ai-gateway/src/source.jswarnsaigw.proxy_mode_stale_cawhenproxy_modeis off but an interception CA is still on disk, and the reason read "runhyp attach claudeto move it back to base-URL mode, orhyp detach claude". Verified onmaster: the Claude adapter readsreadLocalCaInfoand setsmode: MODE_PROXYwhenever a CA exists (hypaware-core/plugins-workspace/claude/src/index.js, the@ref LLP 0232#proxy-attach-preflightpreflight), and LLP 0232 settles that explicitly ("attach uses proxy mode when a CA exists and base-URL mode otherwise"). In this exact state the CA is present, so a re-attach re-selects proxy mode and the operator is where they started. Plainhyp detach claudedoes not help either:purgeProxyTrustResidueis gated on--purge(src/core/commands/clients.js:149, LLP 0238 #ca-survives-detach), so only--purgecallsdeleteLocalCa.The warning now names the two remedies that land:
hyp detach claude --purgefollowed by a re-attach, or turningproxy_modeback on. The surrounding comment said the same wrong thing and was corrected with it, and carries a[constrained-by]ref to LLP 0232 #proxy-attach-preflight so the next reader sees why a re-attach cannot be the answer.The existing blind-tunnel test in
test/plugins/ai-gateway-proxy-mode.test.jsasserted only that the event fired. It now captures the log attributes and pins the reason:hyp detach claude --purgemust appear, and the old re-attach sentence must not. Perturbing the string back goes red.Finding 1,
openclaw_capturemissing from the written-procedures list.docs/ACCEPTANCE.md:173has carried## openclaw_capturesince #570, but AGENTS.md's "Written acceptance procedures" list named onlycodex_desktop_capture. Added, in the same shape as the existing bullet.Merge note: #815 appends a
claude_proxy_capturebullet at the same point in that list, so a trial merge conflicts in AGENTS.md. Resolution is keep both bullets in either order; nothing else in the file is touched by either side.Not closed, and why
Finding 2 is factually wrong as filed; nothing to fix. Both cited anchors resolve on
master.llp/0229-status-derives-attach-state-by-the-desired-gate.decision.md:54defines<a id="status-derives-by-the-same-gate"></a>, andllp/0114-gateway-default-listen-port-fixed.decision.md:103defines<a id="interception-accepted"></a>(LLP 0114's ownExtended-by:line cites it by that name too). The finding reasoned from heading anchors alone. Inline<a id>anchors are the corpus's third anchor form and are explicitly indexed byref-check(its Build the LLP index step measures 266 references resolving through that form), so neither citation is broken. No edit tollp/0231was needed, which is just as well: it is Accepted.Findings 3 and 4 are unreachable from
master. Both are steps of theclaude_proxy_captureprocedure, which exists only indocs/ACCEPTANCE.mdonorigin/integration/proxy-mode-capture(PR #815, open).grep -r claude_proxy_captureovermasterreturns nothing, so there is no step 1 and no step 7 here to edit. Work them after #815 merges.Finding 6 is a process decision, not a code change. Whether #791 is still wanted once LLP 0245 lands is a call for a human, and LLP 0245 is also #815-only.
Fixes #831