@nomos-arc/arc 0.1.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.
- package/.claude/settings.local.json +10 -0
- package/.nomos-config.json +5 -0
- package/CLAUDE.md +108 -0
- package/LICENSE +190 -0
- package/README.md +569 -0
- package/dist/cli.js +21120 -0
- package/docs/auth/googel_plan.yaml +1093 -0
- package/docs/auth/google_task.md +235 -0
- package/docs/auth/hardened_blueprint.yaml +1658 -0
- package/docs/auth/red_team_report.yaml +336 -0
- package/docs/auth/session_state.yaml +162 -0
- package/docs/certificate/cer_enhance_plan.md +605 -0
- package/docs/certificate/certificate_report.md +338 -0
- package/docs/dev_overview.md +419 -0
- package/docs/feature_assessment.md +156 -0
- package/docs/how_it_works.md +78 -0
- package/docs/infrastructure/map.md +867 -0
- package/docs/init/master_plan.md +3581 -0
- package/docs/init/red_team_report.md +215 -0
- package/docs/init/report_phase_1a.md +304 -0
- package/docs/integrity-gate/enhance_drift.md +703 -0
- package/docs/integrity-gate/overview.md +108 -0
- package/docs/management/manger-task.md +99 -0
- package/docs/management/scafffold.md +76 -0
- package/docs/map/ATOMIC_BLUEPRINT.md +1349 -0
- package/docs/map/RED_TEAM_REPORT.md +159 -0
- package/docs/map/map_task.md +147 -0
- package/docs/map/semantic_graph_task.md +792 -0
- package/docs/map/semantic_master_plan.md +705 -0
- package/docs/phase7/TEAM_RED.md +249 -0
- package/docs/phase7/plan.md +1682 -0
- package/docs/phase7/task.md +275 -0
- package/docs/prompts/USAGE.md +312 -0
- package/docs/prompts/architect.md +165 -0
- package/docs/prompts/executer.md +190 -0
- package/docs/prompts/hardener.md +190 -0
- package/docs/prompts/red_team.md +146 -0
- package/docs/verification/goveranance-overview.md +396 -0
- package/docs/verification/governance-overview.md +245 -0
- package/docs/verification/verification-arc-ar.md +560 -0
- package/docs/verification/verification-architecture.md +560 -0
- package/docs/very_next.md +52 -0
- package/docs/whitepaper.md +89 -0
- package/overview.md +1469 -0
- package/package.json +63 -0
- package/src/adapters/__tests__/git.test.ts +296 -0
- package/src/adapters/__tests__/stdio.test.ts +70 -0
- package/src/adapters/git.ts +226 -0
- package/src/adapters/pty.ts +159 -0
- package/src/adapters/stdio.ts +113 -0
- package/src/cli.ts +83 -0
- package/src/commands/apply.ts +47 -0
- package/src/commands/auth.ts +301 -0
- package/src/commands/certificate.ts +89 -0
- package/src/commands/discard.ts +24 -0
- package/src/commands/drift.ts +116 -0
- package/src/commands/index.ts +78 -0
- package/src/commands/init.ts +121 -0
- package/src/commands/list.ts +75 -0
- package/src/commands/map.ts +55 -0
- package/src/commands/plan.ts +30 -0
- package/src/commands/review.ts +58 -0
- package/src/commands/run.ts +63 -0
- package/src/commands/search.ts +147 -0
- package/src/commands/show.ts +63 -0
- package/src/commands/status.ts +59 -0
- package/src/core/__tests__/budget.test.ts +213 -0
- package/src/core/__tests__/certificate.test.ts +385 -0
- package/src/core/__tests__/config.test.ts +191 -0
- package/src/core/__tests__/preflight.test.ts +24 -0
- package/src/core/__tests__/prompt.test.ts +358 -0
- package/src/core/__tests__/review.test.ts +161 -0
- package/src/core/__tests__/state.test.ts +362 -0
- package/src/core/auth/__tests__/manager.test.ts +166 -0
- package/src/core/auth/__tests__/server.test.ts +220 -0
- package/src/core/auth/gcp-projects.ts +160 -0
- package/src/core/auth/manager.ts +114 -0
- package/src/core/auth/server.ts +141 -0
- package/src/core/budget.ts +119 -0
- package/src/core/certificate.ts +502 -0
- package/src/core/config.ts +212 -0
- package/src/core/errors.ts +54 -0
- package/src/core/factory.ts +49 -0
- package/src/core/graph/__tests__/builder.test.ts +272 -0
- package/src/core/graph/__tests__/contract-writer.test.ts +175 -0
- package/src/core/graph/__tests__/enricher.test.ts +299 -0
- package/src/core/graph/__tests__/parser.test.ts +200 -0
- package/src/core/graph/__tests__/pipeline.test.ts +202 -0
- package/src/core/graph/__tests__/renderer.test.ts +128 -0
- package/src/core/graph/__tests__/resolver.test.ts +185 -0
- package/src/core/graph/__tests__/scanner.test.ts +231 -0
- package/src/core/graph/__tests__/show.test.ts +134 -0
- package/src/core/graph/builder.ts +303 -0
- package/src/core/graph/constraints.ts +94 -0
- package/src/core/graph/contract-writer.ts +93 -0
- package/src/core/graph/drift/__tests__/classifier.test.ts +215 -0
- package/src/core/graph/drift/__tests__/comparator.test.ts +335 -0
- package/src/core/graph/drift/__tests__/drift.test.ts +453 -0
- package/src/core/graph/drift/__tests__/reporter.test.ts +203 -0
- package/src/core/graph/drift/classifier.ts +165 -0
- package/src/core/graph/drift/comparator.ts +205 -0
- package/src/core/graph/drift/reporter.ts +77 -0
- package/src/core/graph/enricher.ts +251 -0
- package/src/core/graph/grammar-paths.ts +30 -0
- package/src/core/graph/html-template.ts +493 -0
- package/src/core/graph/map-schema.ts +137 -0
- package/src/core/graph/parser.ts +336 -0
- package/src/core/graph/pipeline.ts +209 -0
- package/src/core/graph/renderer.ts +92 -0
- package/src/core/graph/resolver.ts +195 -0
- package/src/core/graph/scanner.ts +145 -0
- package/src/core/logger.ts +46 -0
- package/src/core/orchestrator.ts +792 -0
- package/src/core/plan-file-manager.ts +66 -0
- package/src/core/preflight.ts +64 -0
- package/src/core/prompt.ts +173 -0
- package/src/core/review.ts +95 -0
- package/src/core/state.ts +294 -0
- package/src/core/worktree-coordinator.ts +77 -0
- package/src/search/__tests__/chunk-extractor.test.ts +339 -0
- package/src/search/__tests__/embedder-auth.test.ts +124 -0
- package/src/search/__tests__/embedder.test.ts +267 -0
- package/src/search/__tests__/graph-enricher.test.ts +178 -0
- package/src/search/__tests__/indexer.test.ts +518 -0
- package/src/search/__tests__/integration.test.ts +649 -0
- package/src/search/__tests__/query-engine.test.ts +334 -0
- package/src/search/__tests__/similarity.test.ts +78 -0
- package/src/search/__tests__/vector-store.test.ts +281 -0
- package/src/search/chunk-extractor.ts +167 -0
- package/src/search/embedder.ts +209 -0
- package/src/search/graph-enricher.ts +95 -0
- package/src/search/indexer.ts +483 -0
- package/src/search/lexical-searcher.ts +190 -0
- package/src/search/query-engine.ts +225 -0
- package/src/search/vector-store.ts +311 -0
- package/src/types/index.ts +572 -0
- package/src/utils/__tests__/ansi.test.ts +54 -0
- package/src/utils/__tests__/frontmatter.test.ts +79 -0
- package/src/utils/__tests__/sanitize.test.ts +229 -0
- package/src/utils/ansi.ts +19 -0
- package/src/utils/context.ts +44 -0
- package/src/utils/frontmatter.ts +27 -0
- package/src/utils/sanitize.ts +78 -0
- package/test/e2e/lifecycle.test.ts +330 -0
- package/test/fixtures/mock-planner-hang.ts +5 -0
- package/test/fixtures/mock-planner.ts +26 -0
- package/test/fixtures/mock-reviewer-bad.ts +8 -0
- package/test/fixtures/mock-reviewer-retry.ts +34 -0
- package/test/fixtures/mock-reviewer.ts +18 -0
- package/test/fixtures/sample-project/src/circular-a.ts +6 -0
- package/test/fixtures/sample-project/src/circular-b.ts +6 -0
- package/test/fixtures/sample-project/src/config.ts +15 -0
- package/test/fixtures/sample-project/src/main.ts +19 -0
- package/test/fixtures/sample-project/src/services/product-service.ts +20 -0
- package/test/fixtures/sample-project/src/services/user-service.ts +18 -0
- package/test/fixtures/sample-project/src/types.ts +14 -0
- package/test/fixtures/sample-project/src/utils/index.ts +14 -0
- package/test/fixtures/sample-project/src/utils/validate.ts +12 -0
- package/tsconfig.json +20 -0
- package/vitest.config.ts +12 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
# Certificate of AI Engineering Integrity — Technical Report
|
|
2
|
+
|
|
3
|
+
> **Feature:** `arc certificate <task-id>`
|
|
4
|
+
> **Status:** Implemented
|
|
5
|
+
> **Date:** 2026-04-04
|
|
6
|
+
> **Phase:** Phase 1 — "The Trust Layer"
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. What Is This Feature?
|
|
11
|
+
|
|
12
|
+
`arc certificate` generates a **tamper-proof, self-verifiable JSON document** that cryptographically proves an AI-assisted coding task was engineered responsibly. It answers the three questions every CTO, CISO, or auditor will ask:
|
|
13
|
+
|
|
14
|
+
| Question | How the Certificate Answers It |
|
|
15
|
+
| :--- | :--- |
|
|
16
|
+
| **"Who wrote this code?"** | Full AI provenance: which model (planner binary), which reviewer model, which shadow branch, which base commit. |
|
|
17
|
+
| **"Was it reviewed?"** | Complete review trail: every iteration's score, issues, and the final approval reason (score threshold vs. max iterations). |
|
|
18
|
+
| **"Does it meet our standards?"** | Exact rules snapshot (`rules_hash`) that was enforced, with the list of rule files applied. |
|
|
19
|
+
|
|
20
|
+
The certificate is a **standalone artifact** — it can be shared with auditors, attached to compliance reports, or stored in a governance archive without requiring access to the original codebase or state files.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. Why This Feature Matters
|
|
25
|
+
|
|
26
|
+
### 2.1 The Problem
|
|
27
|
+
|
|
28
|
+
Every AI coding tool today (Cursor, Claude Code, Copilot, Aider) produces code with **zero verifiable record** of:
|
|
29
|
+
- What the AI was instructed to do
|
|
30
|
+
- Whether the output was independently reviewed
|
|
31
|
+
- Which engineering standards were enforced
|
|
32
|
+
- Whether the final result was tampered with after review
|
|
33
|
+
|
|
34
|
+
This is the #1 blocker for enterprise AI adoption. CTOs cannot prove to their boards that AI-generated code meets compliance standards.
|
|
35
|
+
|
|
36
|
+
### 2.2 The Solution
|
|
37
|
+
|
|
38
|
+
nomos-arc.ai's Certificate transforms the internal `TaskState` audit trail into an **exportable, cryptographically sealed proof** of process integrity. No other tool in the market provides this.
|
|
39
|
+
|
|
40
|
+
### 2.3 Strategic Positioning
|
|
41
|
+
|
|
42
|
+
The Certificate is not a feature — it is **the product**. The CLI is the delivery mechanism. In regulated industries (Banking, Healthcare, Defense), documentation proving process quality is as important as the code itself.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 3. Technical Architecture
|
|
47
|
+
|
|
48
|
+
### 3.1 Certificate JSON Schema
|
|
49
|
+
|
|
50
|
+
The certificate contains 9 sections, each serving a specific audit purpose:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
CertificatePayload
|
|
54
|
+
├── Envelope → certificate_version, generated_at, generator
|
|
55
|
+
├── Subject → task_id, task_status, created_at, completed_at
|
|
56
|
+
├── Repository → base_commit, shadow_branch, branch_status
|
|
57
|
+
├── AI Provenance → planner binary, reviewer binary
|
|
58
|
+
├── Governance → rules files list, rules_hash (SHA-256)
|
|
59
|
+
├── Iterations[] → per-version: planning + review entries
|
|
60
|
+
├── Final Review → score, summary, issues, approval_reason
|
|
61
|
+
├── Budget → total_tokens, cost_usd, input/output breakdown
|
|
62
|
+
├── Integrity → chain_hash, entry_hashes[], canonical_entries[]
|
|
63
|
+
└── Self-Seal → certificate_hash (SHA-256 of entire payload)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 3.2 The Merkle-like Hash Chain
|
|
67
|
+
|
|
68
|
+
The core integrity mechanism is a **sequential hash chain** over all history entries:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
H₀ = SHA-256(canonical(entry₀))
|
|
72
|
+
H₁ = SHA-256(H₀ ‖ canonical(entry₁))
|
|
73
|
+
H₂ = SHA-256(H₁ ‖ canonical(entry₂))
|
|
74
|
+
...
|
|
75
|
+
Hₙ = SHA-256(Hₙ₋₁ ‖ canonical(entryₙ))
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Where `canonical(entry)` is a **deterministic JSON serialization** with fixed key order:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"version": 1,
|
|
83
|
+
"step": "planning",
|
|
84
|
+
"mode": "supervised",
|
|
85
|
+
"binary": "claude",
|
|
86
|
+
"started_at": "2026-04-01T10:00:00.000Z",
|
|
87
|
+
"completed_at": "2026-04-01T10:05:00.000Z",
|
|
88
|
+
"output_hash": "sha256:a1b2c3...",
|
|
89
|
+
"input_tokens": 1000,
|
|
90
|
+
"output_tokens": 2000,
|
|
91
|
+
"rules_snapshot": ["global.md", "backend.md"],
|
|
92
|
+
"review_score": null,
|
|
93
|
+
"review_summary": null
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Why this works:**
|
|
98
|
+
- Changing any single field in any history entry invalidates the entire chain
|
|
99
|
+
- The chain is computed from `canonical_entries` stored in the certificate, making verification **self-contained** — no access to original state files needed
|
|
100
|
+
- `raw_output` is excluded (can be megabytes) but cryptographically bound via `output_hash`
|
|
101
|
+
|
|
102
|
+
### 3.3 Self-Sealing
|
|
103
|
+
|
|
104
|
+
After building the full payload, the certificate computes its own hash:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
certificate_hash = SHA-256(JSON.stringify(payload_without_certificate_hash))
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This creates a **sealed envelope** — modifying any field (score, status, issues, timestamps) after generation invalidates the `certificate_hash`.
|
|
111
|
+
|
|
112
|
+
### 3.4 Verification Pipeline
|
|
113
|
+
|
|
114
|
+
`arc certificate <task> --verify` runs **5 independent checks**:
|
|
115
|
+
|
|
116
|
+
| # | Check | What It Proves |
|
|
117
|
+
| :--- | :--- | :--- |
|
|
118
|
+
| 1 | `status_validity` | Task was `approved` or `merged` — not prematurely certified |
|
|
119
|
+
| 2 | `review_completeness` | A final review with score and summary exists |
|
|
120
|
+
| 3 | `certificate_hash` | The certificate payload has not been modified since generation |
|
|
121
|
+
| 4 | `chain_hash` | The history entry chain has not been tampered with |
|
|
122
|
+
| 5 | `entry_hash_consistency` | Output hashes in canonical entries match the entry_hashes array |
|
|
123
|
+
|
|
124
|
+
All 5 checks must pass for the certificate to be marked `VALID`. The verifier reports **all** failures, not just the first — enabling full diagnosis.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 4. What This Feature Builds On
|
|
129
|
+
|
|
130
|
+
### 4.1 Existing Infrastructure Used
|
|
131
|
+
|
|
132
|
+
The certificate was built entirely on existing nomos-arc.ai infrastructure with **zero new dependencies**:
|
|
133
|
+
|
|
134
|
+
| Component | Location | What It Provides |
|
|
135
|
+
| :--- | :--- | :--- |
|
|
136
|
+
| `TaskState` | `src/types/index.ts` | Full task lifecycle data: history, rules, budget, shadow branch |
|
|
137
|
+
| `HistoryEntry.output_hash` | `src/core/orchestrator.ts:425` | Per-entry SHA-256 of raw AI output — already computed during plan/review |
|
|
138
|
+
| `context.rules_hash` | `src/types/index.ts:128` | SHA-256 of concatenated rules — governance snapshot |
|
|
139
|
+
| `StateManager` | `src/core/state.ts` | Read task state via `orchestrator.status()` |
|
|
140
|
+
| `createOrchestrator()` factory | `src/core/factory.ts` | Standard command bootstrap pattern |
|
|
141
|
+
| Node.js `crypto` | Built-in | SHA-256 computation — no external crypto libraries needed |
|
|
142
|
+
| `zod` | Already in dependencies | Certificate schema validation for `--verify` |
|
|
143
|
+
|
|
144
|
+
### 4.2 Design Decisions
|
|
145
|
+
|
|
146
|
+
| Decision | Rationale |
|
|
147
|
+
| :--- | :--- |
|
|
148
|
+
| **No digital signatures (yet)** | No key infrastructure exists in the project. Hash chaining provides tamper-evidence. `certificate_version: 1` enables future migration to JWS/GPG signing. |
|
|
149
|
+
| **`raw_output` excluded** | Can be megabytes of AI-generated code. Bound cryptographically via `output_hash`. Prevents certificate bloat and avoids leaking sensitive code to auditors. |
|
|
150
|
+
| **`canonical_entries` stored in certificate** | Makes verification fully self-contained. Without them, a verifier would need access to the original `TaskState` to recompute the chain. |
|
|
151
|
+
| **JSON only (for now)** | `--format` flag accepts `json`. PDF rendering can be layered on top without changing the data model — it reads the JSON and renders a human-readable report. |
|
|
152
|
+
| **Iterations grouped by version** | Matches how an auditor thinks: "For version N, what was planned and what was the review?" — not a flat list of entries. |
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 5. Implementation Summary
|
|
157
|
+
|
|
158
|
+
### 5.1 Files
|
|
159
|
+
|
|
160
|
+
| File | Type | Lines | Purpose |
|
|
161
|
+
| :--- | :--- | :---: | :--- |
|
|
162
|
+
| `src/types/index.ts` | Modified | +90 | `CertificatePayload`, `CertificateIteration`, `VerificationResult`, `VerificationCheck` interfaces |
|
|
163
|
+
| `src/core/errors.ts` | Modified | +3 | `certificate_not_eligible`, `certificate_not_found`, `certificate_invalid` error codes |
|
|
164
|
+
| `src/cli.ts` | Modified | +2 | Command registration |
|
|
165
|
+
| `src/core/certificate.ts` | **New** | 502 | `CertificateEngine` — generate, verify, parse, chain hash computation |
|
|
166
|
+
| `src/commands/certificate.ts` | **New** | 89 | CLI command with `--verify`, `--output`, `--format` |
|
|
167
|
+
| `src/core/__tests__/certificate.test.ts` | **New** | 280 | 26 unit tests |
|
|
168
|
+
|
|
169
|
+
### 5.2 CLI Usage
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# Generate a certificate for a completed task
|
|
173
|
+
arc certificate my-task-001
|
|
174
|
+
|
|
175
|
+
# Output:
|
|
176
|
+
# Certificate Generated
|
|
177
|
+
# ──────────────────────────────────────────────────
|
|
178
|
+
# Task: my-task-001
|
|
179
|
+
# Status: approved
|
|
180
|
+
# Iterations: 2
|
|
181
|
+
# Final Score: 0.92
|
|
182
|
+
# Approval: score_threshold
|
|
183
|
+
# Chain Hash: sha256:a1b2c3d4...
|
|
184
|
+
# Certificate: sha256:e5f6a7b8...
|
|
185
|
+
# ──────────────────────────────────────────────────
|
|
186
|
+
# Saved to: tasks-management/certificates/my-task-001.certificate.json
|
|
187
|
+
|
|
188
|
+
# Verify an existing certificate
|
|
189
|
+
arc certificate my-task-001 --verify
|
|
190
|
+
|
|
191
|
+
# Output:
|
|
192
|
+
# Certificate Verification: my-task-001
|
|
193
|
+
# ──────────────────────────────────────────────────
|
|
194
|
+
# [PASS] status_validity
|
|
195
|
+
# Task status "approved" is eligible for certification
|
|
196
|
+
# [PASS] review_completeness
|
|
197
|
+
# Final review present with score 0.92
|
|
198
|
+
# [PASS] certificate_hash
|
|
199
|
+
# Certificate self-hash is valid — payload has not been modified
|
|
200
|
+
# [PASS] chain_hash
|
|
201
|
+
# Chain hash is valid — history entries have not been tampered with
|
|
202
|
+
# [PASS] entry_hash_consistency
|
|
203
|
+
# All 4 entry hashes are consistent
|
|
204
|
+
# ──────────────────────────────────────────────────
|
|
205
|
+
# Result: VALID
|
|
206
|
+
|
|
207
|
+
# Custom output path
|
|
208
|
+
arc certificate my-task-001 --output ./compliance/cert.json
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 5.3 Test Coverage
|
|
212
|
+
|
|
213
|
+
| Test Category | Count | Coverage |
|
|
214
|
+
| :--- | :---: | :--- |
|
|
215
|
+
| `computeChainHash` — determinism, tampering, ordering | 5 | Chain hash computation correctness |
|
|
216
|
+
| `generate()` — happy path, edge cases, validation | 8 | Certificate generation from TaskState |
|
|
217
|
+
| `verify()` — untampered, tampered fields, multi-failure | 6 | All 5 verification checks |
|
|
218
|
+
| `parse()` — valid JSON, malformed, missing fields | 3 | Zod schema validation |
|
|
219
|
+
| Round-trip integrity | 1 | generate → serialize → parse → verify |
|
|
220
|
+
| **Total** | **26** | **All passing** |
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 6. Certificate JSON Example
|
|
225
|
+
|
|
226
|
+
```json
|
|
227
|
+
{
|
|
228
|
+
"certificate_version": 1,
|
|
229
|
+
"generated_at": "2026-04-04T12:00:00.000Z",
|
|
230
|
+
"generator": "nomos-arc@0.1.0",
|
|
231
|
+
"task_id": "implement-auth-middleware",
|
|
232
|
+
"task_status": "approved",
|
|
233
|
+
"created_at": "2026-04-01T09:00:00.000Z",
|
|
234
|
+
"completed_at": "2026-04-02T11:03:00.000Z",
|
|
235
|
+
"repository": {
|
|
236
|
+
"base_commit": "a1b2c3d4e5f6",
|
|
237
|
+
"shadow_branch": "nomos/implement-auth-middleware",
|
|
238
|
+
"branch_status": "active"
|
|
239
|
+
},
|
|
240
|
+
"models": {
|
|
241
|
+
"planner": "claude",
|
|
242
|
+
"reviewer": "codex"
|
|
243
|
+
},
|
|
244
|
+
"rules": {
|
|
245
|
+
"files": ["global.md", "backend.md"],
|
|
246
|
+
"rules_hash": "sha256:9f86d081884c..."
|
|
247
|
+
},
|
|
248
|
+
"iterations": [
|
|
249
|
+
{
|
|
250
|
+
"version": 1,
|
|
251
|
+
"planning": {
|
|
252
|
+
"binary": "claude",
|
|
253
|
+
"mode": "supervised",
|
|
254
|
+
"started_at": "2026-04-01T10:00:00.000Z",
|
|
255
|
+
"completed_at": "2026-04-01T10:05:00.000Z",
|
|
256
|
+
"output_hash": "sha256:e3b0c44298fc...",
|
|
257
|
+
"tokens": { "input": 1000, "output": 2000, "source": "metered" },
|
|
258
|
+
"rules_snapshot": ["global.md", "backend.md"]
|
|
259
|
+
},
|
|
260
|
+
"review": {
|
|
261
|
+
"binary": "codex",
|
|
262
|
+
"mode": "auto",
|
|
263
|
+
"started_at": "2026-04-01T11:00:00.000Z",
|
|
264
|
+
"completed_at": "2026-04-01T11:03:00.000Z",
|
|
265
|
+
"output_hash": "sha256:d7a8fbb307d7...",
|
|
266
|
+
"tokens": { "input": 500, "output": 800, "source": "metered" },
|
|
267
|
+
"score": 0.65,
|
|
268
|
+
"issues": [
|
|
269
|
+
{
|
|
270
|
+
"severity": "high",
|
|
271
|
+
"category": "security",
|
|
272
|
+
"description": "JWT secret hardcoded in middleware",
|
|
273
|
+
"suggestion": "Move to environment variable"
|
|
274
|
+
}
|
|
275
|
+
],
|
|
276
|
+
"summary": "Security issue found. Score below threshold."
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"version": 2,
|
|
281
|
+
"planning": { "..." : "second iteration after refinement" },
|
|
282
|
+
"review": {
|
|
283
|
+
"score": 0.92,
|
|
284
|
+
"issues": [],
|
|
285
|
+
"summary": "All issues resolved. Code meets standards."
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
],
|
|
289
|
+
"final_review": {
|
|
290
|
+
"score": 0.92,
|
|
291
|
+
"summary": "All issues resolved. Code meets standards.",
|
|
292
|
+
"issues": [],
|
|
293
|
+
"approval_reason": "score_threshold"
|
|
294
|
+
},
|
|
295
|
+
"budget": {
|
|
296
|
+
"total_tokens": 8600,
|
|
297
|
+
"estimated_cost_usd": 0.0215,
|
|
298
|
+
"token_breakdown": { "input_tokens": 3000, "output_tokens": 5600 }
|
|
299
|
+
},
|
|
300
|
+
"integrity": {
|
|
301
|
+
"chain_hash": "sha256:7d865e959b24...",
|
|
302
|
+
"entry_hashes": [
|
|
303
|
+
"sha256:e3b0c44298fc...",
|
|
304
|
+
"sha256:d7a8fbb307d7...",
|
|
305
|
+
"sha256:4e07408562be...",
|
|
306
|
+
"sha256:ef2d127de37b..."
|
|
307
|
+
],
|
|
308
|
+
"canonical_entries": ["...", "...", "...", "..."],
|
|
309
|
+
"chain_algorithm": "sha256-sequential"
|
|
310
|
+
},
|
|
311
|
+
"certificate_hash": "sha256:2c624232cdd2..."
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## 7. Future Roadmap
|
|
318
|
+
|
|
319
|
+
| Enhancement | Priority | Dependency |
|
|
320
|
+
| :--- | :--- | :--- |
|
|
321
|
+
| **GPG/SSH Signing** — Digital signature on `certificate_hash` for non-repudiation | Medium | Key management infrastructure |
|
|
322
|
+
| **PDF Export** — Human-readable report from certificate JSON | High | None (reads existing JSON) |
|
|
323
|
+
| **CI/CD Gate** — Block merge unless valid certificate exists | Critical | GitHub Action integration |
|
|
324
|
+
| **Certificate Registry** — Central storage of all certificates | Medium | Dashboard feature |
|
|
325
|
+
| **Merkle Tree** — Upgrade from sequential chain to full Merkle tree for partial verification | Low | Scale requirement (100+ entries per task) |
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## 8. Conclusion
|
|
330
|
+
|
|
331
|
+
The Certificate of AI Engineering Integrity transforms nomos-arc.ai from a developer tool into **compliance infrastructure**. It is the artifact that a CTO shows the board to prove AI usage is under control. No other tool in the market produces a verifiable, tamper-proof record of AI-assisted engineering.
|
|
332
|
+
|
|
333
|
+
The implementation required **zero new dependencies**, builds entirely on existing infrastructure (`TaskState`, `output_hash`, `rules_hash`), and is validated by **26 passing tests** covering generation, verification, tampering detection, and round-trip integrity.
|
|
334
|
+
|
|
335
|
+
```
|
|
336
|
+
arc certificate <task-id> → The proof.
|
|
337
|
+
arc certificate <task-id> --verify → The verification.
|
|
338
|
+
```
|