@davidahmann/mill 0.1.4
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/LICENSE +202 -0
- package/README.md +335 -0
- package/dist/audit/repository.d.ts +8 -0
- package/dist/audit/repository.d.ts.map +1 -0
- package/dist/audit/repository.js +232 -0
- package/dist/audit/repository.js.map +1 -0
- package/dist/cli-program.d.ts +12 -0
- package/dist/cli-program.d.ts.map +1 -0
- package/dist/cli-program.js +1020 -0
- package/dist/cli-program.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/lock.d.ts +12 -0
- package/dist/config/lock.d.ts.map +1 -0
- package/dist/config/lock.js +83 -0
- package/dist/config/lock.js.map +1 -0
- package/dist/contracts/canonical.d.ts +7 -0
- package/dist/contracts/canonical.d.ts.map +1 -0
- package/dist/contracts/canonical.js +30 -0
- package/dist/contracts/canonical.js.map +1 -0
- package/dist/contracts/schemas.d.ts +2705 -0
- package/dist/contracts/schemas.d.ts.map +1 -0
- package/dist/contracts/schemas.js +988 -0
- package/dist/contracts/schemas.js.map +1 -0
- package/dist/doctor.d.ts +21 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +138 -0
- package/dist/doctor.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +31 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/intake/prd.d.ts +14 -0
- package/dist/intake/prd.d.ts.map +1 -0
- package/dist/intake/prd.js +39 -0
- package/dist/intake/prd.js.map +1 -0
- package/dist/planning/impact.d.ts +59 -0
- package/dist/planning/impact.d.ts.map +1 -0
- package/dist/planning/impact.js +400 -0
- package/dist/planning/impact.js.map +1 -0
- package/dist/planning/specification.d.ts +42 -0
- package/dist/planning/specification.d.ts.map +1 -0
- package/dist/planning/specification.js +235 -0
- package/dist/planning/specification.js.map +1 -0
- package/dist/qualification/public-alpha.d.ts +16 -0
- package/dist/qualification/public-alpha.d.ts.map +1 -0
- package/dist/qualification/public-alpha.js +128 -0
- package/dist/qualification/public-alpha.js.map +1 -0
- package/dist/recipes/node-typescript-next-web.d.ts +19 -0
- package/dist/recipes/node-typescript-next-web.d.ts.map +1 -0
- package/dist/recipes/node-typescript-next-web.js +136 -0
- package/dist/recipes/node-typescript-next-web.js.map +1 -0
- package/dist/repository/integration.d.ts +58 -0
- package/dist/repository/integration.d.ts.map +1 -0
- package/dist/repository/integration.js +1385 -0
- package/dist/repository/integration.js.map +1 -0
- package/dist/repository/scan.d.ts +27 -0
- package/dist/repository/scan.d.ts.map +1 -0
- package/dist/repository/scan.js +388 -0
- package/dist/repository/scan.js.map +1 -0
- package/dist/result.d.ts +23 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +24 -0
- package/dist/result.js.map +1 -0
- package/dist/runtime/codex.d.ts +28 -0
- package/dist/runtime/codex.d.ts.map +1 -0
- package/dist/runtime/codex.js +439 -0
- package/dist/runtime/codex.js.map +1 -0
- package/dist/runtime/context.d.ts +10 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +151 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/delivery.d.ts +58 -0
- package/dist/runtime/delivery.d.ts.map +1 -0
- package/dist/runtime/delivery.js +1073 -0
- package/dist/runtime/delivery.js.map +1 -0
- package/dist/runtime/dependencies.d.ts +19 -0
- package/dist/runtime/dependencies.d.ts.map +1 -0
- package/dist/runtime/dependencies.js +495 -0
- package/dist/runtime/dependencies.js.map +1 -0
- package/dist/runtime/github.d.ts +112 -0
- package/dist/runtime/github.d.ts.map +1 -0
- package/dist/runtime/github.js +510 -0
- package/dist/runtime/github.js.map +1 -0
- package/dist/runtime/inputs.d.ts +24 -0
- package/dist/runtime/inputs.d.ts.map +1 -0
- package/dist/runtime/inputs.js +237 -0
- package/dist/runtime/inputs.js.map +1 -0
- package/dist/runtime/lease.d.ts +11 -0
- package/dist/runtime/lease.d.ts.map +1 -0
- package/dist/runtime/lease.js +52 -0
- package/dist/runtime/lease.js.map +1 -0
- package/dist/runtime/lifecycle.d.ts +87 -0
- package/dist/runtime/lifecycle.d.ts.map +1 -0
- package/dist/runtime/lifecycle.js +1024 -0
- package/dist/runtime/lifecycle.js.map +1 -0
- package/dist/runtime/process.d.ts +39 -0
- package/dist/runtime/process.d.ts.map +1 -0
- package/dist/runtime/process.js +304 -0
- package/dist/runtime/process.js.map +1 -0
- package/dist/runtime/repository.d.ts +36 -0
- package/dist/runtime/repository.d.ts.map +1 -0
- package/dist/runtime/repository.js +458 -0
- package/dist/runtime/repository.js.map +1 -0
- package/dist/runtime/state.d.ts +121 -0
- package/dist/runtime/state.d.ts.map +1 -0
- package/dist/runtime/state.js +1017 -0
- package/dist/runtime/state.js.map +1 -0
- package/dist/runtime/verifier.d.ts +31 -0
- package/dist/runtime/verifier.d.ts.map +1 -0
- package/dist/runtime/verifier.js +478 -0
- package/dist/runtime/verifier.js.map +1 -0
- package/dist/runtime/worker.d.ts +67 -0
- package/dist/runtime/worker.d.ts.map +1 -0
- package/dist/runtime/worker.js +34 -0
- package/dist/runtime/worker.js.map +1 -0
- package/dist/security/safe-path.d.ts +3 -0
- package/dist/security/safe-path.d.ts.map +1 -0
- package/dist/security/safe-path.js +102 -0
- package/dist/security/safe-path.js.map +1 -0
- package/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/dist/workflows/founder.d.ts +33 -0
- package/dist/workflows/founder.d.ts.map +1 -0
- package/dist/workflows/founder.js +422 -0
- package/dist/workflows/founder.js.map +1 -0
- package/package.json +79 -0
- package/recipes/node-typescript-next-web/.github/workflows/ci.yml +34 -0
- package/recipes/node-typescript-next-web/.node-version +1 -0
- package/recipes/node-typescript-next-web/.tool-versions +1 -0
- package/recipes/node-typescript-next-web/AGENTS.md +44 -0
- package/recipes/node-typescript-next-web/README.md +16 -0
- package/recipes/node-typescript-next-web/WORKFLOW.md +6 -0
- package/recipes/node-typescript-next-web/app/api/health/route.ts +5 -0
- package/recipes/node-typescript-next-web/app/layout.tsx +19 -0
- package/recipes/node-typescript-next-web/app/page.tsx +12 -0
- package/recipes/node-typescript-next-web/app/styles.css +21 -0
- package/recipes/node-typescript-next-web/docs/development.md +16 -0
- package/recipes/node-typescript-next-web/eslint.config.mjs +9 -0
- package/recipes/node-typescript-next-web/gitignore.template +5 -0
- package/recipes/node-typescript-next-web/next-env.d.ts +7 -0
- package/recipes/node-typescript-next-web/next.config.ts +11 -0
- package/recipes/node-typescript-next-web/package-lock.json +7540 -0
- package/recipes/node-typescript-next-web/package.json +39 -0
- package/recipes/node-typescript-next-web/playwright.config.ts +23 -0
- package/recipes/node-typescript-next-web/recipe.yaml +71 -0
- package/recipes/node-typescript-next-web/scripts/check-package.mjs +3 -0
- package/recipes/node-typescript-next-web/src/health.ts +3 -0
- package/recipes/node-typescript-next-web/test/browser/home.spec.ts +14 -0
- package/recipes/node-typescript-next-web/test/integration/health-route.test.ts +11 -0
- package/recipes/node-typescript-next-web/test/unit/health.test.ts +9 -0
- package/recipes/node-typescript-next-web/tsconfig.json +33 -0
- package/schemas/README.md +64 -0
- package/schemas/audit-report.schema.json +59 -0
- package/schemas/blueprint.schema.json +34 -0
- package/schemas/context-manifest.schema.json +88 -0
- package/schemas/delivery-record.schema.json +266 -0
- package/schemas/impact-manifest.schema.json +146 -0
- package/schemas/managed-repository.schema.json +36 -0
- package/schemas/mill-config.schema.json +212 -0
- package/schemas/mill-lock.schema.json +96 -0
- package/schemas/outcome-plan.schema.json +51 -0
- package/schemas/product-contract.schema.json +181 -0
- package/schemas/public-alpha-qualification.schema.json +391 -0
- package/schemas/recipe-manifest.schema.json +187 -0
- package/schemas/release-evidence.schema.json +170 -0
- package/schemas/repository-integration-plan.schema.json +156 -0
- package/schemas/review-result.schema.json +57 -0
- package/schemas/scenario-set.schema.json +84 -0
- package/schemas/source-manifest.schema.json +96 -0
- package/schemas/specification-proposal.schema.json +406 -0
- package/schemas/support-tuple.schema.json +107 -0
- package/schemas/task-packet.schema.json +395 -0
- package/schemas/validation-evidence.schema.json +125 -0
- package/schemas/worker-invocation.schema.json +119 -0
- package/schemas/worker-profile.schema.json +53 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mill-next-web-template",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=24.18.1 <25"
|
|
8
|
+
},
|
|
9
|
+
"packageManager": "npm@11.16.0",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"dev": "next dev",
|
|
12
|
+
"build": "next build",
|
|
13
|
+
"start": "next start",
|
|
14
|
+
"format:check": "prettier --check .",
|
|
15
|
+
"lint": "eslint . --max-warnings 0",
|
|
16
|
+
"typecheck": "tsc --noEmit",
|
|
17
|
+
"test:unit": "vitest run test/unit",
|
|
18
|
+
"test:integration": "vitest run test/integration",
|
|
19
|
+
"test:browser": "playwright test",
|
|
20
|
+
"test:package": "npm run build && node scripts/check-package.mjs",
|
|
21
|
+
"check": "npm run format:check && npm run lint && npm run typecheck && npm run test:unit && npm run test:integration && npm run test:browser && npm run test:package"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"next": "16.3.4",
|
|
25
|
+
"react": "19.2.8",
|
|
26
|
+
"react-dom": "19.2.8"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@playwright/test": "1.62.1",
|
|
30
|
+
"@types/node": "24.13.3",
|
|
31
|
+
"@types/react": "19.2.18",
|
|
32
|
+
"@types/react-dom": "19.2.5",
|
|
33
|
+
"eslint": "9.39.5",
|
|
34
|
+
"eslint-config-next": "16.3.4",
|
|
35
|
+
"prettier": "3.9.6",
|
|
36
|
+
"typescript": "6.0.3",
|
|
37
|
+
"vitest": "4.1.11"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineConfig, devices } from "@playwright/test";
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: "test/browser",
|
|
5
|
+
fullyParallel: false,
|
|
6
|
+
forbidOnly: true,
|
|
7
|
+
retries: 0,
|
|
8
|
+
workers: 1,
|
|
9
|
+
reporter: "line",
|
|
10
|
+
outputDir: ".mill-output/test-results",
|
|
11
|
+
use: {
|
|
12
|
+
baseURL: "http://127.0.0.1:3100",
|
|
13
|
+
trace: "retain-on-failure",
|
|
14
|
+
},
|
|
15
|
+
projects: [{ name: "chromium", use: devices["Desktop Chrome"] }],
|
|
16
|
+
webServer: {
|
|
17
|
+
command:
|
|
18
|
+
"npm run build && mkdir -p .next/standalone/.next && cp -R .next/static .next/standalone/.next/static && HOSTNAME=127.0.0.1 PORT=3100 node .next/standalone/server.js",
|
|
19
|
+
url: "http://127.0.0.1:3100/api/health",
|
|
20
|
+
reuseExistingServer: false,
|
|
21
|
+
timeout: 60_000,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
schemaVersion: "1"
|
|
2
|
+
id: node-typescript-next-web
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
status: supported
|
|
5
|
+
observedAt: "2026-09-02T14:15:00.000Z"
|
|
6
|
+
runtime:
|
|
7
|
+
node: 24.18.1
|
|
8
|
+
npm: 11.16.0
|
|
9
|
+
stack:
|
|
10
|
+
next: 16.3.4
|
|
11
|
+
react: 19.2.8
|
|
12
|
+
reactDom: 19.2.8
|
|
13
|
+
typescript: 6.0.3
|
|
14
|
+
eslint: 9.39.5
|
|
15
|
+
prettier: 3.9.6
|
|
16
|
+
vitest: 4.1.11
|
|
17
|
+
playwright: 1.62.1
|
|
18
|
+
verifierImage: mcr.microsoft.com/playwright:v1.62.1-noble@sha256:dcc5531e97840b9b5e794f2814476b21571c5124a3fca2267d73041f56e7580e
|
|
19
|
+
registry: https://registry.npmjs.org
|
|
20
|
+
licensePolicy:
|
|
21
|
+
allowed:
|
|
22
|
+
- 0BSD
|
|
23
|
+
- Apache-2.0
|
|
24
|
+
- BSD-2-Clause
|
|
25
|
+
- BSD-3-Clause
|
|
26
|
+
- BlueOak-1.0.0
|
|
27
|
+
- CC-BY-4.0
|
|
28
|
+
- CC0-1.0
|
|
29
|
+
- ISC
|
|
30
|
+
- LGPL-3.0-or-later
|
|
31
|
+
- MIT
|
|
32
|
+
- MPL-2.0
|
|
33
|
+
- Python-2.0
|
|
34
|
+
reviewedPackages:
|
|
35
|
+
- { name: next, license: MIT }
|
|
36
|
+
- { name: react, license: MIT }
|
|
37
|
+
- { name: react-dom, license: MIT }
|
|
38
|
+
- { name: "@playwright/test", license: Apache-2.0 }
|
|
39
|
+
commands:
|
|
40
|
+
required: [check]
|
|
41
|
+
native:
|
|
42
|
+
- format:check
|
|
43
|
+
- lint
|
|
44
|
+
- typecheck
|
|
45
|
+
- test:unit
|
|
46
|
+
- test:integration
|
|
47
|
+
- test:browser
|
|
48
|
+
- test:package
|
|
49
|
+
- check
|
|
50
|
+
oracles:
|
|
51
|
+
- id: web-title-and-health
|
|
52
|
+
commandId: test:browser
|
|
53
|
+
evidencePaths:
|
|
54
|
+
- app/page.tsx
|
|
55
|
+
- app/api/health/route.ts
|
|
56
|
+
- src/health.ts
|
|
57
|
+
- test/browser/home.spec.ts
|
|
58
|
+
proves:
|
|
59
|
+
- the approved product title renders on the delivered web surface
|
|
60
|
+
- the delivered health endpoint returns the stable healthy payload
|
|
61
|
+
writablePaths: [.mill-output, .next]
|
|
62
|
+
sources:
|
|
63
|
+
- https://nodejs.org/en/about/previous-releases
|
|
64
|
+
- https://nextjs.org/docs/app/getting-started/installation
|
|
65
|
+
- https://nextjs.org/docs/app/getting-started/deploying
|
|
66
|
+
- https://react.dev/versions
|
|
67
|
+
- https://registry.npmjs.org/next/16.3.4
|
|
68
|
+
- https://registry.npmjs.org/react/19.2.8
|
|
69
|
+
- https://registry.npmjs.org/react-dom/19.2.8
|
|
70
|
+
- https://registry.npmjs.org/@playwright/test/1.62.1
|
|
71
|
+
- https://mcr.microsoft.com/v2/playwright/manifests/v1.62.1-noble
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { expect, test } from "@playwright/test";
|
|
2
|
+
|
|
3
|
+
test("renders the approved product title and a healthy API", async ({
|
|
4
|
+
page,
|
|
5
|
+
request,
|
|
6
|
+
}) => {
|
|
7
|
+
await page.goto("/");
|
|
8
|
+
await expect(page.getByRole("heading", { level: 1 })).toHaveText(
|
|
9
|
+
__MILL_PRODUCT_TITLE_LITERAL__,
|
|
10
|
+
);
|
|
11
|
+
const response = await request.get("/api/health");
|
|
12
|
+
expect(response.ok()).toBe(true);
|
|
13
|
+
await expect(response.json()).resolves.toEqual({ status: "ok" });
|
|
14
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
|
|
3
|
+
import { GET } from "../../app/api/health/route";
|
|
4
|
+
|
|
5
|
+
describe("GET /api/health", () => {
|
|
6
|
+
it("returns the public health contract", async () => {
|
|
7
|
+
const response = GET();
|
|
8
|
+
expect(response.status).toBe(200);
|
|
9
|
+
await expect(response.json()).resolves.toEqual({ status: "ok" });
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["dom", "dom.iterable", "es2022"],
|
|
5
|
+
"allowJs": false,
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"module": "esnext",
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"jsx": "react-jsx",
|
|
15
|
+
"incremental": false,
|
|
16
|
+
"plugins": [
|
|
17
|
+
{
|
|
18
|
+
"name": "next"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"paths": {
|
|
22
|
+
"@/*": ["./*"]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"include": [
|
|
26
|
+
"next-env.d.ts",
|
|
27
|
+
"**/*.ts",
|
|
28
|
+
"**/*.tsx",
|
|
29
|
+
".next/types/**/*.ts",
|
|
30
|
+
".next/dev/types/**/*.ts"
|
|
31
|
+
],
|
|
32
|
+
"exclude": ["node_modules"]
|
|
33
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Mill contract schemas
|
|
2
|
+
|
|
3
|
+
These JSON Schema 2020-12 files define Mill's compact durable repository
|
|
4
|
+
contracts. Schema major `1` is fail-closed: unknown fields are rejected. YAML
|
|
5
|
+
documents use the same data model.
|
|
6
|
+
|
|
7
|
+
- `managed-repository.schema.json`
|
|
8
|
+
- `source-manifest.schema.json`
|
|
9
|
+
- `product-contract.schema.json`
|
|
10
|
+
- `specification-proposal.schema.json`
|
|
11
|
+
- `blueprint.schema.json`
|
|
12
|
+
- `scenario-set.schema.json`
|
|
13
|
+
- `outcome-plan.schema.json`
|
|
14
|
+
- `impact-manifest.schema.json`
|
|
15
|
+
- `mill-config.schema.json`
|
|
16
|
+
- `mill-lock.schema.json`
|
|
17
|
+
- `recipe-manifest.schema.json`
|
|
18
|
+
- `repository-integration-plan.schema.json`
|
|
19
|
+
- `task-packet.schema.json`
|
|
20
|
+
- `context-manifest.schema.json`
|
|
21
|
+
- `worker-profile.schema.json`
|
|
22
|
+
- `worker-invocation.schema.json`
|
|
23
|
+
- `validation-evidence.schema.json`
|
|
24
|
+
- `review-result.schema.json`
|
|
25
|
+
- `delivery-record.schema.json`
|
|
26
|
+
- `audit-report.schema.json`
|
|
27
|
+
- `support-tuple.schema.json`
|
|
28
|
+
- `public-alpha-qualification.schema.json`
|
|
29
|
+
- `release-evidence.schema.json`
|
|
30
|
+
|
|
31
|
+
Task packets are Git-owned approval contracts. Context manifests, validation
|
|
32
|
+
evidence, review results, and delivery records are schema-versioned operational
|
|
33
|
+
artifacts bound to an exact task/base/candidate and external-effect identity.
|
|
34
|
+
SQLite runs and events, credentials, prompts, raw model streams, and raw command
|
|
35
|
+
output are deliberately not repository contracts and are never accepted as
|
|
36
|
+
authority.
|
|
37
|
+
|
|
38
|
+
Task packet version `1` remains byte-stable for in-flight Wave 1-3 runs but
|
|
39
|
+
cannot start new work. Version `2` is the continuity contract: it requires an
|
|
40
|
+
approved impact manifest and explicit acceptance, invariant, scenario, coverage,
|
|
41
|
+
and evidence bindings. Every new run requires version `2`.
|
|
42
|
+
|
|
43
|
+
Recipe manifests bind the one supported generated stack, exact assets, and named
|
|
44
|
+
behavior-specific oracles. Approved scenarios must select a matching recipe
|
|
45
|
+
oracle before generated tasks can use its command evidence. Repository
|
|
46
|
+
integration plans bind greenfield or adoption target identity, approval,
|
|
47
|
+
generator version, file actions, recipe identity, and baseline posture.
|
|
48
|
+
`mill.lock` records the installed integration and ownership map. Verifier
|
|
49
|
+
dependency targets are currently the literal `node_modules`; writable paths are
|
|
50
|
+
comma-free top-level directories because they become explicit read-only or tmpfs
|
|
51
|
+
OCI mounts. Dependency configuration also binds the supported npm manager and
|
|
52
|
+
exact HTTPS registry origin; those fields participate in snapshot identity.
|
|
53
|
+
|
|
54
|
+
Audit reports bind nine bounded readiness categories to a clean exact candidate.
|
|
55
|
+
Support tuples bind the observed host, runtime, container, worker, forge, and
|
|
56
|
+
recipe and expire explicitly. Public-alpha qualification requires a continuous
|
|
57
|
+
accepted sequence of at least five changes, a rejected/recovered seeded fault,
|
|
58
|
+
complete canaries, and every audit category. Release evidence reconstructs the
|
|
59
|
+
reviewed/main/tag identity and the two-builder, selected-artifact,
|
|
60
|
+
qualification, SBOM, registry, and GitHub Release chain.
|
|
61
|
+
|
|
62
|
+
JSON Schemas are generated from the runtime Zod contracts in input mode. Run
|
|
63
|
+
`npm run schemas:generate` after an intentional contract change;
|
|
64
|
+
`npm run schemas:check` fails if committed JSON and runtime validation drift.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"schemaVersion": { "type": "string", "const": "1" },
|
|
6
|
+
"candidate": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"properties": {
|
|
9
|
+
"commit": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
|
|
10
|
+
"tree": { "type": "string", "pattern": "^[a-f0-9]{40}$" }
|
|
11
|
+
},
|
|
12
|
+
"required": ["commit", "tree"],
|
|
13
|
+
"additionalProperties": false
|
|
14
|
+
},
|
|
15
|
+
"generatedAt": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"format": "date-time",
|
|
18
|
+
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
|
|
19
|
+
},
|
|
20
|
+
"status": { "type": "string", "enum": ["passed", "blocked"] },
|
|
21
|
+
"checks": {
|
|
22
|
+
"minItems": 9,
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" },
|
|
28
|
+
"category": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"enum": [
|
|
31
|
+
"product",
|
|
32
|
+
"code",
|
|
33
|
+
"ux",
|
|
34
|
+
"accessibility",
|
|
35
|
+
"security",
|
|
36
|
+
"dependencies",
|
|
37
|
+
"architecture",
|
|
38
|
+
"operations",
|
|
39
|
+
"release"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"status": { "type": "string", "enum": ["passed", "blocked"] },
|
|
43
|
+
"summary": { "type": "string", "minLength": 1 },
|
|
44
|
+
"evidence": {
|
|
45
|
+
"minItems": 1,
|
|
46
|
+
"type": "array",
|
|
47
|
+
"items": { "type": "string", "minLength": 1 }
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"required": ["id", "category", "status", "summary", "evidence"],
|
|
51
|
+
"additionalProperties": false
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"required": ["schemaVersion", "candidate", "generatedAt", "status", "checks"],
|
|
56
|
+
"additionalProperties": false,
|
|
57
|
+
"$id": "https://github.com/davidahmann/mill/schemas/audit-report.schema.json",
|
|
58
|
+
"title": "AuditReport"
|
|
59
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"schemaVersion": { "type": "string", "const": "1" },
|
|
6
|
+
"id": { "type": "string", "minLength": 1 },
|
|
7
|
+
"productContractDigest": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"pattern": "^sha256:[a-f0-9]{64}$"
|
|
10
|
+
},
|
|
11
|
+
"recipe": { "type": "string", "minLength": 1 },
|
|
12
|
+
"recipeVersion": { "type": "string", "minLength": 1 },
|
|
13
|
+
"runtime": { "type": "string", "minLength": 1 },
|
|
14
|
+
"architecture": {
|
|
15
|
+
"minItems": 1,
|
|
16
|
+
"type": "array",
|
|
17
|
+
"items": { "type": "string", "minLength": 1 }
|
|
18
|
+
},
|
|
19
|
+
"risks": { "type": "array", "items": { "type": "string", "minLength": 1 } }
|
|
20
|
+
},
|
|
21
|
+
"required": [
|
|
22
|
+
"schemaVersion",
|
|
23
|
+
"id",
|
|
24
|
+
"productContractDigest",
|
|
25
|
+
"recipe",
|
|
26
|
+
"recipeVersion",
|
|
27
|
+
"runtime",
|
|
28
|
+
"architecture",
|
|
29
|
+
"risks"
|
|
30
|
+
],
|
|
31
|
+
"additionalProperties": false,
|
|
32
|
+
"$id": "https://github.com/davidahmann/mill/schemas/blueprint.schema.json",
|
|
33
|
+
"title": "Blueprint"
|
|
34
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"schemaVersion": { "type": "string", "const": "1" },
|
|
6
|
+
"taskDigest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
7
|
+
"baseCommit": { "type": "string", "pattern": "^[a-f0-9]{40}$" },
|
|
8
|
+
"provider": { "type": "string", "const": "openai" },
|
|
9
|
+
"adapter": { "type": "string", "const": "codex-cli" },
|
|
10
|
+
"authOwner": { "type": "string", "const": "operator" },
|
|
11
|
+
"isolation": { "type": "string", "const": "attended-trusted-host" },
|
|
12
|
+
"modelIdentity": { "type": "string", "const": "provider-mutable" },
|
|
13
|
+
"included": {
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"properties": {
|
|
18
|
+
"path": { "type": "string", "minLength": 1 },
|
|
19
|
+
"digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }
|
|
20
|
+
},
|
|
21
|
+
"required": ["path", "digest"],
|
|
22
|
+
"additionalProperties": false
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"excludedPatterns": {
|
|
26
|
+
"type": "array",
|
|
27
|
+
"items": { "type": "string", "minLength": 1 }
|
|
28
|
+
},
|
|
29
|
+
"disclosure": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": { "type": "string", "minLength": 1 }
|
|
32
|
+
},
|
|
33
|
+
"contextEpoch": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
34
|
+
"effectiveInstructions": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"path": { "type": "string", "minLength": 1 },
|
|
40
|
+
"digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }
|
|
41
|
+
},
|
|
42
|
+
"required": ["path", "digest"],
|
|
43
|
+
"additionalProperties": false
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"providerVisibleScope": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"properties": {
|
|
49
|
+
"repositoryScope": { "type": "string", "const": "worktree" },
|
|
50
|
+
"suppliedPaths": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"items": { "type": "string", "minLength": 1 }
|
|
53
|
+
},
|
|
54
|
+
"writablePatterns": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"pattern": "^(?!\\/)(?!.*(?:^|\\/)\\.\\.(?:\\/|$))[^*?[\\]\\\\]+(?:\\/\\*\\*)?$"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"observedReads": { "type": "string", "const": "unavailable" }
|
|
62
|
+
},
|
|
63
|
+
"required": [
|
|
64
|
+
"repositoryScope",
|
|
65
|
+
"suppliedPaths",
|
|
66
|
+
"writablePatterns",
|
|
67
|
+
"observedReads"
|
|
68
|
+
],
|
|
69
|
+
"additionalProperties": false
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"required": [
|
|
73
|
+
"schemaVersion",
|
|
74
|
+
"taskDigest",
|
|
75
|
+
"baseCommit",
|
|
76
|
+
"provider",
|
|
77
|
+
"adapter",
|
|
78
|
+
"authOwner",
|
|
79
|
+
"isolation",
|
|
80
|
+
"modelIdentity",
|
|
81
|
+
"included",
|
|
82
|
+
"excludedPatterns",
|
|
83
|
+
"disclosure"
|
|
84
|
+
],
|
|
85
|
+
"additionalProperties": false,
|
|
86
|
+
"$id": "https://github.com/davidahmann/mill/schemas/context-manifest.schema.json",
|
|
87
|
+
"title": "ContextManifest"
|
|
88
|
+
}
|