(proof)
| 255 | ]; |
| 256 | |
| 257 | return { |
| 258 | generatedAt: options.now || new Date().toISOString(), |
| 259 | projectRoot: root, |
| 260 | status: checkStatus(checks), |
| 261 | checks, |
| 262 | summary: { |
| 263 | setup: checks.find((check) => check.id === 'setup')?.status, |
| 264 | orient: checks.find((check) => check.id === 'orient')?.status, |
| 265 | route: checks.find((check) => check.id === 'route')?.status, |
| 266 | verify: checks.find((check) => check.id === 'verify')?.status, |
| 267 | report: checks.find((check) => check.id === 'report')?.status, |
| 268 | }, |
| 269 | }; |
| 270 | } |
| 271 | |
| 272 | function renderProof(proof) { |
| 273 | const lines = [ |
| 274 | 'Citadel Operating Proof', |
| 275 | '='.repeat(40), |
| 276 | `Generated: ${proof.generatedAt}`, |
| 277 | `Project: ${proof.projectRoot}`, |
| 278 | `Status: ${proof.status}`, |
| 279 | '', |
| 280 | 'Checks', |
| 281 | ]; |
| 282 | |
| 283 | for (const check of proof.checks) { |
| 284 | lines.push(`- ${check.id}: ${check.status} - ${check.detail}`); |
| 285 | for (const item of (check.evidence || []).slice(0, 5)) { |
| 286 | lines.push(` evidence: ${item}`); |
| 287 | } |
| 288 | } |
| 289 | |
| 290 | lines.push(''); |
| 291 | lines.push('Interpretation'); |
| 292 | if (proof.status === 'ready') { |
| 293 | lines.push('The project has an inspectable operating loop: setup state, next action, route preview, verification command, and durable artifact evidence.'); |
| 294 | } else if (proof.status === 'partial') { |
| 295 | lines.push('The operating loop is partially inspectable. Follow the partial checks before using this as public proof.'); |
| 296 | } else { |
no outgoing calls
no test coverage detected