@chinhae/atw-cli 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,8 +4,8 @@
4
4
  "breaking": true,
5
5
  "recommendMigrate": true,
6
6
  "changelog": "Glossary rename: every bundled skill that read or wrote CONTEXT.md / CONTEXT-MAP.md now uses GLOSSARY.md / GLOSSARY-MAP.md, and atw-domain-modeling's format reference is GLOSSARY-FORMAT.md; there is no fallback to the old names. New bundled skill atw-implement-spec (user-triggered): one orchestrating session works a sliced spec as a task graph, dispatching implementer sub-agents across the ready frontier, each in its own worktree, landing everything on one integration branch, reviewing once at the end with a single fix round and one focused re-check, then writing spec updates back before the closing commit. tickets.py claim gains --parallel for it: several tickets may sit at Impl: doing, implementation_base_sha is recorded once for the run, check.jsonl carries no current-ticket line, and task.json records meta.ticket_mode = parallel so the sub-agent context hook reads several doing tickets as a run in progress instead of a contradiction; a plain claim still refuses a second ticket and puts the task back in serial mode. workflow.md, the per-turn implement breadcrumb, the continue command and the Codex mode banner now describe both ways through stop ③. Removed bundled skills: atw-merge, dejargonizer, noob-mode, oxy-explanation, oxy-learning-hub, show-me. Synced with upstream skill changes: atw-interview separates the questions of a round and words each so yes accepts the recommendation; atw-code-review lists every standards file and issues its sub-agents together; atw-implement states the ticket it was given and stops if the tracker marks a different one in progress, and calls its companion skills through the Skill tool; atw-tickets makes tickets sub-issues of an existing source issue on a real tracker; atw-map keeps triage labels off map tickets, wires cross-references with real ids, reads the ticket type from where the tracker records it, and puts research findings where the tracker doc says before falling back to a throwaway branch; atw-init-repo creates missing triage labels on GitHub/GitLab, documents the sub-issue operation and fixes several gh/glab commands; atw-tdd, atw-diagnosing-bugs and atw-handoff each gain one clarification. Skills that told the model to call the Skill tool for the user-only atw-init-repo now tell the user to run /atw-init-repo. atw init: an interactive run first asks which language its own prompts use (中文 or English; wording only, nothing written to the project depends on it), and no longer asks whether to install the Claude Code statusLine — --with-statusline still installs it. At the end of every interactive run, first or repeated, init offers extra skills: the list and the skills are downloaded from github.com/LFT-OXY/oxy-Tools, shown with one line each, and the ticked ones are copied into the skill directory of each configured platform and recorded in .atw/.optional-skills.json. atw update replaces a recorded extra skill, whole directory and without asking, when the list names another version; atw uninstall removes the recorded ones; a same-named directory ATW did not install is never touched. With --yes or outside a terminal both questions are skipped. New bundled skill atw-noob-mode: a plain-language mode for users who are not engineers, switched on by saying so or by running /atw-noob-mode. The switch is a noob_mode=on line in the gitignored .atw/.developer, so it is personal; while it is on, the per-turn hook, the session-start hook and get_context.py append the reminder from workflow.md's new [workflow-state:noob_mode] block, which keeps the mode in force across stages instead of fading after the skill was loaded once. scripts/noob_mode.py on|off|status flips it.",
7
- "migrationGuide": "### What changed\n\n1. **The project glossary is now `GLOSSARY.md`.** Every bundled skill that read or wrote `CONTEXT.md` / `CONTEXT-MAP.md` (atw-domain-modeling, atw-init-repo, atw-triage, atw-tdd, atw-diagnosing-bugs, atw-codebase-design, atw-improve-codebase-architecture) now uses `GLOSSARY.md` / `GLOSSARY-MAP.md`. There is no fallback to the old names: a glossary left at `CONTEXT.md` is simply not found.\n2. **Six bundled skills are gone:** atw-merge, dejargonizer, noob-mode, oxy-explanation, oxy-learning-hub, show-me. dejargonizer and noob-mode are succeeded by the new built-in `/atw-noob-mode`; explanation, oxy-learning-hub and show-me can be installed again as extra skills by re-running `atw init`.\n3. **New skill `/atw-implement-spec`** implements a whole sliced spec in one parallel run. `tickets.py claim` gained `--parallel` for it. The per-ticket `/atw-implement` flow is unchanged.\n4. **`atw init` asks for a display language and offers extra skills**, and no longer asks about the Claude Code statusLine (`--with-statusline` still installs it). Extra skills are downloaded from `LFT-OXY/oxy-Tools`; `atw update` keeps them current and `atw uninstall` removes them.\n5. **New skill `/atw-noob-mode`**, a personal plain-language mode that stays on across stages until switched off.\n\n### What `atw update --migrate` does for you\n\n- Offers to rename `CONTEXT.md` → `GLOSSARY.md` and `CONTEXT-MAP.md` → `GLOSSARY-MAP.md` at the repository root. These are your files, so it asks before each one. Skip only if the file is not the ATW glossary.\n- Deletes the installed files of the six removed skills, and the old `atw-domain-modeling/CONTEXT-FORMAT.md`, from every platform skill directory — but only copies you never edited. An edited copy is left where it is and reported.\n\n### What is left for you\n\n- [ ] **Multi-context repos:** rename each per-context `CONTEXT.md` to `GLOSSARY.md`, and fix the links inside `GLOSSARY-MAP.md` to match. The updater only knows the two root paths.\n- [ ] **`docs/agents/domain.md` and `docs/agents/issue-tracker.md`:** `/atw-init-repo` wrote these into your repo and they still name `CONTEXT.md`. Replace the name in both, or re-run `/atw-init-repo` to regenerate them.\n- [ ] **Any other mention** of `CONTEXT.md` / `CONTEXT-MAP.md` in `AGENTS.md`, `CLAUDE.md`, ADRs under `docs/adr/`, or `.atw/spec/`.\n- [ ] **Edited copies of removed skills** the updater reported as kept: delete them if you no longer want them.\n\nNothing else needs action. Open tasks, tickets and `task.json` files are compatible as they are.",
8
- "aiInstructions": "- Find every glossary file still on the old name: `git ls-files '*CONTEXT.md' '*CONTEXT-MAP.md'`. Before renaming one, open it and confirm it is an ATW glossary (a `## Language` heading with bold terms and `_Avoid_:` lines, or for the map a list of links to per-context files). Leave an unrelated file that only shares the name alone, and say that you did.\n- Rename with `git mv <dir>/CONTEXT.md <dir>/GLOSSARY.md` (and `CONTEXT-MAP.md` → `GLOSSARY-MAP.md`) so history follows the file. If a `GLOSSARY.md` already exists beside it, stop and ask the user which one is current instead of merging on your own.\n- After the renames, update the references: `grep -rnE 'CONTEXT(-MAP)?\\.md' --include='*.md' .` and fix each hit that points at a glossary — links inside `GLOSSARY-MAP.md`, `docs/agents/domain.md`, `docs/agents/issue-tracker.md`, `AGENTS.md` / `CLAUDE.md`, ADRs, `.atw/spec/`. Do not edit anything under `.atw/tasks/archive/`: archived tasks are a record of what was true then.\n- Do not rewrite the headings in `docs/agents/*.md` while you are there; other skills match them literally.\n- If the updater reported removed-skill files as kept because they were modified, list them for the user and ask before deleting. Never delete them silently.\n- Verify at the end: the first grep returns nothing outside archived tasks, and `git status` shows only renames and the reference edits.",
7
+ "migrationGuide": "### What changed\n\n1. **The project glossary is now `GLOSSARY.md`.** Every bundled skill that read or wrote `CONTEXT.md` / `CONTEXT-MAP.md` (atw-domain-modeling, atw-init-repo, atw-triage, atw-tdd, atw-diagnosing-bugs, atw-codebase-design, atw-improve-codebase-architecture) now uses `GLOSSARY.md` / `GLOSSARY-MAP.md`. There is no fallback to the old names: a glossary left at `CONTEXT.md` is simply not found.\n2. **Six bundled skills are gone:** atw-merge, dejargonizer, noob-mode, oxy-explanation, oxy-learning-hub, show-me. dejargonizer and noob-mode are succeeded by the new built-in `/atw-noob-mode`; explanation, oxy-learning-hub and show-me can be installed again as extra skills by re-running `atw init`.\n3. **New skill `/atw-implement-spec`** implements a whole sliced spec in one parallel run. `tickets.py claim` gained `--parallel` for it. The per-ticket `/atw-implement` flow is unchanged.\n4. **`atw init` asks for a display language and offers extra skills**, and no longer asks about the Claude Code statusLine (`--with-statusline` still installs it). Extra skills are downloaded from `LFT-OXY/oxy-Tools`; `atw update` keeps them current and `atw uninstall` removes them.\n5. **New skill `/atw-noob-mode`**, a personal plain-language mode that stays on across stages until switched off.\n\n### What `atw update --migrate` does for you\n\n- Offers to rename `CONTEXT.md` → `GLOSSARY.md` and `CONTEXT-MAP.md` → `GLOSSARY-MAP.md` at the repository root. These are your files, so it asks before each one. Skip only if the file is not the ATW glossary.\n- Deletes the installed files of the six removed skills, and the old `atw-domain-modeling/CONTEXT-FORMAT.md`, from every platform skill directory — but only copies you never edited. An edited copy is left where it is and reported.\n\n### What is left for you\n\n- [ ] **Multi-context repos:** rename each per-context `CONTEXT.md` to `GLOSSARY.md`, and fix the links inside `GLOSSARY-MAP.md` to match. The updater only knows the two root paths.\n- [ ] **`docs/agents/domain.md` and `docs/agents/issue-tracker.md`:** `/atw-init-repo` wrote these into your repo and they still name `CONTEXT.md`. Replace the name in both, or re-run `/atw-init-repo` to regenerate them.\n- [ ] **Open tasks:** `check.jsonl` and `implement.jsonl` under `.atw/tasks/<task>/` list files by path. A line that still names `CONTEXT.md` now points at a file that is gone, and the hook skips it without a word — the review sub-agent simply works without your glossary. Replace the name there, and in that task's `prd.md`, `map.md` and tickets. `python3 ./.atw/scripts/task.py validate <task-dir>` reports every line whose file is missing.\n- [ ] **Any other mention** of `CONTEXT.md` / `CONTEXT-MAP.md` in `AGENTS.md`, `CLAUDE.md`, ADRs under `docs/adr/`, or `.atw/spec/`.\n- [ ] **Edited copies of removed skills** the updater reported as kept: delete them if you no longer want them.\n\nNothing else needs action. Ticket states and `task.json` files are compatible as they are.",
8
+ "aiInstructions": "- Find every glossary file still on the old name: `git ls-files '*CONTEXT.md' '*CONTEXT-MAP.md'`. Before renaming one, open it and confirm it is an ATW glossary (a `## Language` heading with bold terms and `_Avoid_:` lines, or for the map a list of links to per-context files). Leave an unrelated file that only shares the name alone, and say that you did.\n- Rename with `git mv <dir>/CONTEXT.md <dir>/GLOSSARY.md` (and `CONTEXT-MAP.md` → `GLOSSARY-MAP.md`) so history follows the file. If a `GLOSSARY.md` already exists beside it, stop and ask the user which one is current instead of merging on your own.\n- After the renames, update the references: `grep -rnE 'CONTEXT(-MAP)?\\.md' --include='*.md' --include='*.jsonl' .` and fix each hit that points at a glossary — links inside `GLOSSARY-MAP.md`, `docs/agents/domain.md`, `docs/agents/issue-tracker.md`, `AGENTS.md` / `CLAUDE.md`, ADRs, `.atw/spec/`, and every task under `.atw/tasks/` that is not archived: its `check.jsonl` / `implement.jsonl`, `prd.md`, `map.md` and `issues/`. Do not edit anything under `.atw/tasks/archive/`: archived tasks are a record of what was true then.\n- A `check.jsonl` / `implement.jsonl` line whose file does not exist is skipped silently when sub-agent context is built, so a stale glossary path there is invisible at review time. After editing a task's jsonl, run `python3 ./.atw/scripts/task.py validate <task-dir>` and clear every `File not found`.\n- Do not rewrite the headings in `docs/agents/*.md` while you are there; other skills match them literally.\n- If the updater reported removed-skill files as kept because they were modified, list them for the user and ask before deleting. Never delete them silently.\n- Verify at the end: the first grep returns nothing outside archived tasks, and `git status` shows only renames and the reference edits.",
9
9
  "migrations": [
10
10
  {
11
11
  "type": "rename",
@@ -3406,5 +3406,5 @@
3406
3406
  ]
3407
3407
  }
3408
3408
  ],
3409
- "notes": "Run atw update --migrate. Two renames (root CONTEXT.md and CONTEXT-MAP.md) are user files with no template hash, so each is confirmed interactively; in a non-interactive shell pass --force to apply them or --skip-all to leave them. The safe-file-delete entries cover the six removed skills and atw-domain-modeling/CONTEXT-FORMAT.md under all 18 platform skill roots; allowed_hashes were computed from the rendered templates of every release from 0.1.0 to 0.2.10, on both POSIX and Windows python-command variants, so an unmodified copy from any earlier version is removed and a modified one is kept and reported. Per-context glossary files in multi-context repos and the docs/agents files written by atw-init-repo are not reachable from a manifest; the migration task created by this update lists them."
3409
+ "notes": "Run atw update --migrate. Two renames (root CONTEXT.md and CONTEXT-MAP.md) are user files with no template hash, so each is confirmed interactively; in a non-interactive shell pass --force to apply them or --skip-all to leave them. The safe-file-delete entries cover the six removed skills and atw-domain-modeling/CONTEXT-FORMAT.md under all 18 platform skill roots; allowed_hashes were computed from the rendered templates of every release from 0.1.0 to 0.2.10, on both POSIX and Windows python-command variants, so an unmodified copy from any earlier version is removed and a modified one is kept and reported. Per-context glossary files in multi-context repos, the docs/agents files written by atw-init-repo and the context lists (check.jsonl / implement.jsonl) of open tasks are not reachable from a manifest; the migration task created by this update lists them."
3410
3410
  }
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.3.1",
3
+ "description": "The 0.3.0 migration guide now covers open tasks whose context lists still name CONTEXT.md.",
4
+ "breaking": false,
5
+ "recommendMigrate": false,
6
+ "changelog": "Fix to the 0.3.0 migration guide, no template changes. The guide said open tasks need no action after the CONTEXT.md → GLOSSARY.md rename. That was wrong for a task whose check.jsonl or implement.jsonl lists CONTEXT.md: the path no longer exists, the hook that builds sub-agent context skips a missing file silently, and the review runs without the project glossary. The guide and its AI instructions now list those files, search *.jsonl as well as *.md, and point at task.py validate. If you already upgraded to 0.3.0, check once: grep -rnE 'CONTEXT(-MAP)?\\.md' .atw/tasks --include='*.jsonl' --include='*.md' --exclude-dir=archive — replace the name in each hit, then run python3 ./.atw/scripts/task.py validate <task-dir> on the task and clear every 'File not found'.",
7
+ "migrations": [],
8
+ "notes": "No migration required and no files added, deleted or renamed. Projects upgrading from 0.2.x straight to 0.3.1 get the corrected guide in their migrate-to task. Projects already on 0.3.0 get no new task: run the grep from the changelog once if a task was open during the 0.3.0 upgrade."
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.3.2",
3
+ "description": "The per-ticket implement chain now fixes review findings once and re-checks only what was fixed, instead of re-running the full review without a bound.",
4
+ "breaking": false,
5
+ "recommendMigrate": false,
6
+ "changelog": "atw-implement and workflow.md: after the review, findings that must be fixed (spec-axis findings and standards hard violations) are fixed in one round, then only what was fixed is re-checked, once, then the commit. The earlier wording was 'fix, then re-run the full review, then commit' with no limit: a full review of freshly fixed code keeps finding something new, so a single ticket could go round several times and take very long. Anything still open after the one re-check now goes to the user before the commit, who decides whether it ships, gets another fix, or changes the spec. This is the same rule the whole-spec run (/atw-implement-spec) already had. Judgement calls still ship and get reported, and the test suite is still the hard gate.",
7
+ "migrations": [],
8
+ "notes": "No migration required and no files added, deleted or renamed. Two templates changed: .atw/workflow.md (the implement breadcrumb, the findings table and the paragraph under it) and the atw-implement skill. They update as Template updated where the project left them untouched; where a project edited them locally, atw update asks before replacing — keep the edit and the old unbounded re-review wording stays in force for that project."
9
+ }
@@ -342,7 +342,7 @@ Stop ③: implementation is the user's to start. You may not invoke either skill
342
342
  Per-ticket path (the default): one ticket at a time. Run `tickets.py frontier`, pick one, `tickets.py claim NN` — never hold two tickets at `doing` — then tell the user to run `/atw-implement` for the claimed ticket. One user invocation per ticket.
343
343
  Whole-spec path: the user runs `/atw-implement-spec` once. It owns the run from the first claim to the closing commit: it claims with `tickets.py claim NN --parallel`, dispatches implementer sub-agents across the frontier, each in its own worktree, lands everything on one integration branch, marks each ticket `done` as its work merges, reviews that branch once at the end, and writes spec updates back before its closing commit. Do not claim, review or commit around it. It needs a platform that dispatches sub-agents.
344
344
  On the per-ticket path, that one `/atw-implement` run is a closed chain and must not be broken up from the outside: implement (test-first where it fits) → run tests, full suite on the last pass → review → handle findings → write spec updates back → commit. Never instruct it to skip the review or the commit.
345
- Findings triage: spec-axis findings and anything the standards axis calls a hard violation get fixed first, then a full re-review, then the commit. Judgement calls ship and get reported.
345
+ Findings triage: spec-axis findings and anything the standards axis calls a hard violation get fixed once, then only what was fixed is re-checked, once, then the commit. No second full review and no loop: anything still open after that one re-check goes to the user before the commit. Judgement calls ship and get reported.
346
346
  Relay every review report to the user verbatim — Standards and Spec, plus Visual when the ticket changed UI — even when the verdict is "nothing found". No report reaching you is not a passing review.
347
347
  Any sub-agent dispatched from here starts its prompt with `Active task: <task path from task.py current>` — the role files read that line to find the task, and it is the context hooks' fallback when session resolution misses.
348
348
  Main-session default: run the process; on the per-ticket path the implementation itself is written inside `/atw-implement`, never by a dispatched `atw-implement-agent` — that role file is reserved and is not a step in this flow. The only sub-agent that path raises is `atw-review` (twice, from inside `/atw-implement` — three times when the ticket changes UI and a Visual review runs). Implementer sub-agents exist only inside a `/atw-implement-spec` run, dispatched by that skill and by nothing else. Sub-agent self-exemption: this breadcrumb reaches sub-agent turns on some hosts. If you are already running as `atw-review`, do NOT spawn another `atw-review` — do the review you were dispatched for. If you were dispatched by `/atw-implement-spec` as an implementer or merger, stop ③ is already satisfied — do the work you were dispatched for and dispatch nothing. Dispatch is main session only.
@@ -670,10 +670,12 @@ That single run is a closed chain:
670
670
 
671
671
  | Finding | Handling |
672
672
  |---|---|
673
- | Spec-axis finding (the change does not match `prd.md` or the ticket) | Fix first, then re-run the full review, then commit |
674
- | Standards-axis finding marked a hard violation | Same — fix, full re-review, then commit |
673
+ | Spec-axis finding (the change does not match `prd.md` or the ticket) | Fix once, re-check only what was fixed, then commit |
674
+ | Standards-axis finding marked a hard violation | Same — fix once, re-check the fix, then commit |
675
675
  | Standards-axis judgement call | Commit as-is and report it to the user |
676
676
 
677
+ One fix round and one re-check, each once. Do not start a second full review and do not loop: a full review of freshly fixed code always finds something new, so a ticket that chases a clean report never lands. Whatever is still open after the re-check goes to the user before the commit — they decide whether it ships, gets another fix, or changes the spec.
678
+
677
679
  The hard gate on this work is the test suite, not the review. Reviews report; tests block.
678
680
 
679
681
  Spec updates belong in the same chain, before the commit — knowledge that lands in a follow-up commit usually does not land at all.
@@ -16,7 +16,7 @@ If the work changes what a user sees, build that part by calling the Skill tool
16
16
 
17
17
  Once done, call the Skill tool with "atw-code-review" to review the work. When screenshots were captured, pass their paths so the review runs its Visual axis.
18
18
 
19
- Work the findings before committing. Fix what the review raised, then re-run the tests it touched.
19
+ Work the findings before committing. Fix what the review raised, then re-run the tests it touched. Then re-check **only the findings that were fixed**, once. Do not start a second full review, and do not loop: anything still open after that one re-check goes to the user.
20
20
 
21
21
  **If the review surfaces a hard problem, stop** — the spec is wrong or self-contradictory, the fix needs a decision nobody has made, or it reaches outside this ticket's slice. Don't paper over it and don't silently widen the scope to absorb it. Say what the finding is and what it blocks, and get the decision from the user before writing more code. If the answer changes what the work is supposed to do, that change lands in the spec via the step below, not only in the code.
22
22
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chinhae/atw-cli",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "A Team Workflow — an AI coding workflow framework that encodes your team's conventions into the process",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -33,7 +33,7 @@
33
33
  "inquirer": "^9.3.7",
34
34
  "undici": "^6.21.0",
35
35
  "zod": "^4.4.2",
36
- "@chinhae/atw-core": "0.3.0"
36
+ "@chinhae/atw-core": "0.3.2"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@eslint/js": "^9.18.0",