@ksuchoi216/ahe 0.1.6 → 0.1.10

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.
Files changed (49) hide show
  1. package/README.md +82 -214
  2. package/bin/ahe +34 -231
  3. package/package.json +8 -4
  4. package/packages/ahe-antigravity/bin/ahe-antigravity +325 -0
  5. package/packages/ahe-antigravity/package.json +7 -0
  6. package/packages/ahe-antigravity/skills/ahe-git/SKILL.md +35 -0
  7. package/packages/ahe-antigravity/skills/ahe-ship/SKILL.md +28 -0
  8. package/packages/ahe-antigravity/skills/ahe-ship/scripts/post-ship-hook.sh +12 -0
  9. package/packages/ahe-codex/.codex/agents/ahe-harness-manager.toml +19 -0
  10. package/{.codex → packages/ahe-codex/.codex}/ahe-shared/templates/AGENTS.md +11 -10
  11. package/{.codex/ahe-shared/templates/PRODUCT.md → packages/ahe-codex/.codex/ahe-shared/templates/product.md} +1 -1
  12. package/packages/ahe-codex/.codex/hooks/ahe-hook.js +296 -0
  13. package/packages/ahe-codex/.codex/skills/ahe/SKILL.md +34 -0
  14. package/packages/ahe-codex/.codex/skills/ahe-compress/SKILL.md +120 -0
  15. package/{.codex/skills/ahe-compression → packages/ahe-codex/.codex/skills/ahe-compress}/agents/openai.yaml +1 -1
  16. package/{.codex/skills/ahe-compression → packages/ahe-codex/.codex/skills/ahe-compress}/scripts/check-harness-size.sh +18 -6
  17. package/packages/ahe-codex/.codex/skills/ahe-compress/scripts/detect_stale_tests.py +30 -0
  18. package/packages/ahe-codex/.codex/skills/ahe-converse/SKILL.md +44 -0
  19. package/packages/ahe-codex/.codex/skills/ahe-feature/SKILL.md +25 -0
  20. package/packages/ahe-codex/.codex/skills/ahe-fix/SKILL.md +59 -0
  21. package/packages/ahe-codex/.codex/skills/ahe-fix/scripts/write_fix_plan.py +108 -0
  22. package/packages/ahe-codex/.codex/skills/ahe-git/SKILL.md +34 -0
  23. package/packages/ahe-codex/.codex/skills/ahe-harness/SKILL.md +128 -0
  24. package/packages/ahe-codex/.codex/skills/ahe-harness-checker/SKILL.md +46 -0
  25. package/{.codex/skills/ahe-init → packages/ahe-codex/.codex/skills/ahe-new}/SKILL.md +41 -37
  26. package/packages/ahe-codex/.codex/skills/ahe-overview/SKILL.md +119 -0
  27. package/packages/ahe-codex/.codex/skills/ahe-review/SKILL.md +43 -0
  28. package/packages/ahe-codex/.codex/skills/ahe-ship/SKILL.md +58 -0
  29. package/packages/ahe-codex/.codex/skills/ahe-ship/agents/openai.yaml +4 -0
  30. package/packages/ahe-codex/.codex/skills/ahe-ship/scripts/write_plan.py +107 -0
  31. package/packages/ahe-codex/.codex/skills/ahe-solve/SKILL.md +30 -0
  32. package/packages/ahe-codex/.codex/skills/ahe-think/SKILL.md +114 -0
  33. package/packages/ahe-codex/bin/ahe-codex +398 -0
  34. package/packages/ahe-codex/package.json +7 -0
  35. package/.codex/hooks/ahe-hook.js +0 -236
  36. package/.codex/skills/ahe-compression/SKILL.md +0 -97
  37. package/.codex/skills/ahe-conversation/SKILL.md +0 -73
  38. package/.codex/skills/ahe-spec/SKILL.md +0 -63
  39. package/.codex/skills/ahe-thinking/SKILL.md +0 -104
  40. package/.codex/skills/ahe-update/SKILL.md +0 -66
  41. /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/config.yaml +0 -0
  42. /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/schemas/feature-list-schema.json +0 -0
  43. /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/schemas/process_status.schema.json +0 -0
  44. /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/templates/INSTRUCTIONS.md +0 -0
  45. /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/templates/feature-list.json +0 -0
  46. /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/templates/init.sh +0 -0
  47. /package/{.codex/ahe-shared/templates/PROGRESS.md → packages/ahe-codex/.codex/ahe-shared/templates/progress.md} +0 -0
  48. /package/{.codex/ahe-shared/templates/SESSION-HANDOFF.md → packages/ahe-codex/.codex/ahe-shared/templates/session-handoff.md} +0 -0
  49. /package/{.codex → packages/ahe-codex/.codex}/hooks/hooks.json +0 -0
@@ -0,0 +1,325 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_PATH="${BASH_SOURCE[0]}"
5
+ while [ -L "${SCRIPT_PATH}" ]; do
6
+ SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${SCRIPT_PATH}")" && pwd)"
7
+ SCRIPT_PATH="$(readlink "${SCRIPT_PATH}")"
8
+ case "${SCRIPT_PATH}" in
9
+ /*) ;;
10
+ *) SCRIPT_PATH="${SCRIPT_DIR}/${SCRIPT_PATH}" ;;
11
+ esac
12
+ done
13
+
14
+ readonly SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${SCRIPT_PATH}")" && pwd)"
15
+ readonly PACKAGE_ROOT="$(CDPATH= cd -- "${SCRIPT_DIR}/.." && pwd)"
16
+ readonly SOURCE_SKILLS_DIR="${PACKAGE_ROOT}/skills"
17
+ readonly AGY_MODEL="Gemini 3.1 Pro (High)"
18
+ readonly MANAGED_SKILLS=("ahe-ship" "ahe-git")
19
+
20
+ build_execution_prompt() {
21
+ local plan_markdown="$1"
22
+
23
+ printf '%s\n' "Reconcile this saved AHE plan against the current repository state."
24
+ printf '%s\n' "Overwrite the original .plans/ file with the refreshed plan, then execute the refreshed plan exactly."
25
+ printf '\n'
26
+ printf '%s\n' "# Saved Plan"
27
+ printf '%s' "${plan_markdown}"
28
+
29
+ case "${plan_markdown}" in
30
+ *$'\n')
31
+ ;;
32
+ *)
33
+ printf '\n'
34
+ ;;
35
+ esac
36
+ printf '\n'
37
+
38
+ printf '%s\n' "When every requirement is fully complete and verified, print the exact line AHE_PLAN_COMPLETE."
39
+ }
40
+
41
+ usage() {
42
+ cat <<'EOF'
43
+ Usage:
44
+ ahe-antigravity install [--force]
45
+ ahe-antigravity uninstall
46
+ ahe-antigravity doctor
47
+ ahe-antigravity ahe-ship <plan-path>
48
+ ahe-antigravity ahe-git [repo-root]
49
+ EOF
50
+ }
51
+
52
+ resolve_plan_path() {
53
+ local plan_path="$1"
54
+
55
+ if [ -z "${plan_path}" ]; then
56
+ printf 'Usage: ahe-antigravity ahe-ship <plan-path>\n' >&2
57
+ exit 1
58
+ fi
59
+
60
+ if [ "${plan_path#/}" = "${plan_path}" ]; then
61
+ plan_path="${PWD}/${plan_path}"
62
+ fi
63
+
64
+ if [ ! -f "${plan_path}" ]; then
65
+ printf 'Plan file does not exist: %s\n' "${plan_path}" >&2
66
+ exit 1
67
+ fi
68
+
69
+ printf '%s\n' "${plan_path}"
70
+ }
71
+
72
+ read_plan_markdown() {
73
+ local plan_path="$1"
74
+ cat "${plan_path}"
75
+ }
76
+
77
+
78
+ ahe_ship_plan() {
79
+ local plan_path
80
+ plan_path="$(resolve_plan_path "${1:-}")"
81
+
82
+ if ! command -v agy >/dev/null 2>&1; then
83
+ printf 'Missing required executable: agy\n' >&2
84
+ exit 1
85
+ fi
86
+
87
+ local execution_prompt
88
+ execution_prompt="$(build_execution_prompt "$(read_plan_markdown "${plan_path}")")"
89
+
90
+ local stdout_path
91
+ local stderr_path
92
+ stdout_path="$(mktemp)"
93
+ stderr_path="$(mktemp)"
94
+
95
+ local status=0
96
+ if printf '%s\n' "${execution_prompt}" | agy --model "${AGY_MODEL}" >"${stdout_path}" 2>"${stderr_path}"; then
97
+ status=0
98
+ else
99
+ status=$?
100
+ fi
101
+
102
+ cat "${stdout_path}"
103
+ cat "${stderr_path}" >&2
104
+
105
+ local combined_output
106
+ combined_output="$(cat "${stdout_path}")"$'\n'"$(cat "${stderr_path}")"
107
+ rm -f "${stdout_path}" "${stderr_path}"
108
+
109
+ if [ "${status}" -ne 0 ]; then
110
+ printf 'agy execution failed for %s\n' "${plan_path}" >&2
111
+ exit "${status}"
112
+ fi
113
+
114
+ case "${combined_output}" in
115
+ *AHE_PLAN_COMPLETE*)
116
+ rm -f "${plan_path}"
117
+ ;;
118
+ *)
119
+ printf 'agy completed without required marker AHE_PLAN_COMPLETE for %s\n' "${plan_path}" >&2
120
+ exit 1
121
+ ;;
122
+ esac
123
+ }
124
+
125
+ build_git_execution_prompt() {
126
+ local repo_root="$1"
127
+
128
+ printf '%s\n' "Run the ahe-git skill workflow on the repository at: ${repo_root}"
129
+ printf '%s\n' "You must follow the AHE Git skill instructions exactly."
130
+ printf '\n'
131
+ printf '%s\n' "When the full workflow is finished successfully with no skipped work, print the exact line AHE_GIT_COMPLETE."
132
+ }
133
+
134
+ ahe_git() {
135
+ local repo_root="${1:-$PWD}"
136
+
137
+ if [ ! -d "${repo_root}" ]; then
138
+ printf 'Target path is not a directory: %s\n' "${repo_root}" >&2
139
+ exit 1
140
+ fi
141
+
142
+ repo_root="$(CDPATH= cd -- "${repo_root}" && pwd)"
143
+
144
+ if ! command -v agy >/dev/null 2>&1; then
145
+ printf 'Missing required executable: agy\n' >&2
146
+ exit 1
147
+ fi
148
+
149
+ local execution_prompt
150
+ execution_prompt="$(build_git_execution_prompt "${repo_root}")"
151
+
152
+ local stdout_path
153
+ local stderr_path
154
+ stdout_path="$(mktemp)"
155
+ stderr_path="$(mktemp)"
156
+
157
+ local status=0
158
+ if printf '%s\n' "${execution_prompt}" | agy --model "${AGY_MODEL}" >"${stdout_path}" 2>"${stderr_path}"; then
159
+ status=0
160
+ else
161
+ status=$?
162
+ fi
163
+
164
+ cat "${stdout_path}"
165
+ cat "${stderr_path}" >&2
166
+
167
+ local combined_output
168
+ combined_output="$(cat "${stdout_path}")"$'\n'"$(cat "${stderr_path}")"
169
+ rm -f "${stdout_path}" "${stderr_path}"
170
+
171
+ if [ "${status}" -ne 0 ]; then
172
+ printf 'agy execution failed for ahe-git in %s\n' "${repo_root}" >&2
173
+ exit "${status}"
174
+ fi
175
+
176
+ case "${combined_output}" in
177
+ *AHE_GIT_COMPLETE*)
178
+ ;;
179
+ *)
180
+ printf 'agy completed without required marker AHE_GIT_COMPLETE for ahe-git in %s\n' "${repo_root}" >&2
181
+ exit 1
182
+ ;;
183
+ esac
184
+ }
185
+
186
+ install_skill() {
187
+ local force="false"
188
+
189
+ while [ "$#" -gt 0 ]; do
190
+ case "$1" in
191
+ --force)
192
+ force="true"
193
+ ;;
194
+ --backup)
195
+ # Ignored for Antigravity, but accepted for compatibility with root script
196
+ ;;
197
+ *)
198
+ printf 'Unknown install option: %s\n' "$1" >&2
199
+ usage >&2
200
+ exit 1
201
+ ;;
202
+ esac
203
+ shift
204
+ done
205
+
206
+ if [ ! -d "${SOURCE_SKILLS_DIR}" ]; then
207
+ printf 'Packaged skill files are missing: %s\n' "${SOURCE_SKILLS_DIR}" >&2
208
+ exit 1
209
+ fi
210
+
211
+ # Determine target directory
212
+ local target_skills_dir="${HOME}/.gemini/config/skills"
213
+ local skill_name=""
214
+ local skill_target=""
215
+
216
+ for skill_name in "${MANAGED_SKILLS[@]}"; do
217
+ skill_target="${target_skills_dir}/${skill_name}"
218
+
219
+ if [ -e "${skill_target}" ]; then
220
+ if [ "${force}" != "true" ]; then
221
+ cat <<EOF >&2
222
+ AHE Antigravity skill ${skill_name} is already installed at:
223
+ ${skill_target}
224
+
225
+ Re-run with --force to overwrite.
226
+ EOF
227
+ exit 1
228
+ else
229
+ rm -rf "${skill_target}"
230
+ fi
231
+ fi
232
+ done
233
+
234
+ mkdir -p "${target_skills_dir}"
235
+ for skill_name in "${MANAGED_SKILLS[@]}"; do
236
+ cp -R "${SOURCE_SKILLS_DIR}/${skill_name}" "${target_skills_dir}/${skill_name}"
237
+ done
238
+
239
+ cat <<EOF
240
+ AHE Antigravity skills installed at:
241
+ ${target_skills_dir}
242
+ EOF
243
+ }
244
+
245
+ doctor() {
246
+ printf '=== antigravity ===\n'
247
+
248
+ local target_skills_dir="${HOME}/.gemini/config/skills"
249
+ local skill_name=""
250
+ local skill_md=""
251
+ local errors=0
252
+
253
+ for skill_name in "${MANAGED_SKILLS[@]}"; do
254
+ skill_md="${target_skills_dir}/${skill_name}/SKILL.md"
255
+ if [ ! -f "${skill_md}" ]; then
256
+ printf 'Missing: %s\n' "${skill_md}" >&2
257
+ errors=$((errors + 1))
258
+ fi
259
+ done
260
+
261
+ if ! command -v agy >/dev/null 2>&1; then
262
+ printf 'Missing required executable: agy\n' >&2
263
+ errors=$((errors + 1))
264
+ fi
265
+
266
+ if [ "${errors}" -gt 0 ]; then
267
+ printf 'AHE Antigravity skill installation is unhealthy (%d errors).\n' "${errors}" >&2
268
+ exit 1
269
+ fi
270
+ printf 'AHE Antigravity skill installation looks healthy.\n\n'
271
+ }
272
+
273
+ uninstall_skill() {
274
+ local target_skills_dir="${HOME}/.gemini/config/skills"
275
+ local skill_name=""
276
+ local skill_target=""
277
+
278
+ echo "Uninstalling AHE Antigravity skills from ${target_skills_dir}..."
279
+
280
+ for skill_name in "${MANAGED_SKILLS[@]}"; do
281
+ skill_target="${target_skills_dir}/${skill_name}"
282
+ rm -rf "${skill_target}"
283
+ done
284
+
285
+ echo "AHE Antigravity skills uninstalled successfully."
286
+ }
287
+
288
+ main() {
289
+ if [ "$#" -eq 0 ]; then
290
+ usage
291
+ exit 1
292
+ fi
293
+
294
+ local command="$1"
295
+ shift
296
+
297
+ case "${command}" in
298
+ install)
299
+ install_skill "$@"
300
+ ;;
301
+ uninstall)
302
+ uninstall_skill
303
+ ;;
304
+ doctor)
305
+ doctor
306
+ ;;
307
+ ahe-ship)
308
+ ahe_ship_plan "$@"
309
+ ;;
310
+ ahe-git)
311
+ ahe_git "$@"
312
+ ;;
313
+ -h|--help|help)
314
+ usage
315
+ exit 0
316
+ ;;
317
+ *)
318
+ printf 'Unknown command: %s\n' "${command}" >&2
319
+ usage >&2
320
+ exit 1
321
+ ;;
322
+ esac
323
+ }
324
+
325
+ main "$@"
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "@ahe/antigravity",
3
+ "version": "0.1.8",
4
+ "description": "Awesome Harness Engineering Antigravity skill package",
5
+ "author": "ksuchoi216",
6
+ "license": "MIT"
7
+ }
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: ahe-git
3
+ description: Use in Antigravity to execute an ahe-git run via the `ahe-antigravity ahe-git` command.
4
+ ---
5
+
6
+ # AHE Git (Antigravity)
7
+
8
+ `ahe-git` is a user-facing AHE command independent from the normal AHE agent network.
9
+
10
+ Use this skill only to orchestrate safe Git pulls and commits across the active repository and its nested Git repositories or submodules.
11
+
12
+ ## Workflow
13
+
14
+ 1. **Discover**: Scan for both `.git` directories and `.git` files to find all nested repositories, worktrees, and submodules. Normalize and deduplicate the repo roots. Process them deepest-first (so submodules commit before parent gitlink updates).
15
+ 2. **Safe Pull**: For each repo, run `git fetch` and inspect the current branch and upstream state:
16
+ - If the repo is clean and upstream is ahead, fast-forward with `git pull --ff-only`.
17
+ - If the repo is already at upstream head, continue.
18
+ - If the repo is locally ahead of upstream and has local changes, continue to Dirty-State Review.
19
+ - If the repo has local changes and upstream has commits not present locally, **stop and explain the issue**.
20
+ - If upstream is missing, detached, diverged, rebasing, merging, cherry-picking, or cannot fast-forward cleanly, **stop and explain the issue**.
21
+ - *Never* auto-stash, auto-merge, auto-rebase, auto-resolve conflicts, or change branch topology.
22
+ 3. **Failure Policy**: On any hard Git state, stop immediately and report:
23
+ - Which repo is blocked.
24
+ - The exact detected condition.
25
+ - Why `ahe-git` is refusing to continue.
26
+ - Concrete manual steps the user should perform next (e.g., set upstream, finish merge, clean changes).
27
+ - Do not attempt partial recovery beyond safe read-only diagnosis.
28
+ 4. **Dirty-State Review**: Inspect `git status --short`. Read unstaged diffs first, then staged diffs, and include untracked files so the commit message covers the full pending change.
29
+ 5. **Commit-Message Drafting**: Generate one concise conventional-style message per repo (`feat:`, `fix:`, `chore:`, etc.) based on the actual diff.
30
+ - Run an explicit self-check pass to reject vague or misleading messages before commit.
31
+ - If the message is still ambiguous after self-check, stop and ask the user instead of committing a generic summary.
32
+ 6. **Commit**: Stage with `git add -A` inside that repo. Commit exactly once per dirty repo with its reviewed message.
33
+ 7. **Re-evaluate**: After submodule commits, re-evaluate parent repos so gitlink updates are committed if they became dirty.
34
+
35
+ Print the exact line `AHE_GIT_COMPLETE` only when the full workflow is finished successfully with no skipped work. Do not print this if there are failures.
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: ahe-ship
3
+ description: Use in Antigravity to execute EXACTLY ONE saved AHE plan from `.plans/`. Note that ahe-ship in Codex saves plans, while ahe-ship in Antigravity implements them.
4
+ ---
5
+
6
+ # AHE Executor
7
+
8
+ This skill executes engineering plans generated by Awesome Harness Engineering.
9
+
10
+ **Context:**
11
+ - `ahe-ship` in Codex works for saving a completed plan to the `.plans/` folder.
12
+ - `ahe-ship` in Antigravity works for the implementation of ONE plan which is picked up from the `.plans/` folder.
13
+
14
+ ## Instructions
15
+ When the user asks to implement or execute a plan, do not scan or implement all plans. Check the `.plans/` directory and select exactly one plan file (e.g. `.plans/{plan_name}.md`). If multiple plans exist and the user didn't specify one, ask the user which plan to execute. Read the selected plan file.
16
+
17
+ Perform the following steps:
18
+ 1. **Show the title**: Display the title of the selected plan to the user.
19
+ 2. **Replan**: Reconcile the selected plan against the current repository state and create a refreshed implementation plan. Overwrite the selected `.plans/{plan_name}.md` file with this refreshed plan. Do NOT wait for user approval; immediately proceed to the next step.
20
+ 3. **Implement**: Execute every listed requirement in the refreshed plan, omitting nothing.
21
+ 4. **Cleanup**: After successful execution and before printing `AHE_PLAN_COMPLETE`, execute the hook script `~/.gemini/config/skills/ahe-ship/scripts/post-ship-hook.sh <plan_path>` to clean up the applied plan.
22
+
23
+ Do not ask to open, read, or restate the `.plans/` file.
24
+ Use the saved AHE plan content already provided in the prompt.
25
+ The Antigravity CLI runs this execution with the model `Gemini 3.1 Pro (High)`.
26
+
27
+ Print the exact line `AHE_PLAN_COMPLETE` only when the full plan is finished with no skipped work, no unresolved blocker, and no omitted verification.
28
+ Do not print `AHE_PLAN_COMPLETE` when any part of the plan is incomplete, deferred, blocked, or only partially verified.
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ PLAN_PATH="$1"
5
+
6
+ if [ -f "${PLAN_PATH}" ]; then
7
+ echo "Running AHE Ship post-execution hook..."
8
+ rm -f "${PLAN_PATH}"
9
+ echo "Cleaned up plan file: ${PLAN_PATH}"
10
+ else
11
+ echo "Warning: Plan file not found at ${PLAN_PATH}"
12
+ fi
@@ -0,0 +1,19 @@
1
+ name = "ahe-harness-manager"
2
+ description = "AHE Harness Manager Agent for supervising the Awesome Harness Engineering workflow"
3
+ model = "Gemini 3.1 Pro (High)"
4
+ system_prompt = """
5
+ You are `@ahe-harness-manager`, an automatic supervisory agent for Awesome Harness Engineering.
6
+
7
+ Your job is to inspect the current state of the harness and recommend next steps when AHE workflows are started.
8
+
9
+ 1. Inspect `AGENTS.md`, all `docs/*.md`, `feature-list.json`, `progress.md`, `session-handoff.md`, and relevant code context.
10
+ 2. Detect mismatch between product docs, tracker state, progress evidence, and actual code.
11
+ 3. If unfinished feature work exists, recommend the next valid feature to continue.
12
+ 4. If all tracked features are done but product/code suggests new work, ask the user one focused question before AHE derives a new feature.
13
+ 5. If harness artifacts are malformed, recommend handing off to `ahe-harness-checker`.
14
+ 6. If tracker/product docs need updates, recommend handing off to `ahe-harness`.
15
+ 7. If deeper code evidence is needed, recommend handing off to `ahe-review`.
16
+
17
+ You are advisory by default. Do not block normal routing for ordinary healthy states.
18
+ You may ask one focused question before AHE continues when user intent is required.
19
+ """
@@ -7,26 +7,27 @@
7
7
  Before writing code:
8
8
 
9
9
  1. **Confirm working directory** with `pwd`
10
- 2. **Read this file** completely
11
- 3. **Read project docs if present** (`docs/ARCHITECTURE.md`, `docs/PRODUCT.md`, `docs/INSTRUCTIONS.md`, `docs/TODO.md`, README, or equivalent)
10
+ 2. **Check whether the copied files are correct** before reading their contents.
11
+ 3. **Read files strictly in this order**:
12
+ `AGENTS.md` -> `docs/product.md` plus `docs/product{n}.md` (in numeric order) -> `docs/architecture.md` -> `docs/instructions.md` -> `init.sh` -> `feature-list.json` -> `status.json` -> `progress.md` -> `session-handoff.md`
12
13
  4. **Run `./init.sh`** to verify environment is healthy
13
- 5. **Read `feature_list.json`** to see current feature state
14
- 6. **Review recent commits** with `git log --oneline -5`
14
+ 5. **Review recent commits** with `git log --oneline -5`
15
15
 
16
16
  If baseline verification is failing, repair that first before adding new scope.
17
17
 
18
18
  ## Working Rules
19
19
 
20
- - **One feature at a time**: Pick exactly one unfinished feature from `feature_list.json`
20
+ - **One feature at a time**: Pick exactly one unfinished feature from `feature-list.json`
21
21
  - **Verification required**: Don't claim done without running verification commands
22
- - **Update artifacts**: Before ending session, update `progress.md` and `feature_list.json`
22
+ - **Update artifacts**: Before ending session, update `progress.md` and `feature-list.json`
23
23
  - **Stay in scope**: Don't modify files unrelated to the current feature
24
24
  - **Leave clean state**: Next session must be able to run `./init.sh` immediately
25
25
 
26
26
  ## Required Artifacts
27
27
 
28
- - `feature_list.json` — Feature state tracker (source of truth)
28
+ - `feature-list.json` — Feature state tracker (source of truth)
29
29
  - `progress.md` — Session continuity log
30
+ - `status.json` — Canonical status artifact
30
31
  - `init.sh` — Standard startup and verification path
31
32
  - `session-handoff.md` — Optional, for larger sessions
32
33
 
@@ -36,7 +37,7 @@ A feature is done only when ALL of the following are true:
36
37
 
37
38
  - [ ] Target behavior is implemented
38
39
  - [ ] Required verification actually ran (tests / lint / type-check)
39
- - [ ] Evidence recorded in `feature_list.json` or `progress.md`
40
+ - [ ] Evidence recorded in `feature-list.json` or `progress.md`
40
41
  - [ ] Repository remains restartable from standard startup path
41
42
 
42
43
  ## End of Session
@@ -44,7 +45,7 @@ A feature is done only when ALL of the following are true:
44
45
  Before ending a session:
45
46
 
46
47
  1. Update `progress.md` with current state
47
- 2. Update `feature_list.json` with new feature status
48
+ 2. Update `feature-list.json` with new feature status
48
49
  3. Record any unresolved risks or blockers
49
50
  4. Commit with descriptive message once work is in safe state
50
51
  5. Leave repo clean enough for next session to run `./init.sh` immediately
@@ -61,4 +62,4 @@ If you encounter:
61
62
  - **Architecture decisions**: Consult project architecture docs if present, otherwise ask user
62
63
  - **Unclear requirements**: Check product/requirements docs if present, otherwise ask user
63
64
  - **Repeated test failures**: Update progress, flag for human review
64
- - **Scope ambiguity**: Re-read `feature_list.json` for definition of done
65
+ - **Scope ambiguity**: Re-read `feature-list.json` for definition of done
@@ -1,4 +1,4 @@
1
- # PRODUCT.md
1
+ # product.md
2
2
 
3
3
  ## Product Name
4
4