@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.
Files changed (91) hide show
  1. package/README.md +7 -3
  2. package/agents/developer.md +82 -2
  3. package/agents/scrum-master.md +140 -21
  4. package/agents/tester.md +90 -8
  5. package/hooks/on_session_end.sh +171 -20
  6. package/package.json +1 -1
  7. package/scripts/check-permission-level.sh +107 -0
  8. package/scripts/check-publicignore-match.sh +122 -0
  9. package/scripts/check-worktree-liveness.sh +193 -0
  10. package/scripts/generate-rapport-manifest.sh +43 -0
  11. package/scripts/idea_manager.sh +47 -0
  12. package/scripts/install-worktree-commit-guard.sh +134 -0
  13. package/scripts/jenga-permission-level-switch.sh +109 -0
  14. package/scripts/smoke-harness.sh +139 -0
  15. package/scripts/validate-board.sh +62 -0
  16. package/scripts/with-lock.sh +158 -0
  17. package/scripts/worktree-remove-guard.sh +204 -0
  18. package/skills/clearify/SKILL.md +52 -0
  19. package/skills/commit/SKILL.md +13 -4
  20. package/skills/distribute/CONFIG_SCHEMA.md +60 -2
  21. package/skills/do/SKILL.md +48 -11
  22. package/skills/doc-sync/SKILL.md +16 -0
  23. package/skills/doc-sync/assets/doc_targets.md +11 -0
  24. package/skills/idea/SKILL.md +56 -0
  25. package/skills/idea/assets/idea_handoff_template.md +26 -0
  26. package/skills/idea/assets/idea_template.md +3 -0
  27. package/skills/init/SKILL.md +100 -7
  28. package/skills/init/assets/directory_structure.txt +1 -0
  29. package/skills/init/assets/workflow_template.json +1 -1
  30. package/skills/init/scripts/apply-project-visibility.sh +176 -0
  31. package/skills/init/scripts/detect-existing-codebase.sh +166 -0
  32. package/skills/init/scripts/init.sh +30 -1
  33. package/skills/jenga/SKILL.md +160 -17
  34. package/skills/jenga/scripts/board-scan.sh +238 -0
  35. package/skills/jenga/scripts/cascade-resolve.sh +297 -0
  36. package/skills/jenga/scripts/render-confirmation.sh +679 -0
  37. package/skills/jenga/scripts/render-picker.sh +439 -0
  38. package/skills/jenga/scripts/resolve-id.sh +367 -0
  39. package/skills/jenga-permission-level/SKILL.md +81 -0
  40. package/skills/proceed/SKILL.md +1 -1
  41. package/skills/publish/SKILL.md +8 -5
  42. package/skills/publish/assets/ci-contract.md +2 -2
  43. package/skills/publish/assets/ownership-matrix.md +1 -1
  44. package/skills/publish/scripts/finalize_changelog.sh +115 -0
  45. package/skills/publish/scripts/generate_release_notes.sh +475 -28
  46. package/skills/publish/scripts/npm_ci_pipeline.sh +44 -6
  47. package/skills/publish/scripts/publish_deploy.sh +38 -8
  48. package/skills/publish/scripts/run_gates.sh +2 -2
  49. package/skills/reconcile/SKILL.md +117 -5
  50. package/skills/reconcile/scripts/detect-unlinked-code.sh +741 -0
  51. package/skills/skillify/assets/init-new/assets/directory_structure.txt +5 -1
  52. package/skills/spinoff/SKILL.md +12 -7
  53. package/skills/todo/SKILL.md +2 -0
  54. package/skills/uncharted/SKILL.md +711 -0
  55. package/skills/uncharted/assets/SEGMENT_PROPOSAL_TEMPLATE.md +129 -0
  56. package/skills/uncharted/assets/UNDERSTANDING_DOC_TEMPLATE.md +160 -0
  57. package/skills/uncharted/scripts/apply-subsystem-cap.sh +573 -0
  58. package/skills/uncharted/scripts/detect-dependencies.sh +732 -0
  59. package/skills/uncharted/scripts/detect-tests.sh +553 -0
  60. package/skills/uncharted/scripts/discover-subsystems.sh +1029 -0
  61. package/skills/uncharted/scripts/enumerate-target.sh +470 -0
  62. package/skills/uncharted/scripts/import-source.sh +517 -0
  63. package/skills/uncharted/scripts/inspect-provenance.sh +573 -0
  64. package/skills/uncharted/scripts/resolve-segment-target.sh +640 -0
  65. package/skills/uncharted/scripts/run-engine.sh +655 -0
  66. package/skills/uncharted/scripts/validate-proposed-items.sh +125 -0
  67. package/skills/uncharted/scripts/write-backfilled-epics.sh +498 -0
  68. package/skills/wtf/SKILL.md +20 -0
  69. package/templates/CHANGELOG_TEMPLATE.md +13 -0
  70. package/templates/PROBLEM_RAPPORT_TEMPLATE.md +4 -1
  71. package/templates/SCRUM_BOARD_SCHEMA.md +157 -10
  72. package/templates/permission-levels/README.md +73 -0
  73. package/templates/permission-levels/level-1-locked.json +71 -0
  74. package/templates/permission-levels/level-2-guarded.json +64 -0
  75. package/templates/permission-levels/level-3-standard.json +62 -0
  76. package/templates/permission-levels/level-4-elevated.json +60 -0
  77. package/templates/permission-levels/level-5-unrestricted.json +58 -0
  78. package/skills/convert/SKILL.md +0 -124
  79. package/skills/convert/convert_cli.py +0 -235
  80. package/skills/convert/tests/sample.csv +0 -4
  81. package/skills/convert/tests/sample.json +0 -5
  82. package/skills/convert/tests/sample.jsonl +0 -3
  83. package/skills/convert/tests/sample.yaml +0 -18
  84. package/skills/convert/tests/sample_obj.csv +0 -2
  85. package/skills/convert/tests/sample_obj.json +0 -9
  86. package/skills/mirror-public/SKILL.md +0 -237
  87. package/skills/mirror-public/assets/config.json +0 -5
  88. package/skills/mirror-public/scripts/mirror.sh +0 -374
  89. package/skills/self-sync/SKILL.md +0 -73
  90. package/skills/self-sync/scripts/run.js +0 -136
  91. 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._