goalbuddy 0.3.6 → 0.3.8

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 (81) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/CONTRIBUTING.md +2 -2
  3. package/README.md +27 -10
  4. package/{RELEASE-0.3.5.md → docs/releases/0.3.5.md} +4 -4
  5. package/docs/releases/0.3.7.md +129 -0
  6. package/docs/releases/0.3.8.md +40 -0
  7. package/docs/releases/README.md +83 -0
  8. package/goalbuddy/SKILL.md +21 -10
  9. package/goalbuddy/scripts/check-goal-state.mjs +53 -0
  10. package/goalbuddy/scripts/render-task-prompt.mjs +39 -4
  11. package/{plugins/goalbuddy/skills/goalbuddy/extend → goalbuddy/surfaces}/local-goal-board/README.md +7 -9
  12. package/goalbuddy/{extend → surfaces}/local-goal-board/examples/sample-goal/state.yaml +5 -5
  13. package/{plugins/goalbuddy/skills/goalbuddy/extend → goalbuddy/surfaces}/local-goal-board/examples/subgoal-parent/state.yaml +3 -3
  14. package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +3 -3
  15. package/{plugins/goalbuddy/skills/goalbuddy/extend → goalbuddy/surfaces}/local-goal-board/scripts/lib/goal-board.mjs +17 -13
  16. package/goalbuddy/{extend → surfaces}/local-goal-board/scripts/local-goal-board.mjs +27 -6
  17. package/{plugins/goalbuddy/skills/goalbuddy/extend → goalbuddy/surfaces}/local-goal-board/test/local-goal-board.test.mjs +63 -12
  18. package/goalbuddy/templates/goal.md +9 -0
  19. package/goalbuddy/templates/state.yaml +7 -6
  20. package/internal/assets/goalbuddy-v0.3.7-release.png +0 -0
  21. package/internal/cli/goal-maker.mjs +177 -717
  22. package/package.json +7 -8
  23. package/plugins/goalbuddy/.claude-plugin/plugin.json +3 -4
  24. package/plugins/goalbuddy/.codex-plugin/plugin.json +5 -6
  25. package/plugins/goalbuddy/README.md +4 -3
  26. package/plugins/goalbuddy/skills/goalbuddy/SKILL.md +21 -10
  27. package/plugins/goalbuddy/skills/goalbuddy/scripts/check-goal-state.mjs +53 -0
  28. package/plugins/goalbuddy/skills/goalbuddy/scripts/render-task-prompt.mjs +39 -4
  29. package/{goalbuddy/extend → plugins/goalbuddy/skills/goalbuddy/surfaces}/local-goal-board/README.md +7 -9
  30. package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/sample-goal/state.yaml +5 -5
  31. package/{goalbuddy/extend → plugins/goalbuddy/skills/goalbuddy/surfaces}/local-goal-board/examples/subgoal-parent/state.yaml +3 -3
  32. package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +3 -3
  33. package/{goalbuddy/extend → plugins/goalbuddy/skills/goalbuddy/surfaces}/local-goal-board/scripts/lib/goal-board.mjs +2 -2
  34. package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/scripts/local-goal-board.mjs +27 -6
  35. package/{goalbuddy/extend → plugins/goalbuddy/skills/goalbuddy/surfaces}/local-goal-board/test/local-goal-board.test.mjs +35 -8
  36. package/plugins/goalbuddy/skills/goalbuddy/templates/goal.md +9 -0
  37. package/plugins/goalbuddy/skills/goalbuddy/templates/state.yaml +7 -6
  38. package/examples/extend-catalog-workflow/goal.md +0 -53
  39. package/examples/extend-catalog-workflow/notes/T001-extension-model-map.md +0 -47
  40. package/examples/extend-catalog-workflow/notes/T002-architecture-decision.md +0 -48
  41. package/examples/extend-catalog-workflow/notes/T003-implementation-summary.md +0 -43
  42. package/examples/extend-catalog-workflow/notes/T004-root-extend-folder.md +0 -24
  43. package/examples/extend-catalog-workflow/notes/T005-layout-cleanup.md +0 -46
  44. package/examples/extend-catalog-workflow/notes/T006-catalog-location.md +0 -50
  45. package/examples/extend-catalog-workflow/notes/T999-completion-audit.md +0 -36
  46. package/examples/extend-catalog-workflow/state.yaml +0 -327
  47. package/examples/github-pr-workflow-extension/pr-handoff.md +0 -46
  48. package/examples/improve-goal-maker/goal.md +0 -51
  49. package/examples/improve-goal-maker/notes/T001-repo-map.md +0 -59
  50. package/examples/improve-goal-maker/notes/T002-risk-map.md +0 -37
  51. package/examples/improve-goal-maker/state.yaml +0 -224
  52. package/goalbuddy/extend/github-projects/README.md +0 -105
  53. package/goalbuddy/extend/github-projects/examples/goal-board-sync/state.yaml +0 -63
  54. package/goalbuddy/extend/github-projects/extension.yaml +0 -43
  55. package/goalbuddy/extend/github-projects/scripts/lib/github-projects.mjs +0 -728
  56. package/goalbuddy/extend/github-projects/scripts/lib/goal-state.mjs +0 -362
  57. package/goalbuddy/extend/github-projects/scripts/sync-github-project.mjs +0 -193
  58. package/goalbuddy/extend/github-projects/test/github-projects.test.mjs +0 -267
  59. package/goalbuddy/extend/local-goal-board/extension.yaml +0 -39
  60. package/internal/assets/extend-release.png +0 -0
  61. package/internal/assets/extend-release.svg +0 -83
  62. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/README.md +0 -105
  63. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/examples/goal-board-sync/state.yaml +0 -63
  64. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/extension.yaml +0 -43
  65. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/scripts/lib/github-projects.mjs +0 -728
  66. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/scripts/lib/goal-state.mjs +0 -362
  67. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/scripts/sync-github-project.mjs +0 -193
  68. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/test/github-projects.test.mjs +0 -267
  69. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/extension.yaml +0 -39
  70. /package/goalbuddy/{extend → surfaces}/local-goal-board/assets/goalbuddy-mark.png +0 -0
  71. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/sample-goal/notes/T001-scout.md +0 -0
  72. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/goal.md +0 -0
  73. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/notes/.gitkeep +0 -0
  74. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +0 -0
  75. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +0 -0
  76. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/assets/goalbuddy-mark.png +0 -0
  77. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/sample-goal/notes/T001-scout.md +0 -0
  78. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/goal.md +0 -0
  79. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/notes/.gitkeep +0 -0
  80. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +0 -0
  81. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +0 -0
@@ -8,9 +8,9 @@ import { createBoardPayload, writeBoardApp } from "../scripts/lib/goal-board.mjs
8
8
  import { parseArgs, startBoardServer } from "../scripts/local-goal-board.mjs";
9
9
 
10
10
  test("normalizes a dense goal into local board columns", () => {
11
- const payload = createBoardPayload(resolve("extend/local-goal-board/examples/sample-goal"));
11
+ const payload = createBoardPayload(resolve("goalbuddy/surfaces/local-goal-board/examples/sample-goal"));
12
12
 
13
- assert.equal(payload.goal.title, "Local Kanban Board Extension");
13
+ assert.equal(payload.goal.title, "Local Goal Board Surface");
14
14
  assert.equal(payload.goal.activeTask, "");
15
15
  assert.equal(payload.counts.total, 14);
16
16
  assert.equal(payload.counts.todo, 0);
@@ -24,7 +24,7 @@ test("normalizes a dense goal into local board columns", () => {
24
24
  });
25
25
 
26
26
  test("loads depth-1 subgoal boards into parent task payloads", () => {
27
- const payload = createBoardPayload(resolve("goalbuddy/extend/local-goal-board/examples/subgoal-parent"));
27
+ const payload = createBoardPayload(resolve("goalbuddy/surfaces/local-goal-board/examples/subgoal-parent"));
28
28
  const parentTask = payload.tasks.find((task) => task.id === "T004");
29
29
 
30
30
  assert.equal(parentTask.subgoal.status, "active");
@@ -229,7 +229,7 @@ tasks:
229
229
  });
230
230
 
231
231
  test("writes a minimal GoalBuddy web app into the goal directory", () => {
232
- const appDir = writeBoardApp(resolve("extend/local-goal-board/examples/sample-goal"));
232
+ const appDir = writeBoardApp(resolve("goalbuddy/surfaces/local-goal-board/examples/sample-goal"));
233
233
  const html = readFileSync(join(appDir, "index.html"), "utf8");
234
234
  const css = readFileSync(join(appDir, "styles.css"), "utf8");
235
235
  const js = readFileSync(join(appDir, "app.js"), "utf8");
@@ -393,20 +393,20 @@ test("advertises goalbuddy.localhost while binding to loopback", async () => {
393
393
  test("runs when installed under a symlinked temp path", () => {
394
394
  const root = mkdtempSync(join(tmpdir(), "goalbuddy-local-board-direct-"));
395
395
  try {
396
- cpSync("extend/local-goal-board/scripts", join(root, "scripts"), { recursive: true });
397
- cpSync("extend/local-goal-board/assets", join(root, "assets"), { recursive: true });
396
+ cpSync("goalbuddy/surfaces/local-goal-board/scripts", join(root, "scripts"), { recursive: true });
397
+ cpSync("goalbuddy/surfaces/local-goal-board/assets", join(root, "assets"), { recursive: true });
398
398
 
399
399
  const result = spawnSync(process.execPath, [
400
400
  join(root, "scripts", "local-goal-board.mjs"),
401
401
  "--goal",
402
- resolve("extend/local-goal-board/examples/sample-goal"),
402
+ resolve("goalbuddy/surfaces/local-goal-board/examples/sample-goal"),
403
403
  "--once",
404
404
  "--json",
405
405
  ], { encoding: "utf8" });
406
406
 
407
407
  assert.equal(result.status, 0, result.stderr || result.stdout);
408
408
  const report = JSON.parse(result.stdout);
409
- assert.equal(report.board.goal.title, "Local Kanban Board Extension");
409
+ assert.equal(report.board.goal.title, "Local Goal Board Surface");
410
410
  } finally {
411
411
  rmSync(root, { recursive: true, force: true });
412
412
  }
@@ -558,6 +558,33 @@ test("serves multiple local boards from one shared hub URL", async () => {
558
558
  }
559
559
  });
560
560
 
561
+ test("unregistered board paths explain hub reuse instead of stale-port cleanup", async () => {
562
+ const root = mkdtempSync(join(tmpdir(), "goalbuddy-local-board-unregistered-"));
563
+ const goalDir = join(root, "first-goal");
564
+ try {
565
+ mkdirSync(join(goalDir, "notes"), { recursive: true });
566
+ writeFileSync(join(goalDir, "state.yaml"), stateYaml("active", { title: "First Goal", slug: "first-goal" }));
567
+
568
+ const server = await startBoardServer({ goalDir, host: "127.0.0.1", port: 0 });
569
+ try {
570
+ const baseUrl = new URL(server.url).origin;
571
+ const missingResponse = await fetch(`${baseUrl}/rinova-client-revision-redesign/`);
572
+ assert.equal(missingResponse.status, 404);
573
+ const message = await missingResponse.text();
574
+ assert.match(message, /board path is not registered/i);
575
+ assert.match(message, /multi-board hub/i);
576
+ assert.match(message, /Do not stop it just because a \/<slug>\/ board URL returned 404/);
577
+ assert.match(message, /npx goalbuddy board <goal-dir>/);
578
+ assert.match(message, /First Goal/);
579
+ assert.match(message, /\/api\/boards/);
580
+ } finally {
581
+ await server.close();
582
+ }
583
+ } finally {
584
+ rmSync(root, { recursive: true, force: true });
585
+ }
586
+ });
587
+
561
588
  async function readUntil(reader, pattern) {
562
589
  const decoder = new TextDecoder();
563
590
  let text = "";
@@ -15,10 +15,19 @@
15
15
  - Authority: `requested | approved | inferred | needs_approval | blocked`
16
16
  - Proof type: `test | demo | artifact | metric | review | source_backed_answer | decision`
17
17
  - Completion proof: <observable signal that closes the full original outcome>
18
+ - Goal oracle: <live check, walkthrough, artifact, metric, source-backed answer, or decision that keeps pressure on the goal>
18
19
  - Likely misfire: <how GoalBuddy could succeed at the wrong thing>
19
20
  - Blind spots considered: <risks, unstated choices, or success dimensions surfaced during diagnostic intake>
20
21
  - Existing plan facts: <user-provided steps/files/constraints/sequencing to preserve and validate, or none>
21
22
 
23
+ ## Goal Oracle
24
+
25
+ The oracle for this goal is:
26
+
27
+ `<specific observable signal>`
28
+
29
+ The PM must keep comparing task receipts to this oracle. Planning, discovery, a passing tiny slice, or a clean-looking board is not enough. The goal finishes only when a final Judge/PM audit maps receipts and verification back to this oracle and records `full_outcome_complete: true`.
30
+
22
31
  ## Goal Kind
23
32
 
24
33
  `specific | open_ended | existing_plan | recovery | audit`
@@ -9,6 +9,10 @@ goal:
9
9
  kind: open_ended # specific | open_ended | existing_plan | recovery | audit
10
10
  tranche: "<continuous execution: complete successive safe verified slices until the full original outcome is complete>"
11
11
  status: active # active | blocked | done
12
+ oracle:
13
+ signal: "<live check, walkthrough, artifact, metric, source-backed answer, or decision that proves the owner outcome>"
14
+ cadence: "after each Worker package and at final audit"
15
+ final_proof: "<receipt-backed evidence required before full_outcome_complete: true>"
12
16
  intake:
13
17
  original_request: "<shortest faithful user request>"
14
18
  interpreted_outcome: "<one sentence>"
@@ -33,6 +37,8 @@ rules:
33
37
  missing_input_or_credentials_do_not_stop_goal: true
34
38
  preserve_and_validate_existing_plan: true
35
39
  intake_misfire_must_be_audited: true
40
+ goal_pressure_requires_oracle: true
41
+ no_completion_on_weak_proof: true
36
42
  slice_policy:
37
43
  max_consecutive_tiny_tasks: 2
38
44
  prefer_vertical_slices: true
@@ -47,17 +53,12 @@ agents:
47
53
  judge: unknown
48
54
 
49
55
  visual_board:
50
- # none | local | github_projects | both | unknown
56
+ # none | local | unknown
51
57
  selected: unknown
52
58
  local:
53
59
  status: not_requested # not_requested | starting | live | generated | blocked
54
60
  url: null
55
61
  command: "npx goalbuddy board docs/goals/<goal-slug>"
56
- github_projects:
57
- status: not_requested # not_requested | needs_approval | dry_run_ready | synced | blocked
58
- url: null
59
- command: "npx goalbuddy extend github-projects"
60
- missing: []
61
62
 
62
63
  active_task: T001
63
64
 
@@ -1,53 +0,0 @@
1
- # Extend Catalog Workflow
2
-
3
- ## Objective
4
-
5
- Design and implement Goal Maker's extension catalog workflow so optional features can move through GitHub-hosted extension metadata without requiring frequent npm package releases.
6
-
7
- ## Goal Kind
8
-
9
- `open_ended`
10
-
11
- ## Current Tranche
12
-
13
- Decide the product language and architecture for optional extensions, implement the first catalog-backed `extend` CLI workflow, add a visible root `extend/` surface, clean the skill/package layout, and leave a reviewable completion audit.
14
-
15
- ## Non-Negotiable Constraints
16
-
17
- - `state.yaml` remains the only board truth.
18
- - Extensions are optional support surfaces, not the control plane.
19
- - Use `extend` as the repo surface and `extensions` as the item name.
20
- - Avoid implying bidirectional sync with external services.
21
- - Keep npm as the stable core; catalog entries should be updateable from GitHub.
22
- - Keep package-only infrastructure out of the installable skill payload.
23
- - Do not require provider credentials for discovery or dry-run installation.
24
-
25
- ## Stop Rule
26
-
27
- Stop when the extension/catalog UX is implemented, the repo layout reflects the skill/package boundary, verification passes, and the final audit maps the shipped changes to receipts and commits.
28
-
29
- ## Canonical Board
30
-
31
- Machine truth lives at:
32
-
33
- `examples/extend-catalog-workflow/state.yaml`
34
-
35
- If this charter and `state.yaml` disagree, `state.yaml` wins for task status, active task, receipts, verification freshness, and completion truth.
36
-
37
- ## Run Command
38
-
39
- ```text
40
- /goal Follow examples/extend-catalog-workflow/goal.md
41
- ```
42
-
43
- ## PM Loop
44
-
45
- On every `/goal` continuation:
46
-
47
- 1. Read this charter.
48
- 2. Read `state.yaml`.
49
- 3. Work only on the active board task.
50
- 4. Assign Scout, Judge, Worker, or PM according to the task.
51
- 5. Write a compact task receipt.
52
- 6. Update the board.
53
- 7. Select the next active task or finish with a Judge/PM audit receipt.
@@ -1,47 +0,0 @@
1
- # T001: Extension Model Map
2
-
3
- Task: `T001`
4
- Kind: `scout`
5
- Status: `done`
6
-
7
- ## Summary
8
-
9
- The scalable frame is `extend`: optional extension folders live at the repo root under `extend/`, and catalog metadata lives at `extend/catalog.json`. The npm CLI should read the GitHub-hosted catalog so extension discovery can change without publishing a new npm version.
10
-
11
- Board publishing is the first likely extension family, but the extension surface should also support unrelated add-ons such as role guidance, reports, intake tools, and external channel publishing.
12
-
13
- ## Recommended Vocabulary
14
-
15
- - Repo surface: `extend/`
16
- - Items inside `extend/`: extensions
17
- - Catalog file: `extend/catalog.json`
18
- - Public action for external surfaces: publish
19
- - Avoid umbrella words: export, sync, capabilities
20
-
21
- ## Architecture Notes
22
-
23
- Core should own:
24
-
25
- - skill installation;
26
- - agent installation;
27
- - board checker scripts;
28
- - extension catalog discovery;
29
- - checksum-verified extension installation;
30
- - extension doctor checks.
31
-
32
- Extensions should own:
33
-
34
- - provider-specific behavior;
35
- - provider docs;
36
- - auth requirements;
37
- - fixtures and tests;
38
- - optional role or reporting guidance.
39
-
40
- No extension may define a second meaning of `state.yaml`.
41
-
42
- ## Candidate Tasks
43
-
44
- - Add a catalog-backed `goal-maker extend` command.
45
- - Add root `extend/` documentation.
46
- - Keep package-only CLI/tests out of the installable skill folder.
47
- - Add repo agent guidance so future improvements consider docs, skill instructions, CLI, tests, examples, and extensions together.
@@ -1,48 +0,0 @@
1
- # T002: Architecture Decision
2
-
3
- Task: `T002`
4
- Kind: `judge`
5
- Status: `done`
6
-
7
- ## Decision
8
-
9
- Use `extend` as the high-level optional surface and call each item an extension. Keep the default catalog GitHub-hosted at:
10
-
11
- ```text
12
- https://raw.githubusercontent.com/tolibear/goal-maker/main/extend/catalog.json
13
- ```
14
-
15
- The npm package should contain the stable core and CLI. The catalog can change on GitHub without requiring users to update npm for every optional integration.
16
-
17
- ## CLI Shape
18
-
19
- Use one top-level extension command instead of separate browse/list/show verbs:
20
-
21
- ```bash
22
- goal-maker extend
23
- goal-maker extend <extension-id>
24
- goal-maker extend install <extension-id>
25
- goal-maker extend doctor [extension-id]
26
- ```
27
-
28
- This keeps the UX simple:
29
-
30
- - no argument means "show the catalog";
31
- - an id means "show this extension";
32
- - `install` copies checksum-verified files into the local Goal Maker install;
33
- - `doctor` verifies installed extension files and required environment.
34
-
35
- ## Repo Shape
36
-
37
- Keep the root relatively clean:
38
-
39
- ```text
40
- goal-maker/ # installable skill payload
41
- internal/ # package/dev infrastructure
42
- extend/ # optional extension folders
43
- examples/ # completed sample runs
44
- extend/catalog.json # GitHub-hosted extension catalog
45
- AGENTS.md # repo-specific agent guidance
46
- ```
47
-
48
- `goal-maker/scripts/` stays inside the skill because installed skill docs call those scripts directly.
@@ -1,43 +0,0 @@
1
- # T003: Catalog CLI Implementation
2
-
3
- Task: `T003`
4
- Kind: `worker`
5
- Status: `done`
6
-
7
- ## Summary
8
-
9
- Implemented the first catalog-backed `goal-maker extend` workflow.
10
-
11
- Commit:
12
-
13
- - `105850e Add extension catalog workflow`
14
-
15
- ## Shipped Behavior
16
-
17
- - `goal-maker extend` reads the GitHub-hosted catalog and reports available/install/configuration state.
18
- - `goal-maker extend <id>` shows extension details.
19
- - `goal-maker extend install <id>` installs checksum-verified extension files.
20
- - `goal-maker extend doctor [id]` validates installed extension files and required environment.
21
- - Root `catalog.json` provides an initially empty GitHub-hosted catalog.
22
- - README documents the extension discovery/install flow.
23
-
24
- ## Files Touched
25
-
26
- At this point in the run, the CLI still lived under `goal-maker/bin/`. A later cleanup task moved it to `internal/cli/`.
27
-
28
- - `README.md`
29
- - `catalog.json`
30
- - `goal-maker/bin/goal-maker.mjs`
31
- - `goal-maker/test/goal-maker-cli.test.mjs`
32
- - `package.json`
33
-
34
- ## Verification
35
-
36
- Commands passed:
37
-
38
- ```bash
39
- npm run check
40
- git diff --check
41
- node goal-maker/bin/goal-maker.mjs extend --catalog-url catalog.json --json
42
- npm publish --dry-run --json
43
- ```
@@ -1,24 +0,0 @@
1
- # T004: Root Extend Folder
2
-
3
- Task: `T004`
4
- Kind: `pm`
5
- Status: `done`
6
-
7
- ## Summary
8
-
9
- Added a visible root `extend/` folder with documentation so GitHub shows the extension surface even before real extensions exist.
10
-
11
- Commit:
12
-
13
- - `17c65c9 Document extension folder`
14
-
15
- ## Files Touched
16
-
17
- - `README.md`
18
- - `extend/README.md`
19
-
20
- ## Receipt Notes
21
-
22
- The folder intentionally contains only documentation for now. Git cannot track an empty directory, and the product decision was to avoid bundling sample extensions until a real extension is ready.
23
-
24
- The README now says extensions live under `extend/` and move through the GitHub-hosted `extend/catalog.json`.
@@ -1,46 +0,0 @@
1
- # T005: Skill Package Layout Cleanup
2
-
3
- Task: `T005`
4
- Kind: `worker`
5
- Status: `done`
6
-
7
- ## Summary
8
-
9
- Separated package-only infrastructure from the installable skill payload while keeping the repo root clean.
10
-
11
- Commit:
12
-
13
- - `6faa5de Clean skill package layout`
14
-
15
- ## Files Touched
16
-
17
- - `AGENTS.md`
18
- - `CONTRIBUTING.md`
19
- - `README.md`
20
- - `extend/README.md`
21
- - `goal-maker/SKILL.md`
22
- - `goal-maker/bin/goal-maker.mjs` -> `internal/cli/goal-maker.mjs`
23
- - `goal-maker/test/*.test.mjs` -> `internal/test/*.test.mjs`
24
- - `package.json`
25
-
26
- ## Result
27
-
28
- The installable skill payload is now focused:
29
-
30
- ```text
31
- goal-maker/
32
- SKILL.md
33
- agents/
34
- scripts/
35
- templates/
36
- ```
37
-
38
- Package/dev infrastructure is grouped under:
39
-
40
- ```text
41
- internal/
42
- cli/
43
- test/
44
- ```
45
-
46
- Root `AGENTS.md` now tells future agents to consider README, SKILL.md, templates, checker behavior, CLI UX, examples, package contents, and extension catalog design when improving this repo.
@@ -1,50 +0,0 @@
1
- # T006: Catalog Location
2
-
3
- Task: `T006`
4
- Kind: `worker`
5
- Status: `done`
6
-
7
- ## Summary
8
-
9
- Moved the hosted catalog from the repo root to `extend/catalog.json`.
10
-
11
- Commit:
12
-
13
- - This example/catalog-location commit.
14
-
15
- ## Why
16
-
17
- The repo root should stay relatively clean, and `catalog.json` is part of the extension surface. Keeping it under `extend/` makes the shape easier to understand:
18
-
19
- ```text
20
- extend/
21
- README.md
22
- catalog.json
23
- <extension-id>/
24
- ```
25
-
26
- The npm CLI still reads the catalog from GitHub raw, now at:
27
-
28
- ```text
29
- https://raw.githubusercontent.com/tolibear/goal-maker/main/extend/catalog.json
30
- ```
31
-
32
- ## Files Touched
33
-
34
- - `catalog.json` -> `extend/catalog.json`
35
- - `internal/cli/goal-maker.mjs`
36
- - `README.md`
37
- - `AGENTS.md`
38
- - `extend/README.md`
39
- - `examples/extend-catalog-workflow/`
40
-
41
- ## Verification
42
-
43
- Commands to verify this task:
44
-
45
- ```bash
46
- npm run check
47
- git diff --check
48
- node internal/cli/goal-maker.mjs extend --catalog-url extend/catalog.json --json
49
- npm publish --dry-run --json
50
- ```
@@ -1,36 +0,0 @@
1
- # T999: Completion Audit
2
-
3
- Task: `T999`
4
- Kind: `judge`
5
- Status: `done`
6
-
7
- ## Decision
8
-
9
- Complete.
10
-
11
- ## Audit
12
-
13
- | Requirement | Evidence | Status |
14
- |---|---|---|
15
- | Use `extend` as the high-level surface | `extend/README.md`, `README.md`, `AGENTS.md` | Complete |
16
- | Items inside `extend` are extensions | `extend/README.md`, `README.md`, catalog terminology | Complete |
17
- | Avoid frequent npm releases for catalog updates | `extend/catalog.json` and default raw GitHub catalog URL | Complete |
18
- | Keep extension discovery credential-free | `goal-maker extend` and `goal-maker extend <id>` inspect catalog metadata only | Complete |
19
- | Verify installed extensions safely | checksum validation and `.installed.json` manifest in CLI implementation | Complete |
20
- | Keep root reasonably clean | package/dev files grouped under `internal/` | Complete |
21
- | Keep skill payload clean | `goal-maker/` contains skill, agents, scripts, and templates only | Complete |
22
- | Teach future agents about improvement surfaces | root `AGENTS.md` and SKILL.md note | Complete |
23
-
24
- ## Verification
25
-
26
- Commands passed during the implementation tranche:
27
-
28
- ```bash
29
- npm run check
30
- git diff --check
31
- node internal/cli/goal-maker.mjs extend --catalog-url extend/catalog.json --json
32
- npm publish --dry-run --json
33
- node goal-maker/scripts/check-goal-state.mjs examples/extend-catalog-workflow/state.yaml
34
- ```
35
-
36
- The final state is reviewable and maps to actual commits rather than simulated history.