@jstn-sdk/ma 0.1.8 → 0.1.9

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 CHANGED
@@ -18,9 +18,9 @@
18
18
  </div>
19
19
 
20
20
  > [!IMPORTANT]
21
- > Meta-Architect `v0.1.8` is a production-grade skills line.
21
+ > Meta-Architect `v0.1.9` is a production-grade skills line.
22
22
  > It is not a lightweight demo branch.
23
- > From `v0.1.8` onward, the package is expected to ship with stable skill contracts, deterministic packaging, explicit release gates, and honest install and publish surfaces.
23
+ > From `v0.1.9` onward, the package is expected to ship with stable skill contracts, deterministic packaging, explicit release gates, and honest install and publish surfaces.
24
24
 
25
25
  ## Overview
26
26
 
@@ -57,7 +57,7 @@ It adds:
57
57
  </tr>
58
58
  <tr>
59
59
  <td><strong>Release line</strong></td>
60
- <td><code>v0.1.8</code></td>
60
+ <td><code>v0.1.9</code></td>
61
61
  </tr>
62
62
  <tr>
63
63
  <td><strong>License</strong></td>
@@ -230,7 +230,7 @@ Required output:
230
230
  5. Data model and storage choices
231
231
  6. Auth/security considerations
232
232
  7. DX/UX considerations
233
- 8. Delivery plan for v0.1.8
233
+ 8. Delivery plan for v0.1.9
234
234
  9. Risks and trade-offs
235
235
  10. Decision log
236
236
  11. Exact next trigger to run after this
@@ -257,6 +257,7 @@ If you are working from a repository directly and need scaffolded local support
257
257
 
258
258
  ```bash
259
259
  ma bootstrap
260
+ ma bootstrap --init-mcp
260
261
  ma doctor
261
262
  ma setup
262
263
  ma
@@ -264,6 +265,7 @@ ma
264
265
 
265
266
  Recommended lazy-user path:
266
267
  - run `ma bootstrap` first to repair packaged assets, scaffold local runtime files, and verify the environment
268
+ - add `--init-mcp` if you want starter GitMCP source files written into the local `mcp/` folder when it is empty or invalid
267
269
  - use `ma doctor` later when you want a check-only readiness report without changing files
268
270
 
269
271
  Expected output for `ma setup`:
@@ -418,6 +420,7 @@ What `ma bootstrap` does:
418
420
  - checks whether `codex` is callable
419
421
  - repairs installed skills and support-bundle assets when possible
420
422
  - runs local scaffold setup
423
+ - can seed starter MCP files with `--init-mcp` when the local MCP config is empty or invalid
421
424
  - reports `READY`, `READY_WITH_WARNINGS`, or `BLOCKED`
422
425
 
423
426
  What `ma doctor` does:
@@ -605,7 +608,7 @@ Release automation:
605
608
  | [Plugin README](./plugins/meta-architect/README.md) | plugin distribution surface |
606
609
  | [Collaborative Whiteboard Mission](./missions/collaborative-whiteboard/mission.md) | concrete scenario walkthrough |
607
610
  | [Release Spec](./docs/release-spec.md) | release and gate policy |
608
- | [Release Readiness](./docs/qa/release-readiness-0.1.8.md) | QA evidence for the `v0.1.8` line |
611
+ | [Release Readiness](./docs/qa/release-readiness-0.1.9.md) | QA evidence for the `v0.1.9` line |
609
612
 
610
613
  ## Release Hygiene
611
614
 
package/bin/ma.js CHANGED
@@ -37,7 +37,7 @@ import { syncStatusUpdates } from "../src/state-sync.js";
37
37
  function printUsage() {
38
38
  console.error("Secondary helper commands:");
39
39
  console.error(" ma");
40
- console.error(" ma bootstrap");
40
+ console.error(" ma bootstrap [--init-mcp]");
41
41
  console.error(" ma doctor");
42
42
  console.error(" ma setup");
43
43
  console.error(" ma init");
@@ -224,7 +224,7 @@ async function main() {
224
224
  }
225
225
 
226
226
  if (command === "bootstrap") {
227
- const outcome = await runBootstrap();
227
+ const outcome = await runBootstrap({ initMcp: rest.includes("--init-mcp") });
228
228
  process.exitCode = outcome.result === "BLOCKED" ? 1 : 0;
229
229
  return;
230
230
  }
package/docs/README.md CHANGED
@@ -17,7 +17,7 @@ Meta-Architect documentation is organized by operator task.
17
17
 
18
18
  ## QA and readiness
19
19
 
20
- - [Release Readiness 0.1.8](./qa/release-readiness-0.1.8.md)
20
+ - [Release Readiness 0.1.9](./qa/release-readiness-0.1.9.md)
21
21
 
22
22
  ## Repo structure references
23
23
 
@@ -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.8
77
+ 8. Delivery plan for v0.1.9
78
78
  9. Risks and trade-offs
79
79
  10. Decision log
80
80
  11. Exact next trigger to run after this
@@ -185,6 +185,7 @@ Easy rule:
185
185
  - it checks whether `codex` is callable
186
186
  - it repairs installed skills and support-bundle assets when possible
187
187
  - it runs local scaffold setup
188
+ - it can seed starter MCP files with `--init-mcp` when the local MCP config is empty or invalid
188
189
  - it reports `READY`, `READY_WITH_WARNINGS`, or `BLOCKED`
189
190
 
190
191
  `ma doctor` is the check-only path:
@@ -1,25 +1,25 @@
1
- # Release Readiness 0.1.8
1
+ # Release Readiness 0.1.9
2
2
 
3
3
  ## Production bar
4
4
 
5
- `v0.1.8` is treated as production only when:
5
+ `v0.1.9` 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.8`
9
+ - release docs, package metadata, and workflows all agree on `0.1.9`
10
10
 
11
11
  Target release state:
12
- - npm package: `@jstn-sdk/ma@0.1.8`
12
+ - npm package: `@jstn-sdk/ma@0.1.9`
13
13
  - npm registry state: pending publish
14
- - publishability note: `0.1.7` is already published, so `0.1.8` is the next publishable package line
15
- - git tag: `v0.1.8`
16
- - GitHub release: pending publish for `v0.1.8`
14
+ - publishability note: `0.1.8` is already published, so `0.1.9` is the next publishable package line
15
+ - git tag: `v0.1.9`
16
+ - GitHub release: pending publish for `v0.1.9`
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.8` / `v0.1.8`: PASS
22
+ - version/tag alignment `0.1.9` / `v0.1.9`: PASS
23
23
  - install/uninstall docs aligned: PASS
24
24
  - onboarding is concise and sequential: PASS
25
25
  - helper command documented as secondary: PASS
@@ -1,13 +1,13 @@
1
- # v0.1.8 Requirements & Rules
1
+ # v0.1.9 Requirements & Rules
2
2
 
3
3
  ## Production definition
4
4
 
5
- Meta-Architect `v0.1.8` is production only when:
5
+ Meta-Architect `v0.1.9` 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.8` must have
10
+ ## What `v0.1.9` 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.8`
53
- - git tag `v0.1.8`
52
+ - `package.json` version `0.1.9`
53
+ - git tag `v0.1.9`
54
54
  - `RELEASE.md`
55
55
  - `CHANGELOG.md`
56
- - `docs/qa/release-readiness-0.1.8.md`
56
+ - `docs/qa/release-readiness-0.1.9.md`
57
57
  - green `npm run release:check`
58
58
 
59
59
  ### 5. Dist-tag discipline
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jstn-sdk/ma",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "Codex-native skills system for architecture, evidence, review, and gated build guidance.",
5
5
  "license": "MIT",
6
6
  "author": "JustineDevs",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "meta-architect",
3
3
  "displayName": "Meta-Architect",
4
- "version": "0.1.8",
4
+ "version": "0.1.9",
5
5
  "description": "Programmatic architecture and verified engineering skills for Codex-native workflows.",
6
6
  "entry": "./README.md",
7
7
  "skillsDir": "./skills"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meta-architect",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "Skills-first workflow layer for Codex with architecture, evidence, review, and gated build guidance.",
5
5
  "author": {
6
6
  "name": "JustineDevs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meta-architect",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "collections": [
5
5
  "sindresorhus/awesome",
6
6
  "dzharii/awesome-typescript",
@@ -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.8`
108
+ - plugin scope is aligned to Meta-Architect `v0.1.9`
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.
package/src/bootstrap.js CHANGED
@@ -3,7 +3,7 @@ import fs from "node:fs/promises";
3
3
  import os from "node:os";
4
4
  import path from "node:path";
5
5
  import { loadMcpServers } from "./mcp-config.js";
6
- import { getRepoRoot, getRuntimeWritePath } from "./paths.js";
6
+ import { getRepoRoot, getRuntimeWritePath, packageRoot } from "./paths.js";
7
7
  import {
8
8
  areSkillsInstalled,
9
9
  ensureSkillsInstalled,
@@ -155,14 +155,33 @@ async function inspectLocalScaffold() {
155
155
  return true;
156
156
  }
157
157
 
158
- async function inspectMcpState() {
158
+ async function seedStarterMcpConfig() {
159
+ const files = ["servers.json", "collections.json", "fallback.json"];
160
+ for (const file of files) {
161
+ await fs.copyFile(path.join(packageRoot, "mcp", file), path.join(getRepoRoot(), "mcp", file));
162
+ }
163
+ }
164
+
165
+ async function inspectMcpState({ fix, initMcp }) {
159
166
  try {
160
167
  const servers = await loadMcpServers();
161
168
  if (servers.servers.length === 0) {
169
+ if (fix && initMcp) {
170
+ await seedStarterMcpConfig();
171
+ const seededServers = await loadMcpServers();
172
+ return makeStatus(
173
+ "FIXED",
174
+ "starter MCP sources were seeded into mcp/servers.json",
175
+ `${seededServers.servers.length} configured source(s)`,
176
+ );
177
+ }
178
+
162
179
  return makeStatus(
163
180
  "WARN",
164
181
  "mcp/servers.json exists but contains no approved repo-backed sources",
165
- "Add exact upstream GitMCP repo endpoints before claiming VERIFIED evidence.",
182
+ initMcp
183
+ ? "Run `ma bootstrap --init-mcp` to seed starter sources, or add exact upstream GitMCP repo endpoints manually."
184
+ : "Add exact upstream GitMCP repo endpoints before claiming VERIFIED evidence.",
166
185
  );
167
186
  }
168
187
 
@@ -172,11 +191,21 @@ async function inspectMcpState() {
172
191
  `${servers.servers.length} configured source(s)`,
173
192
  );
174
193
  } catch (error) {
194
+ if (fix && initMcp) {
195
+ await seedStarterMcpConfig();
196
+ const seededServers = await loadMcpServers();
197
+ return makeStatus(
198
+ "FIXED",
199
+ "starter MCP sources replaced an invalid MCP configuration",
200
+ `${seededServers.servers.length} configured source(s)`,
201
+ );
202
+ }
203
+
175
204
  return makeStatus("WARN", "mcp/servers.json is not ready for evidence binding", error.message);
176
205
  }
177
206
  }
178
207
 
179
- async function runEnvironmentFlow({ fix }) {
208
+ async function runEnvironmentFlow({ fix, initMcp }) {
180
209
  const statuses = [];
181
210
 
182
211
  const codexResolution = await inspectCodexResolution({ fix });
@@ -256,7 +285,7 @@ async function runEnvironmentFlow({ fix }) {
256
285
  );
257
286
  }
258
287
 
259
- statuses.push(await inspectMcpState());
288
+ statuses.push(await inspectMcpState({ fix, initMcp }));
260
289
  return statuses;
261
290
  }
262
291
 
@@ -297,15 +326,15 @@ function printStatuses(title, statuses) {
297
326
  }
298
327
 
299
328
  export async function runDoctor() {
300
- const statuses = await runEnvironmentFlow({ fix: false });
329
+ const statuses = await runEnvironmentFlow({ fix: false, initMcp: false });
301
330
  return {
302
331
  statuses,
303
332
  result: printStatuses("Meta-Architect Doctor", statuses),
304
333
  };
305
334
  }
306
335
 
307
- export async function runBootstrap() {
308
- const statuses = await runEnvironmentFlow({ fix: true });
336
+ export async function runBootstrap({ initMcp = false } = {}) {
337
+ const statuses = await runEnvironmentFlow({ fix: true, initMcp });
309
338
  return {
310
339
  statuses,
311
340
  result: printStatuses("Meta-Architect Bootstrap", statuses),
@@ -38,7 +38,7 @@ export class McpSseClient {
38
38
  capabilities: {},
39
39
  clientInfo: {
40
40
  name: "meta-architect",
41
- version: "0.1.8",
41
+ version: "0.1.9",
42
42
  },
43
43
  });
44
44
 
package/src/skills.js CHANGED
@@ -508,8 +508,8 @@ export async function runInit() {
508
508
  path.join(getRepoRoot(), "docs", "release-spec.md"),
509
509
  ],
510
510
  [
511
- path.join(packageRoot, "docs", "qa", "release-readiness-0.1.8.md"),
512
- path.join(getRepoRoot(), "docs", "qa", "release-readiness-0.1.8.md"),
511
+ path.join(packageRoot, "docs", "qa", "release-readiness-0.1.9.md"),
512
+ path.join(getRepoRoot(), "docs", "qa", "release-readiness-0.1.9.md"),
513
513
  ],
514
514
  ];
515
515