goalbuddy 0.3.6 → 0.3.7

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 (73) hide show
  1. package/README.md +17 -8
  2. package/RELEASE-0.3.5.md +4 -4
  3. package/RELEASE-0.3.7.md +127 -0
  4. package/goalbuddy/SKILL.md +19 -10
  5. package/goalbuddy/scripts/check-goal-state.mjs +53 -0
  6. package/goalbuddy/scripts/render-task-prompt.mjs +22 -1
  7. package/{plugins/goalbuddy/skills/goalbuddy/extend → goalbuddy/surfaces}/local-goal-board/README.md +7 -9
  8. package/{plugins/goalbuddy/skills/goalbuddy/extend → goalbuddy/surfaces}/local-goal-board/examples/sample-goal/state.yaml +5 -5
  9. package/{plugins/goalbuddy/skills/goalbuddy/extend → goalbuddy/surfaces}/local-goal-board/examples/subgoal-parent/state.yaml +3 -3
  10. package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +3 -3
  11. package/goalbuddy/{extend → surfaces}/local-goal-board/scripts/lib/goal-board.mjs +2 -2
  12. package/goalbuddy/{extend → surfaces}/local-goal-board/scripts/local-goal-board.mjs +4 -4
  13. package/goalbuddy/{extend → surfaces}/local-goal-board/test/local-goal-board.test.mjs +8 -8
  14. package/goalbuddy/templates/goal.md +9 -0
  15. package/goalbuddy/templates/state.yaml +7 -6
  16. package/internal/assets/goalbuddy-v0.3.7-release.png +0 -0
  17. package/internal/cli/goal-maker.mjs +9 -711
  18. package/package.json +4 -4
  19. package/plugins/goalbuddy/.claude-plugin/plugin.json +3 -4
  20. package/plugins/goalbuddy/.codex-plugin/plugin.json +5 -6
  21. package/plugins/goalbuddy/README.md +4 -3
  22. package/plugins/goalbuddy/skills/goalbuddy/SKILL.md +19 -10
  23. package/plugins/goalbuddy/skills/goalbuddy/scripts/check-goal-state.mjs +53 -0
  24. package/plugins/goalbuddy/skills/goalbuddy/scripts/render-task-prompt.mjs +22 -1
  25. package/{goalbuddy/extend → plugins/goalbuddy/skills/goalbuddy/surfaces}/local-goal-board/README.md +7 -9
  26. package/{goalbuddy/extend → plugins/goalbuddy/skills/goalbuddy/surfaces}/local-goal-board/examples/sample-goal/state.yaml +5 -5
  27. package/{goalbuddy/extend → plugins/goalbuddy/skills/goalbuddy/surfaces}/local-goal-board/examples/subgoal-parent/state.yaml +3 -3
  28. package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +3 -3
  29. package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/scripts/lib/goal-board.mjs +2 -2
  30. package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/scripts/local-goal-board.mjs +4 -4
  31. package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/test/local-goal-board.test.mjs +8 -8
  32. package/plugins/goalbuddy/skills/goalbuddy/templates/goal.md +9 -0
  33. package/plugins/goalbuddy/skills/goalbuddy/templates/state.yaml +7 -6
  34. package/examples/extend-catalog-workflow/goal.md +0 -53
  35. package/examples/extend-catalog-workflow/notes/T001-extension-model-map.md +0 -47
  36. package/examples/extend-catalog-workflow/notes/T002-architecture-decision.md +0 -48
  37. package/examples/extend-catalog-workflow/notes/T003-implementation-summary.md +0 -43
  38. package/examples/extend-catalog-workflow/notes/T004-root-extend-folder.md +0 -24
  39. package/examples/extend-catalog-workflow/notes/T005-layout-cleanup.md +0 -46
  40. package/examples/extend-catalog-workflow/notes/T006-catalog-location.md +0 -50
  41. package/examples/extend-catalog-workflow/notes/T999-completion-audit.md +0 -36
  42. package/examples/extend-catalog-workflow/state.yaml +0 -327
  43. package/examples/github-pr-workflow-extension/pr-handoff.md +0 -46
  44. package/goalbuddy/extend/github-projects/README.md +0 -105
  45. package/goalbuddy/extend/github-projects/examples/goal-board-sync/state.yaml +0 -63
  46. package/goalbuddy/extend/github-projects/extension.yaml +0 -43
  47. package/goalbuddy/extend/github-projects/scripts/lib/github-projects.mjs +0 -728
  48. package/goalbuddy/extend/github-projects/scripts/lib/goal-state.mjs +0 -362
  49. package/goalbuddy/extend/github-projects/scripts/sync-github-project.mjs +0 -193
  50. package/goalbuddy/extend/github-projects/test/github-projects.test.mjs +0 -267
  51. package/goalbuddy/extend/local-goal-board/extension.yaml +0 -39
  52. package/internal/assets/extend-release.png +0 -0
  53. package/internal/assets/extend-release.svg +0 -83
  54. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/README.md +0 -105
  55. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/examples/goal-board-sync/state.yaml +0 -63
  56. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/extension.yaml +0 -43
  57. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/scripts/lib/github-projects.mjs +0 -728
  58. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/scripts/lib/goal-state.mjs +0 -362
  59. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/scripts/sync-github-project.mjs +0 -193
  60. package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/test/github-projects.test.mjs +0 -267
  61. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/extension.yaml +0 -39
  62. /package/goalbuddy/{extend → surfaces}/local-goal-board/assets/goalbuddy-mark.png +0 -0
  63. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/sample-goal/notes/T001-scout.md +0 -0
  64. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/goal.md +0 -0
  65. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/notes/.gitkeep +0 -0
  66. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +0 -0
  67. /package/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +0 -0
  68. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/assets/goalbuddy-mark.png +0 -0
  69. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/sample-goal/notes/T001-scout.md +0 -0
  70. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/goal.md +0 -0
  71. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/notes/.gitkeep +0 -0
  72. /package/plugins/goalbuddy/skills/goalbuddy/{extend → surfaces}/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +0 -0
  73. /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
  }
@@ -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