From 1f9d30fadc025b5d528e5886d0d816dbae509509 Mon Sep 17 00:00:00 2001 From: Yeachan-Heo Date: Sun, 26 Apr 2026 07:30:29 +0000 Subject: [PATCH] roadmap: #277 filed --- ROADMAP.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ROADMAP.md b/ROADMAP.md index 05c3f61..2dd5156 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -17113,3 +17113,15 @@ Discovery-pattern continuation: completes the help-contract-drift cluster's thre Required fix shape: (a) extend the `Flags:` block at `print_help_to:9418` to advertise both casings (`--allowedTools, --allowed-tools TOOLS`) on a single line, matching the OR-pattern in `parse_args:979`; (b) document `=`-form support inline (`--allowedTools=TOOLS, --allowed-tools=TOOLS` accepted) — the existing prose offers no signal that `=`-form parses; (c) document the repetition composition rule explicitly: `repeatable: each occurrence set-unions into the allow-list; pass once per logical group or comma-separate within one occurrence` — eliminating the ambiguity between replace/append/union semantics; (d) add an `Examples:` line showing kebab-case + repetition: `claw --allowed-tools read --allowed-tools glob "summarize Cargo.toml"`; (e) add a help-vs-dispatch alias-coverage regression test that asserts every flag-name-string-literal in `parse_args` (including OR-patterns and `starts_with` prefix arms) appears at least once in the captured `print_help_to` output — mechanically forces help-vs-dispatch alias sync for future flags; (f) extend the test to cover `=`-form variants by asserting that any flag accepting `--foo VAL` form also has its `--foo=VAL` form documented when both arms exist; (g) audit other listed flags for the same incomplete-shape-coverage sub-shape: `--output-format` (does the parser accept `--output-format=json`? — yes per `:889`, but help shows only the space-form), `--permission-mode` (same — `:893` accepts `=`-form, help shows only space-form), `--model` (verify), `--base-commit` after #270 fix lands. Acceptance: `claw --help` discloses every shape variant the parser accepts for every listed flag; the regression test fails when a new alias/equals-form arm is added without a help update; #263 + #270 + #276 together close the help-contract-drift cluster on all three structurally distinct help-vs-dispatch divergence shapes. **Status:** Open. No source code changed. Filed 2026-04-26 16:14 KST. Branch: feat/jobdori-168c-emission-routing. HEAD: `0240cad` before filing (post-rebase fast-forward onto gaebal-gajae's #275 `claw doctor` provenance fragmentation pinpoint). Cluster delta: help-contract-drift cluster 2→3 (#263 stale-mode-matrix + #270 whole-flag-omitted + #276 listed-flag-incomplete-shape-coverage = three-sub-axis audit triangle complete on the help surface); complementary-pinpoint-pair-bundle discovery-pattern extended to 5 pair-bundles + 2 three-tuples (turn-budget #262+#264+#272 + help-contract-drift #263+#270+#276). Smaller-scope by design (matches #253-#275 context-budget discipline). Sister: #263 (stale-mode-matrix sub-axis), #270 (whole-flag-omitted sub-axis); #276 occupies the third structurally distinct sub-axis (listed-flag-incomplete-shape-coverage). Distinct from #258 (silent-coercion of empty value at parse boundary on the same flag; orthogonal layer — runtime acceptance vs help advertisement). Distinct from turn-budget cluster three-tuple (#262+#264+#272: parse/primitive/spec layers; #263+#270+#276 are three sub-axes within a single layer — the help surface). Concurrent-dogfood-rebase parity will be confirmed local==origin==fork at HEAD `0240cad+#276` after push. + +## Pinpoint #277 — Dogfood reminder delivery can fail with bare `Unknown Channel` because the nudge/report path does not pre-resolve and validate channel targets against the live provider directory before attempting send + +Dogfooded 2026-04-26 16:30 KST from the live `#clawcode-building-in-public` loop after #276. The dogfood reminder/status loop emitted `Cron job "clawcode-dogfood-cycle-reminder" failed: Error: Unknown Channel` in the same channel that was otherwise actively receiving git hooks, Jobdori reports, and Clawhip nudges. The visible error contains no target channel id/name, no provider account, no guild id, no route key, no whether the channel was deleted vs not in cache vs wrong provider vs permission denied, and no retry/fallback target. + +Concrete failure mode: a recurring dogfood nudge can die before delivery because the configured target cannot be resolved at send time, but the only surfaced signal is a bare provider error. Operators cannot tell whether the cron used a stale channel id, a name instead of id, the wrong Discord account/guild, a missing allowlist route, or a transient directory/cache miss. This is distinct from #269: #269 covers payload-size truncation and post-send delivery receipts; #277 covers pre-send target resolution and channel identity validation before any payload is sent. + +Gap. There is no typed `channel_resolution` preflight in the dogfood delivery path. A robust cycle should resolve `{provider, guild_id, channel_id, channel_name, route_key}` before rendering/sending the report, cache the resolved identity with a freshness timestamp, and fail closed with a typed diagnostic if the target is unknown. The current surface lets a low-level `Unknown Channel` bubble up with no context, which makes the next action ambiguous and risks repeated cron failures against the same bad target. + +Required fix shape: (a) add a channel-target preflight before dogfood reminder send that resolves the configured target to a canonical channel id/guild/provider tuple; (b) emit a typed `delivery_target_resolution_failed { provider, configured_target, guild_id, reason, directory_freshness_ms, fallback_targets }` event instead of bare `Unknown Channel`; (c) distinguish `not_found`, `permission_denied`, `wrong_provider`, `wrong_guild`, `cache_stale`, and `deleted_or_archived`; (d) include the resolved target tuple in successful delivery receipts (#269 sibling) so later reports can prove which channel was used; (e) add regression coverage where a stale channel id fails at preflight with a typed diagnostic and does not attempt message send. Acceptance: dogfood cron never surfaces a naked `Unknown Channel`; it reports the exact configured target, resolution failure class, and safe next action. + +**Status:** Open. No source code changed. Filed 2026-04-26 16:32 KST. Branch: feat/jobdori-168c-emission-routing. HEAD: `cad7bb1` before filing. Cluster delta: dogfood-delivery-target-resolution +1; sibling to #269 (payload/delivery receipt) and #246 (cron timeout ambiguity), distinct pre-send channel identity layer. Concrete delta this cycle: ROADMAP-only pinpoint appended from live `Unknown Channel` cron failure evidence.