@jstn-sdk/ma 0.1.4 → 0.1.6
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 +45 -5
- package/bin/ma.js +8 -1
- package/docs/README.md +1 -1
- package/docs/assets/image/Screenshot(1).png +0 -0
- package/docs/assets/image/Screenshot(2).png +0 -0
- package/docs/assets/image/Screenshot(3).png +0 -0
- package/docs/assets/image/Screenshot(4).png +0 -0
- package/docs/assets/image/Screenshot(5).png +0 -0
- package/docs/assets/image/Screenshot(6).png +0 -0
- package/docs/assets/image/Screenshot(7).png +0 -0
- package/docs/assets/image/Screenshot(8).png +0 -0
- package/docs/assets/image/Screenshot(9).png +0 -0
- package/docs/getting-started.md +18 -1
- package/docs/qa/{release-readiness-0.1.4.md → release-readiness-0.1.5.md} +8 -8
- package/docs/qa/release-readiness-0.1.6.md +79 -0
- package/docs/release-spec.md +6 -6
- package/docs/skills.md +6 -2
- package/package.json +1 -1
- package/plugins/meta-architect/.app.json +1 -1
- package/plugins/meta-architect/.codex-plugin/plugin.json +1 -1
- package/plugins/meta-architect/.mcp.json +1 -1
- package/plugins/meta-architect/README.md +1 -1
- package/plugins/meta-architect/skills/maestro/SKILL.md +25 -0
- package/plugins/meta-architect/skills/maestro/agents/openai.yaml +4 -0
- package/scripts/plugin-sync.js +1 -0
- package/skills/index.json +5 -0
- package/skills/maestro/SKILL.md +25 -0
- package/skills/maestro/agents/openai.yaml +4 -0
- package/src/mcp-live-client.js +1 -1
- package/src/runtime-artifacts.js +48 -0
- package/src/skills.js +167 -3
package/README.md
CHANGED
|
@@ -7,12 +7,20 @@
|
|
|
7
7
|
<img src="https://img.shields.io/github/v/release/JustineDevs/meta-architect" alt="GitHub release">
|
|
8
8
|
<img src="https://img.shields.io/badge/license-MIT-16A34A" alt="MIT License">
|
|
9
9
|
</p>
|
|
10
|
+
<p>
|
|
11
|
+
<a href="https://www.buymeacoffee.com/justinedevs">
|
|
12
|
+
<img src="https://img.shields.io/badge/Buy%20Me%20A%20Coffee-ffdd00?style=flat-square&logo=buy-me-a-coffee&logoColor=black" alt="Buy Me A Coffee">
|
|
13
|
+
</a>
|
|
14
|
+
<a href="https://github.com/sponsors/JustineDevs">
|
|
15
|
+
<img src="https://img.shields.io/badge/GitHub%20Sponsors-JustineDevs-1f6feb?style=flat-square&logo=githubsponsors&logoColor=white" alt="GitHub Sponsors">
|
|
16
|
+
</a>
|
|
17
|
+
</p>
|
|
10
18
|
</div>
|
|
11
19
|
|
|
12
20
|
> [!IMPORTANT]
|
|
13
|
-
> Meta-Architect `v0.1.
|
|
21
|
+
> Meta-Architect `v0.1.6` is a production-grade skills line.
|
|
14
22
|
> It is not a lightweight demo branch.
|
|
15
|
-
> From `v0.1.
|
|
23
|
+
> From `v0.1.6` onward, the package is expected to ship with stable skill contracts, deterministic packaging, explicit release gates, and honest install and publish surfaces.
|
|
16
24
|
|
|
17
25
|
## Overview
|
|
18
26
|
|
|
@@ -29,6 +37,11 @@ It adds:
|
|
|
29
37
|
> Meta-Architect does not replace your coding runtime.
|
|
30
38
|
> It wraps that runtime with architecture, evidence, gate enforcement, and release-sensitive workflow control.
|
|
31
39
|
|
|
40
|
+
## Support
|
|
41
|
+
|
|
42
|
+
- [GitHub Sponsors](https://github.com/sponsors/JustineDevs)
|
|
43
|
+
- [Buy Me A Coffee](https://www.buymeacoffee.com/justinedevs)
|
|
44
|
+
|
|
32
45
|
<table>
|
|
33
46
|
<tr>
|
|
34
47
|
<td><strong>npm package</strong></td>
|
|
@@ -44,7 +57,7 @@ It adds:
|
|
|
44
57
|
</tr>
|
|
45
58
|
<tr>
|
|
46
59
|
<td><strong>Release line</strong></td>
|
|
47
|
-
<td><code>v0.1.
|
|
60
|
+
<td><code>v0.1.6</code></td>
|
|
48
61
|
</tr>
|
|
49
62
|
<tr>
|
|
50
63
|
<td><strong>License</strong></td>
|
|
@@ -52,6 +65,26 @@ It adds:
|
|
|
52
65
|
</tr>
|
|
53
66
|
</table>
|
|
54
67
|
|
|
68
|
+
## Screenshots
|
|
69
|
+
|
|
70
|
+
<table>
|
|
71
|
+
<tr>
|
|
72
|
+
<td><img src="./docs/assets/image/Screenshot(1).png" alt="Meta-Architect screenshot 1" width="280"></td>
|
|
73
|
+
<td><img src="./docs/assets/image/Screenshot(2).png" alt="Meta-Architect screenshot 2" width="280"></td>
|
|
74
|
+
<td><img src="./docs/assets/image/Screenshot(3).png" alt="Meta-Architect screenshot 3" width="280"></td>
|
|
75
|
+
</tr>
|
|
76
|
+
<tr>
|
|
77
|
+
<td><img src="./docs/assets/image/Screenshot(4).png" alt="Meta-Architect screenshot 4" width="280"></td>
|
|
78
|
+
<td><img src="./docs/assets/image/Screenshot(5).png" alt="Meta-Architect screenshot 5" width="280"></td>
|
|
79
|
+
<td><img src="./docs/assets/image/Screenshot(6).png" alt="Meta-Architect screenshot 6" width="280"></td>
|
|
80
|
+
</tr>
|
|
81
|
+
<tr>
|
|
82
|
+
<td><img src="./docs/assets/image/Screenshot(7).png" alt="Meta-Architect screenshot 7" width="280"></td>
|
|
83
|
+
<td><img src="./docs/assets/image/Screenshot(8).png" alt="Meta-Architect screenshot 8" width="280"></td>
|
|
84
|
+
<td><img src="./docs/assets/image/Screenshot(9).png" alt="Meta-Architect screenshot 9" width="280"></td>
|
|
85
|
+
</tr>
|
|
86
|
+
</table>
|
|
87
|
+
|
|
55
88
|
## Prerequisites
|
|
56
89
|
|
|
57
90
|
- Node.js `>=20`
|
|
@@ -164,6 +197,10 @@ Use the same operator shape defined in [example/usage-workflow.md](./example/usa
|
|
|
164
197
|
Quick-start prompt:
|
|
165
198
|
|
|
166
199
|
```text
|
|
200
|
+
$maestro
|
|
201
|
+
|
|
202
|
+
Or start directly with:
|
|
203
|
+
|
|
167
204
|
$arch I want to build: [PROJECT IDEA]
|
|
168
205
|
|
|
169
206
|
Context:
|
|
@@ -193,7 +230,7 @@ Required output:
|
|
|
193
230
|
5. Data model and storage choices
|
|
194
231
|
6. Auth/security considerations
|
|
195
232
|
7. DX/UX considerations
|
|
196
|
-
8. Delivery plan for v0.1.
|
|
233
|
+
8. Delivery plan for v0.1.6
|
|
197
234
|
9. Risks and trade-offs
|
|
198
235
|
10. Decision log
|
|
199
236
|
11. Exact next trigger to run after this
|
|
@@ -204,6 +241,7 @@ Required output:
|
|
|
204
241
|
After `$arch`, continue exactly like the usage workflow:
|
|
205
242
|
|
|
206
243
|
```text
|
|
244
|
+
$maestro
|
|
207
245
|
$sage
|
|
208
246
|
$flow
|
|
209
247
|
$vet
|
|
@@ -327,6 +365,7 @@ ma run '$arch'
|
|
|
327
365
|
In-session skills are prompts you use inside the Codex conversation after launch:
|
|
328
366
|
|
|
329
367
|
```text
|
|
368
|
+
$maestro
|
|
330
369
|
$arch
|
|
331
370
|
$sage
|
|
332
371
|
$flow
|
|
@@ -347,6 +386,7 @@ What `ma setup` and `ma init` do:
|
|
|
347
386
|
|
|
348
387
|
What to use when:
|
|
349
388
|
- use Codex and run the skills in-session
|
|
389
|
+
- use `$maestro` when you want Meta-Architect to choose the best next step for you
|
|
350
390
|
- use `$arch -> $sage -> $flow -> $vet -> $vibe -> $build` inside the Codex session
|
|
351
391
|
- use `ma setup` or `ma init` only when you want local scaffolding or scripted helper automation from the terminal
|
|
352
392
|
- use `ma sdk-path` when you need the exact installed support-bundle path for packaged prompts, MCP files, sprint files, scripts, plugin metadata, or templates
|
|
@@ -523,7 +563,7 @@ Release automation:
|
|
|
523
563
|
| [Plugin README](./plugins/meta-architect/README.md) | plugin distribution surface |
|
|
524
564
|
| [Collaborative Whiteboard Mission](./missions/collaborative-whiteboard/mission.md) | concrete scenario walkthrough |
|
|
525
565
|
| [Release Spec](./docs/release-spec.md) | release and gate policy |
|
|
526
|
-
| [Release Readiness](./docs/qa/release-readiness-0.1.
|
|
566
|
+
| [Release Readiness](./docs/qa/release-readiness-0.1.6.md) | QA evidence for the `v0.1.6` line |
|
|
527
567
|
|
|
528
568
|
## Release Hygiene
|
|
529
569
|
|
package/bin/ma.js
CHANGED
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
runFlow,
|
|
27
27
|
runIdea,
|
|
28
28
|
runInit,
|
|
29
|
+
runMaestro,
|
|
29
30
|
runSage,
|
|
30
31
|
runVet,
|
|
31
32
|
runVibe,
|
|
@@ -41,7 +42,7 @@ function printUsage() {
|
|
|
41
42
|
console.error(" ma skills");
|
|
42
43
|
console.error(" ma sdk-path");
|
|
43
44
|
console.error(" ma status");
|
|
44
|
-
console.error(" ma run $arch|$sage|$flow|$vet|$vibe|$build");
|
|
45
|
+
console.error(" ma run $maestro|$arch|$sage|$flow|$vet|$vibe|$build");
|
|
45
46
|
console.error(" ma merge <source-branch> <target-branch>");
|
|
46
47
|
console.error(" ma release <origin-branch> <target-branch>");
|
|
47
48
|
}
|
|
@@ -266,6 +267,12 @@ async function main() {
|
|
|
266
267
|
return;
|
|
267
268
|
}
|
|
268
269
|
|
|
270
|
+
if (command === "run" && arg === "$maestro") {
|
|
271
|
+
await runMaestro();
|
|
272
|
+
console.log("$maestro complete");
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
|
|
269
276
|
if (command === "run" && arg === "$build") {
|
|
270
277
|
const releaseState = await loadReleaseState();
|
|
271
278
|
await runBuild(releaseState);
|
package/docs/README.md
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/docs/getting-started.md
CHANGED
|
@@ -74,7 +74,7 @@ Required output:
|
|
|
74
74
|
5. Data model and storage choices
|
|
75
75
|
6. Auth/security considerations
|
|
76
76
|
7. DX/UX considerations
|
|
77
|
-
8. Delivery plan for v0.1.
|
|
77
|
+
8. Delivery plan for v0.1.6
|
|
78
78
|
9. Risks and trade-offs
|
|
79
79
|
10. Decision log
|
|
80
80
|
11. Exact next trigger to run after this
|
|
@@ -163,6 +163,7 @@ ma run '$arch'
|
|
|
163
163
|
In-session skills are prompts used after you are already inside Codex:
|
|
164
164
|
|
|
165
165
|
```text
|
|
166
|
+
$maestro
|
|
166
167
|
$arch
|
|
167
168
|
$sage
|
|
168
169
|
$flow
|
|
@@ -222,6 +223,22 @@ If this fails:
|
|
|
222
223
|
|
|
223
224
|
## 7. Run the helper skill sequence
|
|
224
225
|
|
|
226
|
+
### 5.0 Workflow manager
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
ma run '$maestro'
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Expected effects:
|
|
233
|
+
- reads the current gate state
|
|
234
|
+
- recommends the best next step
|
|
235
|
+
- writes `.ma/plans/maestro.md`
|
|
236
|
+
- records an advisory decision entry
|
|
237
|
+
|
|
238
|
+
Generated or updated:
|
|
239
|
+
- `.ma/decisions.json`
|
|
240
|
+
- `.ma/plans/maestro.md`
|
|
241
|
+
|
|
225
242
|
### 5.1 Architecture
|
|
226
243
|
|
|
227
244
|
```bash
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
# Release Readiness 0.1.
|
|
1
|
+
# Release Readiness 0.1.5
|
|
2
2
|
|
|
3
3
|
## Production bar
|
|
4
4
|
|
|
5
|
-
`v0.1.
|
|
5
|
+
`v0.1.5` is treated as production only when:
|
|
6
6
|
- the package installs cleanly from the canonical public install command
|
|
7
7
|
- the Codex-hosted runtime path works end to end
|
|
8
8
|
- the helper flow remains valid for scripted verification
|
|
9
|
-
- release docs, package metadata, and workflows all agree on `0.1.
|
|
9
|
+
- release docs, package metadata, and workflows all agree on `0.1.5`
|
|
10
10
|
|
|
11
11
|
Target release state:
|
|
12
|
-
- npm package: `@jstn-sdk/ma@0.1.
|
|
12
|
+
- npm package: `@jstn-sdk/ma@0.1.5`
|
|
13
13
|
- npm registry state: pending publish
|
|
14
|
-
- publishability note: `0.1.
|
|
15
|
-
- git tag: `v0.1.
|
|
16
|
-
- GitHub release: pending publish for `v0.1.
|
|
14
|
+
- publishability note: `0.1.4` is already published, so `0.1.5` is the next publishable package line
|
|
15
|
+
- git tag: `v0.1.5`
|
|
16
|
+
- GitHub release: pending publish for `v0.1.5`
|
|
17
17
|
|
|
18
18
|
## Production checklist
|
|
19
19
|
|
|
20
20
|
- skills-first product identity: PASS
|
|
21
21
|
- package/plugin identity aligned to `@jstn-sdk/ma`: PASS
|
|
22
|
-
- version/tag alignment `0.1.
|
|
22
|
+
- version/tag alignment `0.1.5` / `v0.1.5`: PASS
|
|
23
23
|
- install/uninstall docs aligned: PASS
|
|
24
24
|
- onboarding is concise and sequential: PASS
|
|
25
25
|
- helper command documented as secondary: PASS
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Release Readiness 0.1.6
|
|
2
|
+
|
|
3
|
+
## Production bar
|
|
4
|
+
|
|
5
|
+
`v0.1.6` is treated as production only when:
|
|
6
|
+
- the package installs cleanly from the canonical public install command
|
|
7
|
+
- the Codex-hosted runtime path works end to end
|
|
8
|
+
- the helper flow remains valid for scripted verification
|
|
9
|
+
- release docs, package metadata, and workflows all agree on `0.1.6`
|
|
10
|
+
|
|
11
|
+
Target release state:
|
|
12
|
+
- npm package: `@jstn-sdk/ma@0.1.6`
|
|
13
|
+
- npm registry state: pending publish
|
|
14
|
+
- publishability note: `0.1.5` is already published, so `0.1.6` is the next publishable package line
|
|
15
|
+
- git tag: `v0.1.6`
|
|
16
|
+
- GitHub release: pending publish for `v0.1.6`
|
|
17
|
+
|
|
18
|
+
## Production checklist
|
|
19
|
+
|
|
20
|
+
- skills-first product identity: PASS
|
|
21
|
+
- package/plugin identity aligned to `@jstn-sdk/ma`: PASS
|
|
22
|
+
- version/tag alignment `0.1.6` / `v0.1.6`: PASS
|
|
23
|
+
- install/uninstall docs aligned: PASS
|
|
24
|
+
- onboarding is concise and sequential: PASS
|
|
25
|
+
- helper command documented as secondary: PASS
|
|
26
|
+
- skills/prompts/manifests aligned: PASS
|
|
27
|
+
- packaging includes required assets: PASS
|
|
28
|
+
- tests pass: PASS
|
|
29
|
+
- package dry-run passes: PASS
|
|
30
|
+
- installed-package behavior passes: PASS
|
|
31
|
+
- workflow/release/provenance docs aligned: PASS
|
|
32
|
+
- no stale package names remain in tracked repo surfaces: PASS
|
|
33
|
+
- no conflicting CLI-first product story remains in tracked product docs: PASS
|
|
34
|
+
|
|
35
|
+
## Automated checks run
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm run release:check
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
That must cover:
|
|
42
|
+
- skills manifest generation
|
|
43
|
+
- skill validation
|
|
44
|
+
- skill bundle packaging
|
|
45
|
+
- repo checks
|
|
46
|
+
- automated tests
|
|
47
|
+
- npm package dry-run inspection
|
|
48
|
+
|
|
49
|
+
## Manual/behavioral checks run
|
|
50
|
+
|
|
51
|
+
Canonical launch:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
ma --madmax --high
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Helper-path validation:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
ma setup
|
|
61
|
+
ma idea "Build a demo app"
|
|
62
|
+
ma run '$arch'
|
|
63
|
+
ma run '$sage'
|
|
64
|
+
ma run '$flow'
|
|
65
|
+
ma run '$vet'
|
|
66
|
+
ma run '$vibe'
|
|
67
|
+
ma status
|
|
68
|
+
ma run '$build'
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Expected evidence:
|
|
72
|
+
- `.ma/release.json` remains the source of truth
|
|
73
|
+
- `.ma/decisions.json` records the helper-path activity
|
|
74
|
+
- `$build` stays blocked until upstream gates are green, then becomes ready
|
|
75
|
+
|
|
76
|
+
## Known limitations
|
|
77
|
+
|
|
78
|
+
- interactive Codex conversation quality depends on the installed Codex host
|
|
79
|
+
- release publication still depends on npm ownership/authorization for the target package name
|
package/docs/release-spec.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# v0.1.
|
|
1
|
+
# v0.1.6 Requirements & Rules
|
|
2
2
|
|
|
3
3
|
## Production definition
|
|
4
4
|
|
|
5
|
-
Meta-Architect `v0.1.
|
|
5
|
+
Meta-Architect `v0.1.6` is production only when:
|
|
6
6
|
1. the package/install surface works
|
|
7
7
|
2. the in-session skill workflow from `$arch` through `$build` works
|
|
8
8
|
3. the release evidence matches the actual package and git tag
|
|
9
9
|
|
|
10
|
-
## What `v0.1.
|
|
10
|
+
## What `v0.1.6` must have
|
|
11
11
|
|
|
12
12
|
### 1. Canonical package/runtime path
|
|
13
13
|
|
|
@@ -49,11 +49,11 @@ Canonical state files:
|
|
|
49
49
|
|
|
50
50
|
### 4. Required release evidence
|
|
51
51
|
|
|
52
|
-
- `package.json` version `0.1.
|
|
53
|
-
- git tag `v0.1.
|
|
52
|
+
- `package.json` version `0.1.6`
|
|
53
|
+
- git tag `v0.1.6`
|
|
54
54
|
- `RELEASE.md`
|
|
55
55
|
- `CHANGELOG.md`
|
|
56
|
-
- `docs/qa/release-readiness-0.1.
|
|
56
|
+
- `docs/qa/release-readiness-0.1.6.md`
|
|
57
57
|
- green `npm run release:check`
|
|
58
58
|
|
|
59
59
|
### 5. Dist-tag discipline
|
package/docs/skills.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Skills
|
|
2
2
|
|
|
3
3
|
Meta-Architect’s canonical Codex runtime surface is:
|
|
4
|
+
- `$maestro`
|
|
4
5
|
- `$arch`
|
|
5
6
|
- `$sage`
|
|
6
7
|
- `$flow`
|
|
@@ -27,8 +28,9 @@ npm uninstall -g @jstn-sdk/ma @openai/codex
|
|
|
27
28
|
```
|
|
28
29
|
|
|
29
30
|
Then inside the Codex session:
|
|
30
|
-
1. Start with the
|
|
31
|
-
2.
|
|
31
|
+
1. Start with `$maestro` when you want Meta-Architect to choose the best next step
|
|
32
|
+
2. Or start with `$arch` when you already know the architecture lane is next
|
|
33
|
+
3. Continue through `$sage -> $flow -> $vet -> $vibe -> $build`
|
|
32
34
|
|
|
33
35
|
## Simple difference
|
|
34
36
|
|
|
@@ -50,6 +52,7 @@ ma run '$arch'
|
|
|
50
52
|
In-session skills are used inside the Codex conversation:
|
|
51
53
|
|
|
52
54
|
```text
|
|
55
|
+
$maestro
|
|
53
56
|
$arch
|
|
54
57
|
$sage
|
|
55
58
|
$flow
|
|
@@ -106,6 +109,7 @@ Every skill result must include:
|
|
|
106
109
|
|
|
107
110
|
## Status ownership
|
|
108
111
|
|
|
112
|
+
- `$maestro` -> next-step recommendation
|
|
109
113
|
- project brief -> architecture input
|
|
110
114
|
- `$arch` -> `architecture_status`
|
|
111
115
|
- `$sage` -> `evidence_status`
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "meta-architect",
|
|
3
3
|
"displayName": "Meta-Architect",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.6",
|
|
5
5
|
"description": "Programmatic architecture and verified engineering skills for Codex-native workflows.",
|
|
6
6
|
"entry": "./README.md",
|
|
7
7
|
"skillsDir": "./skills"
|
|
@@ -105,7 +105,7 @@ When consuming the plugin:
|
|
|
105
105
|
The plugin version should track the release scope of the core repo.
|
|
106
106
|
|
|
107
107
|
For this repository:
|
|
108
|
-
- plugin scope is aligned to Meta-Architect `v0.1.
|
|
108
|
+
- plugin scope is aligned to Meta-Architect `v0.1.6`
|
|
109
109
|
- any breaking contract change should be versioned intentionally
|
|
110
110
|
|
|
111
111
|
The plugin is one distribution surface of the same product, not a separate product line.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maestro
|
|
3
|
+
description: "Use when the user wants Meta-Architect to choose the best next workflow step, explain why, and recommend the right lane or assignment."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Maestro
|
|
7
|
+
|
|
8
|
+
Use this skill inside Codex when you want Meta-Architect to act like a workflow manager.
|
|
9
|
+
|
|
10
|
+
## Output
|
|
11
|
+
|
|
12
|
+
Produce:
|
|
13
|
+
- current situation summary
|
|
14
|
+
- best next step
|
|
15
|
+
- why that step is next
|
|
16
|
+
- recommended lane or assignment
|
|
17
|
+
- what to avoid doing yet
|
|
18
|
+
- exact next trigger, command, or handoff
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- Prefer the smallest next step that moves the workflow forward safely.
|
|
23
|
+
- Respect current gate state before recommending implementation or release work.
|
|
24
|
+
- Be explicit when more evidence, planning, or validation is still needed.
|
|
25
|
+
- Route to the in-session skill flow first; use helper commands only when they are the clearest support path.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "$maestro"
|
|
3
|
+
short_description: "Best next step and lane orchestration"
|
|
4
|
+
default_prompt: "Use $maestro to inspect the current Meta-Architect workflow state, choose the best next step, explain why it is next, and recommend the right lane or assignment."
|
package/scripts/plugin-sync.js
CHANGED
package/skills/index.json
CHANGED
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"path": "skills/flow",
|
|
17
17
|
"description": "Use when the user wants logic validation: states, transitions, invariants, edge cases, dead ends, and blockers before implementation."
|
|
18
18
|
},
|
|
19
|
+
{
|
|
20
|
+
"name": "maestro",
|
|
21
|
+
"path": "skills/maestro",
|
|
22
|
+
"description": "Use when the user wants Meta-Architect to choose the best next workflow step, explain why, and recommend the right lane or assignment."
|
|
23
|
+
},
|
|
19
24
|
{
|
|
20
25
|
"name": "meta-architect",
|
|
21
26
|
"path": "skills/meta-architect",
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maestro
|
|
3
|
+
description: "Use when the user wants Meta-Architect to choose the best next workflow step, explain why, and recommend the right lane or assignment."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Maestro
|
|
7
|
+
|
|
8
|
+
Use this skill inside Codex when you want Meta-Architect to act like a workflow manager.
|
|
9
|
+
|
|
10
|
+
## Output
|
|
11
|
+
|
|
12
|
+
Produce:
|
|
13
|
+
- current situation summary
|
|
14
|
+
- best next step
|
|
15
|
+
- why that step is next
|
|
16
|
+
- recommended lane or assignment
|
|
17
|
+
- what to avoid doing yet
|
|
18
|
+
- exact next trigger, command, or handoff
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
- Prefer the smallest next step that moves the workflow forward safely.
|
|
23
|
+
- Respect current gate state before recommending implementation or release work.
|
|
24
|
+
- Be explicit when more evidence, planning, or validation is still needed.
|
|
25
|
+
- Route to the in-session skill flow first; use helper commands only when they are the clearest support path.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "$maestro"
|
|
3
|
+
short_description: "Best next step and lane orchestration"
|
|
4
|
+
default_prompt: "Use $maestro to inspect the current Meta-Architect workflow state, choose the best next step, explain why it is next, and recommend the right lane or assignment."
|
package/src/mcp-live-client.js
CHANGED
package/src/runtime-artifacts.js
CHANGED
|
@@ -196,6 +196,50 @@ function renderImplementationPlan({ idea, blueprint }) {
|
|
|
196
196
|
].join("\n");
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
+
function renderMaestroPlan({ releaseState, recommendation }) {
|
|
200
|
+
return [
|
|
201
|
+
"# Maestro Plan",
|
|
202
|
+
"",
|
|
203
|
+
`Updated: ${new Date().toISOString()}`,
|
|
204
|
+
"",
|
|
205
|
+
"## Current Gate State",
|
|
206
|
+
"",
|
|
207
|
+
`- idea: ${releaseState.idea_status}`,
|
|
208
|
+
`- architecture: ${releaseState.architecture_status}`,
|
|
209
|
+
`- evidence: ${releaseState.evidence_status}`,
|
|
210
|
+
`- logic: ${releaseState.logic_status}`,
|
|
211
|
+
`- security: ${releaseState.security_status}`,
|
|
212
|
+
`- experience: ${releaseState.experience_status}`,
|
|
213
|
+
`- build: ${releaseState.build_status}`,
|
|
214
|
+
"",
|
|
215
|
+
"## Best Next Step",
|
|
216
|
+
"",
|
|
217
|
+
recommendation.nextStep,
|
|
218
|
+
"",
|
|
219
|
+
"## Why This Is Next",
|
|
220
|
+
"",
|
|
221
|
+
recommendation.why,
|
|
222
|
+
"",
|
|
223
|
+
"## Recommended Lane",
|
|
224
|
+
"",
|
|
225
|
+
`- primary: ${recommendation.primaryLane}`,
|
|
226
|
+
`- support: ${recommendation.supportLane}`,
|
|
227
|
+
"",
|
|
228
|
+
"## Suggested Assignment",
|
|
229
|
+
"",
|
|
230
|
+
...recommendation.assignments.map((item) => `- ${item}`),
|
|
231
|
+
"",
|
|
232
|
+
"## Avoid For Now",
|
|
233
|
+
"",
|
|
234
|
+
...recommendation.avoid.map((item) => `- ${item}`),
|
|
235
|
+
"",
|
|
236
|
+
"## Exact Next Trigger",
|
|
237
|
+
"",
|
|
238
|
+
recommendation.nextTrigger,
|
|
239
|
+
"",
|
|
240
|
+
].join("\n");
|
|
241
|
+
}
|
|
242
|
+
|
|
199
243
|
function renderBuildPlan({ allowed, blockers, nextTriggers, suggestedBranches = [] }) {
|
|
200
244
|
const lines = [
|
|
201
245
|
"# Build Plan",
|
|
@@ -361,3 +405,7 @@ export async function writeBuildPlanArtifact({
|
|
|
361
405
|
renderBuildPlan({ allowed, blockers, nextTriggers, suggestedBranches }),
|
|
362
406
|
);
|
|
363
407
|
}
|
|
408
|
+
|
|
409
|
+
export async function writeMaestroPlan({ releaseState, recommendation }) {
|
|
410
|
+
await writeArtifact("plans/maestro.md", renderMaestroPlan({ releaseState, recommendation }));
|
|
411
|
+
}
|
package/src/skills.js
CHANGED
|
@@ -11,13 +11,16 @@ import {
|
|
|
11
11
|
writeEvidenceSpec,
|
|
12
12
|
writeExperienceSpec,
|
|
13
13
|
writeLogicSpec,
|
|
14
|
+
writeMaestroPlan,
|
|
14
15
|
writeProjectContext,
|
|
15
16
|
writeSecuritySpec,
|
|
16
17
|
} from "./runtime-artifacts.js";
|
|
17
18
|
import { syncStatusUpdates } from "./state-sync.js";
|
|
18
19
|
|
|
19
|
-
const skillNames = ["$arch", "$sage", "$flow", "$vet", "$vibe", "$build"];
|
|
20
|
+
const skillNames = ["$maestro", "$arch", "$sage", "$flow", "$vet", "$vibe", "$build"];
|
|
20
21
|
const workflowTemplates = {
|
|
22
|
+
"maestro.skill.md":
|
|
23
|
+
"# `$maestro`\n\nChooses the best next workflow step and recommends the right lane or assignment.\n",
|
|
21
24
|
"arch.skill.md":
|
|
22
25
|
"# `$arch`\n\nProduces blueprint architecture, stack rationale, subsystem design, and tradeoffs.\n",
|
|
23
26
|
"sage.skill.md":
|
|
@@ -35,6 +38,150 @@ export function listSkills() {
|
|
|
35
38
|
return skillNames;
|
|
36
39
|
}
|
|
37
40
|
|
|
41
|
+
function chooseMaestroRecommendation(releaseState, idea) {
|
|
42
|
+
if (releaseState.idea_status !== "CLEAR") {
|
|
43
|
+
return {
|
|
44
|
+
nextStep: "Capture or refine the project brief before any design or validation lane starts.",
|
|
45
|
+
why: "The workflow still needs a concrete brief before architecture or build decisions can be trusted.",
|
|
46
|
+
primaryLane: "brief capture",
|
|
47
|
+
supportLane: "none",
|
|
48
|
+
assignments: ['Use `ma idea "..."` or provide the brief before running in-session skills.'],
|
|
49
|
+
avoid: ["Do not start architecture or implementation yet."],
|
|
50
|
+
nextTrigger: "`ma idea`",
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (releaseState.architecture_status !== "APPROVED") {
|
|
55
|
+
return {
|
|
56
|
+
nextStep: "Run the architecture lane first.",
|
|
57
|
+
why: "The brief exists, but the workflow still needs a concrete architecture before later gates can be trusted.",
|
|
58
|
+
primaryLane: "$arch",
|
|
59
|
+
supportLane: "$sage",
|
|
60
|
+
assignments: [
|
|
61
|
+
`Use $arch to shape the current brief${idea ? ` for: ${idea}` : ""}.`,
|
|
62
|
+
"After approval, move into $sage for source-backed stack validation.",
|
|
63
|
+
],
|
|
64
|
+
avoid: ["Do not jump to build or release work yet."],
|
|
65
|
+
nextTrigger: "`$arch`",
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (releaseState.evidence_status !== "VERIFIED") {
|
|
70
|
+
return {
|
|
71
|
+
nextStep: "Validate the architecture against approved sources.",
|
|
72
|
+
why: "The architecture exists, but the evidence gate is not yet fully verified.",
|
|
73
|
+
primaryLane: "$sage",
|
|
74
|
+
supportLane: "$flow",
|
|
75
|
+
assignments: [
|
|
76
|
+
"Run $sage using the current architecture as the probe basis.",
|
|
77
|
+
"Prepare to hand off to $flow after evidence is verified.",
|
|
78
|
+
],
|
|
79
|
+
avoid: ["Do not treat stack choices as settled yet."],
|
|
80
|
+
nextTrigger: "`$sage`",
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (releaseState.logic_status !== "GREEN") {
|
|
85
|
+
return {
|
|
86
|
+
nextStep: "Validate system behavior and state transitions.",
|
|
87
|
+
why: "Logic is the next unresolved gate before implementation readiness can be claimed.",
|
|
88
|
+
primaryLane: "$flow",
|
|
89
|
+
supportLane: "$vet",
|
|
90
|
+
assignments: [
|
|
91
|
+
"Run $flow to map actors, states, transitions, and blockers.",
|
|
92
|
+
"Queue $vet after the logic lane confirms behavior is sound.",
|
|
93
|
+
],
|
|
94
|
+
avoid: ["Do not merge or release yet."],
|
|
95
|
+
nextTrigger: "`$flow`",
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (releaseState.security_status !== "GREEN") {
|
|
100
|
+
return {
|
|
101
|
+
nextStep: "Run the security and trust-boundary review.",
|
|
102
|
+
why: "Security is the next unresolved gate before the workflow can unlock implementation readiness.",
|
|
103
|
+
primaryLane: "$vet",
|
|
104
|
+
supportLane: "$vibe",
|
|
105
|
+
assignments: [
|
|
106
|
+
"Run $vet to capture trust boundaries, abuse cases, and mitigations.",
|
|
107
|
+
"Move to $vibe once security is green.",
|
|
108
|
+
],
|
|
109
|
+
avoid: ["Do not unlock implementation readiness before security review."],
|
|
110
|
+
nextTrigger: "`$vet`",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (!["GREEN", "WAIVED"].includes(releaseState.experience_status)) {
|
|
115
|
+
return {
|
|
116
|
+
nextStep: "Review workflow clarity and friction before build unlock.",
|
|
117
|
+
why: "The experience lane is the final quality gate before the build decision.",
|
|
118
|
+
primaryLane: "$vibe",
|
|
119
|
+
supportLane: "$build",
|
|
120
|
+
assignments: [
|
|
121
|
+
"Run $vibe to capture onboarding and operability friction.",
|
|
122
|
+
"Move to $build only after experience is green or intentionally waived.",
|
|
123
|
+
],
|
|
124
|
+
avoid: ["Do not start release promotion yet."],
|
|
125
|
+
nextTrigger: "`$vibe`",
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (releaseState.build_status === "LOCKED") {
|
|
130
|
+
return {
|
|
131
|
+
nextStep: "Unlock bounded implementation planning.",
|
|
132
|
+
why: "All upstream quality gates are green, so the workflow can now evaluate build readiness.",
|
|
133
|
+
primaryLane: "$build",
|
|
134
|
+
supportLane: "implementation",
|
|
135
|
+
assignments: [
|
|
136
|
+
"Run $build to get the current build-readiness verdict.",
|
|
137
|
+
"Use the resulting narrow build slice as the next execution assignment.",
|
|
138
|
+
],
|
|
139
|
+
avoid: ["Do not release directly from a task branch."],
|
|
140
|
+
nextTrigger: "`$build`",
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (releaseState.merge_status !== "MERGED_TO_DEVELOPMENT") {
|
|
145
|
+
return {
|
|
146
|
+
nextStep: "Finish the implementation slice and merge it into development.",
|
|
147
|
+
why: "The build gate is ready or done, but the branch promotion path has not completed yet.",
|
|
148
|
+
primaryLane: "implementation",
|
|
149
|
+
supportLane: "merge",
|
|
150
|
+
assignments: [
|
|
151
|
+
"Use the current build plan to finish the smallest viable implementation slice.",
|
|
152
|
+
"When ready, merge feature work into development with `ma merge`.",
|
|
153
|
+
],
|
|
154
|
+
avoid: ["Do not promote directly to prod."],
|
|
155
|
+
nextTrigger: "`ma merge <feature/*> development`",
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (releaseState.release_status !== "SHIPPED_TO_PROD") {
|
|
160
|
+
return {
|
|
161
|
+
nextStep: "Promote the approved release line to prod.",
|
|
162
|
+
why: "Implementation and merge gates are complete, so the remaining step is the controlled release promotion.",
|
|
163
|
+
primaryLane: "release",
|
|
164
|
+
supportLane: "verification",
|
|
165
|
+
assignments: [
|
|
166
|
+
"Verify the origin branch is development or an approved release branch.",
|
|
167
|
+
"Run `ma release <origin> prod` when the line is ready.",
|
|
168
|
+
],
|
|
169
|
+
avoid: ["Do not reopen earlier gates unless a new blocker appears."],
|
|
170
|
+
nextTrigger: "`ma release <development|release/*> prod`",
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return {
|
|
175
|
+
nextStep: "The workflow is already at the terminal release state.",
|
|
176
|
+
why: "All gates, merge, and release states are complete.",
|
|
177
|
+
primaryLane: "done",
|
|
178
|
+
supportLane: "verification",
|
|
179
|
+
assignments: ["Confirm final release evidence and start a new brief for the next cycle."],
|
|
180
|
+
avoid: ["Do not rerun build or release steps without a new task."],
|
|
181
|
+
nextTrigger: "`ma idea` or `$arch` for the next task",
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
38
185
|
async function readIdeaText() {
|
|
39
186
|
const decisions = await readJson(getRuntimeReadPath("decisions.json"));
|
|
40
187
|
const ideaDecision = [...decisions.decisions].reverse().find((entry) => entry.kind === "idea");
|
|
@@ -262,6 +409,23 @@ export async function runVibe() {
|
|
|
262
409
|
await syncStatusUpdates({ experience_status: "GREEN" });
|
|
263
410
|
}
|
|
264
411
|
|
|
412
|
+
export async function runMaestro() {
|
|
413
|
+
const releaseState = await readJson(getRuntimeReadPath("release.json"));
|
|
414
|
+
const idea = await readIdeaText();
|
|
415
|
+
const recommendation = chooseMaestroRecommendation(releaseState, idea);
|
|
416
|
+
|
|
417
|
+
await writeMaestroPlan({ releaseState, recommendation });
|
|
418
|
+
await appendDecision({
|
|
419
|
+
kind: "skill",
|
|
420
|
+
skill: "$maestro",
|
|
421
|
+
decision: "Recommended the next workflow step and assignment lane",
|
|
422
|
+
status: "ADVISORY",
|
|
423
|
+
evidence: [recommendation],
|
|
424
|
+
blockers: [],
|
|
425
|
+
next_allowed_triggers: [recommendation.nextTrigger.replaceAll("`", "")],
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
|
|
265
429
|
export async function runInit() {
|
|
266
430
|
const created = [];
|
|
267
431
|
const targets = [
|
|
@@ -344,8 +508,8 @@ export async function runInit() {
|
|
|
344
508
|
path.join(getRepoRoot(), "docs", "release-spec.md"),
|
|
345
509
|
],
|
|
346
510
|
[
|
|
347
|
-
path.join(packageRoot, "docs", "qa", "release-readiness-0.1.
|
|
348
|
-
path.join(getRepoRoot(), "docs", "qa", "release-readiness-0.1.
|
|
511
|
+
path.join(packageRoot, "docs", "qa", "release-readiness-0.1.6.md"),
|
|
512
|
+
path.join(getRepoRoot(), "docs", "qa", "release-readiness-0.1.6.md"),
|
|
349
513
|
],
|
|
350
514
|
];
|
|
351
515
|
|