@jstn-sdk/ma 0.1.4 → 0.1.5
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/.codex/config.toml +2 -0
- package/.codex/hooks.json +1 -1
- package/.codex/prompts/enforcement.md +3 -3
- package/.codex/prompts/onboarding.md +14 -29
- package/README.md +129 -472
- package/bin/ma.js +103 -54
- package/docs/README.md +1 -2
- package/docs/getting-started.md +37 -402
- package/docs/mcp-setup.md +134 -3
- package/docs/onboarding.md +11 -41
- package/docs/qa/release-readiness-0.1.5.md +77 -0
- package/docs/release-spec.md +103 -81
- package/docs/skills-publishing.md +54 -187
- package/docs/skills.md +141 -78
- package/mcp/collections.json +1 -1
- package/mcp/fallback.json +1 -1
- package/mcp/servers.json +1 -1
- package/package.json +14 -17
- package/plugins/meta-architect/.app.json +1 -1
- package/plugins/meta-architect/.mcp.json +1 -1
- package/plugins/meta-architect/README.md +10 -23
- package/plugins/meta-architect/skills/meta-architect/SKILL.md +23 -17
- package/plugins/meta-architect/skills/meta-architect-arch/SKILL.md +24 -0
- package/plugins/meta-architect/skills/meta-architect-build/SKILL.md +25 -0
- package/plugins/meta-architect/skills/meta-architect-flow/SKILL.md +23 -0
- package/plugins/meta-architect/skills/meta-architect-sage/SKILL.md +23 -0
- package/plugins/meta-architect/skills/meta-architect-vet/SKILL.md +23 -0
- package/plugins/meta-architect/skills/meta-architect-vibe/SKILL.md +24 -0
- package/prompts/architect.md +216 -0
- package/prompts/builder.md +10 -0
- package/prompts/flow.md +9 -0
- package/prompts/release-manager.md +10 -0
- package/prompts/sage.md +10 -0
- package/prompts/security-reviewer.md +10 -0
- package/prompts/verifier.md +10 -0
- package/prompts/vibe.md +10 -0
- package/scripts/doctor.js +0 -8
- package/scripts/skills-install.js +36 -4
- package/scripts/skills-manifest.js +1 -1
- package/scripts/skills-validate.js +40 -78
- package/skills/index.json +22 -22
- package/skills/meta-architect/SKILL.md +23 -17
- package/skills/meta-architect/agents/openai.yaml +3 -3
- package/skills/meta-architect/references/core-release-rules.md +2 -2
- package/skills/meta-architect-arch/SKILL.md +24 -0
- package/skills/meta-architect-arch/agents/openai.yaml +4 -0
- package/skills/meta-architect-build/SKILL.md +25 -0
- package/skills/meta-architect-build/agents/openai.yaml +4 -0
- package/skills/meta-architect-flow/SKILL.md +23 -0
- package/skills/meta-architect-flow/agents/openai.yaml +4 -0
- package/skills/meta-architect-sage/SKILL.md +23 -0
- package/skills/meta-architect-sage/agents/openai.yaml +4 -0
- package/skills/meta-architect-vet/SKILL.md +23 -0
- package/skills/meta-architect-vet/agents/openai.yaml +4 -0
- package/skills/meta-architect-vibe/SKILL.md +24 -0
- package/skills/meta-architect-vibe/agents/openai.yaml +4 -0
- package/sprint/00-idea.md +1 -1
- package/sprint/01-architecture.md +1 -1
- package/sprint/02-oss-evidence.md +1 -1
- package/sprint/03-logic.md +1 -1
- package/sprint/04-security.md +2 -2
- package/sprint/05-dx-ux.md +1 -1
- package/src/decision-log.js +4 -4
- package/src/doctor.js +30 -0
- package/src/launcher.js +17 -21
- package/src/mcp-live-client.js +1 -1
- package/src/paths.js +32 -8
- package/src/release-state.js +3 -3
- package/src/setup.js +375 -0
- package/src/skills.js +166 -309
- package/templates/AGENTS.md +6 -6
- package/templates/model-instructions/core.md +1 -1
- package/.agents/plugins/marketplace.json +0 -20
- package/docs/assets/meta-architect-logo.png +0 -0
- package/docs/assets/meta-architect-logo.svg +0 -8
- package/docs/installed-sdk.md +0 -60
- package/docs/qa/release-readiness-0.1.4.md +0 -79
- package/plugins/meta-architect/.codex-plugin/plugin.json +0 -23
- package/plugins/meta-architect/skills/arch/SKILL.md +0 -27
- package/plugins/meta-architect/skills/arch/agents/openai.yaml +0 -4
- package/plugins/meta-architect/skills/build/SKILL.md +0 -24
- package/plugins/meta-architect/skills/build/agents/openai.yaml +0 -4
- package/plugins/meta-architect/skills/flow/SKILL.md +0 -24
- package/plugins/meta-architect/skills/flow/agents/openai.yaml +0 -4
- package/plugins/meta-architect/skills/meta-architect/agents/openai.yaml +0 -4
- package/plugins/meta-architect/skills/meta-architect/references/core-release-rules.md +0 -13
- package/plugins/meta-architect/skills/sage/SKILL.md +0 -24
- package/plugins/meta-architect/skills/sage/agents/openai.yaml +0 -4
- package/plugins/meta-architect/skills/vet/SKILL.md +0 -25
- package/plugins/meta-architect/skills/vet/agents/openai.yaml +0 -4
- package/plugins/meta-architect/skills/vibe/SKILL.md +0 -24
- package/plugins/meta-architect/skills/vibe/agents/openai.yaml +0 -4
- package/scripts/plugin-sync.js +0 -92
- package/scripts/postinstall.js +0 -23
- package/scripts/release-metadata.js +0 -94
- package/scripts/release-sync.js +0 -359
- package/scripts/release-verify.js +0 -153
- package/scripts/setup-npmrc.js +0 -39
- package/skills/arch/SKILL.md +0 -27
- package/skills/arch/agents/openai.yaml +0 -4
- package/skills/build/SKILL.md +0 -24
- package/skills/build/agents/openai.yaml +0 -4
- package/skills/flow/SKILL.md +0 -24
- package/skills/flow/agents/openai.yaml +0 -4
- package/skills/sage/SKILL.md +0 -24
- package/skills/sage/agents/openai.yaml +0 -4
- package/skills/vet/SKILL.md +0 -25
- package/skills/vet/agents/openai.yaml +0 -4
- package/skills/vibe/SKILL.md +0 -24
- package/skills/vibe/agents/openai.yaml +0 -4
- package/src/runtime-artifacts.js +0 -363
- package/src/skill-installer.js +0 -198
package/src/setup.js
ADDED
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ensureDir, writeFileIfMissing, writeJson } from "./fs-utils.js";
|
|
4
|
+
import { getPackageRoot, getRepoRoot } from "./paths.js";
|
|
5
|
+
|
|
6
|
+
const agentFiles = [
|
|
7
|
+
{
|
|
8
|
+
fileName: "architect.toml",
|
|
9
|
+
packageRelativePath: ".codex/agents/architect.toml",
|
|
10
|
+
fallbackContent:
|
|
11
|
+
'name = "Architect"\nrole = "architecture-design"\ntrigger = "$arch"\ndescription = "Produces blueprint architecture, stack rationale, tradeoffs, and subsystem design."\n',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
fileName: "sage.toml",
|
|
15
|
+
packageRelativePath: ".codex/agents/sage.toml",
|
|
16
|
+
fallbackContent:
|
|
17
|
+
'name = "Sage"\nrole = "evidence-binding"\ntrigger = "$sage"\ndescription = "Maps recommendations to approved OSS evidence via MCP and GitMCP sources."\n',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
fileName: "auditor.toml",
|
|
21
|
+
packageRelativePath: ".codex/agents/auditor.toml",
|
|
22
|
+
fallbackContent:
|
|
23
|
+
'name = "Auditor"\nrole = "security-review"\ntrigger = "$vet"\ndescription = "Reviews security posture, dependency risk, and release-sensitive findings."\n',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
fileName: "flow.toml",
|
|
27
|
+
packageRelativePath: ".codex/agents/flow.toml",
|
|
28
|
+
fallbackContent:
|
|
29
|
+
'name = "Flow"\nrole = "logic-validation"\ntrigger = "$flow"\ndescription = "Validates state transitions, blockers, and business-logic flow."\n',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
fileName: "vibe.toml",
|
|
33
|
+
packageRelativePath: ".codex/agents/vibe.toml",
|
|
34
|
+
fallbackContent:
|
|
35
|
+
'name = "Vibe"\nrole = "experience-review"\ntrigger = "$vibe"\ndescription = "Reviews developer and user experience implications before build execution."\n',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
fileName: "builder.toml",
|
|
39
|
+
packageRelativePath: ".codex/agents/builder.toml",
|
|
40
|
+
fallbackContent:
|
|
41
|
+
'name = "Builder"\nrole = "build-planning"\ntrigger = "$build"\ndescription = "Plans bounded implementation work once all required gates are green."\n',
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
const codexPromptFiles = [
|
|
46
|
+
{
|
|
47
|
+
targetRelativePath: ".codex/prompts/enforcement.md",
|
|
48
|
+
packageRelativePath: ".codex/prompts/enforcement.md",
|
|
49
|
+
fallbackContent:
|
|
50
|
+
"# Meta-Architect enforcement\n\nUse the local release-state and evidence files as the source of truth for gating decisions.\n",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
targetRelativePath: ".codex/prompts/release-rules.md",
|
|
54
|
+
packageRelativePath: ".codex/prompts/release-rules.md",
|
|
55
|
+
fallbackContent:
|
|
56
|
+
"# Release rules\n\nDo not unlock build, merge, or release flows unless the required gate statuses are satisfied.\n",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
targetRelativePath: ".codex/prompts/skill-contract.md",
|
|
60
|
+
packageRelativePath: ".codex/prompts/skill-contract.md",
|
|
61
|
+
fallbackContent:
|
|
62
|
+
"# Skill contract\n\nKeep Meta-Architect skills explicit, deterministic, and evidence-backed.\n",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
targetRelativePath: ".codex/prompts/onboarding.md",
|
|
66
|
+
packageRelativePath: ".codex/prompts/onboarding.md",
|
|
67
|
+
fallbackContent:
|
|
68
|
+
"# Onboarding\n\nInstall `@openai/codex` and `meta-architect`, launch `ma --madmax --high`, and operate through `$arch`, `$sage`, `$flow`, `$vet`, `$vibe`, and `$build`. Use `ma setup` only when repo-local support files are missing.\n",
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
const templateFiles = [
|
|
73
|
+
{
|
|
74
|
+
targetRelativePath: "AGENTS.md",
|
|
75
|
+
packageRelativePath: "templates/AGENTS.md",
|
|
76
|
+
fallbackContent:
|
|
77
|
+
"# Meta-Architect Project Contract\n\nCodex is the host interface. Use the local Meta-Architect workflow and repository files as the source of truth for setup, evidence, and release gates.\n",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
targetRelativePath: "templates/AGENTS.md",
|
|
81
|
+
packageRelativePath: "templates/AGENTS.md",
|
|
82
|
+
fallbackContent:
|
|
83
|
+
"# Meta-Architect Project Contract\n\nCodex is the host interface. Use the local Meta-Architect workflow and repository files as the source of truth for setup, evidence, and release gates.\n",
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
targetRelativePath: "templates/catalog-manifest.json",
|
|
87
|
+
packageRelativePath: "templates/catalog-manifest.json",
|
|
88
|
+
fallbackContent: `${JSON.stringify({ schemaVersion: "1.0.0", entries: [] }, null, 2)}\n`,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
targetRelativePath: "templates/model-instructions/core.md",
|
|
92
|
+
packageRelativePath: "templates/model-instructions/core.md",
|
|
93
|
+
fallbackContent:
|
|
94
|
+
"# Core model instructions\n\nCodex is the host. Meta-Architect provides the repo-local workflow layer and gate model.\n",
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
targetRelativePath: "templates/model-instructions/release.md",
|
|
98
|
+
packageRelativePath: "templates/model-instructions/release.md",
|
|
99
|
+
fallbackContent:
|
|
100
|
+
"# Release model instructions\n\nTreat release claims as true only after tags, GitHub releases, and npm publishes succeed.\n",
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
targetRelativePath: "templates/model-instructions/security.md",
|
|
104
|
+
packageRelativePath: "templates/model-instructions/security.md",
|
|
105
|
+
fallbackContent:
|
|
106
|
+
"# Security model instructions\n\nDo not approve builds or releases when unresolved critical security findings remain.\n",
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
|
|
110
|
+
const optionalDocFiles = [
|
|
111
|
+
"docs/README.md",
|
|
112
|
+
"docs/getting-started.md",
|
|
113
|
+
"docs/skills.md",
|
|
114
|
+
"docs/mcp-setup.md",
|
|
115
|
+
"docs/release-spec.md",
|
|
116
|
+
"docs/qa/release-readiness-0.1.5.md",
|
|
117
|
+
"docs/onboarding.md",
|
|
118
|
+
];
|
|
119
|
+
|
|
120
|
+
const sprintFiles = [
|
|
121
|
+
"sprint/00-idea.md",
|
|
122
|
+
"sprint/01-architecture.md",
|
|
123
|
+
"sprint/02-oss-evidence.md",
|
|
124
|
+
"sprint/03-logic.md",
|
|
125
|
+
"sprint/04-security.md",
|
|
126
|
+
"sprint/05-dx-ux.md",
|
|
127
|
+
"sprint/06-build-plan.md",
|
|
128
|
+
"sprint/07-release.md",
|
|
129
|
+
];
|
|
130
|
+
|
|
131
|
+
const mcpFiles = [
|
|
132
|
+
{
|
|
133
|
+
targetRelativePath: "mcp/servers.json",
|
|
134
|
+
packageRelativePath: "mcp/servers.json",
|
|
135
|
+
fallbackContent: `${JSON.stringify({ schemaVersion: "1.0.0", servers: [] }, null, 2)}\n`,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
targetRelativePath: "mcp/collections.json",
|
|
139
|
+
packageRelativePath: "mcp/collections.json",
|
|
140
|
+
fallbackContent: `${JSON.stringify({ schemaVersion: "1.0.0", collections: {} }, null, 2)}\n`,
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
targetRelativePath: "mcp/fallback.json",
|
|
144
|
+
packageRelativePath: "mcp/fallback.json",
|
|
145
|
+
fallbackContent: `${JSON.stringify(
|
|
146
|
+
{
|
|
147
|
+
schemaVersion: "1.0.0",
|
|
148
|
+
fallback: {
|
|
149
|
+
endpoint: "https://gitmcp.io/docs",
|
|
150
|
+
policy: "Use only when no approved exact endpoint exists.",
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
null,
|
|
154
|
+
2,
|
|
155
|
+
)}\n`,
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
|
|
159
|
+
const hookFallback = `${JSON.stringify(
|
|
160
|
+
{
|
|
161
|
+
version: 1,
|
|
162
|
+
hooks: [
|
|
163
|
+
{
|
|
164
|
+
event: "prebuild",
|
|
165
|
+
action: "deny-unless-gates-green",
|
|
166
|
+
source: ".omx/decisions.json",
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
event: "prerelease",
|
|
170
|
+
action: "deny-unless-release-origin-valid",
|
|
171
|
+
allowedOrigins: ["development", "release/*"],
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
null,
|
|
176
|
+
2,
|
|
177
|
+
)}\n`;
|
|
178
|
+
|
|
179
|
+
const codexConfigFallback =
|
|
180
|
+
"# Meta-Architect local Codex configuration\n# Codex is the host interface. Add per-project overrides here only when required.\n";
|
|
181
|
+
|
|
182
|
+
const omxSkillTemplates = {
|
|
183
|
+
"arch.skill.md":
|
|
184
|
+
"# `$arch`\n\nProduces blueprint architecture, stack rationale, subsystem design, and tradeoffs.\n",
|
|
185
|
+
"sage.skill.md":
|
|
186
|
+
"# `$sage`\n\nMaps architectural choices to approved OSS candidates from GitMCP-backed collections.\n",
|
|
187
|
+
"vet.skill.md": "# `$vet`\n\nAudits security posture, CVE signals, and safer alternatives.\n",
|
|
188
|
+
"flow.skill.md": "# `$flow`\n\nValidates logic, state transitions, and unresolved blockers.\n",
|
|
189
|
+
"vibe.skill.md":
|
|
190
|
+
"# `$vibe`\n\nReviews developer and user experience risks before build execution.\n",
|
|
191
|
+
"build.skill.md": "# `$build`\n\nChecks gates and plans bounded build execution.\n",
|
|
192
|
+
"sync.skill.md":
|
|
193
|
+
"# `$sync`\n\nReserved for refreshing mapped MCP sources and availability records.\n",
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
async function tryReadPackageAsset(relativePath) {
|
|
197
|
+
try {
|
|
198
|
+
return await fs.readFile(path.join(getPackageRoot(), relativePath), "utf8");
|
|
199
|
+
} catch {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
async function materializeTextFile(targetRelativePath, options, warnings) {
|
|
205
|
+
const targetPath = path.join(getRepoRoot(), targetRelativePath);
|
|
206
|
+
|
|
207
|
+
try {
|
|
208
|
+
await fs.access(targetPath);
|
|
209
|
+
return;
|
|
210
|
+
} catch {
|
|
211
|
+
// Continue and create the file below.
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const bundledContent = options.packageRelativePath
|
|
215
|
+
? await tryReadPackageAsset(options.packageRelativePath)
|
|
216
|
+
: null;
|
|
217
|
+
const nextContent = bundledContent ?? options.fallbackContent ?? null;
|
|
218
|
+
|
|
219
|
+
if (nextContent === null) {
|
|
220
|
+
if (options.optional) {
|
|
221
|
+
warnings.push(`Skipped optional scaffold asset: ${targetRelativePath}`);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
throw new Error(`Missing required scaffold asset: ${targetRelativePath}`);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
await writeFileIfMissing(targetPath, nextContent);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
async function materializeJsonFile(targetRelativePath, value) {
|
|
232
|
+
const targetPath = path.join(getRepoRoot(), targetRelativePath);
|
|
233
|
+
|
|
234
|
+
try {
|
|
235
|
+
await fs.access(targetPath);
|
|
236
|
+
return;
|
|
237
|
+
} catch {
|
|
238
|
+
// Continue and create the file below.
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
await writeJson(targetPath, value);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export async function runSetupScaffold() {
|
|
245
|
+
const created = [
|
|
246
|
+
"AGENTS.md",
|
|
247
|
+
".codex/agents",
|
|
248
|
+
".codex/prompts",
|
|
249
|
+
".omx/skills",
|
|
250
|
+
".omx/evidence",
|
|
251
|
+
"mcp",
|
|
252
|
+
"templates",
|
|
253
|
+
"docs",
|
|
254
|
+
"docs/qa",
|
|
255
|
+
"sprint",
|
|
256
|
+
];
|
|
257
|
+
const warnings = [];
|
|
258
|
+
|
|
259
|
+
for (const relative of created.filter((item) => item !== "AGENTS.md")) {
|
|
260
|
+
await ensureDir(path.join(getRepoRoot(), relative));
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
await materializeTextFile("AGENTS.md", templateFiles[0], warnings);
|
|
264
|
+
await materializeTextFile(
|
|
265
|
+
".codex/config.toml",
|
|
266
|
+
{ fallbackContent: codexConfigFallback },
|
|
267
|
+
warnings,
|
|
268
|
+
);
|
|
269
|
+
await materializeTextFile(
|
|
270
|
+
".codex/hooks.json",
|
|
271
|
+
{ packageRelativePath: ".codex/hooks.json", fallbackContent: hookFallback },
|
|
272
|
+
warnings,
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
for (const asset of agentFiles) {
|
|
276
|
+
await materializeTextFile(
|
|
277
|
+
path.join(".codex/agents", asset.fileName),
|
|
278
|
+
{
|
|
279
|
+
packageRelativePath: asset.packageRelativePath,
|
|
280
|
+
fallbackContent: asset.fallbackContent,
|
|
281
|
+
},
|
|
282
|
+
warnings,
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
for (const asset of codexPromptFiles) {
|
|
287
|
+
await materializeTextFile(asset.targetRelativePath, asset, warnings);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
for (const asset of templateFiles.slice(1)) {
|
|
291
|
+
await materializeTextFile(asset.targetRelativePath, asset, warnings);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
for (const asset of mcpFiles) {
|
|
295
|
+
await materializeTextFile(asset.targetRelativePath, asset, warnings);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
for (const relativePath of optionalDocFiles) {
|
|
299
|
+
await materializeTextFile(
|
|
300
|
+
relativePath,
|
|
301
|
+
{
|
|
302
|
+
packageRelativePath: relativePath,
|
|
303
|
+
optional: true,
|
|
304
|
+
},
|
|
305
|
+
warnings,
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
for (const relativePath of sprintFiles) {
|
|
310
|
+
await materializeTextFile(
|
|
311
|
+
relativePath,
|
|
312
|
+
{
|
|
313
|
+
packageRelativePath: relativePath,
|
|
314
|
+
optional: true,
|
|
315
|
+
},
|
|
316
|
+
warnings,
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
for (const [fileName, content] of Object.entries(omxSkillTemplates)) {
|
|
321
|
+
await materializeTextFile(
|
|
322
|
+
path.join(".omx/skills", fileName),
|
|
323
|
+
{ fallbackContent: content },
|
|
324
|
+
warnings,
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
await materializeJsonFile(".omx/decisions.json", {
|
|
329
|
+
schemaVersion: "1.0.0",
|
|
330
|
+
idea_status: "DRAFT",
|
|
331
|
+
architecture_status: "DRAFT",
|
|
332
|
+
evidence_status: "MISSING",
|
|
333
|
+
logic_status: "PENDING",
|
|
334
|
+
security_status: "PENDING",
|
|
335
|
+
experience_status: "PENDING",
|
|
336
|
+
build_status: "LOCKED",
|
|
337
|
+
merge_status: "LOCKED",
|
|
338
|
+
release_status: "LOCKED",
|
|
339
|
+
decisions: [],
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
await materializeJsonFile(".omx/release.json", {
|
|
343
|
+
schemaVersion: "1.0.0",
|
|
344
|
+
idea_status: "DRAFT",
|
|
345
|
+
architecture_status: "DRAFT",
|
|
346
|
+
evidence_status: "MISSING",
|
|
347
|
+
logic_status: "PENDING",
|
|
348
|
+
security_status: "PENDING",
|
|
349
|
+
experience_status: "PENDING",
|
|
350
|
+
build_status: "LOCKED",
|
|
351
|
+
merge_status: "LOCKED",
|
|
352
|
+
release_status: "LOCKED",
|
|
353
|
+
waiver: null,
|
|
354
|
+
updatedAt: new Date().toISOString(),
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
await materializeJsonFile(".omx/evidence/sources.json", {
|
|
358
|
+
schemaVersion: "1.0.0",
|
|
359
|
+
items: [],
|
|
360
|
+
});
|
|
361
|
+
await materializeJsonFile(".omx/evidence/audits.json", {
|
|
362
|
+
schemaVersion: "1.0.0",
|
|
363
|
+
items: [],
|
|
364
|
+
});
|
|
365
|
+
await materializeJsonFile(".omx/evidence/outcomes.json", {
|
|
366
|
+
schemaVersion: "1.0.0",
|
|
367
|
+
items: [],
|
|
368
|
+
});
|
|
369
|
+
await materializeJsonFile(".omx/evidence/cves.json", {
|
|
370
|
+
schemaVersion: "1.0.0",
|
|
371
|
+
items: [],
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
return { created, warnings };
|
|
375
|
+
}
|