Skip to content
Merged
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
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:5653` (`_declared_scope`) <!-- re-pinned 2026-07-14 build-entry-spec-echo: 5603→5653 (the _touches_paths helper above it the pin drifts on ANY upstream add.py change; symbol cited so the drift self-describes; todo #30 seams-symbol-pins retires this class) -->
Anchor: `add-method/tooling/add.py:5688` (`_declared_scope`) <!-- re-pinned 2026-07-14 status-orientation-diet: 5677→5688 (cmd_status grew the "now" resume glance card above it; the pin drifts on ANY upstream add.py change; symbol cited so the drift self-describes; todo #30 seams-symbol-pins retires this class) -->
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
314 changes: 306 additions & 8 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": "help-habit-kill",
"tasks": {
"add-check": {
"title": "add.py check: validate .add project integrity",
Expand Down Expand Up @@ -9366,10 +9366,302 @@
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"init-idempotent-nudge": {
"title": "init on an existing project is a loud no-op resume pointer",
"phase": "done",
"gate": "PASS",
"milestone": "call-residuals",
"depends_on": [],
"created": "2026-07-14T10:41:44+00:00",
"updated": "2026-07-14T11:10:06+00:00",
"fast": true,
"freeze": {
"version": "v1",
"frozen_at": "2026-07-14T10:57:51+00:00",
"approved_by": "Tin Dang",
"actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"flag_verified": true,
"tripwire": {
"contract_md5": "d1fbc081e7e61534c07d6ea3e4e419ce",
"tests": {}
},
"scope": {
"declared": [],
"snapshot_md5": "a284323b0d97a8044a7df8866269ac65"
},
"heal": {
"attempts": 1,
"history": [
{
"at": "2026-07-14T11:08:34+00:00",
"reason": "scope_violation: task 'init-idempotent-nudge' touched outside its declared \u00a75 Scope \u2014 add-method/src/add_method/_bundled/tooling/add.py \u00b7 add-method/tooling/engine_pin.py \u00b7 add-method/tooling/test_add.py (3 total)",
"source": "scope"
}
]
},
"recross": {
"by": "Tin Dang",
"at": "2026-07-14T11:09:53+00:00",
"from_phase": "build"
},
"gate_actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"scope-first-draft": {
"title": "freeze scope echo emits a paste-ready \u00a75 Scope line when declared tokens miss \u00a73 Touches",
"phase": "done",
"gate": "PASS",
"milestone": "call-residuals",
"depends_on": [],
"created": "2026-07-14T11:11:08+00:00",
"updated": "2026-07-14T12:03:17+00:00",
"fast": true,
"freeze": {
"version": "v1",
"frozen_at": "2026-07-14T11:15:41+00:00",
"approved_by": "Tin Dang",
"actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"flag_verified": true,
"tripwire": {
"contract_md5": "5d65a05e4bf27cc8623b6c6fdb6c6244",
"tests": {}
},
"scope": {
"declared": [
"add-method/tooling/add.py",
"add-method/src/add_method/_bundled/tooling/add.py",
"add-method/.add/tooling/add.py",
"add-method/tooling/engine_pin.py",
"add-method/src/add_method/_bundled/tooling/engine_pin.py",
"add-method/.add/tooling/engine_pin.py",
"add-method/tooling/test_scope_first_draft.py"
],
"snapshot_md5": "f38a25ed9f2f6ac8b1fdfe3e4b1d66d5"
},
"heal": {
"attempts": 1,
"history": [
{
"at": "2026-07-14T12:02:23+00:00",
"reason": "scope_violation: task 'scope-first-draft' touched outside its declared \u00a75 Scope \u2014 add-method/src/add_method/_bundled/tooling/engine_pin.py (1 total)",
"source": "scope"
}
]
},
"recross": {
"by": "Tin Dang",
"at": "2026-07-14T12:03:02+00:00",
"from_phase": "build"
},
"gate_actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"template-touches-scope-dedup": {
"title": "templates dedup: \u00a73 Touches names symbols, \u00a75 Scope owns the file write-set",
"phase": "done",
"gate": "PASS",
"milestone": "call-residuals",
"depends_on": [],
"created": "2026-07-14T12:05:57+00:00",
"updated": "2026-07-14T12:20:53+00:00",
"fast": true,
"freeze": {
"version": "v1",
"frozen_at": "2026-07-14T12:11:30+00:00",
"approved_by": "Tin Dang",
"actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"flag_verified": true,
"tripwire": {
"contract_md5": "8cf394016a210500452e7e51b97fb08e",
"tests": {}
},
"scope": {
"declared": [
"add-method/tooling/templates/TASK.md.tmpl",
"add-method/tooling/templates/TASK.fast.md.tmpl",
"add-method/src/add_method/_bundled/tooling/templates/TASK.md.tmpl",
"add-method/src/add_method/_bundled/tooling/templates/TASK.fast.md.tmpl",
"add-method/tooling/test_template_touches_scope_dedup.py",
"add-method/tooling/test_fastlane_ground_lite.py"
],
"snapshot_md5": "b7f5f106059c82c625382e3c54cc48e6"
},
"gate_actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"template-hint-dedup": {
"title": "template hints demand distinct content: kill \u00a75/\u00a76/exit-criteria restatement",
"phase": "done",
"gate": "PASS",
"milestone": "call-residuals",
"depends_on": [],
"created": "2026-07-14T12:43:57+00:00",
"updated": "2026-07-14T13:03:12+00:00",
"fast": true,
"freeze": {
"version": "v1",
"frozen_at": "2026-07-14T12:46:29+00:00",
"approved_by": "Tin Dang",
"actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"flag_verified": true,
"tripwire": {
"contract_md5": "597c4434274b7de7e860e48f91e8962e",
"tests": {}
},
"scope": {
"declared": [
"add-method/tooling/templates/TASK.fast.md.tmpl",
"add-method/tooling/templates/MILESTONE.md.tmpl",
"add-method/src/add_method/_bundled/tooling/templates/TASK.fast.md.tmpl",
"add-method/src/add_method/_bundled/tooling/templates/MILESTONE.md.tmpl",
"add-method/tooling/test_template_hint_dedup.py",
"add-method/tooling/test_strategy_facets.py"
],
"snapshot_md5": "93ae9adf15dc0e629986b007accb0e42"
},
"recross": {
"by": "Tin Dang",
"at": "2026-07-14T12:56:25+00:00",
"from_phase": "build"
},
"gate_actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"status-orientation-diet": {
"title": "default status leads with a resume glance card (phase + next verb + file)",
"phase": "done",
"gate": "PASS",
"milestone": "call-residuals",
"depends_on": [],
"created": "2026-07-14T13:40:52+00:00",
"updated": "2026-07-14T13:52:36+00:00",
"fast": true,
"freeze": {
"version": "v1",
"frozen_at": "2026-07-14T13:42:36+00:00",
"approved_by": "Tin Dang",
"actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"flag_verified": true,
"tripwire": {
"contract_md5": "4b56400f82ab5aaf6e1582add3ba30d4",
"tests": {}
},
"scope": {
"declared": [
"add-method/tooling/add.py",
"add-method/src/add_method/_bundled/tooling/add.py",
"add-method/.add/tooling/add.py",
"add-method/tooling/engine_pin.py",
"add-method/src/add_method/_bundled/tooling/engine_pin.py",
"add-method/.add/tooling/engine_pin.py",
"add-method/tooling/test_status_orientation_diet.py"
],
"snapshot_md5": "56229ca03d9665c6d4ff61221f0405b0"
},
"heal": {
"attempts": 1,
"history": [
{
"at": "2026-07-14T13:52:16+00:00",
"reason": "scope_violation: task 'status-orientation-diet' touched outside its declared \u00a75 Scope \u2014 add-method/src/add_method/_bundled/tooling/engine_pin.py (1 total)",
"source": "scope"
}
]
},
"recross": {
"by": "Tin Dang",
"at": "2026-07-14T13:52:35+00:00",
"from_phase": "build"
},
"gate_actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"help-habit-kill": {
"title": "unknown subcommand \u2192 concise close-match + resume pointer, no 50-choice dump",
"phase": "done",
"gate": "PASS",
"milestone": "call-residuals",
"depends_on": [],
"created": "2026-07-14T13:53:33+00:00",
"updated": "2026-07-14T14:05:37+00:00",
"fast": true,
"freeze": {
"version": "v1",
"frozen_at": "2026-07-14T13:55:27+00:00",
"approved_by": "Tin Dang",
"actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
},
"flag_verified": true,
"tripwire": {
"contract_md5": "c5aeefb7091dddd186124ad96edccc3a",
"tests": {}
},
"scope": {
"declared": [
"add-method/tooling/add.py",
"add-method/src/add_method/_bundled/tooling/add.py",
"add-method/.add/tooling/add.py",
"add-method/tooling/engine_pin.py",
"add-method/src/add_method/_bundled/tooling/engine_pin.py",
"add-method/.add/tooling/engine_pin.py",
"add-method/tooling/test_help_habit_kill.py"
],
"snapshot_md5": "9ce320655dd39844c52f83cccb44b534"
},
"gate_actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
}
},
"created": "2026-05-28T15:39:04+00:00",
"updated": "2026-07-14T05:39:19+00:00",
"updated": "2026-07-14T14:05:37+00:00",
"milestones": {
"v1-1": {
"title": "v1.1 \u2014 adoption & ergonomics",
Expand Down Expand Up @@ -9787,11 +10079,16 @@
"stage": "mvp",
"status": "active",
"created": "2026-07-14T04:33:38+00:00",
"updated": "2026-07-14T04:33:38+00:00",
"confirmed": false,
"confirmed_at": null,
"confirmed_by": null,
"await_confirm": true
"updated": "2026-07-14T10:41:44+00:00",
"confirmed": true,
"confirmed_at": "2026-07-14T10:41:44+00:00",
"confirmed_by": "tindang",
"await_confirm": true,
"actor": {
"name": "Tin Dang",
"email": "tindang.ht97@gmail.com",
"source": "git"
}
}
},
"active_milestone": "call-residuals",
Expand Down Expand Up @@ -10649,7 +10946,8 @@
"plan-legibility": "relations-surface",
"ceremony-to-effort": "fold-draft-at-close",
"call-floor": "skill-orient-split",
"six-phase-loop": "installer-shared-namespace-guard"
"six-phase-loop": "installer-shared-namespace-guard",
"call-residuals": "help-habit-kill"
},
"todos": [
{
Expand Down
Loading