@jenga-ai/agent 3.1.1 → 3.4.0
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.
- package/README.md +52 -12
- package/agents/developer.md +31 -16
- package/agents/scrum-master.md +18 -17
- package/agents/tester.md +25 -15
- package/bin/jenga.js +10 -0
- package/lib/commands/dashboard.js +92 -0
- package/lib/skill-allow-list.json +7 -2
- package/package.json +21 -2
- package/project/app/api/lib/resolve-project-root.js +120 -0
- package/project/app/api/package.json +16 -0
- package/project/app/api/parsers/architecture.js +72 -0
- package/project/app/api/parsers/board.js +141 -0
- package/project/app/api/parsers/documentation.js +125 -0
- package/project/app/api/parsers/git-log.js +52 -0
- package/project/app/api/parsers/ideas.js +62 -0
- package/project/app/api/parsers/knowledge-graph.js +73 -0
- package/project/app/api/parsers/lib/markdown-dir-reader.js +163 -0
- package/project/app/api/parsers/rapports.js +148 -0
- package/project/app/api/parsers/todo.js +179 -0
- package/project/app/api/response.js +47 -0
- package/project/app/api/routes/architecture.js +23 -0
- package/project/app/api/routes/board.js +46 -0
- package/project/app/api/routes/documentation.js +24 -0
- package/project/app/api/routes/health.js +25 -0
- package/project/app/api/routes/history.js +55 -0
- package/project/app/api/routes/rapports.js +24 -0
- package/project/app/api/scripts/capture-snapshot.js +294 -0
- package/project/app/api/server.js +112 -0
- package/project/app/api/types.js +40 -0
- package/project/app/package.json +21 -0
- package/project/app/ui/dist/assets/index-7fj-vllY.js +104 -0
- package/project/app/ui/dist/assets/index-CdK3Qrep.css +1 -0
- package/project/app/ui/dist/index.html +13 -0
- package/project/app/ui/package.json +23 -0
- package/project/app/ui/scripts/build-snapshot-html.cjs +214 -0
- package/project/app/ui/scripts/dashboard-open.cjs +88 -0
- package/project/app/ui/scripts/dashboard-start.cjs +87 -0
- package/scripts/acquire-concurrency-slot.sh +220 -0
- package/scripts/audit-twin-divergence.sh +625 -0
- package/scripts/check-public-playbook-steps.sh +136 -0
- package/scripts/compute-deploy-reconcile.sh +439 -0
- package/scripts/jenga-permission-level-switch.sh +19 -3
- package/scripts/mark-deployed.sh +532 -0
- package/scripts/populate-knowledge-graph.js +429 -0
- package/scripts/release-concurrency-slot.sh +129 -0
- package/scripts/validate-board.sh +60 -2
- package/scripts/verify-consumer-install.sh +470 -0
- package/skills/j-close-story/SKILL.md +1 -1
- package/skills/j-cloud-connect/SKILL.md +95 -0
- package/skills/j-cloud-connect/scripts/configure-backend.sh +267 -0
- package/skills/j-cloud-connect/scripts/install-rclone.sh +153 -0
- package/skills/j-dashboard/SKILL.md +144 -0
- package/skills/j-dashboard/scripts/launch.sh +121 -0
- package/skills/j-dashboard/scripts/resolve-app-dir.sh +164 -0
- package/skills/j-dashboard/scripts/snapshot.sh +267 -0
- package/skills/j-dashboard-share/SKILL.md +96 -0
- package/skills/j-dashboard-share/scripts/upload-snapshot.sh +173 -0
- package/skills/j-do/SKILL.md +19 -19
- package/skills/j-doc-sync/SKILL.md +12 -1
- package/skills/j-idea/SKILL.md +1 -1
- package/skills/j-init/SKILL.md +5 -4
- package/skills/j-init/assets/directory_structure.txt +1 -0
- package/skills/j-init/scripts/detect-existing-codebase.sh +2 -2
- package/skills/j-init/scripts/init.sh +13 -2
- package/skills/j-playbook/SKILL.md +93 -0
- package/skills/j-playbook-new/SKILL.md +155 -0
- package/skills/j-playbook-new/scripts/playbook-new.sh +332 -0
- package/skills/j-proceed/SKILL.md +1 -1
- package/skills/j-publish/SKILL.md +1 -1
- package/skills/j-publish/adapters/npm-ci.md +29 -0
- package/skills/j-publish/scripts/npm_ci_pipeline.sh +9 -0
- package/skills/j-publish/scripts/npm_pipeline.sh +18 -0
- package/skills/j-publish/scripts/npm_stage_pipeline.sh +81 -41
- package/skills/j-reconcile/SKILL.md +1 -0
- package/skills/j-redo/SKILL.md +1 -1
- package/skills/j-status/SKILL.md +12 -0
- package/skills/j-todo/SKILL.md +2 -2
- package/skills/j-uncharted/SKILL.md +8 -7
- package/skills/j-uncharted/scripts/validate-proposed-items.sh +18 -2
- package/skills/jenga/SKILL.md +55 -16
- package/skills/jenga/playbooks/idea-to-committed.json +20 -0
- package/skills/jenga/playbooks/schema.json +1 -1
- package/skills/jenga/scripts/load-nl-catalog.js +22 -6
- package/skills/jenga/scripts/load-playbooks.sh +968 -41
- package/skills/jenga/scripts/match-playbook.sh +1 -1
- package/skills/jenga/scripts/render-playbook-confirmation.sh +162 -8
- package/skills/jenga/scripts/run-playbook-step.sh +535 -42
- package/skills/jenga-permission-level/SKILL.md +4 -4
- package/templates/KNOWLEDGE_GRAPH_STUB_SCHEMA_TEMPLATE.md +128 -0
- package/templates/SCRUM_BOARD_SCHEMA.md +18 -6
- package/templates/playbook-types.json +8 -0
- package/skills/jenga/playbooks/brainstorm-to-mirror.json +0 -22
|
@@ -28,7 +28,7 @@ examples:
|
|
|
28
28
|
| 4 | Elevated | |
|
|
29
29
|
| 5 | Unrestricted | |
|
|
30
30
|
|
|
31
|
-
`defaultMode` stays `acceptEdits` at every level; only the `permissions` block changes. Levels are backed by template files at
|
|
31
|
+
`defaultMode` stays `acceptEdits` at every level; only the `permissions` block changes. Levels are backed by template files at `$([ -f templates/permission-levels/level-<n>-<name>.json ] && echo templates/permission-levels/level-<n>-<name>.json || echo node_modules/@jenga-ai/agent/templates/permission-levels/level-<n>-<name>.json)`, e.g. `$([ -f templates/permission-levels/level-4-elevated.json ] && echo templates/permission-levels/level-4-elevated.json || echo node_modules/@jenga-ai/agent/templates/permission-levels/level-4-elevated.json)` (naming convention: `<name>` is the lowercase level name from the table above — Locked/Guarded/Standard/Elevated/Unrestricted). Those templates are owned by story E33_S01 and are the input the switch script (see below) copies from.
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
@@ -59,18 +59,18 @@ Before doing anything else, validate the argument:
|
|
|
59
59
|
Do not inline the copy/update logic here — per this repo's scripts-over-inline-logic convention, the switch is owned entirely by a dedicated script:
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
|
-
bash scripts/jenga-permission-level-switch.sh <n>
|
|
62
|
+
bash "$([ -f scripts/jenga-permission-level-switch.sh ] && echo scripts/jenga-permission-level-switch.sh || echo node_modules/@jenga-ai/agent/scripts/jenga-permission-level-switch.sh)" <n>
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
This script (created by a separate task, E33_S02_T02) is responsible for:
|
|
66
|
-
- Copying
|
|
66
|
+
- Copying `$([ -f templates/permission-levels/level-<n>-<name>.json ] && echo templates/permission-levels/level-<n>-<name>.json || echo node_modules/@jenga-ai/agent/templates/permission-levels/level-<n>-<name>.json)` over both `.claude/settings.json` and `.agents/settings.json` as a **whole-file overwrite** — not a merge of the `permissions` block alone. Two fields vary by level and are expected to change on a switch: `permissions.deny` and `autoMode.allow`. All 5 templates carry byte-identical `defaultMode`, `env`, `hooks`, and `permissions.allow`; that invariant is what keeps the overwrite safe. Two consequences follow: any top-level key present in a destination file but absent from the templates is **silently dropped** by a switch, and any future per-level difference in `defaultMode`/`env`/`hooks` would take effect without warning. Keep the templates in sync with root `settings.json` for everything except those two varying fields.
|
|
67
67
|
- Creating or updating `.jenga-permission-level.json` at the repo root to `{"session_level": <n>}`.
|
|
68
68
|
|
|
69
69
|
Relay the script's stdout to the user and honor its exit code:
|
|
70
70
|
- Exit code `0` — report success, e.g. `Switched to level <n> (<name>).`
|
|
71
71
|
- Non-zero exit code — report the script's error output verbatim and treat the switch as failed; do not claim success.
|
|
72
72
|
|
|
73
|
-
If `scripts/jenga-permission-level-switch.sh`
|
|
73
|
+
If neither `scripts/jenga-permission-level-switch.sh` nor `node_modules/@jenga-ai/agent/scripts/jenga-permission-level-switch.sh` exists yet (e.g. E33_S02_T02 has not landed), report that clearly as a missing dependency rather than attempting to reimplement its logic inline.
|
|
74
74
|
|
|
75
75
|
### Session End
|
|
76
76
|
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Knowledge Graph — Coarse Graph STUB Schema
|
|
2
|
+
|
|
3
|
+
> **STUB — this is not E20_S01's schema.**
|
|
4
|
+
>
|
|
5
|
+
> This file defines a minimal, intentionally throwaway coarse-graph node/edge schema so that
|
|
6
|
+
> **E20_S08** ("Interactive Architecture Elicitation — Uncharted Integration") can be prototyped
|
|
7
|
+
> without waiting on **E20_S01** (the epic's real, eventual node/edge schema and JSON Schema
|
|
8
|
+
> publication under `project/knowledge-graph/graph.json`). E20_S01 has no committed landing
|
|
9
|
+
> schedule; this stub exists purely to unblock E20_S08's other tasks in the meantime.
|
|
10
|
+
>
|
|
11
|
+
> **This schema will be replaced wholesale once E20_S01 lands.** Nothing that depends on this file
|
|
12
|
+
> should assume field stability, forward compatibility, or migration support — when E20_S01's real
|
|
13
|
+
> schema is published, this file should be deleted (or reduced to a pointer at the real schema) and
|
|
14
|
+
> every consumer of it re-pointed. Do not extend this stub with new fields expecting them to survive
|
|
15
|
+
> the swap; keep it minimal.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Node Schema
|
|
20
|
+
|
|
21
|
+
| Field | Type | Required | Description |
|
|
22
|
+
|---------------|---------------------|----------|-------------------------------------------------------------------------------|
|
|
23
|
+
| `id` | string | yes | Unique node identifier within the coarse graph. |
|
|
24
|
+
| `type` | string | yes | Node kind (e.g. `service`, `module`, `function`, `data-type`). Free-text in the stub — E20_S01 may formalize an enum. |
|
|
25
|
+
| `label` | string | yes | Short human-readable name for the node. |
|
|
26
|
+
| `description` | string | yes | Free-text description of what the node represents. |
|
|
27
|
+
| `source` | `human` \| `ast` | yes | Provenance of this node — see **Provenance Field** below. |
|
|
28
|
+
| `status` | `active` \| `superseded` | no | Present only once a conflict has been resolved against this node — see **Evidence-Wins Conflict Rule** below. Absence means `active`. |
|
|
29
|
+
| `superseded_by` | string (node `id`) | no | Required when `status: superseded`. Points at the node that superseded this one. |
|
|
30
|
+
|
|
31
|
+
## Edge Schema
|
|
32
|
+
|
|
33
|
+
| Field | Type | Required | Description |
|
|
34
|
+
|---------------|--------|----------|----------------------------------------------------------|
|
|
35
|
+
| `id` | string | yes | Unique edge identifier within the coarse graph. |
|
|
36
|
+
| `from` | string | yes | Source node `id`. |
|
|
37
|
+
| `to` | string | yes | Target node `id`. |
|
|
38
|
+
| `type` | string | yes | Edge kind (e.g. `depends-on`, `calls`, `flows-to`). Free-text in the stub. |
|
|
39
|
+
| `description` | string | yes | Free-text description of the relationship. |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Provenance Field — `source: human | ast`
|
|
44
|
+
|
|
45
|
+
Every stub node declares how it came to exist:
|
|
46
|
+
|
|
47
|
+
- **`human`** — written by a human-in-the-loop conversational elicitation session (the flow E20_S08
|
|
48
|
+
is building: propose understanding, ask the user to confirm or correct, write the resulting node).
|
|
49
|
+
This is a **coarse** node: it reflects a person's understanding of the code, not mechanical
|
|
50
|
+
extraction.
|
|
51
|
+
- **`ast`** — written by an automated, AST-derived extraction pipeline. This is a **fine-grained**
|
|
52
|
+
node: it reflects what the code mechanically, verifiably does. No such pipeline exists yet as of
|
|
53
|
+
this stub (it is scoped to E20_S02's prospective AST-diff maintenance work); the `ast` value is
|
|
54
|
+
defined here so the conflict rule below has both sides of the conflict to refer to from day one.
|
|
55
|
+
|
|
56
|
+
There is no third value. A node's `source` is fixed at creation time and is not itself mutated by
|
|
57
|
+
conflict resolution — conflict resolution only ever adds `status`/`superseded_by` to a `human` node
|
|
58
|
+
(see below); it never rewrites a node's `source`.
|
|
59
|
+
|
|
60
|
+
## Evidence-Wins Conflict Rule
|
|
61
|
+
|
|
62
|
+
**Trigger:** a `human`-sourced coarse node and a (future) `ast`-sourced fine node both describe the
|
|
63
|
+
same underlying code, and they disagree — e.g. a human described a module's purpose one way during
|
|
64
|
+
elicitation, and a later AST-derived extraction of the same code area produces a materially
|
|
65
|
+
different description or classification.
|
|
66
|
+
|
|
67
|
+
**Rule:** the AST-derived (`source: ast`) entry takes precedence as the authoritative description.
|
|
68
|
+
The human-authored (`source: human`) entry is **not deleted**. Instead:
|
|
69
|
+
|
|
70
|
+
1. The human node's `status` field is set to `superseded`.
|
|
71
|
+
2. The human node's `superseded_by` field is set to the `id` of the AST-derived node that
|
|
72
|
+
superseded it.
|
|
73
|
+
3. The AST-derived node is written normally (`source: ast`, no `status` field — it is the new
|
|
74
|
+
active, authoritative entry for that piece of code).
|
|
75
|
+
|
|
76
|
+
This preserves the human node as a retained, annotated rationale/history layer rather than silently
|
|
77
|
+
discarding a person's prior understanding — useful for later review of *why* a human once believed
|
|
78
|
+
something different, and for detecting elicitation sessions that were confidently wrong.
|
|
79
|
+
|
|
80
|
+
**Worked example:**
|
|
81
|
+
|
|
82
|
+
Before conflict resolution — a human-authored coarse node:
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"id": "node-042",
|
|
87
|
+
"type": "module",
|
|
88
|
+
"label": "billing-worker",
|
|
89
|
+
"description": "Background job that retries failed charges.",
|
|
90
|
+
"source": "human"
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
After a later AST-derived extraction disagrees (the module actually reconciles ledger entries, it
|
|
95
|
+
does not retry charges) and the conflict is resolved:
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"id": "node-042",
|
|
100
|
+
"type": "module",
|
|
101
|
+
"label": "billing-worker",
|
|
102
|
+
"description": "Background job that retries failed charges.",
|
|
103
|
+
"source": "human",
|
|
104
|
+
"status": "superseded",
|
|
105
|
+
"superseded_by": "node-091"
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"id": "node-091",
|
|
112
|
+
"type": "module",
|
|
113
|
+
"label": "billing-worker",
|
|
114
|
+
"description": "Background job that reconciles ledger entries against the payment provider.",
|
|
115
|
+
"source": "ast"
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`node-042` remains in the graph, readable, and traceable to what replaced it — it is superseded, not
|
|
120
|
+
gone.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Relationship to `[ARCH]` Board Tagging
|
|
125
|
+
|
|
126
|
+
Board items generated by the E20_S08 elicitation flow that populate this stub schema are tagged
|
|
127
|
+
`[ARCH]` (see `templates/SCRUM_BOARD_SCHEMA.md`'s "Board Item Tag Conventions" section) rather than
|
|
128
|
+
`[SPIKE]` — this is durable architectural-inventory record-keeping, not bounded research.
|
|
@@ -105,7 +105,9 @@ date_started:
|
|
|
105
105
|
date_completed:
|
|
106
106
|
dates_previously_completed: # comma-separated list, e.g. 2026-01-15, 2026-03-22
|
|
107
107
|
reopened_on: # comma-separated list, e.g. 2026-02-01, 2026-04-10
|
|
108
|
-
reopened_reason: #
|
|
108
|
+
reopened_reason: # YAML list, one entry per reopen cycle; see Reopen Tracking Fields
|
|
109
|
+
- "Scope expanded"
|
|
110
|
+
- "Bug found post-release"
|
|
109
111
|
docs: [] # optional list of repo-relative documentation paths, e.g. ["README.md", "docs/API.md"]
|
|
110
112
|
epic_scope_approval: false # set to true by the human operator only when any task in this epic has execution_scope: epic
|
|
111
113
|
provenance: # optional; only valid value is `backfilled` (epic reverse-engineered from pre-existing code by `/uncharted onboard`). Omit for normally-authored epics.
|
|
@@ -139,7 +141,9 @@ date_started:
|
|
|
139
141
|
date_completed:
|
|
140
142
|
dates_previously_completed: # comma-separated list, e.g. 2026-01-15, 2026-03-22
|
|
141
143
|
reopened_on: # comma-separated list, e.g. 2026-02-01, 2026-04-10
|
|
142
|
-
reopened_reason: #
|
|
144
|
+
reopened_reason: # YAML list, one entry per reopen cycle; see Reopen Tracking Fields
|
|
145
|
+
- "Scope expanded"
|
|
146
|
+
- "Bug found post-release"
|
|
143
147
|
docs: [] # optional list of repo-relative documentation paths, e.g. ["README.md", "docs/API.md"]
|
|
144
148
|
crucial_level: # optional; advisory | gated | locked; absence means no elevated caution
|
|
145
149
|
crucial_set_by: # required when crucial_level is set; user | scrum-master | <agent>-escalation
|
|
@@ -177,7 +181,9 @@ date_started:
|
|
|
177
181
|
date_completed:
|
|
178
182
|
dates_previously_completed: # comma-separated list, e.g. 2026-01-15, 2026-03-22
|
|
179
183
|
reopened_on: # comma-separated list, e.g. 2026-02-01, 2026-04-10
|
|
180
|
-
reopened_reason: #
|
|
184
|
+
reopened_reason: # YAML list, one entry per reopen cycle; see Reopen Tracking Fields
|
|
185
|
+
- "Scope expanded"
|
|
186
|
+
- "Bug found post-release"
|
|
181
187
|
assigned_to: developer | tester | scrum-master
|
|
182
188
|
docs: [] # optional list of repo-relative documentation paths, e.g. ["README.md", "docs/API.md"]
|
|
183
189
|
execution_scope: task # task | story | epic | inline | light; omit for legacy tasks (defaults to task)
|
|
@@ -209,7 +215,7 @@ crucial_declined_note: # required when crucial_declined: true; free-te
|
|
|
209
215
|
|
|
210
216
|
### Runtime-written task fields
|
|
211
217
|
|
|
212
|
-
These
|
|
218
|
+
These five fields are **not authored by hand**. They are appended to a task's frontmatter after execution and are absent from any task that has not yet run. They are listed here so that tooling — in particular `scripts/validate-board.sh` — recognises them as valid rather than unknown.
|
|
213
219
|
|
|
214
220
|
| Field | Written by | Meaning |
|
|
215
221
|
|---|---|---|
|
|
@@ -217,8 +223,9 @@ These four fields are **not authored by hand**. They are appended to a task's fr
|
|
|
217
223
|
| `actual_lines_delta` | `/close-story` | Net line delta for the task, from the same extraction |
|
|
218
224
|
| `scope_divergence_flag` | `/close-story` | Set when actual diff stats exceed the thresholds that justified the assigned `execution_scope` |
|
|
219
225
|
| `divergence_flag` | `/do` | Set to `true` by the intent-vs-diff check when a `needs_docs: false` task touched unregistered files |
|
|
226
|
+
| `date_deployed_prod` | `scripts/mark-deployed.sh` | ISO 8601 date (e.g. `2026-09-12`) written in the same locked write window a ticket is set to `status: Deployed to Prod`. Never written on a `Deployed to Stage`-only write. |
|
|
220
227
|
|
|
221
|
-
All
|
|
228
|
+
All five are advisory and non-blocking — they record evidence for later review and never change a task's Passed/Failed outcome. `date_deployed_prod` is allow-listed in `scripts/validate-board.sh`'s `ALLOWED_KEYS` for `epic`, `story`, and `task` (a new `DEPLOY_KEYS` group), even though in practice only tasks (and occasionally stories) are expected to ever carry it — `mark-deployed.sh` only ever writes it to a task/story board file, never to an epic.
|
|
222
229
|
|
|
223
230
|
> `task_changed_files` is **not** a frontmatter field despite the similar name. It lives in the bundle manifest at `project/queue/bundle-<E##_S##>.json`, keyed by task ID.
|
|
224
231
|
|
|
@@ -228,7 +235,12 @@ All four are advisory and non-blocking — they record evidence for later review
|
|
|
228
235
|
|
|
229
236
|
## Reopen Tracking Fields
|
|
230
237
|
|
|
231
|
-
**`dates_previously_completed`, `reopened_on`, `reopened_reason`** — These fields are **only populated when a previously completed item is being reopened and modified**. Leave them blank on first-run items.
|
|
238
|
+
**`dates_previously_completed`, `reopened_on`, `reopened_reason`** — These fields are **only populated when a previously completed item is being reopened and modified**. Leave them blank on first-run items. All three support multiple reopen cycles, but they are **not written the same way**:
|
|
239
|
+
|
|
240
|
+
- `dates_previously_completed` and `reopened_on` hold a plain comma-separated string, e.g. `reopened_on: 2026-02-01, 2026-04-10`. Bare dates need no quoting, so this parses fine.
|
|
241
|
+
- `reopened_reason` **must be a YAML list** (a block sequence, one `- "reason"` per line). It cannot be comma-separated, because reopen reasons are free text that routinely contains colons and commas and therefore has to be quoted — and a run of comma-separated quoted strings (`reopened_reason: "A", "B"`) is not valid YAML. This schema previously documented exactly that invalid form, and every board file that followed it became unparseable: the board parser skipped those files silently, so the board under-reported itself with no error surfaced anywhere. 14 files were repaired on 2026-09-13; do not reintroduce the comma-separated form here.
|
|
242
|
+
|
|
243
|
+
Note the resulting asymmetry is deliberate and load-bearing, not an oversight: the first two fields stay strings because migrating them would churn every existing file for no parsing benefit.
|
|
232
244
|
|
|
233
245
|
## Planning Fields
|
|
234
246
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Canonical playbook output-type vocabulary for Epic E53's Playbooks v2 StepObject/output_types contract (E53_S03_T02). Extend this vocabulary by adding entries to the 'types' array below -- NEVER by code changes; skills/jenga/scripts/load-playbooks.sh references this file by name in its own header contract (see that script's 'TYPE REGISTRY' section). Governed by the Scrum Master: registry additions/changes route through the normal board-item process rather than an ungoverned edit to this file -- see docs/skill-authoring.md's 'Playbook Type Registry Governance' section for the full policy.",
|
|
3
|
+
"types": [
|
|
4
|
+
"text",
|
|
5
|
+
"id_list",
|
|
6
|
+
"file_list"
|
|
7
|
+
]
|
|
8
|
+
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "brainstorm-to-mirror",
|
|
3
|
-
"name": "Idea to Public Release",
|
|
4
|
-
"description": "Takes a rough idea all the way from planning through implementation, committing, and a public mirror release -- the canonical end-to-end Jenga workflow chain.",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"idea to release",
|
|
7
|
-
"plan and ship",
|
|
8
|
-
"idea to done",
|
|
9
|
-
"full workflow",
|
|
10
|
-
"end to end",
|
|
11
|
-
"plan build ship",
|
|
12
|
-
"idea to production"
|
|
13
|
-
],
|
|
14
|
-
"examples": [
|
|
15
|
-
"I have an idea, help me plan it, build it, and ship it",
|
|
16
|
-
"take this feature from idea to committed and published",
|
|
17
|
-
"let's go from a rough idea all the way to a public release",
|
|
18
|
-
"plan this out, implement it, commit it, and push it to the public mirror",
|
|
19
|
-
"walk this through the whole pipeline from brainstorm to release"
|
|
20
|
-
],
|
|
21
|
-
"steps": ["brainstorm", "todo", "do", "dev-done", "mirror-public"]
|
|
22
|
-
}
|