archctx-contracts 0.7.1 → 0.8.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 (56) hide show
  1. package/fixtures/invalid/hook-debt-checkpoint-failed-read.json +54 -0
  2. package/fixtures/invalid/native-context-invalid-model-summary.json +635 -0
  3. package/fixtures/invalid/native-context-missing-contract-bytes.json +636 -0
  4. package/fixtures/invalid/native-context-missing-input-bytes.json +636 -0
  5. package/fixtures/invalid/native-context-mixed-snapshot.json +637 -0
  6. package/fixtures/invalid/projection-result-applied-incomplete-coverage.json +78 -0
  7. package/fixtures/invalid/refactor-decision-open-status.json +38 -0
  8. package/fixtures/valid/archctx-capabilities.json +3 -3
  9. package/fixtures/valid/capability-dependencies.json +1 -1
  10. package/fixtures/valid/docs-anchors.json +2 -1
  11. package/fixtures/valid/flow-selector-check.json +1 -1
  12. package/fixtures/valid/hook-debt-checkpoint.json +54 -0
  13. package/fixtures/valid/native-context-export.json +636 -0
  14. package/fixtures/valid/product-version-manifest.json +8 -8
  15. package/fixtures/valid/projection-manifest.json +47 -169
  16. package/fixtures/valid/projection-result.json +5 -5
  17. package/fixtures/valid/refactor-decision.json +38 -0
  18. package/fixtures/valid/runtime-recommendation-show.json +1 -0
  19. package/fixtures/valid/runtime-refactor-scan.json +6 -0
  20. package/package.json +1 -1
  21. package/schemas/repo/refactor-decision.schema.json +218 -0
  22. package/schemas/runtime/archctx-capabilities.schema.json +2 -2
  23. package/schemas/runtime/architecture-debt.schema.json +222 -0
  24. package/schemas/runtime/capability-dependencies.schema.json +10 -6
  25. package/schemas/runtime/changeset.schema.json +24 -1
  26. package/schemas/runtime/docs-anchors.schema.json +4 -3
  27. package/schemas/runtime/hook-debt-checkpoint.schema.json +69 -0
  28. package/schemas/runtime/native-context-export.schema.json +823 -0
  29. package/schemas/runtime/practice-checkpoint.schema.json +1 -0
  30. package/schemas/runtime/product-version-manifest.schema.json +2 -2
  31. package/schemas/runtime/projection-apply-readback.schema.json +470 -7
  32. package/schemas/runtime/projection-apply-recovery.schema.json +2 -2
  33. package/schemas/runtime/projection-manifest.schema.json +81 -186
  34. package/schemas/runtime/projection-result.schema.json +132 -5
  35. package/schemas/runtime/projection-target.schema.json +4 -1
  36. package/schemas/runtime/recommendation-v3.schema.json +106 -0
  37. package/schemas/runtime/review-result.schema.json +1 -0
  38. package/schemas/runtime/runtime-recommendation-show.schema.json +234 -13
  39. package/schemas/runtime/runtime-refactor-scan.schema.json +171 -0
  40. package/schemas/runtime/structural-observation-payload.schema.json +106 -0
  41. package/src/architecture-debt.ts +115 -0
  42. package/src/changeset-recovery.ts +49 -0
  43. package/src/docs-anchors.ts +2 -1
  44. package/src/failure.ts +776 -0
  45. package/src/index.ts +6 -0
  46. package/src/ledger.ts +14 -3
  47. package/src/native-context.ts +277 -0
  48. package/src/ownership-dependencies.ts +39 -1
  49. package/src/practices.ts +2 -0
  50. package/src/product-version.ts +37 -4
  51. package/src/projection-manifest.ts +372 -130
  52. package/src/projection-recovery.ts +111 -0
  53. package/src/projection.ts +443 -11
  54. package/src/refactor.ts +525 -2
  55. package/src/schema.ts +6 -0
  56. package/src/validator.ts +8 -3
@@ -1,175 +1,53 @@
1
1
  {
2
- "schemaVersion": "archcontext.architecture-docs-projection-manifest/v2",
3
- "rendererVersion": "archcontext.docs-renderer/v5",
2
+ "schemaVersion": "archcontext.architecture-docs-projection-manifest/v3",
3
+ "rendererVersion": "archcontext.docs-renderer/v6",
4
4
  "profile": "repo-harness/v1",
5
- "sourceDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
6
- "provenance": {
7
- "schemaVersion": "archcontext.architecture-docs-projection-provenance/v3",
8
- "sourceTreeDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
9
- "modelDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
10
- "rendererVersion": "archcontext.docs-renderer/v5",
11
- "layoutVersion": "archcontext.docs-layout/v1",
12
- "generatedFrom": {
13
- "codeGraphPackage": "@colbymchenry/codegraph",
14
- "codeGraphVersion": "1.6.1"
15
- },
16
- "projectionInputDigest": "sha256:16f337f3a1e0eac82b565ca1a0dc04629af1df60d7e2b9ad9b767c21ae581d4c"
17
- },
18
- "projectionDigest": "sha256:336562d0f1772c32f64a5fe7ee62d49fb17ac6ef7c9d820385c05e538ed1e5d1",
5
+ "layoutVersion": "archcontext.docs-layout/v1",
6
+ "generatedFrom": {"codeGraphPackage":"@colbymchenry/codegraph","codeGraphVersion":"1.6.2"},
19
7
  "semanticBaseline": {
20
- "semanticState": {
21
- "schemaVersion": "archcontext.architecture-semantic-state/v1",
22
- "capabilities": [
23
- {
24
- "capabilityId": "capability.example.billing",
25
- "memberNodeIds": [
26
- "capability.example.billing"
27
- ],
28
- "semanticFingerprint": "sha256:a6357941efd4f3307106c1650eca068e30db5d704e83a90ff238a1cda3c39471",
29
- "flowProofFingerprint": "sha256:066fed47f724c54dca2e7c9d01c79bc05362004b1c49edb593bf80cd239e66f8",
30
- "proofStatus": {
31
- "p1": "unprovable",
32
- "p2": "not-applicable"
33
- },
34
- "facets": {
35
- "constraints": "sha256:d1c61fe896c27d26f03ec0c3d4ee584954bedee94abc988f5cc2ba12fa9aa246",
36
- "entrypoints": "sha256:040e1e188d64957a0fbf33d790c062bb4b63ceae21e8d054720d2ef3c974ebca",
37
- "interfaces": "sha256:78dd8a6e8eb5a106964ebdd464b873b6ed58f857c3d816a0b595106addac12b2",
38
- "lifecycle": "sha256:45e0f02c02e3b6b1b9a7d4b30e9acb7aac52e68ca7fea468377cfa6e7ed1236f",
39
- "names": "sha256:1e91c01c88f9156cc043971b089aa573d1ab0873a4ea73fbe12728775142f9b7",
40
- "ownership": "sha256:a00ea5710e08406444452ccf3bce97d054e2c2d6595d0f560e98b32b04500c01",
41
- "placement": "sha256:b5f9e3fd0ce231d6b4b05bd918c93043cc15d7f3b592b12b84972904e0f1b74d",
42
- "relations": "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
43
- "responsibilities": "sha256:310fb2a928123d4df66bd32884e7eba3a854be1928f8d7c73e99fef59a5fb91a",
44
- "riskBoundaries": "sha256:6457da469f290fa149c5eccbbc6347d7604fee7c59f5b231d10493e7722a57fe"
45
- }
46
- }
47
- ],
48
- "semanticFingerprint": "sha256:e5a66426ccb094ed525d4640727fa051f56cf447ade1a30c3d4034956fe376ab",
49
- "flowProofFingerprint": "sha256:e435532a8614ec60bcae46f17b28e81bc847e4429d26fad19070264eca5dce3e"
50
- },
51
- "digests": {
52
- "modelDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
53
- "sourceTreeDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
54
- "flowProofDigest": "sha256:e435532a8614ec60bcae46f17b28e81bc847e4429d26fad19070264eca5dce3e",
55
- "projectionDigest": "sha256:336562d0f1772c32f64a5fe7ee62d49fb17ac6ef7c9d820385c05e538ed1e5d1"
56
- },
57
- "evidence": {
58
- "sourceTreeDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
59
- "selectorEvidenceDigest": "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
60
- "rendererVersion": "archcontext.docs-renderer/v5"
61
- }
62
- },
63
- "receiptDigest": "sha256:9f11bf3efe26f8ba7654d036e39316176e8d78b3270b886760e526a83b617e58",
64
- "targetCount": 7,
65
- "fileCount": 7,
66
- "targets": [
67
- {
68
- "targetId": "projection_target.architecture.index",
69
- "type": "architecture-index",
70
- "scope": {
71
- "kind": "repository"
72
- },
73
- "path": "docs/architecture/index.md",
74
- "ownership": "mixed",
75
- "rendererVersion": "archcontext.docs-renderer/v5",
76
- "format": "markdown",
77
- "sourceDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
78
- "outputDigest": "sha256:64f1a29733be5033316aa99f657bfeb543df2fca99a2ba8b4103be22d46eeb57"
79
- },
80
- {
81
- "targetId": "projection_target.entity.capability-example-billing",
82
- "type": "entity-summary",
83
- "scope": {
84
- "kind": "entity",
85
- "id": "capability.example.billing",
86
- "entityKind": "capability"
87
- },
88
- "path": "docs/architecture/modules/example/billing.md",
89
- "ownership": "mixed",
90
- "rendererVersion": "archcontext.docs-renderer/v5",
91
- "format": "markdown",
92
- "sourceDigest": "sha256:b817894a048392bcfd08bcf0cb2db65be60c93b52adeba3c3858aab88fff2e55",
93
- "outputDigest": "sha256:2963da98797bba21c3e87b86e60dca3b7c19f75a592723e4c98e0f41b2eb8f58",
94
- "sourceFootprintDigest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
95
- "scale": {
96
- "fileCountBucket": {
97
- "lower": 10,
98
- "upper": 20
8
+ "modelDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
9
+ "capabilities": [
10
+ {
11
+ "capabilityId": "capability.example.billing",
12
+ "memberNodeIds": [
13
+ "capability.example.billing"
14
+ ],
15
+ "semanticFingerprint": "sha256:a6357941efd4f3307106c1650eca068e30db5d704e83a90ff238a1cda3c39471",
16
+ "flowProofFingerprint": "sha256:066fed47f724c54dca2e7c9d01c79bc05362004b1c49edb593bf80cd239e66f8",
17
+ "proofStatus": {
18
+ "p1": "unprovable",
19
+ "p2": "not-applicable"
20
+ },
21
+ "facets": {
22
+ "constraints": "sha256:d1c61fe896c27d26f03ec0c3d4ee584954bedee94abc988f5cc2ba12fa9aa246",
23
+ "entrypoints": "sha256:040e1e188d64957a0fbf33d790c062bb4b63ceae21e8d054720d2ef3c974ebca",
24
+ "interfaces": "sha256:78dd8a6e8eb5a106964ebdd464b873b6ed58f857c3d816a0b595106addac12b2",
25
+ "lifecycle": "sha256:45e0f02c02e3b6b1b9a7d4b30e9acb7aac52e68ca7fea468377cfa6e7ed1236f",
26
+ "names": "sha256:1e91c01c88f9156cc043971b089aa573d1ab0873a4ea73fbe12728775142f9b7",
27
+ "ownership": "sha256:a00ea5710e08406444452ccf3bce97d054e2c2d6595d0f560e98b32b04500c01",
28
+ "placement": "sha256:b5f9e3fd0ce231d6b4b05bd918c93043cc15d7f3b592b12b84972904e0f1b74d",
29
+ "relations": "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
30
+ "responsibilities": "sha256:310fb2a928123d4df66bd32884e7eba3a854be1928f8d7c73e99fef59a5fb91a",
31
+ "riskBoundaries": "sha256:6457da469f290fa149c5eccbbc6347d7604fee7c59f5b231d10493e7722a57fe"
99
32
  },
100
- "lineCountBucket": {
101
- "lower": 500,
102
- "upper": 1000
103
- }
33
+ "selectorEvidenceDigest": "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945"
104
34
  }
105
- },
106
- {
107
- "targetId": "projection_target.decision.index",
108
- "type": "decision-index",
109
- "scope": {
110
- "kind": "decision"
111
- },
112
- "path": "docs/architecture/decisions/index.md",
113
- "ownership": "mixed",
114
- "rendererVersion": "archcontext.docs-renderer/v5",
115
- "format": "markdown",
116
- "sourceDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
117
- "outputDigest": "sha256:34055a2aa0fbe868ce5dea7df5354de5da63830e5972ff683d9647f97374ec26"
118
- },
119
- {
120
- "targetId": "projection_target.architecture.changelog",
121
- "type": "architecture-changelog",
122
- "scope": {
123
- "kind": "changelog"
124
- },
125
- "path": "docs/architecture/changelog.md",
126
- "ownership": "mixed",
127
- "rendererVersion": "archcontext.docs-renderer/v5",
128
- "format": "markdown",
129
- "sourceDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
130
- "outputDigest": "sha256:1f723aeb74466aae7d607eeab8c438a830c36f49a48e6622f868a8151afabea6"
131
- },
132
- {
133
- "targetId": "projection_target.diagram.mermaid",
134
- "type": "diagram-mermaid",
135
- "scope": {
136
- "kind": "diagram",
137
- "id": "architecture"
138
- },
139
- "path": "docs/architecture/diagrams/architecture.mmd",
140
- "ownership": "generated",
141
- "rendererVersion": "archcontext.docs-renderer/v5",
142
- "format": "mermaid",
143
- "sourceDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
144
- "outputDigest": "sha256:cab3b5ef19166b5dafbd869ba6060eb52a05f14670db938fa1b13ca4b8bb31bd"
145
- },
146
- {
147
- "targetId": "projection_target.diagram.structurizr",
148
- "type": "diagram-structurizr",
149
- "scope": {
150
- "kind": "diagram",
151
- "id": "architecture"
152
- },
153
- "path": "docs/architecture/diagrams/architecture.structurizr.json",
154
- "ownership": "generated",
155
- "rendererVersion": "archcontext.docs-renderer/v5",
156
- "format": "structurizr-json",
157
- "sourceDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
158
- "outputDigest": "sha256:c886230580a87c89ee758db91fc26f6fb2100eb1017cfe0619a3e2332171c42d"
159
- },
160
- {
161
- "targetId": "projection_target.diagram.likec4",
162
- "type": "diagram-likec4",
163
- "scope": {
164
- "kind": "diagram",
165
- "id": "architecture"
166
- },
167
- "path": "docs/architecture/diagrams/architecture.likec4",
168
- "ownership": "generated",
169
- "rendererVersion": "archcontext.docs-renderer/v5",
170
- "format": "likec4",
171
- "sourceDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
172
- "outputDigest": "sha256:99c534ffdd668102413d47529127887cba120ef9a3f4c2cd62b40e41ef8757e5"
173
- }
174
- ]
35
+ ]
36
+ },
37
+ "targets": {
38
+ "projection_target.architecture.changelog":
39
+ {"type":"architecture-changelog","scope":{"kind":"changelog"},"path":"docs/architecture/changelog.md","ownership":"mixed","format":"markdown","outputDigest":"sha256:1f723aeb74466aae7d607eeab8c438a830c36f49a48e6622f868a8151afabea6"},
40
+ "projection_target.architecture.index":
41
+ {"type":"architecture-index","scope":{"kind":"repository"},"path":"docs/architecture/index.md","ownership":"mixed","format":"markdown","outputDigest":"sha256:64f1a29733be5033316aa99f657bfeb543df2fca99a2ba8b4103be22d46eeb57"},
42
+ "projection_target.decision.index":
43
+ {"type":"decision-index","scope":{"kind":"decision"},"path":"docs/architecture/decisions/index.md","ownership":"mixed","format":"markdown","outputDigest":"sha256:34055a2aa0fbe868ce5dea7df5354de5da63830e5972ff683d9647f97374ec26"},
44
+ "projection_target.diagram.likec4":
45
+ {"type":"diagram-likec4","scope":{"kind":"diagram","id":"architecture"},"path":"docs/architecture/diagrams/architecture.likec4","ownership":"generated","format":"likec4","outputDigest":"sha256:99c534ffdd668102413d47529127887cba120ef9a3f4c2cd62b40e41ef8757e5"},
46
+ "projection_target.diagram.mermaid":
47
+ {"type":"diagram-mermaid","scope":{"kind":"diagram","id":"architecture"},"path":"docs/architecture/diagrams/architecture.mmd","ownership":"generated","format":"mermaid","outputDigest":"sha256:cab3b5ef19166b5dafbd869ba6060eb52a05f14670db938fa1b13ca4b8bb31bd"},
48
+ "projection_target.diagram.structurizr":
49
+ {"type":"diagram-structurizr","scope":{"kind":"diagram","id":"architecture"},"path":"docs/architecture/diagrams/architecture.structurizr.json","ownership":"generated","format":"structurizr-json","outputDigest":"sha256:c886230580a87c89ee758db91fc26f6fb2100eb1017cfe0619a3e2332171c42d"},
50
+ "projection_target.entity.capability-example-billing":
51
+ {"type":"entity-summary","scope":{"kind":"entity","id":"capability.example.billing","entityKind":"capability"},"path":"docs/architecture/modules/example/billing.md","ownership":"mixed","format":"markdown","outputDigest":"sha256:2963da98797bba21c3e87b86e60dca3b7c19f75a592723e4c98e0f41b2eb8f58","sourceStamps":{"capability.example.billing":"sha256:6666666666666666666666666666666666666666666666666666666666666666"},"scale":{"fileCountBucket":{"lower":10,"upper":20},"lineCountBucket":{"lower":500,"upper":1000}}}
52
+ }
175
53
  }
@@ -13,9 +13,9 @@
13
13
  "codeGraphDigest": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
14
14
  "indexedWorktreeDigest": "sha256:4545454545454545454545454545454545454545454545454545454545454545",
15
15
  "projectionInputDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
16
- "rendererVersion": "archcontext.docs-renderer/v5",
16
+ "rendererVersion": "archcontext.docs-renderer/v6",
17
17
  "layoutVersion": "archcontext.docs-layout/v1",
18
- "generatedFrom": { "codeGraphPackage": "@colbymchenry/codegraph", "codeGraphVersion": "1.6.1", "codeGraphStatus": "ready" }
18
+ "generatedFrom": { "codeGraphPackage": "@colbymchenry/codegraph", "codeGraphVersion": "1.6.2", "codeGraphStatus": "ready" }
19
19
  },
20
20
  "outputSnapshot": {
21
21
  "repositoryId": "repo.example",
@@ -28,9 +28,9 @@
28
28
  "codeGraphDigest": "sha256:9999999999999999999999999999999999999999999999999999999999999999",
29
29
  "indexedWorktreeDigest": "sha256:9898989898989898989898989898989898989898989898989898989898989898",
30
30
  "projectionInputDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
31
- "rendererVersion": "archcontext.docs-renderer/v5",
31
+ "rendererVersion": "archcontext.docs-renderer/v6",
32
32
  "layoutVersion": "archcontext.docs-layout/v1",
33
- "generatedFrom": { "codeGraphPackage": "@colbymchenry/codegraph", "codeGraphVersion": "1.6.1", "codeGraphStatus": "ready" }
33
+ "generatedFrom": { "codeGraphPackage": "@colbymchenry/codegraph", "codeGraphVersion": "1.6.2", "codeGraphStatus": "ready" }
34
34
  },
35
35
  "affectedNodeIds": ["capability.api"],
36
36
  "files": [
@@ -43,5 +43,5 @@
43
43
  ],
44
44
  "humanActions": [],
45
45
  "refreshSignals": [],
46
- "receiptDigest": "sha256:efd5f90c12bb14cf64bfe2b5f244eac776ec7984dbbdfebc4bc89bc963818843"
46
+ "receiptDigest": "sha256:b080eaee9ba5c2d617b00a91e5848162f6c65eb53a367849f390237bac574a3e"
47
47
  }
@@ -0,0 +1,38 @@
1
+ {
2
+ "schemaVersion": "archcontext.refactor-decision/v1",
3
+ "namespace": "product.architecture-context",
4
+ "recommendationId": "recommendation.4aa8477d81e9d473",
5
+ "fingerprint": "sha256:5fcec35f40c11d3c1fbc62d2ee21c794f4abcd201ada86940fe142773cb736c4",
6
+ "fingerprintSchemaVersion": "archcontext.recommendation-fingerprint/v3",
7
+ "category": "structural_observation",
8
+ "kind": "cycle",
9
+ "subject": {
10
+ "selectorKind": "repository",
11
+ "stableKey": "pair:component.architecture-context.core.changeset-engine|component.architecture-context.core.policy-engine",
12
+ "subjectSelectorId": "subject.repository.b7c61fc13826e1e3"
13
+ },
14
+ "affectedNodeIds": [
15
+ "component.architecture-context.core.changeset-engine",
16
+ "component.architecture-context.core.policy-engine"
17
+ ],
18
+ "affectedNodeCount": 2,
19
+ "regressesFrom": null,
20
+ "status": "rejected",
21
+ "observationMetrics": {
22
+ "backwardEdgeCount": 4,
23
+ "forwardEdgeCount": 1,
24
+ "thinDirectionEdgeCount": 1,
25
+ "totalEdgeCount": 5
26
+ },
27
+ "reason": "The policy engine owns the path allowlist; the back edge is the intended seam.",
28
+ "actor": {
29
+ "kind": "cli",
30
+ "id": "developer"
31
+ },
32
+ "decidedAt": "2026-10-13T09:00:00.000Z",
33
+ "provenance": {
34
+ "headSha": "0c6bc11d00000000000000000000000000000000",
35
+ "assessmentDigest": "sha256:3c0eb0020e00e35b734ac0396c00ef1c01733543ad7863938edcf7906b89c971",
36
+ "baselineSnapshotDigest": "sha256:b5bcfda3c89d235c429f584439f5db74f833abd91d4c12f0b7a477ed49b60e80"
37
+ }
38
+ }
@@ -3,6 +3,7 @@
3
3
  "recommendationId": "recommendation.c8c842b3d8529388",
4
4
  "source": "ledger",
5
5
  "status": "deferred",
6
+ "statusAuthority": "ledger",
6
7
  "recommendation": {
7
8
  "schemaVersion": "archcontext.recommendation/v3",
8
9
  "recommendationId": "recommendation.c8c842b3d8529388",
@@ -12,6 +12,7 @@
12
12
  "worktreeDigest": "sha256:96cbb5ccf708d8b7c56c2633e8937311338957998b7154879461706460d4c467"
13
13
  },
14
14
  "requestId": "refactor_request.d514edefd58b7a9e",
15
+ "namespace": "product.architecture-context",
15
16
  "request": {
16
17
  "schemaVersion": "archcontext.refactor-request/v1",
17
18
  "scope": {
@@ -111,6 +112,7 @@
111
112
  "moduleDigest": "sha256:32d887790fe89e1415d1cb0e68557509e025b4026184ad8a463f4d886a3de182"
112
113
  }
113
114
  ],
115
+ "moduleDependencies": [],
114
116
  "repositorySummary": {
115
117
  "moduleCount": 2,
116
118
  "undeclaredFootprintNodeCount": 1,
@@ -140,6 +142,7 @@
140
142
  {
141
143
  "kind": "evidence-gap",
142
144
  "subjectSelectorId": "repository:repo.537182127c5f2134",
145
+ "affectedNodeIds": [],
143
146
  "metrics": {
144
147
  "unresolvedImportCount": 0,
145
148
  "edgeLimit": 5000
@@ -164,6 +167,9 @@
164
167
  {
165
168
  "kind": "undeclared-footprint",
166
169
  "subjectSelectorId": "capability.architecture.context",
170
+ "affectedNodeIds": [
171
+ "capability.architecture.context"
172
+ ],
167
173
  "metrics": {},
168
174
  "evidence": {
169
175
  "kind": "undeclared-footprint",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "archctx-contracts",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -0,0 +1,218 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://archctx.repoharness.com/schemas/repo/refactor-decision.schema.json",
4
+ "title": "RefactorDecision",
5
+ "description": "The latest human decision for one refactor recommendation generation, stored at .archcontext/refactor-decisions/<recommendationId>.json (ADR-0046). Identity that needs the core hashers (recommendationId from fingerprint and regressesFrom, the namespace-scoped subject selector) is checked by the runtime reader.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schemaVersion",
10
+ "namespace",
11
+ "recommendationId",
12
+ "fingerprint",
13
+ "fingerprintSchemaVersion",
14
+ "category",
15
+ "kind",
16
+ "subject",
17
+ "affectedNodeIds",
18
+ "affectedNodeCount",
19
+ "regressesFrom",
20
+ "status",
21
+ "observationMetrics",
22
+ "reason",
23
+ "actor",
24
+ "decidedAt",
25
+ "provenance"
26
+ ],
27
+ "properties": {
28
+ "schemaVersion": {
29
+ "const": "archcontext.refactor-decision/v1"
30
+ },
31
+ "namespace": {
32
+ "type": "string",
33
+ "pattern": "^[a-z][a-z0-9]*(\\.[a-z0-9][a-z0-9-]*)+$"
34
+ },
35
+ "recommendationId": {
36
+ "type": "string",
37
+ "pattern": "^recommendation\\.[a-f0-9]{16}$"
38
+ },
39
+ "fingerprint": {
40
+ "type": "string",
41
+ "pattern": "^sha256:[a-f0-9]{64}$"
42
+ },
43
+ "fingerprintSchemaVersion": {
44
+ "const": "archcontext.recommendation-fingerprint/v3"
45
+ },
46
+ "category": {
47
+ "type": "string",
48
+ "enum": [
49
+ "refactor_proposal",
50
+ "structural_observation"
51
+ ]
52
+ },
53
+ "kind": {
54
+ "anyOf": [
55
+ {
56
+ "type": "null"
57
+ },
58
+ {
59
+ "type": "string",
60
+ "enum": [
61
+ "cycle",
62
+ "direction-violation",
63
+ "evidence-gap",
64
+ "ownership-ambiguous",
65
+ "residual-cycle",
66
+ "undeclared-footprint",
67
+ "unowned-paths"
68
+ ]
69
+ }
70
+ ]
71
+ },
72
+ "subject": {
73
+ "type": "object",
74
+ "additionalProperties": false,
75
+ "required": [
76
+ "selectorKind",
77
+ "stableKey",
78
+ "subjectSelectorId"
79
+ ],
80
+ "properties": {
81
+ "selectorKind": {
82
+ "type": "string",
83
+ "enum": [
84
+ "node",
85
+ "repository"
86
+ ]
87
+ },
88
+ "stableKey": {
89
+ "type": "string",
90
+ "minLength": 1,
91
+ "maxLength": 512,
92
+ "pattern": "^\\S(?:[^\\u0000-\\u001f\\u007f]*\\S)?$"
93
+ },
94
+ "subjectSelectorId": {
95
+ "type": "string",
96
+ "pattern": "^subject\\.(node|repository)\\.[a-f0-9]{16}$"
97
+ }
98
+ }
99
+ },
100
+ "affectedNodeIds": {
101
+ "type": "array",
102
+ "maxItems": 32,
103
+ "uniqueItems": true,
104
+ "items": {
105
+ "type": "string",
106
+ "minLength": 1
107
+ }
108
+ },
109
+ "affectedNodeCount": {
110
+ "type": "integer",
111
+ "minimum": 0
112
+ },
113
+ "regressesFrom": {
114
+ "anyOf": [
115
+ {
116
+ "type": "null"
117
+ },
118
+ {
119
+ "type": "string",
120
+ "pattern": "^recommendation\\.[a-f0-9]{16}$"
121
+ }
122
+ ]
123
+ },
124
+ "status": {
125
+ "type": "string",
126
+ "enum": [
127
+ "acknowledged",
128
+ "accepted",
129
+ "deferred",
130
+ "rejected",
131
+ "resolved",
132
+ "waived"
133
+ ]
134
+ },
135
+ "observationMetrics": {
136
+ "anyOf": [
137
+ {
138
+ "type": "null"
139
+ },
140
+ {
141
+ "type": "object",
142
+ "additionalProperties": {
143
+ "anyOf": [
144
+ {
145
+ "type": "null"
146
+ },
147
+ {
148
+ "type": "number"
149
+ }
150
+ ]
151
+ }
152
+ }
153
+ ]
154
+ },
155
+ "reason": {
156
+ "type": "string",
157
+ "minLength": 1,
158
+ "maxLength": 1024,
159
+ "pattern": "^\\S(?:[^\\u0000-\\u001f\\u007f]*\\S)?$"
160
+ },
161
+ "actor": {
162
+ "type": "object",
163
+ "additionalProperties": false,
164
+ "required": [
165
+ "kind",
166
+ "id"
167
+ ],
168
+ "properties": {
169
+ "kind": {
170
+ "type": "string",
171
+ "enum": [
172
+ "cli",
173
+ "daemon",
174
+ "developer",
175
+ "hook",
176
+ "mcp",
177
+ "migration",
178
+ "subagent",
179
+ "system"
180
+ ]
181
+ },
182
+ "id": {
183
+ "type": "string",
184
+ "minLength": 1,
185
+ "maxLength": 128,
186
+ "pattern": "^\\S(?:[^\\u0000-\\u001f\\u007f]*\\S)?$"
187
+ }
188
+ }
189
+ },
190
+ "decidedAt": {
191
+ "type": "string",
192
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$"
193
+ },
194
+ "provenance": {
195
+ "type": "object",
196
+ "additionalProperties": false,
197
+ "required": [
198
+ "headSha",
199
+ "assessmentDigest",
200
+ "baselineSnapshotDigest"
201
+ ],
202
+ "properties": {
203
+ "headSha": {
204
+ "type": "string",
205
+ "pattern": "^[a-f0-9]{40}$"
206
+ },
207
+ "assessmentDigest": {
208
+ "type": "string",
209
+ "pattern": "^sha256:[a-f0-9]{64}$"
210
+ },
211
+ "baselineSnapshotDigest": {
212
+ "type": "string",
213
+ "pattern": "^sha256:[a-f0-9]{64}$"
214
+ }
215
+ }
216
+ }
217
+ }
218
+ }
@@ -31,7 +31,7 @@
31
31
  "additionalProperties": false,
32
32
  "required": ["architectureDocs", "agentContext"],
33
33
  "properties": {
34
- "architectureDocs": { "const": "archcontext.docs-renderer/v5" },
34
+ "architectureDocs": { "const": "archcontext.docs-renderer/v6" },
35
35
  "agentContext": { "const": "archcontext.agent-context-renderer/v1" }
36
36
  }
37
37
  },
@@ -43,7 +43,7 @@
43
43
  "type": "string",
44
44
  "pattern": "^[a-z0-9]+(-[a-z0-9]+)*-v[0-9]+$",
45
45
  "description": "One feature flag: a lowercase kebab-case name that ends in a version suffix (-v1, -v2, ...). The pattern is open, so a validator built from this schema accepts flags that a later archctx adds. A consumer must ignore a flag it does not know. examples lists the flags this schema version knows.",
46
- "examples": ["architecture-change-capabilities-v1", "architecture-docs-renderer-v2", "architecture-refresh-signal-v1", "capability-dependencies-v1", "changeset-entity-operations-v1", "changeset-ownership-delta-v1", "code-facts-unavailable-error-v1", "docs-anchors-v1", "flow-selector-check-v1", "module-statistics-v1", "projection-apply-readback-v1", "projection-apply-receipt-v1", "projection-apply-recovery-v1", "projection-apply-replay-v1", "projection-check-freshness-v1", "projection-manifest-contract-v2", "projection-observed-major-change-acceptance-v1", "projection-orphan-review-v1", "projection-preview-v1", "projection-prior-committed-applies-v1", "projection-protocol-v2", "recommendation-scan-decision-v1", "recommendation-v3", "refactor-assessment-v1", "refactor-observation-evidence-v1", "refactor-resolution-v1", "refactor-scan-limits-v1", "refactor-scan-untracked-count-v1"]
46
+ "examples": ["architecture-change-capabilities-v1", "architecture-debt-v1", "architecture-docs-renderer-v2", "architecture-refresh-signal-v1", "capability-dependencies-declared-v1", "capability-dependencies-v1", "changeset-entity-operations-v1", "changeset-ownership-delta-v1", "code-facts-unavailable-error-v1", "docs-anchors-v1", "flow-selector-check-v1", "module-statistics-v1", "native-context-export-v1", "projection-apply-readback-v1", "projection-apply-receipt-v1", "projection-apply-recovery-v1", "projection-apply-replay-restore-v1", "projection-apply-replay-v1", "projection-architecture-debt-v1", "projection-capability-isolation-v1", "projection-change-classification-v1", "projection-check-freshness-v1", "projection-freshness-v1", "projection-manifest-contract-v3", "projection-observed-major-change-acceptance-v1", "projection-orphan-review-v1", "projection-preview-v1", "projection-prior-committed-applies-v1", "projection-protocol-v2", "projection-snapshot-v1", "recommendation-scan-decision-v1", "recommendation-v3", "refactor-assessment-v1", "refactor-observation-evidence-v1", "refactor-resolution-v1", "refactor-scan-limits-v1", "refactor-scan-untracked-count-v1"]
47
47
  }
48
48
  }
49
49
  }