@veedubin/neuralgentics 0.13.5 → 0.13.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.
@@ -0,0 +1,173 @@
1
+ ---
2
+ name: kanban-board-manager
3
+ description: Manages the Boomerang kanban board in TASKS.md. Creates, moves, and audits cards across seven statuses (triage, todo, ready, running, blocked, done, archived). Seeded by the orchestrator from a roadmap; queried by the orchestrator to find ready cards for dispatch; updated by workers when they complete a card. The board is the durable source of truth for "what is being worked on."
4
+ ---
5
+
6
+ # Kanban Board Manager
7
+
8
+ ## Description
9
+
10
+ The kanban board lives in the project's `TASKS.md` file. It has seven statuses (Hermes-compatible) and supports dependency links between cards. The board manager is the **only** agent that mutates the board. Workers report status changes through it; the orchestrator queries it to find ready cards.
11
+
12
+ ## When to Use This Skill
13
+
14
+ - After the architect writes a roadmap → seed the board with one card per task.
15
+ - A worker has finished a card → move it `running → done` with evidence.
16
+ - A worker is stuck → move it `running → blocked` with a reason.
17
+ - The orchestrator needs to find `ready` cards → query the board.
18
+ - The user asks "what's the status?" → render the board.
19
+ - A card needs to be broken into smaller cards.
20
+ - A card needs to be re-architect-ed.
21
+ - A card needs to be requeued to "next session" (moved to `todo` with a reason).
22
+
23
+ ## Card Schema
24
+
25
+ Each card in `TASKS.md` uses this exact format. The board manager is responsible for keeping the format consistent.
26
+
27
+ ```markdown
28
+ ### T-001 · <task title>
29
+ - **Status:** <triage|todo|ready|running|blocked|done|archived>
30
+ - **Assignee:** <agent profile, e.g. boomerang-coder>
31
+ - **Phase:** <phase name from roadmap>
32
+ - **Roadmap:** `docs/roadmap-<proj>.md#task-1-1`
33
+ - **Goal:** one-sentence goal
34
+ - **Acceptance:** testable criteria (bullet list)
35
+ - **Scope IN:** bullet list
36
+ - **Scope OUT:** bullet list, with escalation target
37
+ - **Depends on:** T-002, T-003 (or `none`)
38
+ - **Blocks:** T-004, T-005 (or `none`)
39
+ - **Created:** YYYY-MM-DD
40
+ - **Updated:** YYYY-MM-DD
41
+ - **Wrap-up evidence:**
42
+ - changed_files: [...]
43
+ - verification: [...]
44
+ - residual_risk: [...]
45
+ - summary: one-paragraph closeout
46
+ ```
47
+
48
+ Cards are grouped by status in `TASKS.md` with `## <Status>` headers (e.g. `## Triage`, `## Todo`, `## Ready`, `## Running`, `## Blocked`, `## Done`, `## Archived`). The board manager keeps the seven sections in this order.
49
+
50
+ ## Operations
51
+
52
+ ### seed_from_roadmap(roadmap_path)
53
+
54
+ Called by the orchestrator after the architect writes a roadmap. Reads `docs/roadmap-<proj>.md`, creates one card per task with:
55
+ - Status defaults to `todo` (unless the task has no dependencies, in which case `ready`)
56
+ - Assignee defaults to the profile listed in the roadmap
57
+ - ID assigned sequentially (`T-001`, `T-002`, ...)
58
+ - All other fields populated from the roadmap section
59
+
60
+ The board manager **does not** skip this step. The roadmap is the contract; the board is the working copy.
61
+
62
+ ### list_by_status(status)
63
+
64
+ Returns all card IDs and titles with the given status. Used by the orchestrator to find `ready` cards for dispatch.
65
+
66
+ ### find_ready_cards()
67
+
68
+ Returns all cards with status `ready` AND all dependencies marked `done`. These are dispatchable.
69
+
70
+ ### claim(card_id, worker)
71
+
72
+ Moves a card `ready → running` and stamps the worker as the assignee. Returns the card's full content for the worker's Context Package.
73
+
74
+ ### complete(card_id, evidence)
75
+
76
+ Moves a card `running → done`. The `evidence` argument is the structured wrap-up:
77
+
78
+ ```json
79
+ {
80
+ "summary": "one-paragraph closeout",
81
+ "changed_files": ["path/to/file.py"],
82
+ "verification": ["pytest tests/x.py", "npm run lint"],
83
+ "residual_risk": ["what was not tested", "what still needs human review"],
84
+ "retry_notes": "what failed before if this was a retry"
85
+ }
86
+ ```
87
+
88
+ The board manager appends the evidence to the card's `Wrap-up evidence` block and stamps the `Updated` date.
89
+
90
+ ### block(card_id, reason)
91
+
92
+ Moves a card `running → blocked` (or `todo → blocked`) with a `Blocked reason` field. The orchestrator surfaces blocked cards to the user.
93
+
94
+ ### unblock(card_id, resolution)
95
+
96
+ Moves a card `blocked → ready` (or `todo`) with a `Resolution` field describing what changed.
97
+
98
+ ### break_down(card_id, new_cards)
99
+
100
+ Splits a card into multiple smaller cards. Closes the original as `archived` with reason "broken into T-X, T-Y, T-Z" and creates the new cards with `todo` status. Dependencies are re-pointed.
101
+
102
+ ### rearchitect(card_id, question)
103
+
104
+ Moves a card `todo → triage` with a `Re-architect question` field. The orchestrator will route the card back to the architect with this question as part of the Context Package.
105
+
106
+ ### requeue(card_id, reason)
107
+
108
+ Moves a card to `todo` with a `Requeue reason` field. Use this for cards that are out of scope for the current session but should be revisited later.
109
+
110
+ ## Audit Operations
111
+
112
+ ### walk_board()
113
+
114
+ Renders a human-readable summary of all cards grouped by status. Used by the orchestrator at wrap-up and by the user for status checks.
115
+
116
+ ### find_unaccounted()
117
+
118
+ Returns all cards that are not `done` or `archived` AND have not been updated in the last 7 days. The orchestrator uses this at wrap-up to decide what to break, re-architect, or requeue.
119
+
120
+ ### find_blocked()
121
+
122
+ Returns all `blocked` cards. The orchestrator surfaces these to the user; they need human input.
123
+
124
+ ### find_done_without_evidence()
125
+
126
+ Returns all `done` cards where `Wrap-up evidence` is missing or incomplete. The orchestrator uses this to verify worker wrap-ups.
127
+
128
+ ## Implementation Notes
129
+
130
+ - The board manager operates on `TASKS.md` directly. The file is the board. There is no separate database.
131
+ - Card IDs are stable. Once assigned, an ID is never reused.
132
+ - `Updated` is stamped on every status change.
133
+ - The board manager does NOT decide what to work on. The orchestrator decides that. The board manager only records decisions.
134
+ - Workers report status changes through the board manager; they do not edit `TASKS.md` directly.
135
+
136
+ ## Model
137
+
138
+ Use **Gemini** for routine board operations. The board manager is mostly mechanical (move status, append evidence) and does not need heavy reasoning.
139
+
140
+ ## Anti-Patterns
141
+
142
+ - **Do not** let a worker edit `TASKS.md` directly. All changes go through the board manager.
143
+ - **Do not** store card content in chat context. Always read from `TASKS.md` and write back to `TASKS.md`.
144
+ - **Do not** create a card without a roadmap link (except in `triage`, where the card IS the rough idea).
145
+ - **Do not** move a card to `done` without evidence. The board manager should refuse and prompt the worker for the wrap-up JSON.
146
+ - **Do not** auto-promote a card to `ready` if its dependencies are not all `done`. The orchestrator (or board manager's `find_ready_cards()`) checks this explicitly.
147
+
148
+ ## Card Granularity Rules (Added Session 23)
149
+
150
+ These rules govern **how fine-grained a card should be**. Over-broad cards waste context and degrade worker output.
151
+
152
+ ### Rule G1: One logical change per card
153
+ A card's "Acceptance" should fit in **one logical change**. Examples of properly-scoped cards:
154
+ - ✅ "Fix silent error swallowing in 7 Scan loops in store package"
155
+ - ✅ "Fix CountMemories broken primary query"
156
+ - ✅ "Add regression test for CountMemories"
157
+ - ❌ "Refactor memory store package" (too broad — 1768 LOC god-file)
158
+ - ❌ "Fix memory store bugs" (too vague)
159
+
160
+ If a logical change touches multiple files in the same module, that's fine — one card, one dispatch. But if it touches multiple unrelated concerns (e.g., error handling + a new feature + perf), that's three cards.
161
+
162
+ ### Rule G2: Cards that need linting spawn a separate card
163
+ If a card's "Scope IN" includes "touch N files" and the touched files will need lint/format work, the card's wrap-up should list those files explicitly so a follow-up `T-LINT-XXX` card can dispatch to a `boomerang-linter` agent. Do not bundle the lint work into the coder's dispatch.
164
+
165
+ Card convention:
166
+ - Logic-fix cards: `T-NNN · <verb> <thing> — <one-line summary>`
167
+ - Lint-only cards: `T-LINT-NNN · <tool> <files> after <T-XXX>`
168
+
169
+ ### Rule G3: Cards that span new code + tests split
170
+ A "fix this bug" card is fine to include "add regression test" in the same dispatch (the test proves the fix). But a "fill coverage gap" card that is purely about adding tests to existing code should be `T-TEST-NNN`, not bundled with a refactor.
171
+
172
+ ### Rule G4: Refactor of N>1 file splits into N or more cards
173
+ A refactor that splits a 1768-LOC file into 10 files is **at least 10 cards** (one per new file extraction), executed sequentially. Don't try to do all 10 in one dispatch.
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: skill-self-audit
3
+ description: End-of-cycle audit that detects repeated processes and creates skills for them. Invoked by the orchestrator before wrap-up. If a process was repeated more than once during the cycle, the orchestrator invokes boomerang-agent-builder to formalize it as a skill before signing off.
4
+ ---
5
+
6
+ # Skill Self-Audit
7
+
8
+ ## Description
9
+
10
+ The orchestrator runs this audit at the end of every cycle. The audit scans the cycle for processes that were repeated more than once — and if any are found, the orchestrator creates a skill for them. This is how the Boomerang v3 skill library grows organically: as patterns repeat, they get formalized.
11
+
12
+ ## The Rule
13
+
14
+ > **If we did a process more than once this cycle, it should be a skill.**
15
+
16
+ This is not optional. The orchestrator's wrap-up protocol includes this step explicitly. The user said:
17
+
18
+ > "We need to at the end of every boomerang look at if we did a process if it would make sense to make it a skill. We need this also built in."
19
+
20
+ So this skill is built in.
21
+
22
+ ## When to Use This Skill
23
+
24
+ - The orchestrator is about to wrap up a cycle (every cycle)
25
+ - The user says "/boomerang-handoff" or the cycle is naturally ending
26
+ - A session is being terminated
27
+ - The user explicitly invokes "skill audit" or "self-audit"
28
+
29
+ ## Audit Process
30
+
31
+ ### 1. Review the cycle's actions
32
+
33
+ Walk through the orchestrator's actions in the current cycle:
34
+ - Memory queries
35
+ - Architect dispatches
36
+ - Worker dispatches (Task tool calls)
37
+ - File reads / searches
38
+ - Skill invocations
39
+ - Context Package builds
40
+ - Status changes
41
+
42
+ Look for **processes that recurred** — meaning the same multi-step pattern was executed more than once, even if the targets were different.
43
+
44
+ Examples of "recurring process":
45
+ - Built 3 different Context Packages for 3 different cards (→ the "build Context Package" process should be a skill)
46
+ - Dispatched 4 coder tasks each with the same permission-check step (→ the "broker permission gate" should be a skill)
47
+ - Read AGENTS.md, TASKS.md, HANDOFF.md at the start of two different cycles (→ already a skill: the Session Start Protocol)
48
+ - Had to look up the same docs/roadmap path 5 times during dispatch (→ the orchestrator should pin the roadmap as a session variable)
49
+ - Translated the same kind of card evidence into the same kanban-board-manager call 6 times (→ the wrap-up evidence structure is already formalized; no new skill needed)
50
+
51
+ Examples of "not recurring" (do NOT make a skill):
52
+ - Read 1 file once to get context
53
+ - Asked the architect to design 1 thing
54
+ - Performed 1 dispatch
55
+
56
+ ### 2. For each recurring process, decide
57
+
58
+ Ask three questions:
59
+
60
+ 1. **Is the process already a skill?** If yes, no action. Example: "build Context Package" is a documented pattern in the orchestrator skill, not a new skill.
61
+ 2. **Is the process too narrow to be a skill?** A skill should be reusable across projects and sessions. If the process is project-specific or one-off, document it in HANDOFF.md instead of creating a skill.
62
+ 3. **Would formalizing it reduce token cost or increase reliability?** If yes, create the skill. If it's just a "nice to have," defer.
63
+
64
+ If all three answer "no," don't create a skill.
65
+
66
+ ### 3. If a new skill is warranted
67
+
68
+ Invoke the `boomerang-agent-builder` skill with:
69
+
70
+ - **Process name** — what to call the new skill
71
+ - **Process description** — what it does, when to use it
72
+ - **Process steps** — the exact sequence of operations
73
+ - **Inputs** — what the skill takes
74
+ - **Outputs** — what the skill returns
75
+ - **Example invocation** — a worked example
76
+
77
+ `boomerang-agent-builder` handles the rest: frontmatter, naming convention, syncing across the 3 skill locations, validating with `npm run fix-perms` and yaml_check.
78
+
79
+ ### 4. If a skill should be UPDATED (not created)
80
+
81
+ If an existing skill is being applied in a way that wasn't anticipated, the orchestrator should:
82
+ - Note the deviation in HANDOFF.md
83
+ - Add a TODO to the kanban board for "improve <skill-name> to handle <scenario>"
84
+ - Continue with the current cycle; do not block on the skill update
85
+
86
+ ### 5. Record the audit result
87
+
88
+ Whether or not a skill was created, the audit result is recorded:
89
+
90
+ - **Skills created this cycle:** T-XXX → new skill name
91
+ - **Skills marked for improvement:** T-YYY → skill name → reason
92
+ - **No new skills needed:** a one-liner explaining why the cycle's processes were all unique or already covered
93
+
94
+ This is saved to memoryManager with `project` metadata so the next session can see what was learned.
95
+
96
+ ## Output Format
97
+
98
+ The audit returns a single Markdown block:
99
+
100
+ ```markdown
101
+ ## Skill Self-Audit Result
102
+
103
+ ### Skills Created
104
+ - **<skill-name>** — <one-line description>
105
+ - Triggered by: <which actions in the cycle>
106
+ - Replaces: <ad-hoc process description>
107
+
108
+ ### Skills Marked for Improvement
109
+ - **<skill-name>** — <gap description>
110
+ - Tracked as: T-XXX on the kanban board
111
+
112
+ ### No Action Needed
113
+ - <one-liner per non-issue, e.g. "The Context Package template is already in boomerang-orchestrator SKILL.md">
114
+
115
+ ### Cycle Summary
116
+ - Total actions reviewed: N
117
+ - Recurring processes found: N
118
+ - Skills created: N
119
+ - Skills marked for improvement: N
120
+ ```
121
+
122
+ ## Anti-Patterns
123
+
124
+ - **Do not** create a skill for a process that was performed only once. "Once" is data, not a pattern.
125
+ - **Do not** create a skill that overlaps with an existing skill. Update the existing one instead.
126
+ - **Do not** create skills for project-specific processes. Those belong in HANDOFF.md or the project's own docs.
127
+ - **Do not** skip the audit. The user asked for it to be "built in," and it is.
128
+
129
+ ## Model
130
+
131
+ Use **Gemini** for the audit reasoning. Skill creation itself (via `boomerang-agent-builder`) uses the agent-builder's recommended model (deepseek-v4-pro:cloud or higher).
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: todo-list-updater
3
+ description: Refreshes the project's todo list (TASKS.md or its Current Phase section) to reflect the current cycle's state. Invoked by the orchestrator at end of cycle, when a phase transitions, or when the user asks to clean up the todo list. Marks done items, removes stale items, adds newly discovered items, and keeps the file scannable for the next cycle.
4
+ ---
5
+
6
+ # Todo List Updater
7
+
8
+ ## Description
9
+
10
+ The todo list lives in `TASKS.md` (or in a project-specific location if the project overrides the convention). The orchestrator invokes this skill to keep the file current. The file is the canonical "what are we working on right now" — chat scrollback and memory are not.
11
+
12
+ ## When to Use This Skill
13
+
14
+ - The orchestrator is about to wrap up a cycle
15
+ - A phase transition is happening (a major milestone reached)
16
+ - The user asks "what's the todo list?" or "clean up the todos"
17
+ - Several items have completed since the last update
18
+ - New items were discovered during the cycle that need to be tracked
19
+
20
+ ## The File Convention
21
+
22
+ `TASKS.md` has this structure. The updater preserves the structure; it does not impose it on a project that uses a different convention.
23
+
24
+ ```markdown
25
+ # <Project> Tasks
26
+
27
+ ## Overview
28
+ <one paragraph: what this project is, current status, link to roadmap>
29
+
30
+ ## Current Phase: <phase name>
31
+ ### Active
32
+ - [ ] **T-001** · <task title> — <status badge, e.g. 🔄 running> — <one-line context>
33
+ - [ ] **T-002** · <task title> — 🔲 ready — <one-line context>
34
+ - [ ] **T-003** · <task title> — 🚫 blocked — <one-line context, see reason>
35
+
36
+ ### Pending (queued, not yet started)
37
+ - [ ] **T-004** · <task title> — <reason for queueing>
38
+
39
+ ### Completed This Phase
40
+ - [x] **T-005** · <task title> — <one-line summary, link to wrap-up>
41
+ - [x] **T-006** · <task title> — <one-line summary, link to wrap-up>
42
+
43
+ ## Next Phase: <phase name>
44
+ <bullet list of tasks, not yet started>
45
+
46
+ ## Backlog / Future Phases
47
+ <bullet list of tasks for phases beyond Next>
48
+
49
+ ## Completed (all phases, historical)
50
+ - [x] **T-000** · <task title> — <phase X.Y, date, link to wrap-up>
51
+
52
+ ## Reference
53
+ - Roadmap: `docs/roadmap-<proj>.md`
54
+ - Kanban board: this file (TASKS.md)
55
+ - Memory: memoryManager memory ids for session summaries
56
+ ```
57
+
58
+ The "Current Phase" section is the **headline** of the file. It should be scannable in 30 seconds.
59
+
60
+ ## Operations
61
+
62
+ ### refresh_from_board()
63
+
64
+ The default entry point. Reads the kanban board (TASKS.md kanban section or, if missing, the card-level format) and rebuilds the Current Phase section. The result is sorted: blocked → running → ready → pending.
65
+
66
+ ### mark_done(card_id, summary)
67
+
68
+ Moves a card from Active to Completed This Phase. The summary is the worker's wrap-up closeout. The full wrap-up is in the kanban card; the todo list gets a one-liner plus a link to the card.
69
+
70
+ ### mark_blocked(card_id, reason)
71
+
72
+ Moves a card from Active to a "Blocked" subsection with the reason. Stays visible (does not move to Pending) so the user sees it on every refresh.
73
+
74
+ ### add_discovered(item, source)
75
+
76
+ Adds a new item that was discovered during the cycle. The source is a citation (e.g. "discovered during T-007: error handling for malformed messages was missing"). New items go to Active or Pending depending on whether they have dependencies.
77
+
78
+ ### drop(card_id, reason)
79
+
80
+ Removes a card from the todo list entirely. Used for items that were discovered to be out of scope, duplicates, or absorbed into another card. The original card is moved to `archived` in the kanban board; the todo list entry is removed with a note in the changelog at the bottom of the file.
81
+
82
+ ### transition_to_next_phase()
83
+
84
+ When the Current Phase is fully Done (all cards in `done` or `archived`), this operation:
85
+ 1. Renames the current section to "Completed (<phase name>)" with a date stamp
86
+ 2. Promotes Next Phase → Current Phase
87
+ 3. Promotes Backlog → Next Phase
88
+ 4. Stamps the new Current Phase header with today's date
89
+
90
+ ### sync_to_memory()
91
+
92
+ Optional. Saves the current todo list to memoryManager with `project` metadata. The orchestrator does this on handoff. The skill does not run this automatically; it is invoked on demand.
93
+
94
+ ## Rules
95
+
96
+ - **The todo list is a summary, not the source of truth.** The kanban board (TASKS.md kanban section) has the full card content. The todo list has scannable one-liners.
97
+ - **Never duplicate content.** If a card's full details are in the kanban section, the todo list entry is a one-liner with a reference.
98
+ - **The current phase is always at the top.** Historical completed phases are below.
99
+ - **No "in progress" items that aren't being worked on.** If a card is `running` but no worker is active, the orchestrator must either re-claim it or move it to `blocked`.
100
+ - **Use status badges** for scannability: 🔄 running, 🔲 ready, 🚫 blocked, ✅ done, 📦 archived, ❓ triage.
101
+
102
+ ## Anti-Patterns
103
+
104
+ - **Do not** create todo items without a roadmap link (except for items discovered mid-cycle, which cite the source).
105
+ - **Do not** keep items in the Active section that have been "stuck" for more than 7 days. They are stale; move them to Blocked with a reason.
106
+ - **Do not** let the todo list grow unbounded. After 50+ items, archive the oldest 20% to a separate "Archive" file.
107
+ - **Do not** rewrite the file from scratch each time. The updater should make targeted edits and preserve the structure.
108
+
109
+ ## Model
110
+
111
+ Use **Gemini** for routine refreshes. Use a higher-reasoning model (e.g. `kimi-k2.6:cloud` for Boomerang) for `transition_to_next_phase` since that involves a structural reorganization.
@@ -0,0 +1,206 @@
1
+ ---
2
+ name: update-gh-docs
3
+ description: Updates GitHub-flavored documentation (README, CHANGELOG, release notes) so they are consistent, well-formatted, and validated to render correctly on github.com. Invoked as part of the release-card workflow, before tagging a release. Generic prompts for any GitHub-hosted project, with neuralgentics-specific tailoring (hero copy from Session 22, fish-shell user, podman-only, no docker, repo at Veedubin/neuralgentics).
4
+ ---
5
+
6
+ # Update GitHub Docs
7
+
8
+ ## Description
9
+
10
+ When the orchestrator is about to tag a release, this skill updates the GitHub-visible documentation files (`README.md`, `CHANGELOG.md`, GitHub release notes, and any repo-root `.md` files visitors see first) so they are:
11
+ - **Consistent** — version numbers, dates, links all match
12
+ - **Complete** — every public-facing file has accurate content
13
+ - **Formatted correctly** — renders cleanly on github.com (no broken markdown, no mermaid — use Unicode box-drawing per neuralgentics house style)
14
+ - **Validated** — links resolve, code blocks have correct language tags, table-of-contents works
15
+
16
+ The skill is **generic by design** but with neuralgentics-specific tailoring at the bottom. It can be adapted to other projects by changing the project-specific block.
17
+
18
+ ## When to Use This Skill
19
+
20
+ - The orchestrator is about to tag a release (`v*` tag push) and needs the public docs ready.
21
+ - The user asks to "update the docs" or "make the README better."
22
+ - A major new feature is shipped and the public-facing docs need an update.
23
+ - The release-card workflow says `T-DOCS-NNN` is the next ready card.
24
+
25
+ ## Generic Flow (any GitHub project)
26
+
27
+ ### Step 1: Identify the docs to update
28
+ Common files in order of visibility:
29
+ 1. `README.md` — the landing page visitors see first
30
+ 2. `CHANGELOG.md` — version history
31
+ 3. `docs/index.md` or similar — extended docs landing
32
+ 4. Any `ROADMAP.md`, `CONTRIBUTING.md`, `LICENSE` in repo root
33
+ 5. GitHub release notes (auto-generated from the tag push, but can be customized)
34
+
35
+ ### Step 1.5: Ensure external skills snapshot is fresh (release-time only)
36
+
37
+ When tagging a release, the external skills snapshot must be bundled into the tarball so offline installs still get the curated set. The release script handles this automatically via `scripts/external-skills-fetcher.sh` (called from `release.sh` before `build_dist`).
38
+
39
+ Verify the snapshot exists and is recent:
40
+ - Check `~/.neuralgentics/external_skills/MANIFEST.json` exists
41
+ - Check `MANIFEST.json` has entries for both `ai-research-skills` and `ui-ux-pro-max-skill`
42
+ - Check the `commit_sha` fields are populated (not empty)
43
+
44
+ If the snapshot is missing, run `./scripts/external-skills-fetcher.sh` to create it (or use `--skip-external-skills` to bundle a lean tarball without external skills).
45
+
46
+ After build, verify `build/dist/share/external_skills/` contains:
47
+ - `MANIFEST.json`
48
+ - `ai-research-skills/` with at least one `SKILL.md`
49
+ - `ui-ux-pro-max-skill/` with at least one `SKILL.md`
50
+ - NO `.git/` directories
51
+
52
+ ### Step 2: Read each file and check
53
+ - **Version numbers** — match the upcoming release tag (e.g., `v0.1.1`).
54
+ - **Date stamps** — today's date in `YYYY-MM-DD` format.
55
+ - **Code blocks** — every `\`\`\`` has a language tag (`\`\`\`bash`, `\`\`\`go`, `\`\`\`typescript`).
56
+ - **Links** — relative links use folder-form (no `.md` extension — github.com resolves these automatically).
57
+ - **Internal links** — broken anchors are the #1 GH-docs bug. Use `grep -rn "](#" .` to find anchors and verify they match headings.
58
+ - **External links** — `curl -sIL <url>` to verify not 404.
59
+ - **Mermaid** — replace with Unicode box-drawing per house style (or use `\`\`\`mermaid` blocks if the project wants them).
60
+ - **Markdown flavor** — github.com uses GFM (GitHub Flavored Markdown). Tables, task lists, autolinks, strikethrough all work. HTML is allowed but discouraged.
61
+
62
+ ### Step 3: Update the changelog
63
+ - Add a new top section for the new version.
64
+ - Sections in this order: `Added`, `Changed`, `Fixed`, `Removed`, `Deprecated`, `Notes`.
65
+ - Be specific — name the file, the function, the commit. Don't be vague.
66
+ - Reference issue/PR numbers if they exist.
67
+ - For a patch release (v0.1.0 → v0.1.1), the "Changed" section is usually empty.
68
+ - For a minor release (v0.1.x → v0.2.0), the "Added" section is usually longest.
69
+
70
+ ### Step 4: Update the README
71
+ - Verify the hero copy still matches the product reality.
72
+ - Verify the install command actually works (curl the URL, verify the script exists).
73
+ - Verify the "Quickstart" example actually runs end-to-end.
74
+ - Verify all `[link](path)` references resolve.
75
+ - Verify the badges (if any) point to live URLs.
76
+
77
+ ### Step 5: Validate on github.com (or local equivalent)
78
+ - If you can push to a test branch, push and check the rendered page.
79
+ - If not, use `markdownlint` or `markdown-link-check` if installed.
80
+ - The minimum validation:
81
+ ```bash
82
+ # All internal .md links resolve
83
+ for f in $(find . -name "*.md" -not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/site/*"); do
84
+ grep -oE '\]\([^)]+\.md\)' "$f" | while read link; do
85
+ target=$(echo "$link" | sed 's/^](\(.*\))/\1/')
86
+ test -f "$target" || echo "BROKEN: $f -> $target"
87
+ done
88
+ done
89
+ ```
90
+ - Manual check: open each file in a markdown preview (VS Code, Obsidian, etc.) and skim.
91
+
92
+ ### Step 6: Commit the docs updates
93
+ - ONE commit per file (or one combined commit if all changes are small).
94
+ - Message format: `docs(readme): update hero + install URL for v0.1.1 — Refs: T-DOCS-NNN`
95
+ - Push to the same branch the release will tag from.
96
+
97
+ ## Neuralgentics-Specific Tailoring
98
+
99
+ ### House style (from Session 22)
100
+ - **No mermaid diagrams in docs.** Use Unicode box-drawing characters (`┌─┐│└┘├┤┬┴┼─╭╮╰╯`). The user explicitly rejected mermaid.
101
+ - **Hero copy is a flat feature list**, not clever marketing. Format:
102
+ > "Multi-Agent Orchestration, Permissions-based MCP Server Broker, Context Continuity Across Sessions"
103
+ Sub-headline: "An open-source agent runtime, built for engineers who ship."
104
+ - **Honest comparison tables.** Cells with no data marked `(needs research)` rather than fabricated.
105
+ - **No source builds for end users** — GH builds all release artifacts. The release workflow is at `.github/workflows/release.yml`.
106
+ - **5 release targets only:** linux/amd64, linux/arm64, darwin/arm64 (Apple Silicon), windows/amd64, windows/arm64.
107
+
108
+ ### Project facts (verify before publishing)
109
+ - **Repo URL:** `https://github.com/Veedubin/neuralgentics` (NOT `neuralgentics/neuralgentics` — that org does not exist).
110
+ - **Latest tag:** check `git tag --sort=-version:refname | head -1` and `curl -s https://api.github.com/repos/Veedubin/neuralgentics/releases/latest | jq -r .tag_name`.
111
+ - **Install command:**
112
+ ```bash
113
+ curl -fsSL https://raw.githubusercontent.com/Veedubin/neuralgentics/main/scripts/install.sh | bash
114
+ ```
115
+ (NOT `releases/latest/download/install.sh` — install.sh is not in release assets, it's served from `main`.)
116
+ - **Container option:** `podman-compose up` (podman only, no docker).
117
+ - **Test commands:**
118
+ - Go: `cd packages/<module> && GOWORK=off go test -short -timeout 60s ./...`
119
+ - TS: `cd packages/tui && bun test`
120
+ - **5 platform builds:** linux-amd64, linux-arm64, darwin-arm64, windows-amd64, windows-arm64.
121
+
122
+ ### Files that MUST be updated per release (neuralgentics-specific)
123
+ - `README.md` — install command, version badge, quickstart
124
+ - `CHANGELOG.md` — new top section
125
+ - `docs/index.md` — hero copy, latest features
126
+ - `mkdocs.yml` — `site_url`, `repo_url`, version, any new pages
127
+ - `package.json` — `version` field (root + `packages/tui`, `packages/opencode`)
128
+ - `packages/backend-go/cmd/backend/main.go` — add `var version = ""` and assign to `serverInfo.Version` so ldflag works (TODO from v0.1.0)
129
+ - `.github/workflows/release.yml` — verify Go version, build matrix, container job status
130
+
131
+ ### Files that MUST NOT be in the public repo
132
+ - `HANDOFF.md`, `CONTEXT.md`, `TASKS.md` (gitignored, kept on disk for orchestrator state)
133
+ - `certs/` (self-signed TLS, gitignored)
134
+ - `.venv/`, `node_modules/`, `build/`, `dist/`, `site/` (build artifacts)
135
+ - `opencode-base/` (legacy vendoring, removed in Session 21)
136
+ - `docs/design/session-*.md` and `docs/design/*-plan*.md` (internal session artifacts, local-only)
137
+
138
+ ### Verifying the docs actually load
139
+ - The mkdocs site is at `https://veedubin.github.io/neuralgentics/`. After pushing changes to `main`, the docs workflow (`.github/workflows/docs.yml`) re-deploys.
140
+ - Validate: `curl -sIL https://veedubin.github.io/neuralgentics/ | head -5` (expect 200).
141
+ - Validate: `curl -s https://veedubin.github.io/neuralgentics/getting-started/installation/ | grep -c "raw.githubusercontent"` (expect ≥1 — confirms the install URL fix from Session 22 is still in place).
142
+ - Validate: open the GH release page after tagging and verify the rendered release notes look right.
143
+
144
+ ## Kanban Rule: Release Card MUST Spawn a T-DOCS Card
145
+
146
+ Per AGENTS.md R6 (added Session 23): every release card (T-REL-NNN) MUST include a child `T-DOCS-NNN` card that invokes this skill before the tag is pushed. The release card is not "done" until the docs card is done.
147
+
148
+ Release card template:
149
+
150
+ ```markdown
151
+ ### T-REL-001 · Tag v0.1.1 release
152
+ - **Status:** ready
153
+ - **Assignee:** boomerang-release
154
+ - **Goal:** Tag v0.1.1 with all Session 23 bug fixes and push to GH.
155
+ - **Acceptance:**
156
+ - [ ] All quality gates green (T-069 done)
157
+ - [ ] T-DOCS-XXX docs update done (invoke update-gh-docs skill)
158
+ - [ ] Tag v0.1.1 pushed to origin
159
+ - [ ] GH Actions release workflow green
160
+ - [ ] Release assets all uploaded (5 platforms + checksums.txt)
161
+ - [ ] Live docs site serves correctly
162
+ - **Depends on:** T-069, T-DOCS-XXX
163
+ - **Scope IN:** version bump, CHANGELOG, tag push, release verification
164
+ - **Scope OUT:** code changes (those are separate cards)
165
+ ```
166
+
167
+ The T-DOCS-XXX card:
168
+
169
+ ```markdown
170
+ ### T-DOCS-001 · Update GitHub docs for v0.1.1
171
+ - **Status:** ready
172
+ - **Assignee:** boomerang-writer
173
+ - **Skill:** update-gh-docs
174
+ - **Goal:** Update README, CHANGELOG, docs/index.md, mkdocs.yml, package.json versions for v0.1.1.
175
+ - **Acceptance:**
176
+ - [ ] All version numbers match v0.1.1
177
+ - [ ] All internal links resolve
178
+ - [ ] Hero copy still accurate
179
+ - [ ] Install command still works (curl-tested)
180
+ - [ ] Hero copy is the flat feature list (not clever marketing)
181
+ - [ ] No mermaid in any doc file
182
+ - [ ] One commit per file
183
+ - **Depends on:** T-REL-001 (for version target)
184
+ ```
185
+
186
+ ## Anti-Patterns
187
+
188
+ - **Don't** auto-generate docs from code. They're for humans. Use code for the data, write the prose.
189
+ - **Don't** put `WIP` or `TODO` in public docs. Either finish it or don't include it.
190
+ - **Don't** link to local files with `.md` extensions — github.com doesn't render these as anchors. Use folder-form: `[link](path/to/page/)` not `[link](path/to/page.md)`.
191
+ - **Don't** include comparison cells with fabricated data. Mark `(needs research)` instead.
192
+ - **Don't** update docs in the same commit as code changes. Separate them for clean rollback.
193
+ - **Don't** push docs changes directly to main. Open a PR unless the project is single-maintainer and that's the norm.
194
+ - **Don't** add emojis to docs unless the user explicitly asks. (User preference: no emojis in docs.)
195
+
196
+ ## Model
197
+
198
+ Use **Gemma** for routine doc updates (formatting, link checks, version bumps). Use **DeepSeek** for any doc that requires careful judgment (hero copy, comparison tables, hero sections).
199
+
200
+ ## Owner
201
+
202
+ - `boomerang-writer` is the primary agent for this skill.
203
+ - The orchestrator invokes it as part of the release-card workflow.
204
+ - The skill can also be invoked manually when the user says "update the docs" or "/boomerang-handoff" if a release is imminent.
205
+
206
+ *(Added 2026-06-05 Session 23. Prior to this, doc updates were ad-hoc. This skill formalizes the checklist and ties it to the release-card workflow so docs are NEVER out of sync with the code at tag time.)*
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/neuralgentics/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/neuralgentics/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,OAAO,EAML,kBAAkB,IAAI,0BAA0B,EAKjD,MAAM,eAAe,CAAC;AAkHvB;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,0BAA0B;CAAG;AAQrE,+EAA+E;AAC/E,eAAO,MAAM,WAAW,UAAU,CAAC;AA2DnC,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,QAAQ,CAAC,QAAQ,KAAK;IACtB,QAAQ,CAAC,WAAW,qFACgE;gBACxE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAIlD;AAED,qBAAa,WAAY,SAAQ,kBAAkB;IACjD,QAAQ,CAAC,QAAQ,KAAK;IACtB,QAAQ,CAAC,WAAW,4FACuE;gBAC/E,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAIlD;AAED,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,QAAQ,CAAC,QAAQ,MAAM;IACvB,QAAQ,CAAC,WAAW,yFACoE;gBAC5E,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAIlD;AAED,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,QAAQ,MAAM;IACvB,QAAQ,CAAC,WAAW,4EAA4E;gBACpF,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAIlD;AAED,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,QAAQ,CAAC,QAAQ,MAAM;IACvB,QAAQ,CAAC,WAAW,uEAAuE;gBAC/E,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAIlD;AAED,qBAAa,aAAc,SAAQ,kBAAkB;IACnD,QAAQ,CAAC,QAAQ,MAAM;IACvB,QAAQ,CAAC,WAAW,iEAAiE;gBACzE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAIlD;AAED,qBAAa,YAAa,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,QAAQ,MAAM;IACvB,QAAQ,CAAC,WAAW,+DAA+D;gBACvE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAIlD;AAED,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,QAAQ,MAAM;IACvB,QAAQ,CAAC,WAAW,yEAAyE;gBACjF,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAIlD;AAED,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,QAAQ,MAAM;IACvB,QAAQ,CAAC,WAAW,yEAAyE;gBACjF,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAIlD;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAmLD;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAwEhE;AAkoBD,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAwLD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyD9E;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyD9E;AAMD,OAAO,EACL,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC"}