@jenga-ai/agent 1.1.0 → 1.2.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 +7 -3
- package/agents/developer.md +82 -2
- package/agents/scrum-master.md +140 -21
- package/agents/tester.md +90 -8
- package/hooks/on_session_end.sh +171 -20
- package/package.json +1 -1
- package/scripts/check-permission-level.sh +107 -0
- package/scripts/check-publicignore-match.sh +122 -0
- package/scripts/check-worktree-liveness.sh +193 -0
- package/scripts/generate-rapport-manifest.sh +43 -0
- package/scripts/idea_manager.sh +47 -0
- package/scripts/install-worktree-commit-guard.sh +134 -0
- package/scripts/jenga-permission-level-switch.sh +109 -0
- package/scripts/smoke-harness.sh +139 -0
- package/scripts/validate-board.sh +62 -0
- package/scripts/with-lock.sh +158 -0
- package/scripts/worktree-remove-guard.sh +204 -0
- package/skills/clearify/SKILL.md +52 -0
- package/skills/commit/SKILL.md +13 -4
- package/skills/distribute/CONFIG_SCHEMA.md +60 -2
- package/skills/do/SKILL.md +48 -11
- package/skills/doc-sync/SKILL.md +16 -0
- package/skills/doc-sync/assets/doc_targets.md +11 -0
- package/skills/idea/SKILL.md +56 -0
- package/skills/idea/assets/idea_handoff_template.md +26 -0
- package/skills/idea/assets/idea_template.md +3 -0
- package/skills/init/SKILL.md +100 -7
- package/skills/init/assets/directory_structure.txt +1 -0
- package/skills/init/assets/workflow_template.json +1 -1
- package/skills/init/scripts/apply-project-visibility.sh +176 -0
- package/skills/init/scripts/detect-existing-codebase.sh +166 -0
- package/skills/init/scripts/init.sh +30 -1
- package/skills/jenga/SKILL.md +160 -17
- package/skills/jenga/scripts/board-scan.sh +238 -0
- package/skills/jenga/scripts/cascade-resolve.sh +297 -0
- package/skills/jenga/scripts/render-confirmation.sh +679 -0
- package/skills/jenga/scripts/render-picker.sh +439 -0
- package/skills/jenga/scripts/resolve-id.sh +367 -0
- package/skills/jenga-permission-level/SKILL.md +81 -0
- package/skills/proceed/SKILL.md +1 -1
- package/skills/publish/SKILL.md +8 -5
- package/skills/publish/assets/ci-contract.md +2 -2
- package/skills/publish/assets/ownership-matrix.md +1 -1
- package/skills/publish/scripts/finalize_changelog.sh +115 -0
- package/skills/publish/scripts/generate_release_notes.sh +475 -28
- package/skills/publish/scripts/npm_ci_pipeline.sh +44 -6
- package/skills/publish/scripts/publish_deploy.sh +38 -8
- package/skills/publish/scripts/run_gates.sh +2 -2
- package/skills/reconcile/SKILL.md +117 -5
- package/skills/reconcile/scripts/detect-unlinked-code.sh +741 -0
- package/skills/skillify/assets/init-new/assets/directory_structure.txt +5 -1
- package/skills/spinoff/SKILL.md +12 -7
- package/skills/todo/SKILL.md +2 -0
- package/skills/uncharted/SKILL.md +711 -0
- package/skills/uncharted/assets/SEGMENT_PROPOSAL_TEMPLATE.md +129 -0
- package/skills/uncharted/assets/UNDERSTANDING_DOC_TEMPLATE.md +160 -0
- package/skills/uncharted/scripts/apply-subsystem-cap.sh +573 -0
- package/skills/uncharted/scripts/detect-dependencies.sh +732 -0
- package/skills/uncharted/scripts/detect-tests.sh +553 -0
- package/skills/uncharted/scripts/discover-subsystems.sh +1029 -0
- package/skills/uncharted/scripts/enumerate-target.sh +470 -0
- package/skills/uncharted/scripts/import-source.sh +517 -0
- package/skills/uncharted/scripts/inspect-provenance.sh +573 -0
- package/skills/uncharted/scripts/resolve-segment-target.sh +640 -0
- package/skills/uncharted/scripts/run-engine.sh +655 -0
- package/skills/uncharted/scripts/validate-proposed-items.sh +125 -0
- package/skills/uncharted/scripts/write-backfilled-epics.sh +498 -0
- package/skills/wtf/SKILL.md +20 -0
- package/templates/CHANGELOG_TEMPLATE.md +13 -0
- package/templates/PROBLEM_RAPPORT_TEMPLATE.md +4 -1
- package/templates/SCRUM_BOARD_SCHEMA.md +157 -10
- package/templates/permission-levels/README.md +73 -0
- package/templates/permission-levels/level-1-locked.json +71 -0
- package/templates/permission-levels/level-2-guarded.json +64 -0
- package/templates/permission-levels/level-3-standard.json +62 -0
- package/templates/permission-levels/level-4-elevated.json +60 -0
- package/templates/permission-levels/level-5-unrestricted.json +58 -0
- package/skills/convert/SKILL.md +0 -124
- package/skills/convert/convert_cli.py +0 -235
- package/skills/convert/tests/sample.csv +0 -4
- package/skills/convert/tests/sample.json +0 -5
- package/skills/convert/tests/sample.jsonl +0 -3
- package/skills/convert/tests/sample.yaml +0 -18
- package/skills/convert/tests/sample_obj.csv +0 -2
- package/skills/convert/tests/sample_obj.json +0 -9
- package/skills/mirror-public/SKILL.md +0 -237
- package/skills/mirror-public/assets/config.json +0 -5
- package/skills/mirror-public/scripts/mirror.sh +0 -374
- package/skills/self-sync/SKILL.md +0 -73
- package/skills/self-sync/scripts/run.js +0 -136
- package/skills/strategy/SKILL.md +0 -312
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Board Proposal: {{TARGET_NAME}}
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
PRESENTATION CONTRACT — /uncharted `segment` mode, Steps 4-6.
|
|
5
|
+
|
|
6
|
+
This is the fixed shape of the board proposal a segment pass presents to the
|
|
7
|
+
user. Unlike UNDERSTANDING_DOC_TEMPLATE.md, nothing renders this file: the
|
|
8
|
+
scrum-master fills the `{{TOKENS}}` in itself and presents the result in the
|
|
9
|
+
session. There is no renderer to add a token to.
|
|
10
|
+
|
|
11
|
+
THIS DOCUMENT IS A PROPOSAL, NOT A WRITE. Presenting it creates and modifies
|
|
12
|
+
nothing under `project/board/`. Only an explicit accept at `## Decision`
|
|
13
|
+
authorises E40_S02_T03 to write anything.
|
|
14
|
+
|
|
15
|
+
The six `##` headings are FIXED. Do not add, remove, reorder, or rename them.
|
|
16
|
+
Every section must be filled — "n/a" is an acceptable value, an empty section
|
|
17
|
+
is not, because a silently dropped section reads as "nothing to say here"
|
|
18
|
+
when it usually means "not checked".
|
|
19
|
+
|
|
20
|
+
Field names in `## Proposed Tasks` are the real frontmatter keys from
|
|
21
|
+
`templates/SCRUM_BOARD_SCHEMA.md`, so a confirmed proposal maps one-to-one
|
|
22
|
+
onto board files without re-deciding anything at write time.
|
|
23
|
+
-->
|
|
24
|
+
|
|
25
|
+
**Source document:** `{{UNDERSTANDING_DOC_PATH}}`
|
|
26
|
+
**Proposed:** {{TIMESTAMP}}
|
|
27
|
+
**Board state:** nothing written — this proposal is pending confirmation
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Target
|
|
32
|
+
|
|
33
|
+
| Field | Value |
|
|
34
|
+
|-------|-------|
|
|
35
|
+
| Resolved path | `{{TARGET_PATH}}` |
|
|
36
|
+
| Target type | {{TARGET_TYPE}} <!-- file \| directory \| repo_root --> |
|
|
37
|
+
| Board linkage | {{BOARD_LINKAGE}} <!-- from Step 1, which is authoritative --> |
|
|
38
|
+
| Why it needs board representation | {{PROVENANCE_GAP}} |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Parent Epic
|
|
43
|
+
|
|
44
|
+
| Field | Value |
|
|
45
|
+
|-------|-------|
|
|
46
|
+
| Decision | {{EPIC_DECISION}} <!-- reuse existing \| reuse Maintenance \| new epic --> |
|
|
47
|
+
| Epic | {{EPIC_ID_OR_TITLE}} <!-- `E##` — Title, or the proposed title for a new epic --> |
|
|
48
|
+
| Reason | {{EPIC_REASON}} <!-- why this epic, in terms of what the document found --> |
|
|
49
|
+
| Existing epics considered | {{EPICS_CONSIDERED}} <!-- IDs weighed and why each was rejected; "none fit" is a claim that needs backing --> |
|
|
50
|
+
|
|
51
|
+
A new epic is the **last** option, not the default. Reuse an existing epic where the segment
|
|
52
|
+
genuinely belongs to it, and the standing `Maintenance` epic where the work is chore-shaped and
|
|
53
|
+
belongs nowhere else.
|
|
54
|
+
|
|
55
|
+
**If the decision is a new epic, propose its body here too** — the same two sections a written
|
|
56
|
+
epic file must carry, so accepting authorises no text the user has not read:
|
|
57
|
+
|
|
58
|
+
**Purpose:** {{EPIC_PURPOSE}}
|
|
59
|
+
|
|
60
|
+
**Definition of Done**
|
|
61
|
+
- [ ] {{EPIC_DOD}}
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Proposed Stories
|
|
66
|
+
|
|
67
|
+
<!-- Repeat the block below once per proposed story. -->
|
|
68
|
+
|
|
69
|
+
### S1 — {{STORY_TITLE}}
|
|
70
|
+
|
|
71
|
+
**As a** {{STORY_ROLE}}, **I want** {{STORY_GOAL}}, **so that** {{STORY_VALUE_STATEMENT}}.
|
|
72
|
+
**Grounded in:** {{STORY_EVIDENCE}} <!-- the specific finding that justifies it -->
|
|
73
|
+
|
|
74
|
+
*Acceptance Criteria*
|
|
75
|
+
- [ ] {{STORY_ACCEPTANCE_CRITERION}}
|
|
76
|
+
|
|
77
|
+
*Definition of Done*
|
|
78
|
+
- [ ] {{STORY_DONE_CRITERION}}
|
|
79
|
+
|
|
80
|
+
Acceptance Criteria and Definition of Done are proposed **here**, not written later.
|
|
81
|
+
`scripts/validate-story-format.sh` requires both sections on every story file and requires the
|
|
82
|
+
Definition of Done to use `- [ ]` checkboxes — so if they are not on screen at the gate, accepting
|
|
83
|
+
authorises text the user never saw, which is the outcome the gate exists to prevent.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Proposed Tasks
|
|
88
|
+
|
|
89
|
+
| # | Story | Title | `execution_scope` | `scope_rationale` | `needs_docs` |
|
|
90
|
+
|---|-------|-------|-------------------|-------------------|--------------|
|
|
91
|
+
| T1 | S1 | {{TASK_TITLE}} | {{EXECUTION_SCOPE}} | {{SCOPE_RATIONALE}} | {{NEEDS_DOCS}} |
|
|
92
|
+
|
|
93
|
+
- `scope_rationale` is **required and must carry a file-count or line-count claim** — a validator
|
|
94
|
+
rejects a blank one, and a reader cannot check "small change" but can check "2 files, ~60 lines".
|
|
95
|
+
- Scope is assigned against `project/configs/scope-thresholds.json`, not by feel.
|
|
96
|
+
- `execution_scope: epic` is never self-assigned. It needs `epic_scope_approval: true` set by a
|
|
97
|
+
human on the epic; propose `story` and say so if a task looks bigger than that.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Open Questions
|
|
102
|
+
|
|
103
|
+
<!-- Carried over from the understanding document's `## Open Questions`, not re-derived. -->
|
|
104
|
+
|
|
105
|
+
| # | Question | Who can answer | Blocks confirmation? |
|
|
106
|
+
|---|----------|----------------|----------------------|
|
|
107
|
+
| Q1 | {{OPEN_QUESTION}} | {{ANSWERER}} | {{BLOCKING}} <!-- yes \| no --> |
|
|
108
|
+
|
|
109
|
+
A question marked **yes** must be resolved before the proposal is accepted — the breakdown depends
|
|
110
|
+
on its answer. Carry the questions across even when they look answered; dropping one hides the
|
|
111
|
+
fact that the proposal rests on an assumption.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Decision
|
|
116
|
+
|
|
117
|
+
Nothing above exists on the board yet. **How would you like to proceed?**
|
|
118
|
+
|
|
119
|
+
1. **Accept as proposed** — write these items to `project/board/`
|
|
120
|
+
<!-- Unavailable while any Open Question above is marked `Blocks confirmation? = yes`. -->
|
|
121
|
+
2. **Revise** — change the stories, tasks, or scopes before anything is written
|
|
122
|
+
3. **Fit it under a different epic** — re-parent the proposal and show it again
|
|
123
|
+
4. **Discard** — keep the understanding document, write no board items
|
|
124
|
+
5. **Other (describe below)**
|
|
125
|
+
|
|
126
|
+
Options 2 and 3 re-present this proposal in full; nothing is written between rounds.
|
|
127
|
+
|
|
128
|
+
Option 1 is **not** available while any Open Question is marked `Blocks confirmation? = yes`.
|
|
129
|
+
Resolve it first — the answer usually changes the breakdown — then re-present.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Understanding Document: {{TARGET_NAME}}
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
OUTPUT CONTRACT — /uncharted shared investigative engine.
|
|
5
|
+
|
|
6
|
+
Every mode (`segment`, `import`, `onboard`) emits this exact document shape.
|
|
7
|
+
It is rendered by `skills/uncharted/scripts/run-engine.sh` and written to
|
|
8
|
+
`project/rapports/analysis/` using the existing `analysis` rapport type
|
|
9
|
+
defined in `templates/SCRUM_BOARD_SCHEMA.md`.
|
|
10
|
+
|
|
11
|
+
The seven `##` headings below are FIXED. Do not add, remove, reorder, or
|
|
12
|
+
rename them — downstream consumers (segment-mode board proposal, onboard-mode
|
|
13
|
+
subsystem backfill) read this document by heading.
|
|
14
|
+
|
|
15
|
+
Two classes of section:
|
|
16
|
+
|
|
17
|
+
MECHANICAL — Structure, Key Dependencies, Existing Tests.
|
|
18
|
+
Filled by the engine from real script output. Never hand-waved.
|
|
19
|
+
|
|
20
|
+
JUDGEMENT — Purpose, Risk Areas, Open Questions.
|
|
21
|
+
The engine emits these as explicit `_TODO(agent):_` placeholders and
|
|
22
|
+
MUST NOT invent content for them. The scrum-master fills them in from
|
|
23
|
+
the mechanical evidence above.
|
|
24
|
+
|
|
25
|
+
`{{DOUBLE_BRACE}}` tokens are substituted by the renderer. Two kinds:
|
|
26
|
+
|
|
27
|
+
SCALAR — replaced once, in place. Most tokens are scalar.
|
|
28
|
+
|
|
29
|
+
ROW — a table row marked `<!-- ROW -->` is a row TEMPLATE, not a
|
|
30
|
+
single row. The renderer repeats it once per record and drops it
|
|
31
|
+
entirely when there are no records. Replacing it one-to-one would
|
|
32
|
+
silently truncate the table to a single entry.
|
|
33
|
+
-->
|
|
34
|
+
|
|
35
|
+
**Mode:** {{MODE}}
|
|
36
|
+
**Generated:** {{TIMESTAMP}}
|
|
37
|
+
**Engine:** `skills/uncharted/scripts/run-engine.sh`
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Target
|
|
42
|
+
|
|
43
|
+
<!-- MECHANICAL. Resolved by enumerate-target.sh. -->
|
|
44
|
+
|
|
45
|
+
| Field | Value |
|
|
46
|
+
|-------|-------|
|
|
47
|
+
| Resolved path | `{{TARGET_PATH}}` |
|
|
48
|
+
| Target type | {{TARGET_TYPE}} <!-- file \| directory \| repo_root --> |
|
|
49
|
+
| Invocation mode | {{MODE}} <!-- segment \| import \| onboard --> |
|
|
50
|
+
| Board linkage | {{BOARD_LINKAGE}} <!-- linked to <ID> \| unlinked --> |
|
|
51
|
+
| Origin | {{ORIGIN}} <!-- in-repo \| imported from <source> --> |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Purpose
|
|
56
|
+
|
|
57
|
+
<!--
|
|
58
|
+
JUDGEMENT. The scrum-master fills this in after reading the mechanical
|
|
59
|
+
sections. Answer: what does this code exist to do, and for whom?
|
|
60
|
+
If the evidence is insufficient to say, record that here and raise the gap
|
|
61
|
+
under Open Questions — do not guess.
|
|
62
|
+
-->
|
|
63
|
+
|
|
64
|
+
_TODO(agent): what this target does and why it exists._
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Structure
|
|
69
|
+
|
|
70
|
+
<!--
|
|
71
|
+
MECHANICAL. Rendered from enumerate-target.sh output: file count,
|
|
72
|
+
per-extension breakdown, bounded directory tree, largest files by line count.
|
|
73
|
+
Depth is bounded — `onboard` mode stays coarse-grained by design.
|
|
74
|
+
-->
|
|
75
|
+
|
|
76
|
+
**Files:** {{FILE_COUNT}}
|
|
77
|
+
|
|
78
|
+
| Extension | Count |
|
|
79
|
+
|-----------|-------|
|
|
80
|
+
| {{EXT}} | {{EXT_COUNT}} | <!-- ROW -->
|
|
81
|
+
|
|
82
|
+
**Tree** (max depth {{MAX_DEPTH}}):
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
{{DIRECTORY_TREE}}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Largest files by line count:**
|
|
89
|
+
|
|
90
|
+
| File | Lines |
|
|
91
|
+
|------|-------|
|
|
92
|
+
| `{{LARGEST_FILE}}` | {{LARGEST_FILE_LINES}} | <!-- ROW -->
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Key Dependencies
|
|
97
|
+
|
|
98
|
+
<!--
|
|
99
|
+
MECHANICAL. Rendered from detect-dependencies.sh output.
|
|
100
|
+
Internal = resolves inside this repo. External = third-party or stdlib.
|
|
101
|
+
Manifests are listed so declared dependencies can be reconciled against
|
|
102
|
+
what is actually imported.
|
|
103
|
+
-->
|
|
104
|
+
|
|
105
|
+
**Internal:**
|
|
106
|
+
|
|
107
|
+
{{INTERNAL_DEPENDENCIES}}
|
|
108
|
+
|
|
109
|
+
**External:**
|
|
110
|
+
|
|
111
|
+
{{EXTERNAL_DEPENDENCIES}}
|
|
112
|
+
|
|
113
|
+
**Manifests found in or above the target:**
|
|
114
|
+
|
|
115
|
+
{{MANIFEST_FILES}}
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Existing Tests
|
|
120
|
+
|
|
121
|
+
<!--
|
|
122
|
+
MECHANICAL. Rendered from detect-tests.sh output.
|
|
123
|
+
Must distinguish "tests cover this target" from "the repo has tests, but
|
|
124
|
+
none reference this target" — those are very different findings.
|
|
125
|
+
-->
|
|
126
|
+
|
|
127
|
+
**Coverage signal:** {{TEST_COVERAGE_STATUS}}
|
|
128
|
+
<!-- covered \| repo_tests_only \| no_tests_in_repo -->
|
|
129
|
+
|
|
130
|
+
**Test files referencing this target:**
|
|
131
|
+
|
|
132
|
+
{{TEST_FILES}}
|
|
133
|
+
|
|
134
|
+
**Test-runner configuration detected:**
|
|
135
|
+
|
|
136
|
+
{{TEST_RUNNER_CONFIG}}
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Risk Areas
|
|
141
|
+
|
|
142
|
+
<!--
|
|
143
|
+
JUDGEMENT. Ground every entry in something above — an untested hot path, a
|
|
144
|
+
heavy external dependency, an oversized file, a missing manifest entry.
|
|
145
|
+
Generic risks that would apply to any codebase are not useful here.
|
|
146
|
+
-->
|
|
147
|
+
|
|
148
|
+
_TODO(agent): risks grounded in the mechanical findings above._
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Open Questions
|
|
153
|
+
|
|
154
|
+
<!--
|
|
155
|
+
JUDGEMENT. What could not be determined from the evidence, and what the
|
|
156
|
+
user would need to answer before this target is safely integrated or
|
|
157
|
+
backfilled onto the board.
|
|
158
|
+
-->
|
|
159
|
+
|
|
160
|
+
_TODO(agent): what remains unknown and who can resolve it._
|