archctx-contracts 0.1.5

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 (100) hide show
  1. package/fixtures/boundary/agent-job-expired.json +33 -0
  2. package/fixtures/boundary/architecture-event-extension.json +41 -0
  3. package/fixtures/boundary/architecture-node-extension.json +13 -0
  4. package/fixtures/boundary/attestation-v2-error.json +43 -0
  5. package/fixtures/boundary/check-delivery-dead-letter.json +14 -0
  6. package/fixtures/boundary/evidence-binding-context-only.json +20 -0
  7. package/fixtures/boundary/practice-disabled-overlay.json +59 -0
  8. package/fixtures/boundary/recommendation-deferred.json +19 -0
  9. package/fixtures/boundary/review-challenge-v2-organization.json +15 -0
  10. package/fixtures/boundary/runner-identity-organization-scope.json +16 -0
  11. package/fixtures/invalid/adapter-fidelity-reverse-sync.json +9 -0
  12. package/fixtures/invalid/agent-job-direct-mutation.json +32 -0
  13. package/fixtures/invalid/architecture-event-source-body-field.json +39 -0
  14. package/fixtures/invalid/architecture-snapshot-unknown-mode.json +29 -0
  15. package/fixtures/invalid/attestation-v2-finding-field.json +39 -0
  16. package/fixtures/invalid/check-delivery-legacy-check-name.json +14 -0
  17. package/fixtures/invalid/cloud-egress-envelope-private-field.json +12 -0
  18. package/fixtures/invalid/compatibility-illegal-reason.json +17 -0
  19. package/fixtures/invalid/evidence-binding-summary-substring-authority.json +17 -0
  20. package/fixtures/invalid/evidence-item-source-body-field.json +27 -0
  21. package/fixtures/invalid/explorer-projection-write-field.json +21 -0
  22. package/fixtures/invalid/investigation-report-direct-mutation.json +38 -0
  23. package/fixtures/invalid/investigation-report-missing-proposed-delta.json +19 -0
  24. package/fixtures/invalid/node-unknown-field.json +10 -0
  25. package/fixtures/invalid/notification-event-code-field.json +11 -0
  26. package/fixtures/invalid/practice-policy-empty-test-evidence.json +15 -0
  27. package/fixtures/invalid/practice-policy-negative-recommendation-budget.json +10 -0
  28. package/fixtures/invalid/practice-unknown-field.json +56 -0
  29. package/fixtures/invalid/projection-target-invalid-ownership.json +18 -0
  30. package/fixtures/invalid/recommendation-feedback-implicit-acceptance.json +29 -0
  31. package/fixtures/invalid/recommendation-run-raw-input-field.json +33 -0
  32. package/fixtures/invalid/recommendation-source-body-field.json +17 -0
  33. package/fixtures/invalid/review-challenge-v2-private-field.json +16 -0
  34. package/fixtures/valid/adapter-fidelity.json +9 -0
  35. package/fixtures/valid/agent-job.json +33 -0
  36. package/fixtures/valid/architecture-candidate-delta-policy.json +45 -0
  37. package/fixtures/valid/architecture-candidate-delta.json +188 -0
  38. package/fixtures/valid/architecture-event.json +39 -0
  39. package/fixtures/valid/architecture-intervention.json +36 -0
  40. package/fixtures/valid/architecture-node.json +25 -0
  41. package/fixtures/valid/architecture-relation.json +14 -0
  42. package/fixtures/valid/architecture-snapshot.json +31 -0
  43. package/fixtures/valid/architecture-subject-selector.json +9 -0
  44. package/fixtures/valid/attestation-v2.json +38 -0
  45. package/fixtures/valid/attestation.json +25 -0
  46. package/fixtures/valid/changeset.json +30 -0
  47. package/fixtures/valid/chatgpt-ga-tool.json +9 -0
  48. package/fixtures/valid/check-delivery.json +14 -0
  49. package/fixtures/valid/cloud-egress-envelope.json +11 -0
  50. package/fixtures/valid/compatibility-contract.json +19 -0
  51. package/fixtures/valid/constraint.json +22 -0
  52. package/fixtures/valid/cross-repo-relation.json +23 -0
  53. package/fixtures/valid/device-identity.json +10 -0
  54. package/fixtures/valid/entitlement.json +12 -0
  55. package/fixtures/valid/evidence-binding.json +17 -0
  56. package/fixtures/valid/evidence-item.json +29 -0
  57. package/fixtures/valid/explorer-projection.json +53 -0
  58. package/fixtures/valid/explorer-service.json +11 -0
  59. package/fixtures/valid/external-document-resource.json +29 -0
  60. package/fixtures/valid/governance-key-status.json +11 -0
  61. package/fixtures/valid/investigation-report.json +38 -0
  62. package/fixtures/valid/landscape.json +36 -0
  63. package/fixtures/valid/likec4-mapping.json +14 -0
  64. package/fixtures/valid/notification-event.json +10 -0
  65. package/fixtures/valid/notification-provider.json +12 -0
  66. package/fixtures/valid/org-runner-identity.json +10 -0
  67. package/fixtures/valid/practice-catalog-manifest.json +16 -0
  68. package/fixtures/valid/practice-check-result.json +17 -0
  69. package/fixtures/valid/practice-checkpoint.json +94 -0
  70. package/fixtures/valid/practice-guidance.json +42 -0
  71. package/fixtures/valid/practice-match.json +23 -0
  72. package/fixtures/valid/practice-policy.json +33 -0
  73. package/fixtures/valid/practice-profile.json +22 -0
  74. package/fixtures/valid/practice-source.json +19 -0
  75. package/fixtures/valid/practice-waiver.json +14 -0
  76. package/fixtures/valid/practice.json +93 -0
  77. package/fixtures/valid/product-version-manifest.json +51 -0
  78. package/fixtures/valid/projection-target.json +18 -0
  79. package/fixtures/valid/recommendation-feedback.json +29 -0
  80. package/fixtures/valid/recommendation-run.json +33 -0
  81. package/fixtures/valid/recommendation.json +17 -0
  82. package/fixtures/valid/retrieval-config.json +20 -0
  83. package/fixtures/valid/retrieval-decision.json +26 -0
  84. package/fixtures/valid/retrieval-eval.json +14 -0
  85. package/fixtures/valid/review-challenge-v2.json +15 -0
  86. package/fixtures/valid/review-result.json +32 -0
  87. package/fixtures/valid/runner-identity.json +13 -0
  88. package/fixtures/valid/structurizr-mapping.json +15 -0
  89. package/fixtures/valid/task-context.json +23 -0
  90. package/package.json +17 -0
  91. package/src/control-plane-routes.ts +35 -0
  92. package/src/external-docs.ts +137 -0
  93. package/src/github-governance.ts +850 -0
  94. package/src/index.ts +9 -0
  95. package/src/ledger.ts +649 -0
  96. package/src/ports.ts +385 -0
  97. package/src/practices.ts +433 -0
  98. package/src/product-version.ts +108 -0
  99. package/src/schema.ts +145 -0
  100. package/src/validator.ts +95 -0
@@ -0,0 +1,42 @@
1
+ {
2
+ "schemaVersion": "archcontext.practice-guidance/v1",
3
+ "catalogDigest": "sha256:235dc7f02375c408a1b1497d0d5bca444abde26519875e2d396f770ae5d3b892",
4
+ "overlayDigest": "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
5
+ "matches": [
6
+ {
7
+ "schemaVersion": "archcontext.practice-match/v1",
8
+ "practiceId": "compatibility.single-owner",
9
+ "assetRevision": 1,
10
+ "assetDigest": "sha256:52c1f1ed2128f56e0a3e4f07303efa34bda507da54bd0e7914d7cf17f6f27843",
11
+ "title": "Compatibility paths require one lifecycle owner",
12
+ "category": "compatibility",
13
+ "score": 87,
14
+ "confidence": "high",
15
+ "enforcement": "checkpoint",
16
+ "matchedBy": ["predicate", "retrieval", "scope", "signal"],
17
+ "evidence": [
18
+ {
19
+ "kind": "symbol",
20
+ "strength": "observed",
21
+ "subject": "symbol.billingLegacyV1",
22
+ "digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
23
+ "observedAt": "1970-01-01T00:00:00.000Z"
24
+ }
25
+ ],
26
+ "explanation": ["compatibility.single-owner: A compatibility path must have one accountable owner."],
27
+ "sourceTrust": "curated-static"
28
+ }
29
+ ],
30
+ "constraints": ["compatibility.single-owner: A compatibility path must have one accountable owner."],
31
+ "decisions": [],
32
+ "realConstraints": ["compatibility.single-owner:symbol.billingLegacyV1"],
33
+ "unknowns": [],
34
+ "requiredCheckpoints": ["practice:compatibility.single-owner@1"],
35
+ "resources": [
36
+ {
37
+ "type": "practice",
38
+ "uri": "archcontext://practice/compatibility.single-owner@1",
39
+ "digest": "sha256:52c1f1ed2128f56e0a3e4f07303efa34bda507da54bd0e7914d7cf17f6f27843"
40
+ }
41
+ ]
42
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "schemaVersion": "archcontext.practice-match/v1",
3
+ "practiceId": "compatibility.single-owner",
4
+ "assetRevision": 1,
5
+ "assetDigest": "sha256:52c1f1ed2128f56e0a3e4f07303efa34bda507da54bd0e7914d7cf17f6f27843",
6
+ "title": "Compatibility paths require one lifecycle owner",
7
+ "category": "compatibility",
8
+ "score": 87,
9
+ "confidence": "high",
10
+ "enforcement": "checkpoint",
11
+ "matchedBy": ["predicate", "retrieval", "scope", "signal"],
12
+ "evidence": [
13
+ {
14
+ "kind": "symbol",
15
+ "strength": "observed",
16
+ "subject": "symbol.billingLegacyV1",
17
+ "digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
18
+ "observedAt": "1970-01-01T00:00:00.000Z"
19
+ }
20
+ ],
21
+ "explanation": ["compatibility.single-owner: A compatibility path must have one accountable owner."],
22
+ "sourceTrust": "curated-static"
23
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "schemaVersion": "archcontext.practice-enforcement-policy/v1",
3
+ "mode": "active",
4
+ "recommendations": {
5
+ "enabled": true,
6
+ "policyMode": "advisory",
7
+ "frequency": {
8
+ "minIntervalMs": 60000,
9
+ "cooldownMs": 604800000
10
+ },
11
+ "budgets": {
12
+ "maxRecommendationsPerRun": 25,
13
+ "maxL3InvestigationsPerRun": 1,
14
+ "maxRunsPerTask": 1,
15
+ "maxRunsPerRepositoryPerDay": 25,
16
+ "maxRunsPerDay": 100
17
+ }
18
+ },
19
+ "rules": [
20
+ {
21
+ "practiceId": "api.contract-before-implementation",
22
+ "enforcement": "complete",
23
+ "checkIds": ["required-test-evidence"],
24
+ "testEvidence": {
25
+ "commands": ["bun test packages/api-contract.test.ts"],
26
+ "subjects": ["schema.public-api"]
27
+ },
28
+ "scope": {
29
+ "pathGlobs": ["packages/**"]
30
+ }
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "schemaVersion": "archcontext.practice-profile/v1",
3
+ "id": "profile.typescript.service",
4
+ "revision": 1,
5
+ "status": "active",
6
+ "title": "TypeScript service profile",
7
+ "repositoryKinds": ["service"],
8
+ "languages": ["typescript"],
9
+ "frameworks": [],
10
+ "includePracticeIds": ["compatibility.single-owner"],
11
+ "excludePracticeIds": [],
12
+ "provenance": {
13
+ "sourceKind": "archcontext-native",
14
+ "sourceRefs": [
15
+ {
16
+ "sourceId": "archcontext.spec"
17
+ }
18
+ ],
19
+ "curator": "archcontext-maintainers",
20
+ "reviewedAt": "2026-06-23"
21
+ }
22
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "schemaVersion": "archcontext.practice-source/v1",
3
+ "id": "archcontext.adr.0010",
4
+ "name": "ADR-0010 Compatibility Code Requires Contract",
5
+ "sourceType": "archcontext",
6
+ "uri": "docs/adr/ADR-0010-compatibility-code-requires-contract.md",
7
+ "revision": "2026-06-23",
8
+ "licenseSpdx": "NOASSERTION",
9
+ "licenseLevel": "A",
10
+ "usagePolicy": "repo-authored",
11
+ "retrievedAt": "2026-06-23T00:00:00Z",
12
+ "contentDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
13
+ "attribution": "ArchContext maintainers",
14
+ "review": {
15
+ "status": "approved",
16
+ "reviewer": "archcontext-maintainers",
17
+ "reviewedAt": "2026-06-23"
18
+ }
19
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "schemaVersion": "archcontext.practice-waiver/v1",
3
+ "practiceId": "modularity.no-new-cycle",
4
+ "checkId": "no-new-cycle",
5
+ "scope": {
6
+ "subjects": ["module.a->module.b"]
7
+ },
8
+ "owner": "team-architecture",
9
+ "reason": "External migration window requires keeping this edge until the cutover date.",
10
+ "createdAt": "2026-06-24T00:00:00.000Z",
11
+ "reviewAt": "2026-07-10T00:00:00.000Z",
12
+ "expiresAt": "2026-07-24T00:00:00.000Z",
13
+ "evidenceDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
14
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "schemaVersion": "archcontext.practice/v1",
3
+ "id": "compatibility.single-owner",
4
+ "revision": 1,
5
+ "status": "active",
6
+ "title": "Compatibility paths require one lifecycle owner",
7
+ "summary": "A compatibility path must have one accountable owner and a bounded removal condition.",
8
+ "category": "compatibility",
9
+ "tags": ["compatibility", "migration"],
10
+ "appliesTo": {
11
+ "repositoryKinds": ["application", "service", "library"],
12
+ "languages": [],
13
+ "frameworks": [],
14
+ "pathGlobs": ["**/*"],
15
+ "nodeKinds": ["module", "service", "public-api"]
16
+ },
17
+ "triggers": {
18
+ "candidateTerms": ["compatibility", "legacy", "fallback"],
19
+ "pressureSignals": ["unjustified-wrapper-adapter"],
20
+ "structuralPredicates": ["compatibility-path-added"]
21
+ },
22
+ "evidencePolicy": {
23
+ "minimumStrengthForRecommendation": "heuristic",
24
+ "minimumStrengthForCheckpoint": "observed",
25
+ "minimumStrengthForEnforcement": "observed",
26
+ "requiredKindsForEnforcement": ["diff", "symbol"],
27
+ "maxEnforcementWhenOnlyHeuristic": "advisory"
28
+ },
29
+ "guidance": {
30
+ "questions": ["Who owns removal?"],
31
+ "preferred": ["Adapt at one boundary."],
32
+ "avoid": ["Permanent fallback code."]
33
+ },
34
+ "checks": [
35
+ {
36
+ "checkId": "compatibility-contract-required",
37
+ "mode": "deterministic",
38
+ "parameters": {
39
+ "requireOwner": true
40
+ }
41
+ }
42
+ ],
43
+ "enforcement": {
44
+ "default": "advisory",
45
+ "promotableTo": "complete",
46
+ "repoOptInRequired": true,
47
+ "fixtureGate": {
48
+ "positive": [
49
+ {
50
+ "id": "fixture.compatibility.single-owner.positive",
51
+ "path": "evals/practices/enforcement-waiver-adversarial.jsonl",
52
+ "description": "Compatibility path with missing owner fails when opted into complete enforcement."
53
+ }
54
+ ],
55
+ "nearNegative": [
56
+ {
57
+ "id": "fixture.compatibility.single-owner.near-negative",
58
+ "path": "evals/practices/benign-negative.jsonl",
59
+ "description": "Benign legacy wording does not become complete enforcement."
60
+ }
61
+ ],
62
+ "mixedChange": [
63
+ {
64
+ "id": "fixture.compatibility.single-owner.mixed-change",
65
+ "path": "packages/core/practice-engine/test/practice-engine.test.ts",
66
+ "description": "Mixed implementation and test changes keep production evidence scoped."
67
+ }
68
+ ],
69
+ "baseline": [
70
+ {
71
+ "id": "fixture.compatibility.single-owner.baseline",
72
+ "path": "packages/core/practice-engine/test/practice-engine.test.ts",
73
+ "description": "Previous checkpoint baseline keeps existing compatibility paths from being treated as new."
74
+ }
75
+ ]
76
+ }
77
+ },
78
+ "provenance": {
79
+ "sourceKind": "archcontext-native",
80
+ "sourceRefs": [
81
+ {
82
+ "sourceId": "archcontext.adr.0010"
83
+ }
84
+ ],
85
+ "curator": "archcontext-maintainers",
86
+ "reviewedAt": "2026-06-23"
87
+ },
88
+ "lifecycle": {
89
+ "introducedAt": "2026-06-23",
90
+ "reviewAfter": "2027-06-23",
91
+ "supersedes": []
92
+ }
93
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "schemaVersion": "archcontext.product-version-manifest/v1",
3
+ "product": {
4
+ "name": "archctx",
5
+ "version": "0.1.5",
6
+ "distribution": "one-package"
7
+ },
8
+ "packageManager": "bun@1.3.10",
9
+ "engines": {
10
+ "node": ">=24 <26"
11
+ },
12
+ "surfaces": {
13
+ "cli": {
14
+ "packageName": "@archcontext/surfaces",
15
+ "version": "0.1.5",
16
+ "entrypoint": "archctx"
17
+ },
18
+ "daemon": {
19
+ "packageName": "@archcontext/local-runtime",
20
+ "version": "0.1.5",
21
+ "entrypoint": "archctx daemon start",
22
+ "rpcSchemaVersion": "archcontext.runtime-rpc/v1"
23
+ },
24
+ "mcp": {
25
+ "packageName": "@archcontext/surfaces",
26
+ "version": "0.1.5",
27
+ "entrypoint": "archctx mcp",
28
+ "transport": "stdio"
29
+ }
30
+ },
31
+ "schemas": {
32
+ "schemaSetVersion": "2026-06-25.al0-ledger",
33
+ "contractsPackageVersion": "0.1.5",
34
+ "reviewChallenge": "archcontext.review-challenge/v2",
35
+ "attestation": "archcontext.attestation/v2",
36
+ "deviceIdentity": "archcontext.device-identity/v1",
37
+ "runnerIdentity": "archcontext.runner-identity/v1"
38
+ },
39
+ "runtime": {
40
+ "localRpc": {
41
+ "schemaVersion": "archcontext.runtime-rpc/v1",
42
+ "protocol": "http-loopback"
43
+ },
44
+ "sqliteMigrations": "0001_runtime_state..0004_changeset_journal",
45
+ "codeGraph": {
46
+ "packageName": "@colbymchenry/codegraph",
47
+ "requiredVersion": "1.0.1",
48
+ "adapter": "codegraph-cli"
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "schemaVersion": "archcontext.projection-target/v1",
3
+ "targetId": "projection_target.architecture.index",
4
+ "type": "architecture-index",
5
+ "scope": {
6
+ "kind": "repository"
7
+ },
8
+ "path": "docs/architecture/index.md",
9
+ "ownership": "mixed",
10
+ "generatedRegion": {
11
+ "startMarker": "<!-- BEGIN ARCHCONTEXT:generated target=\"projection_target.architecture.index\" -->",
12
+ "endMarker": "<!-- END ARCHCONTEXT:generated target=\"projection_target.architecture.index\" -->"
13
+ },
14
+ "rendererVersion": "archcontext.docs-renderer/v1",
15
+ "format": "markdown",
16
+ "sourceDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
17
+ "outputDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
18
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "schemaVersion": "archcontext.recommendation-feedback/v1",
3
+ "feedbackId": "recommendation_feedback.lifecycle_accept",
4
+ "recommendationId": "recommendation.api-owner",
5
+ "runId": "recommendation_run.scheduler",
6
+ "action": "accept",
7
+ "previousStatus": "open",
8
+ "nextStatus": "accepted",
9
+ "actor": {
10
+ "kind": "cli",
11
+ "id": "developer",
12
+ "source": "cli"
13
+ },
14
+ "reason": "Architecture owner accepted the recommendation after local readback.",
15
+ "explicit": true,
16
+ "implicitAcceptance": false,
17
+ "repository": {
18
+ "repositoryId": "repo.arch-context",
19
+ "storageRepositoryId": "repo.arch-context"
20
+ },
21
+ "worktree": {
22
+ "workspaceId": "workspace.arch-context",
23
+ "storageWorkspaceId": "workspace.arch-context",
24
+ "branch": "codex/al8",
25
+ "headSha": "0123456789abcdef0123456789abcdef01234567",
26
+ "worktreeDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
27
+ },
28
+ "createdAt": "2026-06-26T12:05:00.000Z"
29
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "schemaVersion": "archcontext.recommendation-run/v1",
3
+ "runId": "rec_run.al0_contract",
4
+ "repository": {
5
+ "repositoryId": "repo.archcontext",
6
+ "storageRepositoryId": "storage-repo.archcontext"
7
+ },
8
+ "worktree": {
9
+ "workspaceId": "workspace.main",
10
+ "storageWorkspaceId": "storage-workspace.main",
11
+ "branch": "codex/architecture-ledger-al0",
12
+ "headSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
13
+ "worktreeDigest": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
14
+ },
15
+ "trigger": {
16
+ "level": "L1",
17
+ "source": "checkpoint"
18
+ },
19
+ "engineVersion": "0.1.3",
20
+ "catalogDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
21
+ "inputDigest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
22
+ "outputDigest": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
23
+ "policyMode": "advisory",
24
+ "status": "succeeded",
25
+ "startedAt": "2026-06-25T00:00:00.000Z",
26
+ "completedAt": "2026-06-25T00:00:01.000Z",
27
+ "recommendationIds": ["rec.al0.boundary-import"],
28
+ "metrics": {
29
+ "matchCount": 1,
30
+ "evidenceBindingCount": 1,
31
+ "unboundEvidenceCount": 0
32
+ }
33
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": "archcontext.recommendation/v2",
3
+ "recommendationId": "rec.al0.boundary-import",
4
+ "runId": "rec_run.al0_contract",
5
+ "fingerprint": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
6
+ "subject": "relation.module-api-imports-runtime",
7
+ "practiceId": "modularity.respect-dependency-direction",
8
+ "status": "open",
9
+ "confidence": "medium",
10
+ "enforcement": "advisory",
11
+ "risk": "medium",
12
+ "uncertainty": "low",
13
+ "evidenceBindingIds": ["binding.evidence.al0.boundary-import"],
14
+ "explanation": ["Recommendation is supported by a typed predicate subject and bound evidence."],
15
+ "createdAt": "2026-06-25T00:00:00.000Z",
16
+ "updatedAt": "2026-06-25T00:00:00.000Z"
17
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "schemaVersion": "archcontext.retrieval-config/v1",
3
+ "defaultMode": "lexical",
4
+ "lexical": {
5
+ "enabled": true,
6
+ "tokenizer": "english-normalized+jieba-search"
7
+ },
8
+ "embedding": {
9
+ "enabled": false,
10
+ "provider": "local-deterministic",
11
+ "dimensions": 64,
12
+ "egress": "forbidden"
13
+ },
14
+ "decisionGate": {
15
+ "minContextRecallLift": 0.08,
16
+ "minConstraintRecallLift": 0.05,
17
+ "maxIrrelevantRatio": 0.25,
18
+ "maxToolCallIncrease": 0
19
+ }
20
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "schemaVersion": "archcontext.retrieval-decision/v1",
3
+ "decidedAt": "2026-06-20T00:00:00.000Z",
4
+ "baseline": {
5
+ "mode": "lexical",
6
+ "contextRecall": 0.8,
7
+ "constraintRecall": 0.75,
8
+ "irrelevantRatio": 0.1,
9
+ "toolCalls": 1
10
+ },
11
+ "candidate": {
12
+ "mode": "embedding",
13
+ "contextRecall": 0.82,
14
+ "constraintRecall": 0.76,
15
+ "irrelevantRatio": 0.12,
16
+ "toolCalls": 1
17
+ },
18
+ "thresholds": {
19
+ "minContextRecallLift": 0.08,
20
+ "minConstraintRecallLift": 0.05,
21
+ "maxIrrelevantRatio": 0.25,
22
+ "maxToolCallIncrease": 0
23
+ },
24
+ "decision": "keep-lexical",
25
+ "evidenceDigest": "sha256:3333333333333333333333333333333333333333333333333333333333333333"
26
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "schemaVersion": "archcontext.retrieval-eval/v1",
3
+ "id": "eval.local-context-recall.v1",
4
+ "seed": 42,
5
+ "queries": [
6
+ {
7
+ "id": "q.loopback-explorer",
8
+ "text": "show the local explorer loopback boundary",
9
+ "expectedContextIds": ["adr.0032", "guardrail.local-loopback"],
10
+ "expectedConstraintIds": ["constraint.zero-egress"],
11
+ "prohibitedContextIds": ["saas.source-upload"]
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "schemaVersion": "archcontext.review-challenge/v2",
3
+ "challengeId": "chal_20260620_0001",
4
+ "installationId": 10001,
5
+ "repositoryId": 20002,
6
+ "pullRequestNumber": 42,
7
+ "headSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
8
+ "baseSha": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
9
+ "nonce": "nonce_base64url_0001",
10
+ "requiredTrust": "developer",
11
+ "policyProfileId": "policy.default",
12
+ "createdAt": "2026-06-20T09:00:00Z",
13
+ "expiresAt": "2026-06-20T09:15:00Z",
14
+ "status": "PENDING"
15
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "schemaVersion": "archcontext.review/v1",
3
+ "reviewId": "review_123",
4
+ "taskSessionId": "task_123",
5
+ "snapshot": {
6
+ "headSha": "abc123",
7
+ "worktreeDigest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
8
+ "modelDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
9
+ "codeFactsDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
10
+ },
11
+ "posture": "intervention",
12
+ "result": "fail_action_required",
13
+ "summary": {
14
+ "errors": 1,
15
+ "warnings": 2,
16
+ "notices": 1
17
+ },
18
+ "findings": [
19
+ {
20
+ "id": "finding_1",
21
+ "type": "unjustified-compatibility-path",
22
+ "severity": "error",
23
+ "evidenceRefs": ["evidence_12"],
24
+ "message": "LegacyStatusMapper has no compatibility contract.",
25
+ "recommendedAction": "Migrate internal callers and delete the mapper."
26
+ }
27
+ ],
28
+ "cleanup": {
29
+ "required": 3,
30
+ "completed": 2
31
+ }
32
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "schemaVersion": "archcontext.runner-identity/v1",
3
+ "runnerId": "runner_0001",
4
+ "installationId": 10001,
5
+ "repositoryIds": [20002],
6
+ "workflowRef": "owner/repo/.github/workflows/archcontext-review.yml@refs/heads/main",
7
+ "publicKeyId": "key_runner_0001",
8
+ "publicKeyFingerprint": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
9
+ "status": "active",
10
+ "createdAt": "2026-06-20T09:00:00Z",
11
+ "rotatedAt": null,
12
+ "revokedAt": null
13
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "schemaVersion": "archcontext.structurizr-mapping/v1",
3
+ "id": "mapping.structurizr.native",
4
+ "exportMode": "export-first",
5
+ "native": {
6
+ "nodeKinds": ["capability", "module", "component", "interface", "datastore", "external-system"],
7
+ "relationKinds": ["depends-on", "calls", "publishes", "subscribes", "reads", "writes"]
8
+ },
9
+ "structurizr": {
10
+ "workspace": "ArchContext",
11
+ "model": ["softwareSystem", "container", "component"],
12
+ "views": ["systemLandscape", "container", "component"]
13
+ },
14
+ "views": ["systemLandscape", "container"]
15
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "schemaVersion": "archcontext.task-context/v1",
3
+ "task": "Add team invitations and role-based access",
4
+ "posture": "structural",
5
+ "architecturePressure": {
6
+ "level": "medium",
7
+ "score": 47,
8
+ "signals": []
9
+ },
10
+ "refactorConfidence": {
11
+ "level": "high",
12
+ "score": 82,
13
+ "coverage": []
14
+ },
15
+ "relevantNodes": ["module.auth", "module.team"],
16
+ "constraints": ["constraint.authorization-boundary"],
17
+ "decisions": ["adr.0009.permission-model"],
18
+ "realConstraints": [],
19
+ "unknowns": [],
20
+ "recommendedTargetState": {},
21
+ "requiredCheckpoints": ["after-data-model-change", "before-task-complete"],
22
+ "resources": []
23
+ }
package/package.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "archctx-contracts",
3
+ "version": "0.1.5",
4
+ "private": false,
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "files": [
8
+ "src",
9
+ "fixtures"
10
+ ],
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "exports": {
15
+ ".": "./src/index.ts"
16
+ }
17
+ }
@@ -0,0 +1,35 @@
1
+ import { digestJson } from "./schema";
2
+
3
+ export const CONTROL_PLANE_ROUTES = [
4
+ "GET /oauth/github/start",
5
+ "POST /oauth/github/callback",
6
+ "POST /device/authorize",
7
+ "POST /device/complete",
8
+ "GET /entitlements/:repository",
9
+ "POST /github/webhook",
10
+ "POST /stripe/webhook",
11
+ "GET /v1/challenges",
12
+ "POST /v1/challenges",
13
+ "GET /v1/challenges/:challenge",
14
+ "POST /v1/challenges/:challenge/lease",
15
+ "POST /v1/challenges/:challenge/attestations",
16
+ "POST /v1/challenges/:challenge/cancel",
17
+ "POST /v1/device-keys",
18
+ "POST /v1/device-keys/:device/revoke",
19
+ "POST /v1/runner-keys",
20
+ "POST /v1/runner-keys/:runner/rotate",
21
+ "POST /v1/runner-keys/:runner/revoke",
22
+ "POST /attestations/verify",
23
+ "POST /org-runners",
24
+ "POST /org-runners/:runner/revoke",
25
+ "GET /mcp/metadata",
26
+ "GET /chatgpt/directory",
27
+ "POST /chatgpt/releases/:version/rollback",
28
+ "GET /notifications/providers",
29
+ "PUT /notifications/providers/:provider",
30
+ "POST /notifications/events"
31
+ ] as const;
32
+
33
+ export function controlPlaneRouteDigest(routes: readonly string[] = CONTROL_PLANE_ROUTES): string {
34
+ return digestJson([...routes]);
35
+ }