multimodel-dev-os 3.1.0 → 3.5.0

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 (102) hide show
  1. package/.ai/policies/registry-policy.yaml +29 -1
  2. package/.ai/registries/trusted-keys.yaml +12 -0
  3. package/.ai/schema/registry-manifest.schema.json +31 -2
  4. package/.ai/schema/registry-policy.schema.json +37 -1
  5. package/.ai/schema/trusted-keys.schema.json +69 -0
  6. package/AGENTS.md +22 -26
  7. package/MEMORY.md +34 -11
  8. package/README.md +2 -1
  9. package/RUNBOOK.md +28 -36
  10. package/TASKS.md +15 -5
  11. package/bin/multimodel-dev-os.js +1366 -548
  12. package/docs/.vitepress/config.js +3 -1
  13. package/docs/architecture.md +3 -1
  14. package/docs/index.md +5 -5
  15. package/docs/npm-publishing.md +5 -5
  16. package/docs/package-safety.md +17 -0
  17. package/docs/public/llms-full.txt +5 -1
  18. package/docs/public/llms.txt +6 -1
  19. package/docs/public/sitemap.xml +15 -0
  20. package/docs/registry-policy.md +29 -1
  21. package/docs/registry-security.md +73 -6
  22. package/docs/registry-signing.md +70 -0
  23. package/docs/registry-sync.md +5 -2
  24. package/docs/registry-trust-store.md +66 -0
  25. package/docs/release-policy.md +6 -5
  26. package/docs/security-threat-model.md +96 -0
  27. package/docs/testing.md +25 -2
  28. package/docs/trusted-registries.md +1 -1
  29. package/docs/v3-roadmap.md +17 -6
  30. package/docs/v3.5.0-readiness.md +46 -0
  31. package/package.json +5 -2
  32. package/scripts/build-cli.js +45 -3
  33. package/scripts/check-build-fresh.js +52 -0
  34. package/scripts/install.ps1 +1 -1
  35. package/scripts/install.sh +1 -1
  36. package/scripts/verify.js +327 -14
  37. package/scripts/verify.sh +10 -0
  38. package/src/catalog/loader.js +117 -0
  39. package/src/cli/args.js +118 -0
  40. package/src/cli/help.js +60 -0
  41. package/src/cli/main.js +6263 -0
  42. package/src/core/globals.js +52 -0
  43. package/src/core/hashes.js +15 -0
  44. package/src/core/policy.js +44 -0
  45. package/src/core/security.js +61 -0
  46. package/src/core/yaml.js +136 -0
  47. package/src/plugin/manifest.js +95 -0
  48. package/src/registry/provenance.js +114 -0
  49. package/src/registry/signing.js +392 -0
  50. package/src/registry/sources.js +40 -0
  51. package/src/registry/trust-store.js +41 -0
  52. package/src/registry/validation.js +45 -0
  53. package/src/registry/verdict.js +51 -0
  54. package/tests/README.md +37 -0
  55. package/tests/fixtures/README.md +22 -0
  56. package/tests/fixtures/custom-template-example/README.md +10 -0
  57. package/tests/fixtures/proposals/approved-append-line.md +28 -0
  58. package/tests/fixtures/proposals/approved-create-file.md +29 -0
  59. package/tests/fixtures/proposals/approved-replace-text.md +30 -0
  60. package/tests/fixtures/proposals/existing-create-file-no-overwrite.md +29 -0
  61. package/tests/fixtures/proposals/no-operations.md +18 -0
  62. package/tests/fixtures/proposals/path-traversal.md +29 -0
  63. package/tests/fixtures/proposals/pending-proposal.md +29 -0
  64. package/tests/fixtures/proposals/protected-path.md +29 -0
  65. package/tests/fixtures/proposals/replace-multiple-without-allow.md +30 -0
  66. package/tests/fixtures/registry-overrides/README.md +20 -0
  67. package/tests/fixtures/signed-registries/README.md +4 -0
  68. package/tests/fixtures/signed-registries/revoked-key/catalog.yaml +8 -0
  69. package/tests/fixtures/signed-registries/revoked-key/expected-verdict.json +7 -0
  70. package/tests/fixtures/signed-registries/revoked-key/registry-manifest.yaml +14 -0
  71. package/tests/fixtures/signed-registries/tampered-manifest/catalog.yaml +8 -0
  72. package/tests/fixtures/signed-registries/tampered-manifest/expected-verdict.json +7 -0
  73. package/tests/fixtures/signed-registries/tampered-manifest/registry-manifest.yaml +14 -0
  74. package/tests/fixtures/signed-registries/trusted-keys.yaml +23 -0
  75. package/tests/fixtures/signed-registries/unsigned-remote-required/catalog.yaml +8 -0
  76. package/tests/fixtures/signed-registries/unsigned-remote-required/expected-verdict.json +7 -0
  77. package/tests/fixtures/signed-registries/unsigned-remote-required/registry-manifest.yaml +9 -0
  78. package/tests/fixtures/signed-registries/unsupported-algorithm/catalog.yaml +8 -0
  79. package/tests/fixtures/signed-registries/unsupported-algorithm/expected-verdict.json +7 -0
  80. package/tests/fixtures/signed-registries/unsupported-algorithm/registry-manifest.yaml +14 -0
  81. package/tests/fixtures/signed-registries/valid-signed-registry/catalog.yaml +8 -0
  82. package/tests/fixtures/signed-registries/valid-signed-registry/expected-verdict.json +7 -0
  83. package/tests/fixtures/signed-registries/valid-signed-registry/registry-manifest.yaml +14 -0
  84. package/tests/fixtures/signed-registries/wrong-key/catalog.yaml +8 -0
  85. package/tests/fixtures/signed-registries/wrong-key/expected-verdict.json +7 -0
  86. package/tests/fixtures/signed-registries/wrong-key/registry-manifest.yaml +14 -0
  87. package/tests/smoke/README.md +37 -0
  88. package/tests/smoke/cli-smoke.md +49 -0
  89. package/tests/unit/build-output.test.js +40 -0
  90. package/tests/unit/catalog-loader.test.js +44 -0
  91. package/tests/unit/path-safety.test.js +62 -0
  92. package/tests/unit/plugin-manifest.test.js +94 -0
  93. package/tests/unit/prepublish-guard.test.js +35 -0
  94. package/tests/unit/registry-e2e-signature-fixtures.test.js +288 -0
  95. package/tests/unit/registry-policy.test.js +52 -0
  96. package/tests/unit/registry-provenance.test.js +185 -0
  97. package/tests/unit/registry-public-signing.test.js +109 -0
  98. package/tests/unit/registry-signature-policy.test.js +100 -0
  99. package/tests/unit/registry-signing.test.js +193 -0
  100. package/tests/unit/registry-trust-store.test.js +133 -0
  101. package/tests/unit/registry-url-validation.test.js +64 -0
  102. package/tests/unit/yaml.test.js +92 -0
@@ -12,9 +12,14 @@ require_approval_for_remote_sync: true
12
12
  # Require SHA256 checksum verification for synced catalog files.
13
13
  require_checksum: true
14
14
 
15
- # Require cryptographic signature verification (placeholder for future release).
15
+ # Require cryptographic signature verification (HMAC-SHA256).
16
+ # Requires a signing key at .ai/registry-signing-key (generate with: registry keygen --approved).
16
17
  require_signature: false
17
18
 
19
+ # Require that registry verify checks the local lockfile (.ai/registry-lock.json).
20
+ # When true, verify will fail if no lockfile entry exists for the registry.
21
+ require_lockfile_on_verify: false
22
+
18
23
  # Allow installing plugins from registries with trust_level: untrusted.
19
24
  allow_untrusted_install: false
20
25
 
@@ -49,3 +54,26 @@ allowed_file_extensions:
49
54
  - ".yaml"
50
55
  - ".yml"
51
56
  - ".json"
57
+
58
+ # Allow unsigned local registries.
59
+ allow_unsigned_local: true
60
+
61
+ # Allow unsigned bundled registries.
62
+ allow_unsigned_bundled: true
63
+
64
+ # Allow unsigned remote registries.
65
+ allow_unsigned_remote: false
66
+
67
+ # Path to the trusted keys configuration file.
68
+ trusted_keys_file: ".ai/registries/trusted-keys.yaml"
69
+
70
+ # Allowed signature algorithms.
71
+ allowed_signature_algorithms:
72
+ - "ed25519"
73
+ - "hmac-sha256"
74
+
75
+ # Require signature to be from a trusted publisher in the trust store.
76
+ require_trusted_publisher: false
77
+
78
+ # Require provenance lockfile verification.
79
+ provenance_required: true
@@ -0,0 +1,12 @@
1
+ # MultiModel Dev OS Trusted Keys
2
+ # Stores trusted public keys for registry publisher verification.
3
+ # Only active keys with matching scopes ('registry' or 'catalog') can verify signatures.
4
+ # Never store private keys in this file or in this repository.
5
+
6
+ trusted_publishers:
7
+ - key_id: example-maintainer-key
8
+ name: "Example Maintainer (Test/Example Key Only)"
9
+ algorithm: ed25519
10
+ public_key: "MCowBQYDK2VwAyEA9vWwyE5+fY0dvEzl9S1UcvtoMkOAIDhDCzZAkP+CVNo="
11
+ scopes: ["registry", "catalog"]
12
+ status: "active"
@@ -49,8 +49,37 @@
49
49
  "description": "Version of the safety policy specification this registry conforms to."
50
50
  },
51
51
  "signature": {
52
- "type": ["string", "null"],
53
- "description": "Cryptographic signature of the manifest. Placeholder for future implementation."
52
+ "type": ["object", "null"],
53
+ "description": "Cryptographic signature block of the manifest.",
54
+ "properties": {
55
+ "algorithm": { "type": "string", "enum": ["ed25519", "hmac-sha256"] },
56
+ "key_id": { "type": "string" },
57
+ "signature": { "type": "string" },
58
+ "signed_fields": {
59
+ "type": "array",
60
+ "items": { "type": "string" }
61
+ }
62
+ },
63
+ "required": ["algorithm", "key_id", "signature", "signed_fields"],
64
+ "additionalProperties": false
65
+ },
66
+ "signatures": {
67
+ "type": "array",
68
+ "description": "List of cryptographic signature blocks of the manifest.",
69
+ "items": {
70
+ "type": "object",
71
+ "properties": {
72
+ "algorithm": { "type": "string", "enum": ["ed25519", "hmac-sha256"] },
73
+ "key_id": { "type": "string" },
74
+ "signature": { "type": "string" },
75
+ "signed_fields": {
76
+ "type": "array",
77
+ "items": { "type": "string" }
78
+ }
79
+ },
80
+ "required": ["algorithm", "key_id", "signature", "signed_fields"],
81
+ "additionalProperties": false
82
+ }
54
83
  }
55
84
  },
56
85
  "additionalProperties": false
@@ -11,7 +11,14 @@
11
11
  "allow_untrusted_install",
12
12
  "allowed_write_roots",
13
13
  "blocked_paths",
14
- "allowed_file_extensions"
14
+ "allowed_file_extensions",
15
+ "allow_unsigned_local",
16
+ "allow_unsigned_bundled",
17
+ "allow_unsigned_remote",
18
+ "trusted_keys_file",
19
+ "allowed_signature_algorithms",
20
+ "require_trusted_publisher",
21
+ "provenance_required"
15
22
  ],
16
23
  "properties": {
17
24
  "allow_remote_registries": {
@@ -60,6 +67,35 @@
60
67
  "type": "array",
61
68
  "items": { "type": "string" },
62
69
  "description": "File extensions permitted for plugin asset files."
70
+ },
71
+ "allow_unsigned_local": {
72
+ "type": "boolean",
73
+ "description": "Whether unsigned local registries are permitted."
74
+ },
75
+ "allow_unsigned_bundled": {
76
+ "type": "boolean",
77
+ "description": "Whether unsigned bundled registries are permitted."
78
+ },
79
+ "allow_unsigned_remote": {
80
+ "type": "boolean",
81
+ "description": "Whether unsigned remote registries are permitted."
82
+ },
83
+ "trusted_keys_file": {
84
+ "type": "string",
85
+ "description": "Path to the trusted keys yaml configuration file."
86
+ },
87
+ "allowed_signature_algorithms": {
88
+ "type": "array",
89
+ "items": { "type": "string" },
90
+ "description": "Cryptographic signature algorithms allowed for manifest verification."
91
+ },
92
+ "require_trusted_publisher": {
93
+ "type": "boolean",
94
+ "description": "Whether signatures must come from a trusted publisher in the trust store."
95
+ },
96
+ "provenance_required": {
97
+ "type": "boolean",
98
+ "description": "Whether a provenance record (lockfile entry) is required."
63
99
  }
64
100
  },
65
101
  "additionalProperties": false
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "MultiModel Dev OS Trusted Keys Schema",
4
+ "description": "JSON schema defining trusted publisher keys for remote registry signature verification",
5
+ "type": "object",
6
+ "required": [
7
+ "trusted_publishers"
8
+ ],
9
+ "properties": {
10
+ "trusted_publishers": {
11
+ "type": "array",
12
+ "items": {
13
+ "type": "object",
14
+ "required": [
15
+ "key_id",
16
+ "name",
17
+ "algorithm",
18
+ "public_key",
19
+ "scopes",
20
+ "status"
21
+ ],
22
+ "properties": {
23
+ "key_id": {
24
+ "type": "string",
25
+ "description": "Unique identifier of the trusted key."
26
+ },
27
+ "name": {
28
+ "type": "string",
29
+ "description": "Name of the publisher associated with the key."
30
+ },
31
+ "algorithm": {
32
+ "type": "string",
33
+ "enum": [
34
+ "ed25519",
35
+ "hmac-sha256"
36
+ ],
37
+ "description": "Cryptographic signature algorithm."
38
+ },
39
+ "public_key": {
40
+ "type": "string",
41
+ "description": "PEM-encoded public key or key string."
42
+ },
43
+ "scopes": {
44
+ "type": "array",
45
+ "items": {
46
+ "type": "string",
47
+ "enum": [
48
+ "registry",
49
+ "catalog"
50
+ ]
51
+ },
52
+ "description": "Allowed scopes for this key."
53
+ },
54
+ "status": {
55
+ "type": "string",
56
+ "enum": [
57
+ "active",
58
+ "revoked",
59
+ "disabled"
60
+ ],
61
+ "description": "Key status."
62
+ }
63
+ },
64
+ "additionalProperties": false
65
+ }
66
+ }
67
+ },
68
+ "additionalProperties": false
69
+ }
package/AGENTS.md CHANGED
@@ -5,38 +5,34 @@
5
5
 
6
6
  ## Project Overview
7
7
 
8
- <!-- Replace with your project description -->
9
- project: null
10
- stack: null
11
- description: null
8
+ project: multimodel-dev-os
9
+ stack: Node.js (ES modules), esbuild, Vitest
10
+ description: MultiModel Dev OS is a zero-dependency local CLI and developer configuration standard that enforces structure, memory, tasks, and registry safety boundaries for AI coding agents.
12
11
 
13
12
  ## Build Commands
14
13
 
15
- <!-- Replace with your actual commands -->
16
14
  ```
17
- dev: null
18
- build: null
19
- test: null
20
- lint: null
15
+ build: npm run build (compiles src/ to bin/multimodel-dev-os.js)
16
+ test: npm test (runs vitest suites)
17
+ verify: node scripts/verify.js (runs strict audit checks)
21
18
  ```
22
19
 
23
20
  ## Coding Conventions
24
21
 
25
- <!-- Define your style rules -->
26
- - Language: null
27
- - Framework: null
28
- - Style guide: null
29
- - Type checking: null
30
- - Formatting: null
22
+ - Language: JavaScript (ES Modules, Node.js native API)
23
+ - Framework: Zero runtime dependencies (standard library crypto, fs, path, readline, https, etc.)
24
+ - Style guide: Clear JSDoc typing, deterministic canonical serializations, timing-safe crypto
25
+ - Type checking: JSDoc type comments
26
+ - Formatting: 2-space indentation, single-shebang binary layout
31
27
 
32
28
  ## File Structure Rules
33
29
 
34
- <!-- Which directories serve which purpose -->
35
30
  ```
36
31
  src/ → Application source code
37
- lib/ → Shared libraries and utilities
38
- tests/ → Test files
39
- docs/ → Documentation
32
+ bin/ → Standalone built binary (do not edit bin/ directly, edit src/)
33
+ tests/ → Unit test files and mock fixtures
34
+ docs/ → Developer manuals and architecture documentation
35
+ scripts/ → Packaging, compilation, and validation scripts
40
36
  ```
41
37
 
42
38
  ## Boundaries
@@ -48,6 +44,8 @@ no-touch:
48
44
  - .env.local
49
45
  - node_modules/
50
46
  - package-lock.json (do not manually edit)
47
+ - bin/multimodel-dev-os.js (auto-generated by esbuild, modify src/)
48
+ - .ai/registry-signing-key (gitignored private key, generate via keygen)
51
49
  ```
52
50
 
53
51
  ## Agent Roles
@@ -61,19 +59,17 @@ no-touch:
61
59
 
62
60
  ## Dependencies
63
61
 
64
- <!-- Key dependencies agents should be aware of -->
65
- - null
62
+ - Runtime: Zero runtime dependencies
63
+ - Dev: esbuild, vitest
66
64
 
67
65
  ## Testing Strategy
68
66
 
69
- <!-- How agents should approach testing -->
70
- - Unit tests: null
71
- - Integration tests: null
72
- - E2E tests: null
67
+ - Unit tests: Vitest coverage for YAML parser, policy engine, signatures, trust store, and URL validators.
68
+ - Verification: Scripts checking binary shebangs, header lines, and path boundaries.
73
69
 
74
70
  ## Additional Context
75
71
 
76
- <!-- Any other context agents need -->
77
72
  - See `MEMORY.md` for project history and decisions
78
73
  - See `TASKS.md` for current work items
79
74
  - See `RUNBOOK.md` for operational procedures
75
+
package/MEMORY.md CHANGED
@@ -9,34 +9,57 @@
9
9
 
10
10
  | Date | Decision | Rationale |
11
11
  |------|----------|-----------|
12
- | null | null | null |
12
+ | 2026-06-19 | Modular src/ layout (v3.1.0) | Maintainability + testability over single-file monolith |
13
+ | 2026-06-19 | esbuild for single-file dist (v3.1.0) | Zero-runtime-dep bundle, deterministic builds |
14
+ | 2026-06-19 | HMAC-SHA256 for registry signing (v3.5.0-prep) | No external PKI/GPG; Node built-in crypto only; project-scoped key |
15
+ | 2026-06-19 | Lockfile separate from sources.yaml (v3.5.0-prep) | Clear separation: sources.yaml = config, registry-lock.json = provenance |
16
+ | 2026-06-19 | timingSafeEqual for signature compare (v3.5.0-prep) | Prevents timing-based side-channel attacks |
17
+ | 2026-06-20 | Ed25519 Asymmetric Signatures (v3.5.0-prep Sprint 2) | Provides public-key trust boundary, avoiding private key disclosures. |
18
+ | 2026-06-20 | Trust Store Configuration (v3.5.0-prep Sprint 2) | Local key-based mapping of trusted keys and publishers with scope filters. |
19
+ | 2026-06-20 | Canonical payload via recursive sorting (v3.5.0-prep) | Guarantees stable JSON representations independent of property order. |
20
+ | 2026-06-20 | Structured Verdict Reporting (v3.5.0-prep Sprint 3) | Standardizes verification status output across CLI, lockfile, and audit logs. |
21
+ | 2026-06-20 | Offline E2E Signed Fixtures (v3.5.0-prep Sprint 3) | Validates edge cases without hitting live remote servers. |
13
22
 
14
23
  ## Key Patterns
15
24
 
16
25
  <!-- Patterns agents should follow consistently -->
17
26
 
18
- - null
27
+ - All signing/verification uses Node.js built-in `crypto` — zero runtime deps
28
+ - Registry signing key lives in `.ai/registry-signing-key` (gitignored, 0o600 permissions)
29
+ - Lockfile `.ai/registry-lock.json` is committed to VCS (tamper evidence)
30
+ - CLI handlers follow the pattern: validate → check policy → check --approved → execute
31
+ - `src/` modules are pure ES modules bundled by `scripts/build-cli.js` into `bin/`
32
+ - `scripts/verify.js` must be expanded with assertions for every new module/test file added
19
33
 
20
34
  ## Known Issues
21
35
 
22
36
  <!-- Gotchas, workarounds, and technical debt -->
23
37
 
24
- - null
38
+ - Signing key rotation invalidates all lockfile signatures — users must re-sync after keygen --force
39
+ - `.gitignore` patterns for `.ai/registry-signing-key` use exact path (not wildcard)
40
+ - On Windows, `chmodSync` to `0o600` is a no-op — key security relies on gitignore there
25
41
 
26
42
  ## Environment Notes
27
43
 
28
44
  <!-- Environment-specific context (OS quirks, CI setup, etc.) -->
29
45
 
30
- - OS: null
31
- - CI: null
32
- - Hosting: null
46
+ - OS: Windows (development), Ubuntu + macOS (CI matrix)
47
+ - CI: GitHub Actions, Node 20.x and 22.x
48
+ - Hosting: npm registry (manual publish only — no CI auto-publish)
33
49
 
34
50
  ## Session Notes
35
51
 
36
52
  <!-- Recent session summaries — newest first, keep last 5 -->
37
53
 
38
- ### Session: null
39
- **Date:** null
40
- **Agent:** null
41
- **Summary:** null
42
- **Files changed:** null
54
+ ### Session: v3.5.0-prep Sprint 3 — Signed Registry E2E Fixtures + Release Readiness
55
+ **Date:** 2026-06-20
56
+ **Agent:** Antigravity
57
+ **Summary:** Implemented `src/registry/verdict.js` module for structured trust verdicts. Created offline E2E signed registry fixtures covering valid, tampered, wrong key, revoked key, unsigned remote, and unsupported algorithm states. Deployed comprehensive E2E tests in `tests/unit/registry-e2e-signature-fixtures.test.js` validating signature blocks, trust store loading, policies, and CLI subprocess outputs. Added threat model `docs/security-threat-model.md` and release readiness checklist `docs/v3.5.0-readiness.md`. Fully updated all verification scripts and sitemaps. All 113 unit tests and 305 verification audit checks pass cleanly.
58
+ **Files changed:** src/registry/verdict.js (new), tests/fixtures/signed-registries/* (new), tests/unit/registry-e2e-signature-fixtures.test.js (new), docs/security-threat-model.md (new), docs/v3.5.0-readiness.md (new), src/cli/main.js, scripts/verify.js, docs/.vitepress/config.js, docs/public/sitemap.xml, docs/public/llms.txt, docs/public/llms-full.txt, docs/registry-security.md, docs/registry-signing.md, CHANGELOG.md
59
+
60
+ ### Session: v3.5.0-prep Sprint 2 — Public-Key Registry Signatures + Trust Store
61
+ **Date:** 2026-06-20
62
+ **Agent:** Antigravity
63
+ **Summary:** Implemented Ed25519 signing support, trusted-keys schema, trust store validator/loader, policy configuration updates, lockfile entries with detailed trust/signature verdicts, `registry trust list/show` subcommands, 3 new unit test suites (public-signing, trust-store, signature-policy), and release audit assertions. Verified that all 98 unit tests and 297 release verification checks pass cleanly.
64
+ **Files changed:** src/registry/signing.js, src/registry/trust-store.js (new), .ai/registries/trusted-keys.yaml (new), .ai/schema/trusted-keys.schema.json (new), .ai/schema/registry-manifest.schema.json, src/core/policy.js, .ai/policies/registry-policy.yaml, .ai/schema/registry-policy.schema.json, src/registry/provenance.js, src/cli/main.js, src/cli/help.js, scripts/verify.js, tests/unit/registry-public-signing.test.js (new), tests/unit/registry-trust-store.test.js (new), tests/unit/registry-signature-policy.test.js (new), docs/registry-signing.md (new), docs/registry-trust-store.md (new), docs/registry-security.md, docs/trusted-registries.md, docs/registry-policy.md, docs/architecture.md, docs/registry-sync.md, docs/package-safety.md, docs/v3-roadmap.md, docs/testing.md, CHANGELOG.md
65
+
package/README.md CHANGED
@@ -161,7 +161,8 @@ npx multimodel-dev-os@latest handoff build
161
161
  | **v3.0.1** | Registry UX & Policy Safety Patch | ✅ Released |
162
162
  | **v3.0.2** | Registry Sync Security Hotfix | ✅ Released |
163
163
  | **v3.1.0** | Modular Source Layout + Formal Unit Tests | ✅ Released |
164
-
164
+ | **v3.2.0** | Stable Modular Build + Package Governance | ✅ Released |
165
+ | **v3.5.0** | Trusted Registry Signing + Provenance Foundation | ✅ Released |
165
166
 
166
167
  **[Full Roadmap →](https://rizvee.github.io/multimodel-dev-os/v3-roadmap)**
167
168
 
package/RUNBOOK.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Runbook
2
2
 
3
- > Operational procedures for deployment, rollback, and incident response.
3
+ > Operational procedures for development setup, testing, packaging, and rollback.
4
4
  > AI agents reference this before executing critical operations.
5
5
 
6
6
  ## Environment Setup
@@ -10,64 +10,56 @@
10
10
  ```bash
11
11
  # 1. Clone the repo
12
12
  git clone <repo-url>
13
- cd <project-name>
13
+ cd multimodel-dev-os
14
14
 
15
- # 2. Install dependencies
16
- null
15
+ # 2. Install dev dependencies
16
+ npm install
17
17
 
18
- # 3. Set up environment variables
19
- cp .env.example .env
20
- # Edit .env with your values
18
+ # 3. Build the CLI binary
19
+ npm run build
21
20
 
22
- # 4. Start development server
23
- null
21
+ # 4. Run tests
22
+ npm test
24
23
  ```
25
24
 
26
- ## Deploy
25
+ ## Deploy / Release
27
26
 
28
- <!-- Step-by-step deployment procedure -->
27
+ As this is a local CLI utility distributed via npm, deployment is done by compiling the binary and publishing to npm.
29
28
 
30
29
  | Step | Command | Notes |
31
30
  |------|---------|-------|
32
- | 1 | null | null |
33
- | 2 | null | null |
34
-
35
- **Deploy URL:** null
36
- **Deploy branch:** null
31
+ | 1 | `npm run verify` | Runs unit tests, generated CLI freshness check, and strict code validations |
32
+ | 2 | `$env:MMDO_ALLOW_PUBLISH="true"; npm publish` | Set environment variable to bypass prepublish-guard |
37
33
 
38
34
  ## Rollback
39
35
 
40
- <!-- How to revert a bad deployment -->
36
+ To roll back a released npm package or local commit:
41
37
 
42
38
  ```bash
43
- # Quick rollback to previous version
44
- null
45
- ```
46
-
47
- **Last known good commit:** null
48
-
49
- ## Incident Response
39
+ # Deprecate the broken package version on npm
40
+ npm deprecate multimodel-dev-os@<version> "Deprecation message detailing reason"
50
41
 
51
- <!-- What to do when things break -->
42
+ # Revert local repository main branch to last stable tag
43
+ git reset --hard v3.5.0
44
+ ```
52
45
 
53
- 1. **Identify:** Check error logs at `null`
54
- 2. **Communicate:** Notify team at `null`
55
- 3. **Mitigate:** Rollback if necessary (see above)
56
- 4. **Resolve:** Fix the root cause
57
- 5. **Document:** Add post-mortem to `MEMORY.md`
46
+ **Last known good release tag:** `v3.5.0`
58
47
 
59
48
  ## Health Checks
60
49
 
61
- <!-- Endpoints or commands to verify the system is working -->
50
+ Run diagnostics to verify CLI health:
62
51
 
63
- | Check | Command/URL | Expected |
52
+ | Check | Command | Expected |
64
53
  |-------|-------------|----------|
65
- | null | null | null |
54
+ | CLI Help / Version | `node bin/multimodel-dev-os.js --help` | Prints help text displaying current version |
55
+ | Registry Policy Engine | `node bin/multimodel-dev-os.js registry status` | Shows correct policy state and configuration values |
56
+ | Trust Store Integrity | `node bin/multimodel-dev-os.js registry trust verify` | Validates all trusted public key formats in the store |
57
+ | Strict Audit Check | `npm run verify` | Completes successfully with 0 failures |
66
58
 
67
59
  ## Secrets & Config
68
60
 
69
- <!-- Where secrets are stored (never put actual secrets here) -->
70
-
71
61
  | Secret | Location | Rotation |
72
62
  |--------|----------|----------|
73
- | null | null | null |
63
+ | Project Registry Sync Key | `.ai/registry-signing-key` | Run `registry keygen --approved --force` |
64
+ | npm Publish Token | `~/.npmrc` or user environment | Managed in npmjs.com account settings |
65
+
package/TASKS.md CHANGED
@@ -7,22 +7,32 @@
7
7
 
8
8
  <!-- Active work items — agents pick from here -->
9
9
 
10
- - [ ] null
10
+ - [ ] Sprint 4 Planning — Trust Store Remote Key Sync & GPG Signatures
11
11
 
12
12
  ## Backlog
13
13
 
14
14
  <!-- Upcoming work — not yet started -->
15
15
 
16
- - [ ] null
16
+ - [ ] Deployed trust key sync capability from verified remote registries
17
+ - [ ] Support GPG-compatible signatures for enterprise environments
17
18
 
18
19
  ## In Review
19
20
 
20
21
  <!-- Completed work awaiting review -->
21
22
 
22
- - [ ] null
23
-
24
23
  ## Done
25
24
 
26
25
  <!-- Completed and merged — keep last 10 items, archive the rest -->
27
26
 
28
- - [x] null
27
+ - [x] Deployed E2E offline signed registry fixtures and unit test validation suite (`registry-e2e-signature-fixtures.test.js`)
28
+ - [x] Implemented verdict module for structured trust verdict reporting (`src/registry/verdict.js`)
29
+ - [x] Created Threat Model documentation (`docs/security-threat-model.md`) and v3.5.0 Release Readiness Checklist (`docs/v3.5.0-readiness.md`)
30
+ - [x] Updated existing docs, config sidebars, sitemaps, and LLM discoverability indices
31
+ - [x] Deployed Ed25519 public key registry signatures (`src/registry/signing.js`)
32
+ - [x] Implemented trusted key store and scope check policies (`src/registry/trust-store.js`)
33
+ - [x] Added `registry trust` CLI subcommand suites (`list`, `show <key_id>`, `verify`)
34
+ - [x] Configured signature validation rules and policy config schemas (`registry-policy.schema.json`)
35
+ - [x] Deployed 113 unit tests with 100% pass rates across Windows, Linux, and macOS
36
+ - [x] Hardened release audit verifier with 305 structural and functional checks passing
37
+ - [x] Implemented HMAC-SHA256 registry signing foundation and provenance lockfile (`src/registry/provenance.js`)
38
+