Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .add/GLOSSARY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# GLOSSARY (one name per concept — used everywhere: specs, contracts, code)

## Sensitivity classes
The risk-CLASS a task declares (`sensitivity:` in the TASK header) — read live by freeze/status/check.
The base four (security · data · architecture · mechanical) are method-universal and always apply.

Datetime, money, or timezone arithmetic in scope ⇒ declare `data` (the full lane): the value
formats themselves are the risk surface — a suite testing a friendlier dialect than the spec's
own examples stays green through a real crash (the benchmark wm2 aware/naive miss,
results/2026-07-wv1-rep0.md).


ADD: AI-Driven Development — the orchestration engine (the build/verify discipline) and this skill.
AIDD: the umbrella method and the book that explains the why (the trust layer).
Task: one feature taken through the flow; lives in `.add/tasks/<slug>/TASK.md`.
Expand Down
2 changes: 1 addition & 1 deletion .add/SEAMS.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Citations: 232 files reference "byte-identical" in `.add/tasks/` — method:

## scope-token-grammar
Name: §5 "Scope (may touch):" token-resolution grammar
Anchor: `add-method/tooling/add.py:5269` (`_declared_scope`) <!-- re-pinned 2026-07-10 x16: 4786→4798→4870→4892→4896→4900→4918→5002→5011→5165→5173→5206→5219→5231→5269 (branch merge folded the remote tiny-plan-small-scope lane into cmd_new_task above it — the pin drifts on ANY upstream add.py change; symbol cited so the drift self-describes) -->
Anchor: `add-method/tooling/add.py:5337` (`_declared_scope`) <!-- re-pinned 2026-07-11 x18: 4786→…→5269→5324→5337 (fast-lane-boundary-line's cmd_freeze boundary guard above it — the pin drifts on ANY upstream add.py change; symbol cited so the drift self-describes) -->
Contract: `_declared_scope` reads ONLY the first physical line after the §5 header — a
wrapped multi-line list silently truncates. Each backticked token then resolves
independently: `./...` = this task's dir, any token containing `/` = project-root-relative,
Expand Down
35 changes: 35 additions & 0 deletions .add/milestones/quality-floors/RETRO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
════════════════════════════════════════════════════════════════════════
quality-floors · Quality floors for lean ADD
════════════════════════════════════════════════════════════════════════
VERDICT DONE
TASKS 3/3 done CRITERIA 0/0 met
GATES 3 PASS WAIVERS none

goal convert the WV1 wm2 miss (own tests spoke a friendlier input
dialect than the spec's own examples → aware/naive datetime crash
shipped green) into narrow, ~zero-turn floors — the lean lane
keeps its −27–33% cost while the failure CLASS is closed; quality
is bought with mechanical floors, never with re-added ceremony
closed by Tin Dang <tindang.ht97@gmail.com>

TASK PHASE GATE TESTS PROGRESS
───────────────────────────────────────────────────────────────────────
spec-dialect-floor done PASS 6† ●●●●●●●●●
dialect-check-and-data-voc… done PASS 6† ●●●●●●●●●
fast-lane-boundary-line done PASS 9† ●●●●●●●●●
legend ● reached ◉ current ○ pending spec→…→done
† counted at the §4-declared path

GATED BY
spec-dialect-floor PASS Tin Dang <tindang.ht97@gmail.com>
dialect-check-and-data-… PASS Tin Dang <tindang.ht97@gmail.com>
fast-lane-boundary-line PASS Tin Dang <tindang.ht97@gmail.com>

EXIT CRITERIA ○○○○○○○○○○ 0/0 met

LEARNINGS none

SPEC DELTAS 27 open deltas — resolve: new-task --from-delta / drop-delta

DECIDE NEXT consolidate learnings + archive-milestone quality-floors
════════════════════════════════════════════════════════════════════════
37 changes: 15 additions & 22 deletions .add/state.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"project": "AIDD / ADD Methodology",
"stage": "mvp",
"active_task": null,
"active_task": "persona-nudge-quiet",
"tasks": {
"add-check": {
"title": "add.py check: validate .add project integrity",
Expand Down Expand Up @@ -7547,7 +7547,7 @@
}
},
"created": "2026-05-28T15:39:04+00:00",
"updated": "2026-07-10T17:12:59+00:00",
"updated": "2026-07-10T22:50:47+00:00",
"milestones": {
"v1-1": {
"title": "v1.1 \u2014 adoption & ergonomics",
Expand Down Expand Up @@ -7867,26 +7867,9 @@
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"quality-floors": {
"title": "Quality floors for lean ADD",
"goal": "",
"stage": "mvp",
"status": "active",
"created": "2026-07-10T17:12:27+00:00",
"updated": "2026-07-10T17:12:59+00:00",
"tiny": true,
"confirmed": true,
"confirmed_at": "2026-07-10T17:12:59+00:00",
"confirmed_by": "tindang",
"actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
}
},
"active_milestone": "quality-floors",
"active_milestone": "add-lean-loop",
"archived": [
{
"slug": "v5",
Expand Down Expand Up @@ -8701,6 +8684,17 @@
"skip-error-ergonomics"
],
"archived": "2026-07-11"
},
{
"slug": "quality-floors",
"title": "Quality floors for lean ADD",
"tasks": 3,
"task_slugs": [
"spec-dialect-floor",
"dialect-check-and-data-vocab",
"fast-lane-boundary-line"
],
"archived": "2026-07-11"
}
],
"active_milestones": [
Expand All @@ -8709,8 +8703,7 @@
"build-strategy-facets",
"delta-drain",
"add-bench",
"add-lean-loop",
"quality-floors"
"add-lean-loop"
],
"active_tasks": {
"flow-simplification": "phase-review",
Expand Down
102 changes: 102 additions & 0 deletions .add/tasks/dialect-check-and-data-vocab/TASK.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# TASK: §6 dialect check line + datetime/money/tz ⇒ data sensitivity vocabulary

slug: dialect-check-and-data-vocab · created: 2026-07-11 · stage: mvp
milestone: quality-floors
autonomy: auto
phase: done
fast: true
oneshot: true
gate_mode: ai-plan-verify

> Fast lane — one small task, minimal sections, filled top-to-bottom. The trust floor still
> holds: a FROZEN §3 contract · ≥1 red test before build · a recorded §6 gate (security = HARD-STOP).
> The acceptance scenario collapses into §1 `Accept:`; OBSERVE is one optional line at the gate.

---

## 0 · GROUND — the real codebase

Touches (files · symbols): `add-method/tooling/templates/TASK.md.tmpl:127-129` (§6 checklist + `### Deep checks` block — the shallow audit already measures that block, so a dialect bullet there is audit-counted with ZERO new engine code) · `templates/TASK.fast.md.tmpl:79-80` (fast §6 checklist) · `templates/GLOSSARY.md.tmpl:5-15` (`## Sensitivity classes` — guidance must be PROSE, never a `- token:` bullet, or `_SENS_CLASS_LINE_RE` mints a new class) · `.add/GLOSSARY.md` (this project's own, section currently absent) · `sensitivity.md` skill guide ×3 twins · templates ×3 tooling twins; engine_manifest covers add_engine/*.py ONLY → no pin re-aim (add.py untouched)
Context (working folder): quality-floors MILESTONE.md items 3+4; evidence = benchmark/results/2026-07-wv1-rep0.md wm2 root cause
Honors (patterns / conventions): §6 already uses `<how / where>` placeholders (safe to mirror; the v16 tag census binds §1-§4 spans, not §6) · template/guide edits propagate to all twins before the gate · guidance-not-token (base `data` class, no new vocabulary)
Anchors the contract cites: `TASK.md.tmpl ### Deep checks` · `TASK.fast.md.tmpl §6` · `GLOSSARY.md.tmpl ## Sensitivity classes` · `_project_sensitivity_domain` (must stay ()-stable) · `sensitivity.md`
Ground SHA: `f9d2303`
Skip rationale: scenarios — two template lines + two prose entries, §1 Accept covers; observe — one optional delta line at the gate

---

## 1 · SPECIFY — the rules

Feature: quality-floors levers 3+4 — a §6 input-dialect check line in BOTH task templates (audit-counted via the existing Deep-checks/shallow machinery) + the datetime/money/timezone ⇒ `data` sensitivity guidance in the GLOSSARY template, this project's GLOSSARY, and the sensitivity skill guide (wm2 evidence named)
Must:
- TASK.md.tmpl `### Deep checks` gains `- [ ] DIALECT — the tests speak the same value formats as the spec's own examples (spec-dialect floor): <what confirmed>` — inside the block the `shallow` audit already measures
- TASK.fast.md.tmpl §6 checklist gains the condensed twin line
- GLOSSARY.md.tmpl `## Sensitivity classes` gains PROSE guidance (not a bullet): datetime/money/timezone arithmetic ⇒ declare `data` (full lane), wm2 evidence in one clause; `.add/GLOSSARY.md` gains the same section content for THIS project
- sensitivity.md skill guide names the rule + the wm2 evidence; all template/guide twins byte-identical
- the guidance mints NO new sensitivity token — `_project_sensitivity_domain` over a fresh render stays ()
Reject:
- guidance written as a `- token:` bullet -> "vocab_leak" (a new class token would silently widen freeze/status/check vocabulary)
- a §1-§4 template span gaining a bare angle-tag -> "tag_census_collision" (v16 hazard; §6 only)
Accept: Given the templates render a fresh task, When §6 is read, Then both templates carry the dialect line (full inside Deep checks) AND the GLOSSARY template + project GLOSSARY + sensitivity guide carry the datetime/money/tz ⇒ data rule AND `_project_sensitivity_domain` of a fresh render is unchanged ()
Assumptions: ⚠ template guard suites may pin §6 line counts or exact Deep-checks content — if wrong: those pins red on the new line and each gets a TESTS-re-cross amendment in ITS owning suite (cost: one re-cross loop)

---

## 3 · CONTRACT — freeze the shape

```
TASK.md.tmpl / ### Deep checks (audit-counted via `shallow`):
- [ ] DIALECT — the tests speak the same value formats as the spec's own examples
(spec-dialect floor): <what confirmed>
TASK.fast.md.tmpl / §6 checklist:
- [ ] input dialect held — tests speak the spec's example formats (spec-dialect floor)
GLOSSARY.md.tmpl + .add/GLOSSARY.md / ## Sensitivity classes (PROSE, no bullet):
"Datetime, money, or timezone arithmetic ⇒ declare `data` …(wm2 evidence clause)"
sensitivity.md (×3 skill twins): the same rule + evidence, one short block.
success: fresh render carries the lines; _project_sensitivity_domain stays ().
rejections: vocab_leak (no `- token:` guidance) · tag_census_collision (§6 only).
```

`Least-sure flag surfaced at freeze:` [test] existing template-guard suites may pin §6/Deep-checks content or counts — the build may red THEIR pins, and each amendment must go through a TESTS re-cross in the owning suite, never a quiet edit; cost if many pin: several re-cross loops
Status: FROZEN @ v1 — approved by claude-fable-5
Freeze mode: ai-plan-verify — verified by claude-fable-5 at 2026-07-10T17:38:23+00:00

### AI-verify record (required when gate_mode: ai-plan-verify)
- [x] §0 GROUND anchors resolve in the current tree — template line numbers, GLOSSARY tmpl section, sensitivity.md ×3, _SENS_CLASS_LINE_RE reader all grepped at f9d2303
- [x] §1 every Must + every Reject present, each Reject paired with an error code (vocab_leak · tag_census_collision)
- [x] §3 CONTRACT shape is concrete — exact line text per surface
- [x] Lowest-confidence flag surfaced and substantive — template-guard pin collisions with the re-cross cost
Verified by: claude-fable-5 (session ee9aef91, orchestrator inline) · at: 2026-07-10T21:30:00Z

---

## 4 · TESTS — failing-first (red)

Plan: test_dialect_vocab_lines.py — test_full_template_deep_checks_carries_dialect_line · test_fast_template_carries_dialect_line · test_glossary_template_carries_data_guidance_as_prose (+ regex proves no `- token:` bullet added) · test_project_glossary_carries_the_rule · test_sensitivity_guide_names_wm2_evidence · test_no_new_sensitivity_token (render a fresh project, _project_sensitivity_domain == ()).
Tests live in: `add-method/tooling/test_dialect_vocab_lines.py` · MUST run red before Build.

---

## 5 · BUILD — AI writes code

Scope (may touch): `add-method/` `.claude/` `.add/GLOSSARY.md` `tmp/`
Strategy & known-problem fixes: 1. red pins 2. canonical template/guide/glossary edits 3. cp to every twin 4. full tooling suite; traps: guidance as prose only (vocab_leak) · §6 only (tag census) · twins before the gate
Approach (domain strategy): book-technical-writer stance — the floor's prose surface: one checklist line a verifier can act on, one glossary rule a task author can route by
Strategy actually used: as planned, plus the byte-ceiling absorption the lean rule demands — the DIALECT line and sensitivity.md guidance were compressed (all §3-cited phrases held, pinned by the red suite) and ~183B of existing sensitivity.md prose trimmed so pool 51885/tree 145974 fences hold; 5 sibling pins amended via TESTS re-cross exactly as the least-sure flag predicted (4 Deep-checks fixtures now fill the DIALECT placeholder; fast-lane's task-local empty-git-diff guard re-pinned to its durable invariant: skip machinery stays fast-lane-only); a 4th gitignored dogfood twin (add-method/.add/tooling/templates/) joined the sync set.
Code lives in: `./src/` · Constraints: change no test, no contract; allow-list packages only.

---

## 6 · VERIFY — evidence + gate

- [x] all tests pass · coverage held · no test or contract altered during build — full tooling suite 3374 passed + 162 subtests, 0 failed; test amendments (5) went through an explicit TESTS re-cross, never a quiet edit
- [x] green was EARNED — the 6 red pins assert rendered template/guide CONTENT (phrase + placement + no-bullet regex), not the build's own strings; `_project_sensitivity_domain` () proven over a fresh render
- [x] no exposed secrets, injection openings, or unexpected dependencies — prose/template-only change; no new imports, no engine code touched (ENGINE_MD5/PKG unchanged)

Build expectations (from §1 Accept + §3 CONTRACT): a fresh render carries the DIALECT line inside `### Deep checks` (full) and the condensed §6 line (fast); GLOSSARY.md.tmpl + `.add/GLOSSARY.md` + sensitivity.md ×3 carry datetime/money/tz ⇒ `data` with the wm2 evidence; no new sensitivity token — confirmed by test_dialect_vocab_lines.py 6/6 + budget/parity/audit suites green (3374 total).

### GATE RECORD
Outcome: PASS
Reviewed by: Tin Dang · date: 2026-07-11
[SPEC · open] lever-1 refinement: `_dialect_gaps` scans the §3 RAW body, which includes engine-written freeze metadata — this task's own tests→build crossing warned `aware-iso-timestamp` on its `Freeze mode: … 2026-07-10T17:38:23+00:00` stamp, a false positive of the v1 scan span; candidate fix: scan only §3 fenced blocks or strip the Status/Freeze-mode lines (evidence: crossing output at the phase-build re-cross, this task, 2026-07-11)

Loading
Loading