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.
This commit is contained in:
YeonGyu-Kim 2026-04-23 11:22:40 +09:00
parent d03f33b119
commit fcb9d18899

View File

@ -10914,3 +10914,99 @@ Rationale: Minimizes contract-shape changes per cycle. Each consumer update cycl
**Pinpoint count:** 77 filed (+1 from #187), 63 genuinely open.
**Branch:** `feat/jobdori-168c-emission-routing` @ 32 commits (unchanged, freeze held).
## Cycle #106 Addendum — #187 Framing Lock + Bundle Refinement (gaebal-gajae, 2026-04-23 11:24 Seoul)
**Per gaebal-gajae cycle #106 validation pass.** Two refinements:
### Refinement 1: #187 Authoritative Framing
> "`export` unknown-option errors still fall through to `unknown`, unlike the already-canonical `sandbox` CLI-parse path."
**Why this framing is surgical:**
- Names the broken surface (`export`)
- Names the working reference (`sandbox`)
- Names the specific classifier drift (unknown → cli_parse)
- Reviewer reads this and immediately understands: "port `sandbox` pattern to `export` handler"
**Comparison to #186 framing** (cycle #105 gaebal-gajae pass):
> "`system-prompt` unknown-option errors still fall through to `unknown` instead of the existing CLI-parse classification path."
**Same surgical pattern:** verb + drift + reference path. Cross-pollinate these framings to make the family visible at-a-glance.
### Refinement 2: #186 + #187 Bundle Into One Classifier Sweep
**Per gaebal-gajae:** "#187은 단독 이슈라기보다 #186의 sibling으로 묶는 게 맞습니다."
**Before (cycle #105 + #106 proposed):**
- `feat/jobdori-186-system-prompt-classifier` (standalone)
- `feat/jobdori-187-export-classifier` (standalone)
**After (gaebal-gajae bundle refinement):**
- `feat/jobdori-186-187-classifier-sweep` (bundled, both verbs in one PR)
**Bundle rationale:**
1. **Identical fix pattern.** Both add same classifier branch (different message match):
```rust
// For #186
} else if message.starts_with("unknown system-prompt option:") {
"cli_parse"
}
// For #187
} else if message.starts_with("unknown export option:") {
"cli_parse"
}
```
2. **Identical test pattern.** Both assert `kind: "cli_parse"` + hint present.
3. **Same review burden.** One reviewer cycle, two fixes.
4. **Same merge risk profile.** Classifier branch additions are minimal-risk.
**Cost of separation (rejected):** Two PRs, two review cycles, two merge events = 2x overhead for effectively-identical work.
### Updated Merge Priority Queue (post-refinement)
**Per gaebal-gajae cycle #106 ordering confirmation:**
| Priority | Bundle | Scope | Severity |
|---|---|---|---|
| 1 | `feat/jobdori-181-error-envelope-contract-drift` | #181 + #183 | HIGH |
| 2 | `feat/jobdori-184-cli-contract-hygiene-sweep` | #184 + #185 | MEDIUM |
| 3 | `feat/jobdori-186-187-classifier-sweep` | #186 + #187 | MEDIUM |
| 4+ | (independent) | #182, #177/#178/#179, #180, #173, #174, #175 | MEDIUMLOW |
**Key observation:** Every "Priority 13" bundle pair has now received gaebal-gajae's explicit validation. The queue is reviewer-blessed end-to-end.
### Doctrine Observation (#27)
**"Same-pattern pinpoints should bundle into one classifier sweep PR."** When two or more pinpoints:
1. Share the same classifier pattern (e.g. "unknown X option: → cli_parse")
2. Touch the same source file(s)
3. Add similar test cases
...they belong in the same PR. Rationale: halves review/merge overhead while preserving independent tracking in ROADMAP.md.
**Anti-pattern (rejected):** "One pinpoint = one branch = one PR" is not universal. Batching same-pattern fixes is often correct.
### Updated Pinpoint Family Tree (final post-cycle #106)
```
77 filed, 63 genuinely-open
├── Typed-error classifier (16)
│ ├── CLI parse leaves (10): #121, #127, #129-#130, #164, #169-#171, #174, #247
│ ├── CLI contract hygiene sub-lineage (#171 lineage):
│ │ ├── #171 (closed, cycle #97)
│ │ ├── #184 (filed, cycle #105)
│ │ └── #185 (filed, cycle #105)
│ └── Unknown-option sub-lineage (#169/#170 lineage):
│ ├── #186 (filed, cycle #105)
│ └── #187 (filed, cycle #106) ← BUNDLED with #186
├── Error envelope contract drift (2): #181, #183
│ └── Reference implementation: `agents` (locked, cycle #105)
├── Doc-truthfulness (5): #76, #79, #82, #172, #180
├── Install-surface taxonomy (3): #177, #178, #179
├── CI/workflow (1): #175
└── Consumer-parity (1): #173
```