296 Commits

Author SHA1 Message Date
YeonGyu-Kim
3bbaefcf3e 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-23 12:00:11 +09:00
YeonGyu-Kim
c0ab7a4d5f 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-23 11:58:06 +09:00
YeonGyu-Kim
046bf6cedc 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-23 11:56:57 +09:00
YeonGyu-Kim
b139b10499 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-23 11:39:59 +09:00
YeonGyu-Kim
6e6f99e57e 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-23 11:33:44 +09:00
YeonGyu-Kim
eb957a512c 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-23 11:31:30 +09:00
YeonGyu-Kim
fcb9d18899 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-23 11:22:40 +09:00
YeonGyu-Kim
d03f33b119 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-23 11:21:31 +09:00
YeonGyu-Kim
1494a94423 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-23 11:05:00 +09:00
YeonGyu-Kim
8efcec32d7 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-23 11:03:52 +09:00
YeonGyu-Kim
1afe145db8 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-23 11:01:24 +09:00
YeonGyu-Kim
7b3abfd49a 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-23 10:33:42 +09:00
YeonGyu-Kim
2c004eb884 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-23 10:32:50 +09:00
YeonGyu-Kim
22cc8effbb 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-23 10:31:09 +09:00
YeonGyu-Kim
a14977a866 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-23 10:25:18 +09:00
YeonGyu-Kim
e84424a2d3 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-23 10:24:24 +09:00
YeonGyu-Kim
de5384c8f0 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-23 10:04:03 +09:00
YeonGyu-Kim
93cfdbabeb 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-23 10:02:52 +09:00
YeonGyu-Kim
efc59ab17e 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-23 10:01:06 +09:00
YeonGyu-Kim
635f1145a2 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-23 09:33:01 +09:00
YeonGyu-Kim
a8fc17cdee 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-23 09:31:21 +09:00
YeonGyu-Kim
28102af64a 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-23 09:01:53 +09:00
YeonGyu-Kim
3a2dddd1ca 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-23 08:33:35 +09:00
YeonGyu-Kim
d9b61cc4dc 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-23 08:02:28 +09:00
YeonGyu-Kim
5736f364a9 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-23 07:52:41 +09:00
YeonGyu-Kim
0f023665ae 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-23 07:32:32 +09:00
YeonGyu-Kim
b8984e515b 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-23 07:04:07 +09:00
YeonGyu-Kim
3311266b59 roadmap: Phase 0 locked as 'JSON emission baseline stabilization' (cycle #88)
Per gaebal-gajae framing: Phase 0 addresses EMISSION (stream routing + exit code +
no-silent guarantee), not SHAPE (which moves to Phase 1).

Phase 0 subtasks (1.25 days total):
1. Stream routing fix — bootstrap/dump-manifests/state stderr → stdout for JSON
2. No-silent guarantee — CI asserts every verb emits valid JSON or exits non-zero
3. Per-verb emission inventory — authoritative catalog artifact
4. CI parity test — prevent regressions

Phase 1 now owns shape normalization (list-sessions 'command' → 'kind').
Phase 0 owns emission stability; Phase 1 owns shape consistency; Phase 2+ handles envelope wrapping.

#168b formally closed as INVALID (cycle #84 misread; stderr output routing is real
issue, now tracked as #168c).

Revised pinpoint accounting:
- Filed: 60 (audit trail includes #168b as invalid)
- Genuinely-open: 52
- Phase 0 active: #168c + emission CI
- Phase 1 active: #168a
2026-04-23 05:52:27 +09:00
YeonGyu-Kim
cd6e1cea6f roadmap: #168 split into #168a/#168b/#168c after controlled matrix audit (cycle #87)
Controlled matrix (/tmp/cycle87-audit/matrix.json) tested 16 verbs x 2 envs = 32 cases.

Results:
- #168a CONFIRMED: per-command shape divergence real (13 unique shapes across 13 verbs)
- #168b REFUTED: bootstrap does NOT silent-fail. Exit=1 stderr=483 bytes (not silent).
  Cycle #84 misread exit code (claimed 0, actually 1) and missed stderr output.
- #168c NEW: bootstrap/dump-manifests/state write plain stderr under --output-format json

Phase 0 reworded: 'Fix bootstrap silent failure' (inaccurate) → 'Controlled JSON
baseline audit + minimum invariant normalization' (accurate).

Concrete Phase 0 work (1.5 days):
- Normalize list-sessions 'command' → 'kind' (align with 12/13 verbs)
- Normalize stderr output to JSON for bootstrap/dump-manifests/state
- Document v1.5 baseline shape catalog in SCHEMAS.md
- Add shape parity CI test

Controlled revalidation (per gaebal-gajae cycle #87 direction) prevented Phase 0
from being anchored to a refuted bug. #168b is now closed as refuted; #168a and
#168c are the actual Phase 0 targets.
2026-04-23 05:50:52 +09:00
YeonGyu-Kim
f30aa0b239 roadmap: #168b filed — cycle #86 fresh-dogfood contradicts cycle #84 bootstrap claim (revalidation) 2026-04-23 05:48:56 +09:00
YeonGyu-Kim
7f63e22f29 roadmap: promote #164 from locus to 'JSON Productization Program' (cycle #85b)
gaebal-gajae review reframed the work: this is not 'schema drift management'
but a 'JSON productization program' — taking JSON output from bespoke/incoherent
to reliable/contractual as a product.

Promotion trigger: Fresh-dogfood evidence (#168) proved v1.0 was never coherent.
Migration isn't just schema change; it's productizing JSON output.

Program structure:
- Phase 0: Emergency stabilization (fix #168 bootstrap silent failure)
- Phase 1: v1.5 baseline (normalize invariants across all 14 verbs)
- Phase 2: v2.0 opt-in wrapped envelope
- Phase 3: v2.0 default
- Phase 4: v1.0/v1.5 deprecation

Umbrellas 9+ related pinpoints under coordinated program (#164, #167, #168,
#102, #121, #127, #129, #130, #245).

Program doctrine locked:
1. Fresh-dogfood before migration
2. Honest effort estimates
3. Consumer-first design
4. Evidence-driven revision
5. Documentation as product

Next concrete action: Phase 0 — implement #168 bootstrap JSON fix.
Success metric: A claw can write ONE parser for ALL clawable commands.
2026-04-23 05:34:29 +09:00
YeonGyu-Kim
562f19bcff roadmap: #168 filed — JSON envelope shape inconsistent per-command; bootstrap broken (cycle #84)
Fresh dogfood validation (cycle #84) revealed the binary v1.0 envelope is NOT
consistent across commands:

- list-sessions: {command, sessions}
- doctor: {checks, kind, message, ...}
- bootstrap: (no JSON output at all)
- mcp: {action, kind, status, ...}

Each command has a custom JSON shape. Bootstrap's JSON path is completely broken
(exit 0 but no output). This is not 'v1.0 vs v2.0 design difference' — it's
'no consistent v1.0 ever existed'.

This explains why #164 (envelope migration) is blocked on design: the 'v1.0 from'
was never coherent. The real task is not 'migrate v1.0 to v2.0' but 'migrate
incoherent-per-command shapes to coherent-common-envelope'.

Implications for cycles #76–#82: The P0 doc fixes were correct to mark SCHEMAS.md
as 'aspirational' because the binary never had a consistent contract to document.
The deeper issue: each verb renderer was written independently with no envelope
coordination.

Three options proposed:
- A: accept per-command shapes (status quo + documentation)
- B: enforce common wrapper (FIX_LOCUS_164 full approach)
- C: hybrid (document current incoherence, then migrate 3 pilot verbs)

Recommendation: Option C. Documents truth immediately, enables phased migration.

This filing resolves the #164 design blocker: now we understand what we're
migrating from.
2026-04-23 05:31:09 +09:00
YeonGyu-Kim
43bbf43f01 roadmap: #167 filed — text output format has no contract (cycle #83)
SCHEMAS.md locks JSON envelope contract for all 14 clawable commands.
No corresponding contract for text output (--output-format text).

Text output is ad hoc per-command: no documented format, no column ordering
guarantee, no stability contract. Claws parsing text output have no safety.

Filed as discovery gap from systematic doc audit (cycle #83). Design options:
- Option A: Document text contracts (parallel to JSON) — 4 dev-days
- Option B: Declare text unstable, point to JSON — 1 dev-day (recommended)
- Option C: Defer until post-#164 JSON migration

Related to #164 (JSON migration) and #250 (surface parity audit).
2026-04-23 05:29:45 +09:00
YeonGyu-Kim
8322bb8ec6 roadmap: #166 closed — SCHEMAS.md source misdoc fixed (P0 root cause)
The aspirational SCHEMAS.md doc (v2.0 target) was the source of truth misdocumentation.
Three downstream docs (USAGE, ERROR_HANDLING, CLAUDE) inherited the false claim that
v1.0 binary emits common fields it doesn't actually emit.

Fixing SCHEMAS.md at the source eliminates the root cause for all four P0 instances.

Doc-truthfulness P0 family now complete: 4/4 closed, root cause identified + fixed.
All fixes shipped within 6 cycles (#76 audit → #82 execution).
2026-04-23 05:21:22 +09:00
YeonGyu-Kim
86db2e0b03 roadmap: #165 closed with evidence (cycle #81, commit 1a03359)
CLAUDE.md Option A implemented. P0 doc-truthfulness family now at 3 closed +
0 open (all 3 fixed within the same dogfood session).

Taxonomy refinement added: P0 doc-truthfulness has three distinct subclasses:
- active misdocumentation (false sentence) — USAGE.md cycle #78
- copy-paste trap (broken example code) — ERROR_HANDLING.md cycle #79
- target/current boundary collapse (v2.0 as v1.0) — CLAUDE.md cycle #81

All three related to #164 (envelope divergence). Root cause consistent across
family; remedies differ per subclass.
2026-04-23 05:11:42 +09:00
YeonGyu-Kim
b34f370645 roadmap: #165 filed — CLAUDE.md documents v2.0 schema as current (P0 active misdoc)
CLAUDE.md claims 'Common fields (all envelopes): timestamp, command, exit_code,
output_format, schema_version' but the actual binary v1.0 doesn't emit these.

This is aspirational (v2.0 target from SCHEMAS.md) documented as current behavior
in a file that's supposed to describe the Python reference harness.

Filed as 3rd member of doc-truthfulness P0 family (joins #78, #79).
Both options documented: update CLAUDE.md for v1.0 OR clarify it's v2.0 aspirational.
Recommendation: Option A (keep CLAUDE.md truthful about actual validation).

Part of broader #164 family (envelope schema divergence across all docs).
2026-04-23 05:10:01 +09:00
YeonGyu-Kim
a9e87de905 roadmap: doctrine refinement — doc-truthfulness severity scale (cycle #79)
Formalizes a 4-level severity scale for documentation-vs-implementation divergence:
- P0: Active misdocumentation (consumer code breaks) — immediate fix
- P1: Stale docs (consumer confused) — high priority
- P2: Incomplete docs (friction, eventual success) — medium
- P3: Terminology drift (confusion but survivable) — low

Parallel to diagnostic-strictness scale (cycles #57–#69). Both are
'truth-over-convenience' constraints.

Evidence: cycles #78–#79 found 2 P0 instances in USAGE.md and ERROR_HANDLING.md,
both related to JSON envelope shape. Root cause: SCHEMAS.md is aspirational (v2.0),
binary still emits v1.0, docs needed to be empirical not aspirational.

Going forward: doc audits compare against actual binary, flag P0 violations
immediately, link forward to migration plans (FIX_LOCUS_164.md).
2026-04-23 05:00:55 +09:00
YeonGyu-Kim
5b9097a7ac roadmap: #164 filed — JSON envelope schema-vs-binary divergence
Binary emits different envelope shape than SCHEMAS.md documents:
- Missing: timestamp, command, exit_code, output_format, schema_version
- Wrong placement: kind is top-level, not nested under error
- Extra: type:error field not in schema
- Wrong type: error is string, not object with operation/target/retryable

Additional issue: 'kind' field is semantically overloaded (verb-id in
success envelopes, error-kind in error envelopes) — violates typed contract.

Filed as 7th member of typed-error family (joins #102, #121, #127, #129, #130, #245).
Recommended fix: Option A — update binary to match schema (principled design).
2026-04-23 04:31:53 +09:00
YeonGyu-Kim
69a15bd707 roadmap: cycle #75 finding — rebase-bridge pattern breaks on multi-conflict branches
Attempted cherry-pick of #248 (1 commit) onto main. Encountered 2 conflict zones
in main.rs (test definitions + error classification). Manual regex cleanup left
orphaned diff markers that Rust compiler rejected.

Decision: Rebase-bridge works for 1-conflict branches, but 2+ conflicts in 12K+-line
files require author context. Revised strategy: push main to origin, request branch
authors rebase locally with IDE support, then merge from updated origin branches.

Estimated timeline: 30 min for branch authors to rebase 8 branches in parallel.
2026-04-23 04:26:21 +09:00
YeonGyu-Kim
41c87309f3 roadmap: cycle #74 checkpoint — rebase blocker identified
Fresh dogfood found no new pinpoints. All core verbs working correctly.

Blocker: 8 remaining review-ready branches on origin have conflicts with
cycle #72's 4 merges. Root cause: remote branches predated the merge chain.

Example: feat/jobdori-127-verb-suffix-flags rebase fails on commit 3/3
because cycle #72 added 15+ new LocalHelpTopic variants.

Recommend: coordinate with branch authors to rebase against new main.
Cycle #74 will post integration checkpoint + queue status.
2026-04-23 04:17:54 +09:00
YeonGyu-Kim
a02527826e roadmap: #163 closed as already-fixed — #130e-A (merged cycle #72) handled help --help
Backlog-truthfulness (cycle #60) validated: fresh dogfood on current main confirmed
#163 was closed by cycle #72's help-parity chain merge. Zero duplicate work.

Cleanup: removed /tmp/jobdori-163 worktree and fix/jobdori-163-help-help-selfref branch.
2026-04-23 04:07:37 +09:00
YeonGyu-Kim
a52a361e16 roadmap: cycle #72 — 4 merges landed, 9 branches integrated via MERGE_CHECKLIST runbook 2026-04-23 04:04:57 +09:00
YeonGyu-Kim
499d84c04a roadmap: #163 filed — claw help --help emits missing_credentials instead of help topic (help-parity family) 2026-04-23 04:01:24 +09:00
YeonGyu-Kim
6d1c24f9ee roadmap: doctrine refinement — three-tier artifact classification (doc → support → execution) per cycle #70 framing 2026-04-23 03:56:48 +09:00
YeonGyu-Kim
0527dd608d roadmap: #161 closed — shipped on fix/jobdori-161-worktree-git-sha (cycle #69) 2026-04-23 03:46:37 +09:00
YeonGyu-Kim
d64c7144ff roadmap: doctrine extension — CLI discoverability chain completion as doctrine (from #162 closure framing) 2026-04-23 03:40:43 +09:00
YeonGyu-Kim
2a82cf2856 roadmap: #162 closed — shipped on docs/jobdori-162-usage-verb-parity (cycle #68) 2026-04-23 03:39:36 +09:00
YeonGyu-Kim
de7a0ffde6 roadmap: #162 filed — USAGE.md missing docs for dump-manifests, bootstrap-plan, acp, export verbs (parity audit) 2026-04-23 03:37:09 +09:00
YeonGyu-Kim
36883ba4c2 roadmap: cluster update — #161 elevated to diagnostic-strictness family (per gaebal-gajae reframe) 2026-04-23 03:35:03 +09:00
YeonGyu-Kim
f18f45c0cf roadmap: #161 filed — claw version stale SHA in worktrees (build.rs rerun-if-changed misses worktree HEAD) 2026-04-23 03:31:40 +09:00