@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.
Files changed (184) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +335 -0
  3. package/dist/audit/repository.d.ts +8 -0
  4. package/dist/audit/repository.d.ts.map +1 -0
  5. package/dist/audit/repository.js +232 -0
  6. package/dist/audit/repository.js.map +1 -0
  7. package/dist/cli-program.d.ts +12 -0
  8. package/dist/cli-program.d.ts.map +1 -0
  9. package/dist/cli-program.js +1020 -0
  10. package/dist/cli-program.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +7 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config/lock.d.ts +12 -0
  16. package/dist/config/lock.d.ts.map +1 -0
  17. package/dist/config/lock.js +83 -0
  18. package/dist/config/lock.js.map +1 -0
  19. package/dist/contracts/canonical.d.ts +7 -0
  20. package/dist/contracts/canonical.d.ts.map +1 -0
  21. package/dist/contracts/canonical.js +30 -0
  22. package/dist/contracts/canonical.js.map +1 -0
  23. package/dist/contracts/schemas.d.ts +2705 -0
  24. package/dist/contracts/schemas.d.ts.map +1 -0
  25. package/dist/contracts/schemas.js +988 -0
  26. package/dist/contracts/schemas.js.map +1 -0
  27. package/dist/doctor.d.ts +21 -0
  28. package/dist/doctor.d.ts.map +1 -0
  29. package/dist/doctor.js +138 -0
  30. package/dist/doctor.js.map +1 -0
  31. package/dist/errors.d.ts +18 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +31 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/index.d.ts +20 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +20 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/intake/prd.d.ts +14 -0
  40. package/dist/intake/prd.d.ts.map +1 -0
  41. package/dist/intake/prd.js +39 -0
  42. package/dist/intake/prd.js.map +1 -0
  43. package/dist/planning/impact.d.ts +59 -0
  44. package/dist/planning/impact.d.ts.map +1 -0
  45. package/dist/planning/impact.js +400 -0
  46. package/dist/planning/impact.js.map +1 -0
  47. package/dist/planning/specification.d.ts +42 -0
  48. package/dist/planning/specification.d.ts.map +1 -0
  49. package/dist/planning/specification.js +235 -0
  50. package/dist/planning/specification.js.map +1 -0
  51. package/dist/qualification/public-alpha.d.ts +16 -0
  52. package/dist/qualification/public-alpha.d.ts.map +1 -0
  53. package/dist/qualification/public-alpha.js +128 -0
  54. package/dist/qualification/public-alpha.js.map +1 -0
  55. package/dist/recipes/node-typescript-next-web.d.ts +19 -0
  56. package/dist/recipes/node-typescript-next-web.d.ts.map +1 -0
  57. package/dist/recipes/node-typescript-next-web.js +136 -0
  58. package/dist/recipes/node-typescript-next-web.js.map +1 -0
  59. package/dist/repository/integration.d.ts +58 -0
  60. package/dist/repository/integration.d.ts.map +1 -0
  61. package/dist/repository/integration.js +1385 -0
  62. package/dist/repository/integration.js.map +1 -0
  63. package/dist/repository/scan.d.ts +27 -0
  64. package/dist/repository/scan.d.ts.map +1 -0
  65. package/dist/repository/scan.js +388 -0
  66. package/dist/repository/scan.js.map +1 -0
  67. package/dist/result.d.ts +23 -0
  68. package/dist/result.d.ts.map +1 -0
  69. package/dist/result.js +24 -0
  70. package/dist/result.js.map +1 -0
  71. package/dist/runtime/codex.d.ts +28 -0
  72. package/dist/runtime/codex.d.ts.map +1 -0
  73. package/dist/runtime/codex.js +439 -0
  74. package/dist/runtime/codex.js.map +1 -0
  75. package/dist/runtime/context.d.ts +10 -0
  76. package/dist/runtime/context.d.ts.map +1 -0
  77. package/dist/runtime/context.js +151 -0
  78. package/dist/runtime/context.js.map +1 -0
  79. package/dist/runtime/delivery.d.ts +58 -0
  80. package/dist/runtime/delivery.d.ts.map +1 -0
  81. package/dist/runtime/delivery.js +1073 -0
  82. package/dist/runtime/delivery.js.map +1 -0
  83. package/dist/runtime/dependencies.d.ts +19 -0
  84. package/dist/runtime/dependencies.d.ts.map +1 -0
  85. package/dist/runtime/dependencies.js +495 -0
  86. package/dist/runtime/dependencies.js.map +1 -0
  87. package/dist/runtime/github.d.ts +112 -0
  88. package/dist/runtime/github.d.ts.map +1 -0
  89. package/dist/runtime/github.js +510 -0
  90. package/dist/runtime/github.js.map +1 -0
  91. package/dist/runtime/inputs.d.ts +24 -0
  92. package/dist/runtime/inputs.d.ts.map +1 -0
  93. package/dist/runtime/inputs.js +237 -0
  94. package/dist/runtime/inputs.js.map +1 -0
  95. package/dist/runtime/lease.d.ts +11 -0
  96. package/dist/runtime/lease.d.ts.map +1 -0
  97. package/dist/runtime/lease.js +52 -0
  98. package/dist/runtime/lease.js.map +1 -0
  99. package/dist/runtime/lifecycle.d.ts +87 -0
  100. package/dist/runtime/lifecycle.d.ts.map +1 -0
  101. package/dist/runtime/lifecycle.js +1024 -0
  102. package/dist/runtime/lifecycle.js.map +1 -0
  103. package/dist/runtime/process.d.ts +39 -0
  104. package/dist/runtime/process.d.ts.map +1 -0
  105. package/dist/runtime/process.js +304 -0
  106. package/dist/runtime/process.js.map +1 -0
  107. package/dist/runtime/repository.d.ts +36 -0
  108. package/dist/runtime/repository.d.ts.map +1 -0
  109. package/dist/runtime/repository.js +458 -0
  110. package/dist/runtime/repository.js.map +1 -0
  111. package/dist/runtime/state.d.ts +121 -0
  112. package/dist/runtime/state.d.ts.map +1 -0
  113. package/dist/runtime/state.js +1017 -0
  114. package/dist/runtime/state.js.map +1 -0
  115. package/dist/runtime/verifier.d.ts +31 -0
  116. package/dist/runtime/verifier.d.ts.map +1 -0
  117. package/dist/runtime/verifier.js +478 -0
  118. package/dist/runtime/verifier.js.map +1 -0
  119. package/dist/runtime/worker.d.ts +67 -0
  120. package/dist/runtime/worker.d.ts.map +1 -0
  121. package/dist/runtime/worker.js +34 -0
  122. package/dist/runtime/worker.js.map +1 -0
  123. package/dist/security/safe-path.d.ts +3 -0
  124. package/dist/security/safe-path.d.ts.map +1 -0
  125. package/dist/security/safe-path.js +102 -0
  126. package/dist/security/safe-path.js.map +1 -0
  127. package/dist/version.d.ts +4 -0
  128. package/dist/version.d.ts.map +1 -0
  129. package/dist/version.js +4 -0
  130. package/dist/version.js.map +1 -0
  131. package/dist/workflows/founder.d.ts +33 -0
  132. package/dist/workflows/founder.d.ts.map +1 -0
  133. package/dist/workflows/founder.js +422 -0
  134. package/dist/workflows/founder.js.map +1 -0
  135. package/package.json +79 -0
  136. package/recipes/node-typescript-next-web/.github/workflows/ci.yml +34 -0
  137. package/recipes/node-typescript-next-web/.node-version +1 -0
  138. package/recipes/node-typescript-next-web/.tool-versions +1 -0
  139. package/recipes/node-typescript-next-web/AGENTS.md +44 -0
  140. package/recipes/node-typescript-next-web/README.md +16 -0
  141. package/recipes/node-typescript-next-web/WORKFLOW.md +6 -0
  142. package/recipes/node-typescript-next-web/app/api/health/route.ts +5 -0
  143. package/recipes/node-typescript-next-web/app/layout.tsx +19 -0
  144. package/recipes/node-typescript-next-web/app/page.tsx +12 -0
  145. package/recipes/node-typescript-next-web/app/styles.css +21 -0
  146. package/recipes/node-typescript-next-web/docs/development.md +16 -0
  147. package/recipes/node-typescript-next-web/eslint.config.mjs +9 -0
  148. package/recipes/node-typescript-next-web/gitignore.template +5 -0
  149. package/recipes/node-typescript-next-web/next-env.d.ts +7 -0
  150. package/recipes/node-typescript-next-web/next.config.ts +11 -0
  151. package/recipes/node-typescript-next-web/package-lock.json +7540 -0
  152. package/recipes/node-typescript-next-web/package.json +39 -0
  153. package/recipes/node-typescript-next-web/playwright.config.ts +23 -0
  154. package/recipes/node-typescript-next-web/recipe.yaml +71 -0
  155. package/recipes/node-typescript-next-web/scripts/check-package.mjs +3 -0
  156. package/recipes/node-typescript-next-web/src/health.ts +3 -0
  157. package/recipes/node-typescript-next-web/test/browser/home.spec.ts +14 -0
  158. package/recipes/node-typescript-next-web/test/integration/health-route.test.ts +11 -0
  159. package/recipes/node-typescript-next-web/test/unit/health.test.ts +9 -0
  160. package/recipes/node-typescript-next-web/tsconfig.json +33 -0
  161. package/schemas/README.md +64 -0
  162. package/schemas/audit-report.schema.json +59 -0
  163. package/schemas/blueprint.schema.json +34 -0
  164. package/schemas/context-manifest.schema.json +88 -0
  165. package/schemas/delivery-record.schema.json +266 -0
  166. package/schemas/impact-manifest.schema.json +146 -0
  167. package/schemas/managed-repository.schema.json +36 -0
  168. package/schemas/mill-config.schema.json +212 -0
  169. package/schemas/mill-lock.schema.json +96 -0
  170. package/schemas/outcome-plan.schema.json +51 -0
  171. package/schemas/product-contract.schema.json +181 -0
  172. package/schemas/public-alpha-qualification.schema.json +391 -0
  173. package/schemas/recipe-manifest.schema.json +187 -0
  174. package/schemas/release-evidence.schema.json +170 -0
  175. package/schemas/repository-integration-plan.schema.json +156 -0
  176. package/schemas/review-result.schema.json +57 -0
  177. package/schemas/scenario-set.schema.json +84 -0
  178. package/schemas/source-manifest.schema.json +96 -0
  179. package/schemas/specification-proposal.schema.json +406 -0
  180. package/schemas/support-tuple.schema.json +107 -0
  181. package/schemas/task-packet.schema.json +395 -0
  182. package/schemas/validation-evidence.schema.json +125 -0
  183. package/schemas/worker-invocation.schema.json +119 -0
  184. 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,3 @@
1
+ import { access } from "node:fs/promises";
2
+
3
+ await access(new URL("../.next/standalone/server.js", import.meta.url));
@@ -0,0 +1,3 @@
1
+ export function healthPayload() {
2
+ return { status: "ok" } as const;
3
+ }
@@ -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,9 @@
1
+ import { describe, expect, it } from "vitest";
2
+
3
+ import { healthPayload } from "../../src/health";
4
+
5
+ describe("healthPayload", () => {
6
+ it("reports a stable healthy state", () => {
7
+ expect(healthPayload()).toEqual({ status: "ok" });
8
+ });
9
+ });
@@ -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
+ }