Files
whetstone_DSL/specialists/HANDOFF-2026-04-20.md

177 lines
7.4 KiB
Markdown
Raw Normal View History

# Specialist Fleet Handoff — 2026-04-20
## Session Summary
worker_type implementer improvement: fixed heuristic label noise, added synthetic
implementer data, retrained. Implementer accuracy at target. Heuristic fix is a
significant data quality improvement that affects all future sprint plan data.
---
## Fleet Status
| Gate | Best Acc | Tier | Checkpoint | Next Action |
|------|----------|------|------------|-------------|
| automatability | **100%** | 2-stage | `/mnt/storage/fabricate_runs/whetstone_automatability_stage*` | SOLVED — deploy |
| worker_type | **89.2%** (v2) | small_plus | `/mnt/storage/fabricate_runs/whetstone_worker_type_v2_small_plus/checkpoint.pt` | See Priority 1 below |
| verification_type | 84.3% | small_plus | `/mnt/storage/fabricate_runs/whetstone_verification_type_small_plus/checkpoint.pt` | See Priority 2 below |
| prereq_op | 72.2% | small_plus | blocked | Blocked — schema gap |
Prior session baseline (v1 combined): worker_type 92.2% overall / 75.0% implementer.
This session (v2): 89.2% overall / 85.7% implementer.
---
## What Was Done
### 1. Heuristic fix — gen_worker_type_data.py
**Root cause found:** `classify()` used substring matching (`tok in t`), causing
multi-word token false positives:
- `whetstone_preview_*` tools labeled reviewer because "review" ⊆ "preview"
- `whetstone_*_triage_*` tools labeled reviewer because "triage" ⊆ "failure_triage"
- `whetstone_*_test_*` tools labeled qa because "test" ⊆ "test_output"
- Tasks with "scanner", "auditor", "diagnostics" labeled reviewer/qa incorrectly
**Fix:** switched to `re.compile(r'\b' + re.escape(tok) + r'\b')` word-boundary
matching for all three token sets (QA, ARCHITECT, REVIEWER).
**Impact:** 67 label changes in the sprint plan corpus. All were false positives
moving from reviewer/qa/architect → implementer. The fix is correct for all
examined cases.
**File changed:** `specialists/scripts/gen_worker_type_data.py`
### 2. Synthetic implementer data — gen_implementer_synthetic.py
**Problem:** implementer was labeled by keyword *absence* (default). Model never
saw strong positive implementer signal, causing 75% accuracy on the class.
**Fix:** added `specialists/scripts/gen_implementer_synthetic.py` — generates 158
synthetic implementer examples in two formats:
- Short title format (sprint-plan style): "Implement X", "Build X", "Add X", etc.
- Title | intent format (projects style): "Build X | Implement Y with Z features"
Includes "ambiguous-noun" examples: tasks where the construction verb is explicit
but the object contains words like "audit", "review", "triage" (e.g. "Build audit
log service"). These conflict with the heuristic labeling on the same patterns —
see Priority 1 below.
**Output files:**
- `specialists/data/generated/worker_type_implementer_synthetic.train.tsv` (135 rows)
- `specialists/data/generated/worker_type_implementer_synthetic.eval.tsv` (23 rows)
- `specialists/data/generated/worker_type_v2_train.tsv` (combined + synthetic, 690 rows)
- `specialists/data/generated/worker_type_v2_eval.tsv` (combined + synthetic, 120 rows)
### 3. v2 sweep results (pilot-only, 3000 steps)
| Tier | Overall | implementer | reviewer | architect | qa |
|------|---------|-------------|----------|-----------|-----|
| small_plus | 89.2% | **85.7%** | 92.3% | 91.3% | 90.9% |
| medium | 85.8% | — | — | — | — |
Confusion (small_plus):
- implementer → reviewer: 4 (7 errors total on 49 eval)
- implementer → architect: 3
- architect → implementer: 2
- qa → implementer: 2
- reviewer → implementer: 1
Capacity plateau confirmed: medium worse than small_plus. Data, not capacity, is the
bottleneck.
---
## Priority 1: Resolve the synthetic data conflict (worker_type)
The synthetic implementer data includes "Build audit log service",
"Implement review scoring engine" etc. labeled as implementer. But the heuristic
also labels similar sprint plan steps as reviewer (because "audit"/"review" match
REVIEWER_TOKENS with word boundaries). This creates conflicting labels in the
combined dataset.
**Two options:**
**Option A (recommended): Remove ambiguous-noun examples from synthetic set.**
Keep only synthetic examples where the construction verb is paired with unambiguous
nouns (auth, billing, webhook, scheduler, etc.). No conflict with heuristic labels.
Simpler and more conservative.
**Option B: Extend heuristic with construction-verb override.**
Add a CONSTRUCTION_VERBS set. If the text starts with "Build", "Implement", "Add",
"Write", etc., classify as implementer regardless of other tokens.
More aggressive, requires re-checking all 67 changed labels.
To apply Option A: edit `gen_implementer_synthetic.py`, remove the
"Ambiguous-noun implementer" section from `SHORT_TITLES` and `TITLE_INTENT_TEMPLATES`,
then re-run to regenerate v2 files and retrain.
Current 85.7% implementer is already at target (handoff said >85%). But the
conflicting labels are a data quality issue worth resolving before declaring done.
### Priority 2: verification_type — combined dataset
Currently 84.3% (capacity plateau confirmed). Try the same approach that worked for
worker_type: combine sprint plan TSV with `verification_type_projects_train.tsv`.
```bash
cat specialists/data/generated/verification_type_train.tsv \
specialists/data/generated/verification_type_projects_train.tsv \
> specialists/data/generated/verification_type_combined_train.tsv
cat specialists/data/generated/verification_type_eval.tsv \
specialists/data/generated/verification_type_projects_eval.tsv \
> specialists/data/generated/verification_type_combined_eval.tsv
.venv/bin/python3 specialists/scripts/capacity_sweep.py \
--name verification_type_combined \
--train specialists/data/generated/verification_type_combined_train.tsv \
--eval specialists/data/generated/verification_type_combined_eval.tsv \
--labels "unit,integration,schema,smoke,docs" \
--runs-dir /mnt/storage/fabricate_runs \
--results-out specialists/eval/results/verification_type_combined_sweep.json \
--pilot-only
```
### Priority 3: prereq_op — still blocked
No progress possible until whetstone_DSL Sprint 004 (pipeline decision audit) adds
discriminative fields to the taskitem schema. Do not pursue.
---
## Eval Set Quality Note
The synthetic eval (23 of 120 rows) is drawn from the same template pool as the
synthetic train. This weakens eval as a generalization test. Once the conflicting
labels are resolved and the dataset stabilizes, hold out a completely fresh eval set
that was never touched during data generation iteration.
---
## Run Commands
```bash
cd /home/bill/Documents/CLionProjects/whetstone_DSL
# Re-run v2 sweep after resolving synthetic conflict (Option A)
.venv/bin/python3 specialists/scripts/capacity_sweep.py \
--name worker_type_v2 \
--train specialists/data/generated/worker_type_v2_train.tsv \
--eval specialists/data/generated/worker_type_v2_eval.tsv \
--labels "implementer,reviewer,architect,qa" \
--runs-dir /mnt/storage/fabricate_runs \
--results-out specialists/eval/results/worker_type_v2_sweep.json \
--pilot-only
# Error inspection (loads v2 small_plus checkpoint)
.venv/bin/python3 /tmp/show_errors.py
```
## Checkpoints
- `whetstone_worker_type_v2_small_plus/checkpoint.pt` — 89.2% overall, 85.7% implementer
- `whetstone_automatability_stage1_binary/checkpoint.pt` — stage 1 (binary) 100%
- `whetstone_automatability_stage2_4way/checkpoint.pt` — stage 2 (4-way) 100%
- `whetstone_verification_type_small_plus/checkpoint.pt` — 84.3% (needs more data)