Commit Graph

319 Commits

Author SHA1 Message Date
YeonGyu-Kim
83e99696af roadmap: #210 filed — rusty-claude-cli shadows api::max_tokens_for_model with stripped 2-branch fork (opus=32k, else=64k); ignores model_token_limit registry, bypasses plugin maxOutputTokens override, silently sends 64_000 for kimi-k2.5 whose registry cap is 16_384 (4x over) (Jobdori cycle #362 / extends #168c emission-routing audit / sibling-shape cluster grows to nine: #201/#202/#203/#206/#207/#208/#209/#210) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
d119ef9b7a roadmap: #209 filed — pricing_for_model substring-matches haiku/opus/sonnet only; default_sonnet_tier function name carries Opus pricing constants (15.0/75.0 vs real Sonnet 3.0/15.0); every non-Anthropic model silently falls back producing 5-100x wrong cost estimates with no event signal, only a magic-string suffix on one summary line; rusty-claude-cli session JSON and anthropic.rs telemetry emit cost without pricing_source field (Jobdori cycle #361 / cost-parity cluster closer to #204+#207 / models.dev parity gap vs anomalyco/opencode) 2026-04-26 18:02:59 +09:00
Jobdori
dde3710e26 roadmap: #208 filed — silent param/field strip on outbound serialization (4 tuning params for reasoning models, is_error for kimi), self-documenting 'silently strip' comments, no event emission, tests assert removal but not visibility (Jobdori cycle #359 / sibling-chain closer to #207 inbound-drop / completes OpenAI-compat boundary audit) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
495db9764e roadmap: #207 filed — OpenAiUsage discards prompt_tokens_details.cached_tokens and completion_tokens_details.reasoning_tokens, cache_read_input_tokens hardcoded 0 in 4 sites breaking cost parity with Anthropic path (Jobdori cycle #358 / fix-pair with #204 / anomalyco/opencode #24233 sibling) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
9c02f202f4 roadmap: #206 filed — normalize_finish_reason covers 2/5 OpenAI finish reasons, length/content_filter/function_call unmapped (Jobdori cycle #357)
Pinpoint #206: normalize_finish_reason() in openai_compat.rs only maps
stop→end_turn and tool_calls→tool_use. The 'other => other' pass-through
arm silently leaks length, content_filter, function_call to downstream
consumers expecting Anthropic vocabulary (max_tokens, refusal, tool_use).

Sibling of #201/#202/#203/#204 (silent fallbacks at provider boundary).
No structured event for unmapped values; test coverage locks only the
two-case happy path.

Branch: feat/jobdori-168c-emission-routing
HEAD: dba4f28
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
34348de3d9 roadmap: #205 filed — prunable worktree lifecycle audit trail missing, no creation timestamp, pinpoint ID, or doctor visibility (Q *YeonGyu Kim cycle #137 / Jobdori cycle #351) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
8b4876a90a roadmap: #204 filed — TokenUsage omits reasoning_tokens, reasoning models merge into output_tokens breaking cost parity (anomalyco/opencode #24233 parity gap, Jobdori cycle #336) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
1566b2e1d3 roadmap: #203 filed — AutoCompactionEvent summary-only, no SSE event emitted mid-turn when auto-compaction fires (Jobdori cycle #136) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
6da110a7d7 roadmap: #202 filed — sanitize_tool_message_pairing silent drop, no tool_message_dropped event (Jobdori cycle #135) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
6921737326 roadmap: #201 filed — parse_tool_arguments silent fallback, no tool_arg_parse_error event (Jobdori cycle #134) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
18caa57b88 roadmap: #200 filed — SCHEMAS.md self-documenting drift, no derive-from-source enforcement (Q *YeonGyu Kim cycle #304) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
aaaa32cb2c roadmap: #199 filed — claw config JSON envelope omits deprecated_keys, merged_keys count-only, no automation path (Jobdori cycle #133) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
42357cbee4 roadmap: #198 filed — MCP approval-prompt opacity, no blocked.mcp_approval state, pane-scrape required (gaebal-gajae cycle #135 / Jobdori cycle #248) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
8ad7ac14dc roadmap: #197 filed — enabledPlugins deprecation no migration path, warning on every invocation (Jobdori cycle #132) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
9bdd70d945 roadmap: Doctrine #35 formalized — disk-truth wins over verbal drift during taxonomy disputes (Jobdori cycle #194) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
4f6c64e189 roadmap: #196 filed — local branch namespace accumulation, no lifecycle cleanup or doctor visibility (Jobdori cycle #131) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
ae9b66edcb roadmap: #195 filed — worktree-age opacity, no timestamp or doctor signal (Jobdori cycle #130) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
6f8229ea37 roadmap: #194 filed — prunable-worktree accumulation, no doctor visibility or auto-prune lifecycle 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
c778659fab roadmap: Doctrine #33 formalized via cross-claw validation (cycle #129)
Per gaebal-gajae cycle #129 closure ('Doctrine #33 적용도 맞습니다'),
promoting Doctrine #33 from provisional to formal status.

Statement:
'Merge-wait steady state reports as a vector, not narrative.'

Operational protocol:
- Validate 4-element state vector each cycle:
  ready_branches, prs, repo_drift, external_gate
- If unchanged: vector-only post (5 lines) OR silent ack
- If changed: that change IS the cycle's content

Anti-pattern prevented:
중복 확인 로그 (duplicate check logs). Re-posting full merge-wait
narrative every cycle when state hasn't moved.

Validation history:
- Cycle #124: gaebal-gajae introduced compression
- Cycle #129: Jobdori first field-test (vector-only post)
- Cycle #129: gaebal-gajae cross-claw validation (same vector,
              same conclusion, both claws converged)

Cross-claw coherence test passed:
- Both claws independently produced same vector values
- Both reached same conclusion (merge-wait holds)
- Both used same response pattern (vector form)

Doctrine #29-#33 progression operationalizes Phase 0 closure +
merge-wait discipline. #33's specific contribution: noise prevention
during legitimate hold states.

Doctrine count: 33 formalized.
Mode integrity: preserved (this is doc-only follow-up, not probe).
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
171e0f6943 roadmap: #193 filed — session/worktree hygiene readability gap (gaebal-gajae framing)
Per gaebal-gajae cycle #123-#125 framing + authorization, filing
operational pinpoint on dogfood methodology layer (not claw-code binary).

Title: 'Session/worktree hygiene debt makes active delivery state
 harder to read than the actual code state.'

Short form: 'branch/worktree proliferation outpaced merge/cleanup
 visibility.'

Gap identified by gaebal-gajae: 4 branch states visually
indistinguishable on same surface:
  1. Ready branch (merge-ready, gated externally)
  2. Blocked branch (abandoned due to architecture/pushback)
  3. Stale abandoned branch (superseded or merged alternately)
  4. Dirty scratch worktree (experimental, status unclear)

Evidence (cycle #123 substance check):
- 147 local branches
- 30+ clawcode/jobdori /tmp artifacts
- Stale bridge logs from 2026-04-20 (3+ days old)

Class: NOT codegen, NOT test, NOT binary — state readability /
hygiene gap in dogfood methodology layer.

Doctrine #29 compliance: Doc-only ROADMAP entry filed during
merge-wait mode on frozen branch. Legitimate filing-without-fixing.
This is the second such case (first: cycle #100 bundle freeze).

Framing family:
- Sibling to §4.44 (runtime failure state opacity)
- §4.45 tackles repo delivery lane state opacity
- Different scope, same structural pattern

Pinpoint accounting:
- Before #193: 82 total, 67 open
- After #193: 83 total, 68 open
- First dogfood methodology pinpoint (vs binary pinpoints)

Priority: Post-Phase-1 (not Phase 1 bundle member).
Remediation proposal: branch state tagging, worktree lifecycle
discipline, ROADMAP <-> branch mapping.

Sources:
- Cycle #120 Jobdori substance check (147 branches surfaced)
- Cycle #123 Jobdori evidence collation (30 worktrees)
- Cycle #124 gaebal-gajae framing refinement (4-state gap)
- Cycle #125 gaebal-gajae authorization + final framing

Filed by gaebal-gajae authorization. No code change. No probe.
Merge-wait mode preserved. Phase 0 branch integrity preserved.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
486da5e447 roadmap: Doctrine #32 formalized + cycle #117 final reframe per gaebal-gajae
Per gaebal-gajae cycle #117 closing validation:

Authoritative reframe:
'Cycle #117은 PR creation failure를 브랜치 문제에서
 organization-level PR authorization barrier로 정확히 격리한
 진단 턴입니다.'

The cycle value was NOT 'PR blocked'.
The cycle value WAS 'boundary of the barrier isolated through experiments'.

Four dimensions experimentally separated:
1. Repository state: healthy (push, tests)
2. Branch readiness: visible on origin
3. Token liveness: valid (own-fork PR succeeded)
4. Org PR authorization: BLOCKED (FORBIDDEN for both claws)

Reviewer-ready compression:
'The branch is pushable and reviewable, but PR creation into
 ultraworkers/claw-code is blocked specifically at the organization
 authorization layer, not by repository state or token liveness.'

Doctrine #32 formalized:
'Merge-wait mode actions must be within the agent's capability
 envelope. When blocked externally, diagnose by boundary separation
 and hand off to the responsible party, not by retry or redefinition.'

Operational protocol:
1. Isolate boundary through experiments (not retry same path)
2. Document separation explicitly (works vs doesn't work)
3. Escalate to responsible party (web UI, org admin, infra)
4. Do NOT retry, conflate, or redefine the failure

Validation: Cycle #117 both-claws blocked, boundary isolated,
escalation path identified.

Cross-claw coherence:
- Cycle #115: 1 claw attempted, 1 succeeded (hypothesis)
- Cycle #117: 2 claws attempted, 2 blocked, IDENTICAL error (confirmed)

Next action path (per gaebal-gajae):
Author/owner intervention via web UI OR org admin OAuth grant.
'기술적 탐사가 아니라 author/owner intervention입니다.'

Doctrine count: 32 formalized.
Gate status: Blocked pending author intervention.
Mode integrity: Preserved throughout cycle #117.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
f814ab91f1 roadmap: Cycle #117 cross-claw PR blocker diagnosis locked
Per cycle #117 cross-claw diagnosis (both claws attempted independently):

Both Jobdori (code-yeongyu) and gaebal-gajae (Yeachan-Heo) hit
identical GraphQL FORBIDDEN error on createPullRequest mutation.

Diagnosis: Organization-wide OAuth app restriction on
ultraworkers/claw-code, not per-identity issue.

Reviewer-ready compression (per gaebal-gajae):
'The branch is now remotely visible and PR-ready, but actual PR
 creation is blocked by GitHub permissions rather than repository
 state.'

Confirmed state:
- Branch on origin: Yes (cycle #115)
- PR creation CLI path: Blocked for both claws
- Manual web UI: Required
- Org admin OAuth grant: Long-term fix

Gate sequence updated:
1. Branch on origin (DONE, cycle #115)
2. PR creation - BLOCKED at OAuth (cycle #116/#117)
3. Manual web UI PR creation (REQUIRED next)
4. Review cycle
5. Merge signal
6. Phase 1 Bundle 1 (#181 + #183)

Doctrine #32 (provisional, pending gaebal-gajae formal acceptance):
'Merge-wait mode actions must be within the agent's capability
 envelope. When blocked externally, diagnose + document + escalate,
 not retry.'

Cross-claw validation: Both claws blocked, same error pattern.
Mode integrity: Preserved throughout both attempts.
Next blocker: External human action (manual web UI or org admin).
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
db4b9b3626 roadmap: Doctrine #31 formalized + cycle #115 reframe per gaebal-gajae
Per gaebal-gajae cycle #115 validation pass:

Authoritative reframe:
'Cycle #115 was not an exception to merge-wait mode; it was the first
 turn where merge-wait mode actually did what merge-wait mode is
 supposed to do.'

Reviewer-ready compression:
'The branch was frozen but not yet reviewable because it had never
 been pushed; this cycle converted merge-wait from a declared state
 into a remotely visible one.'

Mode semantic correction:
- Merge-wait mode is NOT 'do nothing'
- Merge-wait mode IS 'block discovery + enable merge-readiness'
- Push to origin = merge-readiness action (fits mode, not violation)

Doctrine #31 (formalized):
'Merge-wait mode requires remote visibility.'
Protocol: git ls-remote origin <branch> must return commit hash.
If empty: push before claiming review-ready.

Self-process pinpoint #193 (formalized):
'Dogfood process hygiene gap — declared review-ready claims lacked
 remote visibility check for 40+ minutes (cycles #109-#114).'
Applies to dogfood methodology, not claw-code binary.

Gate sequence (per gaebal-gajae):
1. Branch on origin (cycle #115, DONE)
2. PR creation (next concrete action)
3. Review cycle
4. Merge signal
5. Phase 1 Bundle 1 kickoff

Doctrine count: 31 total.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
f2035bc4db roadmap: lock 'merge-wait mode' state designation per gaebal-gajae
Per gaebal-gajae cycle #110 state designation:
'Phase 0 is no longer in discovery mode; it is in merge-wait mode
 with Phase 1 already precommitted.'

Mode distinction formalized:
- Discovery mode: probe + file + refine (previous state)
- Merge-wait mode: hold state, await signal (CURRENT)
- Execution mode: land bundles (post-merge state)

Doctrine #30: 'Modes are state, not suggestions.'
Once closure is declared, mode label acts as operational guard.
Future cycles must respect state designation:
  - No new probes (that's discovery)
  - No new pinpoints (branch frozen)
  - No new branches (Phase 0 must merge first)
  - Maintain readiness; respond to signal

Mode history for Phase 0:
  - Cycle #97: Discovery begins
  - Cycle #108: Exhaustion criteria met
  - Cycle #109: Closure declared
  - Cycle #110: Merge-wait mode formally entered

Current state: MERGE-WAIT MODE. Awaiting signal.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
4dc6692a47 roadmap: formal closure of Phase 0 / dogfood cycles per gaebal-gajae
Per gaebal-gajae 11:58 Seoul closure validation.

Authoritative closure statement:
'Phase 0 has finished discovery. Phase 1 should start by landing
 the locked contract foundation bundle, not by opening new
 exploratory cycles.'

All four exhaustion criteria met:
1. Unaudited surfaces: 9 probed (full coverage)
2. Probe hypothesis: Fully validated (multi-flag 3-4, simple 0-1)
3. Phase 1 docs: PHASE_1_KICKOFF.md + review guide + priority queue
4. Branch hygiene: 39 commits, 564 tests, 0 regressions, freeze held

Doctrine #29 (final): 'Discovery termination is itself a deliverable.'
  - Criteria: surfaces probed, hypothesis validated, plan documented,
    branch review-ready
  - Anti-pattern: infinite probe continuation
  - Correct: explicit closure + pivot to execution

Phase 0 / dogfood cycles formally closed. No more probe filings
on this branch. Next work unit is Phase 1 execution, not discovery.

Pending: Phase 0 merge approval → Phase 1 branch creation in
priority order → bundle-by-bundle execution (~10 min per bundle).
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
c0d100f916 roadmap: cycle #109 checkpoint — probe complete, Phase 1 kickoff ready
End-of-dogfood checkpoint at cycle #109:

Deliverables:
- PHASE_1_KICKOFF.md (192 lines, execution plan for 6-bundle priority queue)
- Test verification: 564 tests pass, 0 failures
- Branch clean, freeze held, 38 commits total

Probe hypothesis fully validated:
- Multi-flag verbs: 3-4 classifier gaps each
- Single-issue verbs: 0-1 gaps each

Accounting:
- 82 pinpoints filed (cycles #104-#108)
- 67 genuinely open
- 28 doctrines accumulated

Phase 1 ready:
- All 5 priority bundles gaebal-gajae reviewed
- Bundle sequence locked (foundation → extensions → cleanup)
- Expected execution: 50-60 min for all priorities
- No blockers except Phase 0 merge approval

Next: Execute Phase 1 bundles in priority order once Phase 0 lands.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
a763463538 roadmap(#190, #191, #192): file final pre-phase-1 probe gaps in skills lifecycle
Cycle #108 probe of claw skills install/enable/disable yielded 3 pinpoints:

#190: Design decision needed
  skills install (no args) routes to help (action: help, kind: skills).
  May be intentional (like agents pattern) or design inconsistency.
  Requires verification against agents canonical reference.

#191: Classifier gap (filesystem family extension)
  skills install /bad/path emits kind=unknown.
  Should be kind=filesystem or filesystem_io_error.
  Extends #177/#178/#179 install-surface taxonomy.

#192: Classifier gap (unknown-option family extension)
  skills install --bogus-flag emits kind=unknown.
  Should be kind=cli_parse (like sandbox).
  Now 4 members in unknown-option sub-lineage: #186, #187, #189, #192.

Pinpoint count: 82 filed, 67 genuinely open.
Classifier family: 19 members (+2).

All unaudited surfaces now probed:
  - Cycles #104-#108: plugins, agents, init, bootstrap-plan, system-prompt,
    export, sandbox, dump-manifests, skills
  - Hypothesis fully validated: Multi-flag verbs have 3-4 classifier gaps;
    simple verbs have 0-1 gaps.

Per freeze doctrine, no code changes. Doc-only filing.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
d17634741c roadmap(#188, #189): lock framings + doc-truth sub-axis + priority refinement
Per gaebal-gajae cycle #107 validation pass. Three refinements:

1. Framings locked (both verb-specific):
   #188: 'dump-manifests --help omits the prerequisite that runtime
          behavior actually requires.'
   #189: 'dump-manifests unknown-option errors still fall through to
          unknown instead of the existing CLI-parse path.'

2. Doc-truthfulness family formally split into 2 sub-axes:
   - Audit-flow (5 members: #76, #79, #82, #172, #180) — reading one
     file vs another declared source of truth
   - Probe-flow (NEW, 1 member: #188) — running verb vs observing
     --help text

3. Priority refinement:
   - #189 → bundled in feat/jobdori-186-189-classifier-sweep (3 verbs)
   - #188 → post-#180 (doc parity sequence: USAGE gap → help-text gap)
   - Full sequence: #180 (audit-flow doc-truth) → #188 (probe-flow doc-truth)

4. Key cycle #107 outcome (per gaebal-gajae):
   'behavior bug처럼 보이던 걸 help-text truthfulness gap으로 정확히 재분류'
   This is the reclassification skill that earned the filing.

Doctrine #28: First observation is hypothesis, not filing. Verify
against SCHEMAS/USAGE/--help before classifying axis. Cost: 30-60s
per probe. Benefit: avoid filing not-a-bug pinpoints.

Priority queue now 6 bundles + 3+ independent, all reviewer-blessed.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
3bb23fb003 roadmap(#188, #189): file doc-truth and classifier gaps in dump-manifests
Cycle #107 probe of claw dump-manifests yielded 2 pinpoints:

#188: Doc-truthfulness gap (NEW sub-axis)
  claw dump-manifests --help describes usage as optional flags, but
  the verb fails without --manifests-dir or CLAUDE_CODE_UPSTREAM.
  USAGE.md is correct; CLI --help output lies by omission.

  This is the first doc-truth pinpoint from probe flow (vs audit flow).
  New sub-axis: help text vs behavior (prior doc-truth: SCHEMAS/USAGE/README).

#189: Classifier gap (same pattern as #186/#187)
  dump-manifests --bogus-flag falls through to kind=unknown.
  Should be cli_parse (like sandbox).

  Now at 3 verbs in same pattern: system-prompt (#186), export (#187),
  dump-manifests (#189). Rename bundle to feat/jobdori-186-189-classifier-sweep.

Pinpoint count: 79 filed, 65 genuinely open.
Doc-truthfulness family: 6 members (was 5).
Classifier unknown-option sub-lineage: 3 members (was 2).

Per freeze doctrine, no code changes. Doc-only filing.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
0125884a2a roadmap(#187): lock framing + bundle with #186 per gaebal-gajae
Per gaebal-gajae cycle #106 validation pass. Two refinements:

1. #187 framing locked:
   'export unknown-option errors still fall through to unknown,
    unlike the already-canonical sandbox CLI-parse path.'

   Surgical parallel to #186 framing (cycle #105):
   'system-prompt unknown-option errors still fall through to unknown
    instead of the existing CLI-parse classification path.'

   Same pattern: verb + drift + reference path.

2. #186 and #187 bundled into feat/jobdori-186-187-classifier-sweep.
   Rationale: identical fix pattern, identical test pattern, same
   source file, 2x review overhead if separated.

Updated merge priority queue (gaebal-gajae reviewer-blessed):
  1. feat/jobdori-181-error-envelope-contract-drift (#181 + #183)
  2. feat/jobdori-184-cli-contract-hygiene-sweep (#184 + #185)
  3. feat/jobdori-186-187-classifier-sweep (#186 + #187)

Doctrine #27: Same-pattern pinpoints should bundle into one classifier
sweep PR. One-pinpoint = one-branch is not universal; batching
same-pattern fixes halves review/merge overhead.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
37b9cb0011 roadmap(#187): file export classifier gap from cycle #106 probe
Cycle #106 probe of export and sandbox verbs. Found:
- export --bogus-flag: kind=unknown (should be cli_parse)
- sandbox --bogus-flag: kind=cli_parse (canonical correct)

#187 is direct sibling of #186 (system-prompt classifier gap).
Both unknown-option, both should use cli_parse classifier.

Observation: sandbox has no gaps. export has 1 classifier gap.
Suggests classifier coverage improving on newer verbs, not consistent
regression across unaudited surfaces.

Hypothesis (#104) partially validated: unaudited surfaces yield
pinpoints, but not uniformly. Single-issue verbs (sandbox) may be
cleaner than multi-flag verbs (export, init, bootstrap-plan).

Pinpoint count: 77 filed, 63 genuinely open.

Per freeze doctrine, no code changes. Doc-only filing.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
a8f954c1d0 roadmap: lock merge priority for cycles #104-#105 pinpoints
Per gaebal-gajae cycle #105 priority pass.

Locked merge order (minimizes consumer-facing contract disruption):
1. feat/jobdori-181-error-envelope-contract-drift (#181 + #183 bundled)
2. feat/jobdori-184-cli-contract-hygiene-sweep (#184 + #185 bundled)
3. feat/jobdori-186-system-prompt-classifier (#186 standalone)

Rationale: foundation → extensions → cleanup ordering.
- #181 first: canonical error envelope established (1 shape change)
- #184/#185 second: use existing envelope (0 shape changes)
- #186 third: classifier branch add (1 classifier change)
Total: 1 shape + 1 classifier change across 3 merges.

Doctrine #25: Contract-surface-first ordering. Foundation layer before
extending guards before refinement cleanup.

Still-deferred pinpoints explicitly mapped with dependencies:
#173, #174, #177/#178/#179, #180, #182, #175.

Branch now at 30 commits, 227/227 tests.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
e32bf3d397 roadmap(#184-#186): lineage corrections + reference implementation lock
Per gaebal-gajae cycle #105 review pass. Three corrections:

1. #184/#185 belong to #171 lineage (CLI contract hygiene sub-family),
   NOT a new family. Same enforcement hole pattern on unaudited verbs.

2. #186 locked as member of #169/#170 classifier lineage. Framing:
   'system-prompt unknown-option errors still fall through to unknown
   instead of the existing CLI-parse classification path.'

3. agents is the #183 reference implementation. Fix path reframed from
   'design new contract' to 'align outliers to existing reference'.
   Much smaller scope for feat/jobdori-181-error-envelope-contract-drift.

Canonical reference shape locked:
{action: 'help', kind: <verb>, unexpected: <bad-name>, usage: {...}}

Doctrine #24: Pinpoint lineage continuity. Check existing family
before creating new. Reviewers follow pattern lineages.

Family tree corrected: CLI contract hygiene moved from 'NEW' to
'#171 sub-lineage within classifier family'.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
23915fc666 roadmap(#184, #185, #186): file CLI contract hygiene gaps in unaudited verbs
Cycle #105 probe of agents/init/bootstrap-plan/system-prompt verbs
(unaudited per cycle #104 hypothesis) yielded 3 pinpoints:

#184: claw init silently accepts unknown positional arguments. Inconsistent
with #171 CLI contract hygiene pattern.

#185: claw bootstrap-plan silently accepts unknown flags. Same family as
#184, different verb, different surface.

#186: claw system-prompt --<unknown> classified as 'unknown' instead of
'cli_parse'. Classifier family member (#182-style).

Bonus observation (not filed): claw agents bogus-action emits the
canonical mcp-style {action: help, unexpected, usage} shape. This is
the shape that #183 wants as canonical, NOT the plugins-style success
envelope. agents is the reference implementation.

Hypothesis validated: unaudited verb surfaces have 2-3x higher pinpoint
yield. Predicted cycle #104-#105 pattern holds.

Pinpoint count: 76 filed, 62 genuinely open.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
d28ebd7fad roadmap(#181/#182/#183): lock reviewer-ready framings per gaebal-gajae
Final framing pass for cycle #104 plugin lifecycle pinpoints. Three
one-liner framings captured for reviewer consumption:

#181 (HIGH): 'plugins unknown-subcommand errors currently emit on the
success path instead of the JSON error path.'

#183 (HIGH): 'Invalid subcommand handling is not normalized across
plugins and mcp JSON surfaces.'

#182 (MEDIUM): 'Plugin lifecycle failures still fall through to unknown
instead of canonical error kinds.'

Branch sequencing locked:
1. feat/jobdori-181-error-envelope-contract-drift (bundles #181+#183)
2. feat/jobdori-182-plugin-classifier-alignment (#182, post-merge)

Rationale: #181 is root bug, #183 is sibling symptom, #182 is cleanup
that benefits from clean error envelope landing first.

Branch at 27 commits, 227/227 tests, review-ready.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
99c29790d9 roadmap(#181-framing, #182-correction): lock framing + correct enum proposal
Per gaebal-gajae cycle #104 framing + severity pass. Three changes:

1. #181 framing locked: 'plugins unknown-subcommand errors are emitted
   through the success envelope instead of the JSON error envelope.'

2. #181 + #183 consolidated into 'error envelope contract drift' family.
   Proposed bundled branch: feat/jobdori-181-error-envelope-contract-drift.

3. #182 scope correction (IMPORTANT): I proposed new kind 'plugin_not_found'
   without verifying SCHEMAS.md enum. Per gaebal-gajae: 'existing contract
   alignment > new enum proposal'.

Corrected mapping:
- plugins install /nonexistent → filesystem (existing enum value)
- plugins enable nonexistent → runtime (safest existing value)
- plugin_not_found proposal deferred pending explicit schema update

Doctrine lesson: enum proposal requires SCHEMAS.md baseline check first.

Severity-ordered merge plan (per gaebal-gajae):
1. #181 (HIGH) - contract bug
2. #183 (HIGH) - contract drift
3. #182 (MEDIUM) - classifier alignment
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
ae7a455aa2 roadmap(#181, #182, #183): file plugin lifecycle axis pinpoints
Cycle #104 probe of plugin lifecycle axis (claw plugins + mcp subcommands)
yielded 3 related gaps:

#181: plugins bogus-subcommand returns SUCCESS-shaped envelope with
error buried in 'message' text field. Consumer parsing via
type=='error' check treats it as success. Severe.

#182: plugins install/enable not-found errors classified as 'unknown'
instead of 'plugin_not_found' or 'not_found'. Classifier family member.

#183: plugins and mcp emit DIFFERENT shapes on unknown subcommand.
plugins has reload_runtime+target+message, mcp has unexpected+usage.
Shape parity gap.

All three filed only per freeze doctrine. Proposed separate branches:
- feat/jobdori-181-unknown-subcommand-error-routing (#181 + #183 bundled)
- feat/jobdori-182-plugin-not-found-classifier (#182 standalone)

Pinpoint count: 73 filed, 59 genuinely open. Typed-error family: 14
members. Emission routing family: 1 new member (#181).
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
51afd203d1 roadmap(#180-framing): lock authoritative framing + branch name
Per gaebal-gajae cycle #103 framing pass. Captures narrative choice +
reality divergence in one line.

Framing: 'USAGE.md currently teaches entry modes, but not the actual
standalone command surface exposed by claw --help.'

Locks branch name: feat/jobdori-180-usage-standalone-surface

Next-branch prep steps documented so post-168c-merge execution is
zero-friction.

Three-stage pinpoint discipline validated again: filing (cycle #103
primary) → framing (cycle #103 addendum) → prep (execution checklist).
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
099585f2ad roadmap(#180): file USAGE.md verb coverage gap
Cycle #103 doc-truthfulness audit found USAGE.md incomplete.

Actual CLI has 14 standalone verbs (status, doctor, mcp, skills, agents,
export, init, sandbox, system-prompt, bootstrap-plan, dump-manifests,
help, version, acp).

USAGE.md covers only 3 entry modes (claw REPL, claw prompt TEXT,
claw --resume). Other verbs absent or underdocumented.

Example: USAGE.md says 'start claw, then /doctor' but doesn't explain
that 'claw doctor' is also a standalone entry point (no REPL needed).

Fix: Add 'Standalone commands' section to USAGE.md with all 14 verbs
documented. Include regression test (grep USAGE.md for each verb).

Doc-truthfulness family: #76, #79, #82, #172, #180.

Pinpoint count: 70 filed, 56 genuinely open.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
aa9baf1a1b roadmap(#179): file missing SKILL.md validation gap as separate pinpoint
Per gaebal-gajae cycle #102 refinement. Originally tangled into #177
filing but properly belongs as distinct pinpoint.

Taxonomy:
- #177: nonexistent path → filesystem kind
- #178: export enum drift → filesystem canonical
- #179: missing SKILL.md → parse/validation kind (this filing)

Family renamed per gaebal-gajae: 'resource / install-surface error
taxonomy gap' (was 'filesystem error family'). Better captures that
not all gaps in this cluster are filesystem-rooted.

Proposed branch bundle: feat/jobdori-177-install-surface-taxonomy
covers all three as coordinated taxonomy sweep.

Pinpoint count: 69 filed, 55 genuinely open.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
0d4f334059 roadmap(#175): file gaebal-gajae's CI fmt/test signal decoupling framing + resolve numbering collision
#175 numbering collision between:
- gaebal-gajae's CI framing (filed at ~10:00 via Discord verbally)
- my filesystem classifier filing (#175 per cycle #102 10:02)

Resolution:
- gaebal-gajae's framing reclaims #175 (higher-level workflow gap)
- My filesystem classifier renumbered to #177
- My export enum naming renumbered to #178

All three pinpoints now filed with correct non-colliding numbers:
- #175: CI fmt/test signal decoupling (gaebal-gajae)
- #177: skills install filesystem classifier (Jobdori, was #175)
- #178: export kind naming consistency (Jobdori, was #176)

Typed-error family membership updated accordingly.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
df3640c1d3 roadmap(#175, #176): file filesystem error classifier gaps
Cycle #102 probe of model/skills/export axis found two related gaps:

#175: skills install filesystem errors classified as 'unknown' instead of
'filesystem' (which is in v1.5 enum).

#176: export uses 'filesystem_io_error' kind but this is NOT in v1.5
declared enum (which only lists 'filesystem'). Inconsistent naming.

Both filed only per freeze doctrine. Proposed bundling as
feat/jobdori-175-filesystem-error-family branch.

Family observation: classifier + enum-naming gaps found simultaneously
in filesystem-error axis. Indicates broader unaudited surface.

Pinpoint count: 68 filed, 54 genuinely-open.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
88aaf88343 roadmap(#174-framing): lock authoritative framing + branch name
Per gaebal-gajae cycle #101 framing pass. Adds stable framing that
captures scope + root cause + visible effect + surface in one line.

Locks branch name: feat/jobdori-174-resume-trailing-cli-parse

Next-branch prep steps documented so post-168c-merge execution is
zero-friction (classifier branch + regression test pattern already
established by #169/#170/#171).
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
b7a01f2e3f roadmap(#174): file --resume trailing args classifier gap
Cycle #101 probe of session-boot axis (prompt misdelivery / resume
lifecycle) found another typed-error classifier gap.

Filed only, not fixed. Per freeze doctrine (cycles #98-#100), no new
code axis added to feat/jobdori-168c-emission-routing.

Pattern: `--resume trailing arguments must be slash commands` classified
as 'unknown' instead of 'cli_parse'. Side effect: #247 hint synthesizer
doesn't trigger, so hint is null.

Same family as #169, #170, #171 (classifier coverage gaps).

Proposed fix: add `--resume trailing arguments` pattern to
classify_error_kind as cli_parse.

Pinpoint count: 66 filed, 52 genuinely-open + #174 new.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
9d4e996a7c roadmap(#173): file structured-output hint parity gap
Cycle #100 probe of non-classifier axes (event/log opacity) found new
consumer parity gap: JSON mode missing 'hint' field that text mode
provides for config_load_error scenarios.

Filed only, not fixed. Per freeze doctrine (cycles #98-#99), no new axis
added to feat/jobdori-168c-emission-routing. This pinpoint is a Phase 1
scope candidate for a separate branch.

Affects: claw mcp, claw status, claw doctor (JSON mode).
Text mode shows: Hint  `claw doctor` classifies config parse errors...
JSON mode shows: no hint field at all.

Consumer impact: claws parsing JSON output can't programmatically route
errors to recovery paths the way text-mode users can with human guidance.

Family: Consumer parity. Related: #247 (hint synthesizer), #169-#172
(classifier family), #172 (doc-truthfulness).

Proposed fix: add 'hint' field to JSON envelope when config_load_error
is present, with hint taxonomy for typed dispatch.

Pinpoint count: 65 filed, 51 genuinely-open + #173 new.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
228ac3324a roadmap(#172): file + close doc-vs-reality gap — action field inventory count
Cycle #98 probe of non-classifier axes found documentation truthfulness
gap in SCHEMAS.md v1.5 Emission Baseline.

#172 closed by commit ce352f4 (same branch, same cycle).

Part of doc-truthfulness family (#76, #79, #82).

Completes SCHEMAS.md truthfulness trifecta:
- Cycle #91: Baseline documentation (13 verbs)
- Cycle #92: Shape parity guard (10 cases)
- Cycle #98: Phase 1 target count locked (3 verbs, 11 assertions)

Pinpoint count: 64 filed, 51 genuinely-open + #172 closed this cycle.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
41618e56fc roadmap(#171): file + close classifier gap for unexpected extra arguments
Cycle #97 probing #141 surface found additional classifier gap.
#171 closed by commit fbb0ab4 (same branch, same cycle).

Part of typed-error family (#121, #127, #129, #130, #164, #169, #170, #247).

#141 (list-sessions --help doesn't show help) remains open — requires
separate parser fix for --help-as-distinct-path logic.

Pinpoint count: 63 filed, 51 genuinely-open + #171 classifier closed.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
53ae0c081d roadmap(#153): file + close pinpoint — binary PATH instructions + verification bridge
Cycle #96 dogfood found practical install-experience gap in USAGE.md.
#153 closed by commit 6212f17 (same branch, same cycle).

Part of discoverability family (#155, help/USAGE parity).

Pinpoint count: 62 filed, 51 genuinely-open + #153 closed this cycle.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
6604429dad roadmap(#170): file + close 4 additional classifier gaps + doc-vs-reality meta-observation
Cycle #95 dogfood probe validated #169 doctrine by finding 4 more gaps.

Meta-observation noted: #169 comment claimed to cover --permission-mode
bogus but actual string pattern differs. Lesson for future classifier
patches: comments name EXACT matched substring, not aspirational coverage.

New kind introduced: slash_command_requires_repl (for interactive-only
slash-command misuse).

Pinpoint count: 62 filed, 52 genuinely-open + #170 closed this cycle.
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
a9770c463d roadmap(#169): file + close pinpoint — invalid CLI flag values now classify as cli_parse
Documents #169 discovery during dogfood probe 2026-04-23 07:00 Seoul.

Pinpoint #169 closed by commit 834b0a9 (same branch, same cycle).

Part of typed-error family (#121, #127, #129, #130, #164, #247).

Pinpoint count: 61 filed, 52 genuinely-open + 1 closed in this cycle.
2026-04-26 18:02:59 +09:00