Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
616 commits
Select commit Hold shift + click to select a range
839235d
refactor(history): remove obsolete release deployment runtime records
ElliotSun Sep 21, 2026
c9c1805
refactor(history): keep governance ledger repositories only
ElliotSun Sep 21, 2026
3512e70
refactor(history): expose only canonical ledger and operational sink
ElliotSun Sep 21, 2026
c7afe29
refactor(history): keep Git ledger governance-only
ElliotSun Sep 21, 2026
07b823f
refactor(history): model governance evolution only
ElliotSun Sep 21, 2026
3ba44eb
refactor(history): reconstruct ContractRelease governance chain
ElliotSun Sep 21, 2026
da2e95d
refactor(history): remove obsolete git operational history
ElliotSun Sep 21, 2026
1876159
refactor(history): remove obsolete git operational history
ElliotSun Sep 21, 2026
e4b58fb
refactor(history): remove obsolete git operational history
ElliotSun Sep 21, 2026
48a756f
refactor(history): remove obsolete git operational history
ElliotSun Sep 21, 2026
efb91ab
refactor(history): remove obsolete git operational history
ElliotSun Sep 21, 2026
482818e
refactor(history): remove obsolete git operational history
ElliotSun Sep 21, 2026
8245ef3
refactor(history): remove obsolete git operational history
ElliotSun Sep 21, 2026
f30fdee
fix(contractops): restore canonical version validation
ElliotSun Sep 21, 2026
4b4d03e
test(contractops): cover canonical release snapshot only
ElliotSun Sep 21, 2026
e840e32
test(contractops): rehydrate canonical release artifacts only
ElliotSun Sep 21, 2026
6c7476e
test(architecture): assert canonical owners only
ElliotSun Sep 21, 2026
d3c56ff
test(contractops): keep golden scenarios canonical
ElliotSun Sep 21, 2026
7d8f61f
test(history): remove obsolete deployment history golden
ElliotSun Sep 21, 2026
3bd468a
test(history): remove obsolete deployment history golden
ElliotSun Sep 21, 2026
d8975b4
refactor(cli): remove obsolete release compatibility commands
ElliotSun Sep 21, 2026
c03dde9
refactor(cli): expose canonical release commands only
ElliotSun Sep 21, 2026
8964df0
docs(contractops): remove obsolete compatibility lifecycle
ElliotSun Sep 21, 2026
36a9ab7
docs(deployment): document canonical-only artifact model
ElliotSun Sep 21, 2026
b08cebc
docs(examples): remove obsolete legacy wording
ElliotSun Sep 21, 2026
3e44c62
docs(config): remove obsolete legacy wording
ElliotSun Sep 21, 2026
e26c1b2
docs(config): refresh canonical schema description
ElliotSun Sep 21, 2026
7e7103e
test(cli): describe canonical deployment surface
ElliotSun Sep 21, 2026
b5aba51
test(cli): assert canonical release commands only
ElliotSun Sep 21, 2026
78d27da
refactor(release): isolate repository classification
ElliotSun Sep 21, 2026
afaefd2
refactor(release): remove legacy batch release commands
ElliotSun Sep 21, 2026
88d5d95
refactor(cli): remove legacy batch release surface
ElliotSun Sep 21, 2026
3d4f990
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
166b46a
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
3d1663f
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
ccbc5e0
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
3da9b4a
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
3110481
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
445e935
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
1d0beb0
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
7bb216f
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
9996931
refactor: remove obsolete compatibility workflow
ElliotSun Sep 21, 2026
4453b73
refactor: remove obsolete release workflow artifact
ElliotSun Sep 21, 2026
e2d7f21
refactor: remove obsolete release workflow artifact
ElliotSun Sep 21, 2026
7a638d2
refactor: remove obsolete release workflow artifact
ElliotSun Sep 21, 2026
f45d6d4
refactor: remove obsolete release workflow artifact
ElliotSun Sep 21, 2026
0a30387
refactor(devops): remove obsolete release workflow exports
ElliotSun Sep 21, 2026
d361122
refactor(examples): remove obsolete release promotion workflow
ElliotSun Sep 21, 2026
8d35484
test(architecture): remove services compatibility assertions
ElliotSun Sep 21, 2026
638aaf8
test(examples): keep only canonical release workflows
ElliotSun Sep 21, 2026
66c8776
docs(examples): remove obsolete release-promotion examples
ElliotSun Sep 21, 2026
1d5641c
docs: describe greenfield canonical architecture
ElliotSun Sep 21, 2026
9b30054
refactor(lifecycle): remove root legacy status fallback
ElliotSun Sep 21, 2026
8a7d373
refactor(lifecycle): remove deprecated compatibility helpers
ElliotSun Sep 21, 2026
2a1f9e3
refactor(editor): remove lifecycle compatibility alias
ElliotSun Sep 21, 2026
07bd34e
fix(lifecycle): reference canonical release workflow
ElliotSun Sep 21, 2026
2408580
refactor(lifecycle): remove deprecated public helper
ElliotSun Sep 21, 2026
f1303dd
test(lifecycle): enforce canonical root lifecycle status
ElliotSun Sep 21, 2026
a2cabe1
test(lifecycle): remove compatibility lifecycle paths
ElliotSun Sep 21, 2026
c9c6c55
test(lifecycle): remove proposed status alias
ElliotSun Sep 21, 2026
d79a11a
test(editor): use canonical editor semantics directly
ElliotSun Sep 21, 2026
151f8cd
refactor(editor): remove compatibility facade
ElliotSun Sep 21, 2026
4b78475
docs(lifecycle): document only canonical lifecycle semantics
ElliotSun Sep 21, 2026
ac26df1
docs(governance): remove obsolete manifest boundary
ElliotSun Sep 21, 2026
b9c08d5
refactor(api): remove obsolete release workflow exports
ElliotSun Sep 21, 2026
429feb3
refactor(core): remove deleted release compatibility exports
ElliotSun Sep 21, 2026
513768e
refactor(governance): import version type from canonical owner
ElliotSun Sep 21, 2026
c78abe5
test(governance): use canonical change classification owner
ElliotSun Sep 21, 2026
df451aa
test(governance): use canonical version type owner
ElliotSun Sep 21, 2026
dabaf1a
test(identity): use canonical change classification owner
ElliotSun Sep 21, 2026
73de7ae
test(governance): use canonical application service
ElliotSun Sep 21, 2026
05bff54
test(governance): remove services compatibility dependency
ElliotSun Sep 21, 2026
e7a7878
test(reconciliation): use canonical application service
ElliotSun Sep 21, 2026
5ea2902
test(release): use canonical application services
ElliotSun Sep 21, 2026
3c3102f
test(versioning): use canonical application service
ElliotSun Sep 21, 2026
49871dd
test(lifecycle): remove obsolete release compatibility scenarios
ElliotSun Sep 21, 2026
e551f2d
refactor(deployment): start canonical plan schema at v1
ElliotSun Sep 21, 2026
056bbaa
refactor(deployment): start deployment bundle schema at v1
ElliotSun Sep 21, 2026
ed74716
refactor(history): start operational event schema at v1
ElliotSun Sep 21, 2026
fa98a02
test(deployment): assert greenfield v1 plan schema
ElliotSun Sep 21, 2026
aadbf27
test(history): assert greenfield v1 operational schema
ElliotSun Sep 21, 2026
3f42b12
test(deployment): assert greenfield plan version
ElliotSun Sep 21, 2026
f733ad7
docs(deployment): describe greenfield v1 artifact schema
ElliotSun Sep 21, 2026
be34a4e
refactor(application): remove deleted evolution exports
ElliotSun Sep 21, 2026
58708e3
test(cli): import version type from canonical owner
ElliotSun Sep 21, 2026
17a0ee5
test(delta): use canonical governance service
ElliotSun Sep 21, 2026
112d110
test(deployment): use canonical deployment service
ElliotSun Sep 21, 2026
571300c
test(governance): remove obsolete release compatibility paths
ElliotSun Sep 21, 2026
296198b
test(governance): remove final obsolete release API cases
ElliotSun Sep 21, 2026
cbe2ed9
refactor(import): use canonical governance service
ElliotSun Sep 21, 2026
8c145d6
test(reconcile): use canonical application model
ElliotSun Sep 21, 2026
3bf7a95
test(history): align evolution chain with governance ledger
ElliotSun Sep 21, 2026
a493eb6
refactor(lifecycle): use canonical governance service
ElliotSun Sep 21, 2026
0316a49
refactor(deployment): emit greenfield v1 plans
ElliotSun Sep 21, 2026
b4ff1a6
refactor(import): use canonical governance service
ElliotSun Sep 21, 2026
c69b00d
test(reconcile): use canonical reconciliation model
ElliotSun Sep 21, 2026
4c972ac
test(cli): remove deleted release prepare subprocess cases
ElliotSun Sep 21, 2026
c36a56f
test(history): use canonical governance evolution boundary
ElliotSun Sep 21, 2026
856ac92
test(cli): remove obsolete release promotion surfaces
ElliotSun Sep 21, 2026
30fe0ff
test(history): remove obsolete runtime evolution chain
ElliotSun Sep 21, 2026
2b53985
test(history): align integrity evolution with governance ledger
ElliotSun Sep 21, 2026
60c832f
test(lifecycle): remove noncanonical contract lifecycle fallback
ElliotSun Sep 21, 2026
4d8249f
test(contractops): assert fail-closed tampered version identity
ElliotSun Sep 21, 2026
40bfa2b
test(governance): refresh canonical release guidance fixture
ElliotSun Sep 21, 2026
e9e423d
test(cli): remove obsolete release manifest regression
ElliotSun Sep 21, 2026
4a83935
test(cicd): execute canonical release and deployment artifact handoff
ElliotSun Sep 21, 2026
bfeb09e
refactor(cicd): emit collision-resistant contract artifact keys
ElliotSun Sep 21, 2026
6a66a4d
fix(cicd): use collision-resistant central-repo artifact keys
ElliotSun Sep 21, 2026
4f333e6
test(cicd): execute central-repo release and deployment fan-out
ElliotSun Sep 21, 2026
2d73e09
test(cicd): lock collision-resistant central artifact identity
ElliotSun Sep 21, 2026
be83f87
fix(cicd): repair regression fixture contract factory
ElliotSun Sep 21, 2026
f0ec5d5
fix(cicd): normalize regression fixture signature
ElliotSun Sep 21, 2026
bf17c01
refactor(governance): remove execution date from decision
ElliotSun Sep 21, 2026
141769e
refactor(governance): make decision identity date independent
ElliotSun Sep 21, 2026
284a977
refactor(contractops): remove date from changeset
ElliotSun Sep 21, 2026
ef79671
refactor(contractops): make changeset date independent
ElliotSun Sep 21, 2026
d9e7a3e
refactor(contractops): remove date from changeset identity
ElliotSun Sep 21, 2026
774b674
fix(governance): remove final date-dependent decision field
ElliotSun Sep 21, 2026
14d0d86
refactor(governance): separate mutation context from evaluation
ElliotSun Sep 21, 2026
8a501fb
refactor(release): remove business date from planning
ElliotSun Sep 21, 2026
5bc5601
refactor(release): make assessment date independent
ElliotSun Sep 21, 2026
64c7736
refactor(release): make repository classification date independent
ElliotSun Sep 21, 2026
9311520
refactor(deployment): remove business date from assessment
ElliotSun Sep 21, 2026
23b1281
refactor(cli): remove release effective date plumbing
ElliotSun Sep 21, 2026
f8d7f64
refactor(cli): remove deployment assessment effective date
ElliotSun Sep 21, 2026
a19364b
refactor(cli): keep effective date only on mutation commands
ElliotSun Sep 21, 2026
fb12184
refactor(cicd): remove execution date from assessment
ElliotSun Sep 21, 2026
91f4d3a
refactor(cicd): remove execution date from assessment
ElliotSun Sep 21, 2026
3038fdf
test(cicd): use date-independent assess commands
ElliotSun Sep 21, 2026
90afc54
test(deployment): remove assessment date surface
ElliotSun Sep 21, 2026
5289f78
test(cli): remove date from release analysis commands
ElliotSun Sep 21, 2026
086d33f
refactor(governance): remove effective date from public decision prot…
ElliotSun Sep 21, 2026
49dfb40
refactor(governance): stop exporting lifecycle mutation context
ElliotSun Sep 21, 2026
901aa27
refactor(contractops): remove date context coupling
ElliotSun Sep 21, 2026
3ffaa85
refactor(lifecycle): scope effective date to mutations
ElliotSun Sep 21, 2026
883693f
refactor(lifecycle): keep date only for mutation
ElliotSun Sep 21, 2026
62d23a0
refactor(pipeline): separate merge date from governance identity
ElliotSun Sep 21, 2026
1e49bfb
refactor(plan): keep date only in in-memory merge
ElliotSun Sep 21, 2026
2d35579
refactor(history): remove date coupling from proposal links
ElliotSun Sep 21, 2026
aee0ee0
test(release): remove assessment date
ElliotSun Sep 21, 2026
2d1c55e
test(deployment): make workflow assessment date independent
ElliotSun Sep 21, 2026
7d6ab4e
test(release): make planning date independent
ElliotSun Sep 21, 2026
11c69c0
test(release): make formal assessment date independent
ElliotSun Sep 21, 2026
bac6b4f
test(release): remove effective date from public release CLI
ElliotSun Sep 21, 2026
edbcb9b
test(governance): separate mutation date from decision
ElliotSun Sep 21, 2026
5bf2c10
test(governance): proposal evaluation is date independent
ElliotSun Sep 21, 2026
1593172
test(release): remove date context from proposal artifacts
ElliotSun Sep 21, 2026
5aaea43
test(contractops): make changeset identity date independent
ElliotSun Sep 21, 2026
7b5697e
test(history): make proposal history date independent
ElliotSun Sep 21, 2026
e290463
test(governance): make decisions independent of effective date
ElliotSun Sep 21, 2026
b104a9a
test(governance): remove effective date from public decision protocol
ElliotSun Sep 21, 2026
d9a98c8
test(contractops): remove date from release execution inputs
ElliotSun Sep 21, 2026
226b753
test(contractops): remove date from golden release scenarios
ElliotSun Sep 21, 2026
e6b8b37
test(governance): make golden decisions date independent
ElliotSun Sep 21, 2026
b9ca305
test(history): remove date from changeset integrity
ElliotSun Sep 21, 2026
5dcfc52
test(governance): remove date from gate decisions
ElliotSun Sep 21, 2026
4bee1eb
test(pipeline): separate merge date from decision payload
ElliotSun Sep 21, 2026
6c2ec27
test(governance): evaluation is independent of merge date
ElliotSun Sep 21, 2026
13088c3
test(governance): remove date context from change evaluation
ElliotSun Sep 21, 2026
f4b1934
test(governance): make reason codes date independent
ElliotSun Sep 21, 2026
8d4b40b
test(contractops): remove date from authorization inputs
ElliotSun Sep 21, 2026
4effe26
test(contractops): remove date from artifact rehydration
ElliotSun Sep 21, 2026
78a0ee2
test(lifecycle): import mutation context from lifecycle boundary
ElliotSun Sep 21, 2026
5f8cdc9
test(lifecycle): import mutation context directly
ElliotSun Sep 21, 2026
c7b7a81
test(lifecycle): import mutation context from canonical module
ElliotSun Sep 21, 2026
a468483
test(lifecycle): import mutation context from canonical module
ElliotSun Sep 21, 2026
0dc9219
test(lifecycle): import mutation context from canonical module
ElliotSun Sep 21, 2026
540dbbd
test(lifecycle): import mutation context from canonical module
ElliotSun Sep 21, 2026
1253f58
test(lifecycle): import mutation context from canonical module
ElliotSun Sep 21, 2026
c2e16d8
test(lifecycle): import mutation context from canonical module
ElliotSun Sep 21, 2026
c875121
test(databricks): remove date from deployment assessment
ElliotSun Sep 21, 2026
20b1332
test(context): scope effective date to lifecycle mutation
ElliotSun Sep 21, 2026
0ace1b2
test(pipeline): separate mutation context from governance
ElliotSun Sep 21, 2026
e2e8a14
test(databricks): make bundle assessment date independent
ElliotSun Sep 21, 2026
64f81a9
fix(lifecycle): preserve mutation date without coupling governance
ElliotSun Sep 21, 2026
a964a14
fix(lifecycle): preserve mutation date without coupling governance
ElliotSun Sep 21, 2026
1d8d795
fix(release): remove stale effective date from plan command
ElliotSun Sep 21, 2026
1bf2e25
test(cli): remove decision date context
ElliotSun Sep 21, 2026
4f98968
test(architecture): remove date from release and governance identity
ElliotSun Sep 21, 2026
d660576
test(import): keep effective date only on merge mutation
ElliotSun Sep 21, 2026
e32811f
test(governance): remove date from read-only evaluation
ElliotSun Sep 21, 2026
6f2d369
test(devops): remove date from governance decision fixtures
ElliotSun Sep 21, 2026
6943931
test(history): remove date from persisted governance artifacts
ElliotSun Sep 21, 2026
3ae0c01
test(lifecycle): keep date on mutation, not evaluation
ElliotSun Sep 21, 2026
b2fa48c
test(merge): separate mutation date from governance evaluation
ElliotSun Sep 21, 2026
ecdcde8
test(retired): remove date from read-only governance paths
ElliotSun Sep 21, 2026
dc5d646
test(governance): remove date from pure analysis paths
ElliotSun Sep 21, 2026
d95816f
test(retired): keep effective date only on mutation commands
ElliotSun Sep 21, 2026
3617707
test(cli): remove effective date from release classify subprocess cases
ElliotSun Sep 21, 2026
3c78eee
test(lifecycle): remove effective context from pure governance evalua…
ElliotSun Sep 21, 2026
b4afbc5
test(governance): replace legacy decision snapshots with semantic gol…
ElliotSun Sep 21, 2026
828b6d3
test(governance): remove obsolete public decision snapshots
ElliotSun Sep 21, 2026
8556565
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
da94c49
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
41f7d20
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
de3160e
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
5471ffd
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
77cddbf
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
c6b667b
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
45e72a9
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
27ab488
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
2a6b2ac
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
37a70c3
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
76632c1
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
a532e10
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
52842b1
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
6eae9cc
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
5651dc3
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
5a8cada
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
51e0892
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
1065629
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
8b7cf12
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
87898e5
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
5ac1cb9
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
d26279b
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
059a8d3
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
5ae5a15
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
deccf9d
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
d23d19c
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
cf484d5
test(governance): remove obsolete dated decision snapshot
ElliotSun Sep 21, 2026
96be6a7
test(lifecycle): decouple evaluation from mutation context
ElliotSun Sep 21, 2026
21bf486
test(cicd): remove stale release effective date
ElliotSun Sep 21, 2026
80b3a11
docs(deployment): remove effective date from assess workflows
ElliotSun Sep 21, 2026
66cfd65
docs(readme): remove execution date from release and deployment assess
ElliotSun Sep 21, 2026
15ba8fe
test(lifecycle): restore mutation context in fail-closed cases
ElliotSun Sep 21, 2026
d845bd8
feat(cli): accept approval artifact at release finalization
ElliotSun Sep 21, 2026
2224ba0
feat(release): prefer exact approval artifact over history lookup
ElliotSun Sep 21, 2026
f111dad
test(cli): finalize release from exact approval artifact
ElliotSun Sep 21, 2026
cca6fe3
docs(examples): hand off release approval as exact artifact
ElliotSun Sep 21, 2026
84cfecd
docs(examples): hand off approvals without Git transport
ElliotSun Sep 21, 2026
1c68a86
refactor(approval): separate history conflict check from artifact res…
ElliotSun Sep 21, 2026
622f4f5
fix(release): keep explicit approval handoff fail closed on ledger co…
ElliotSun Sep 21, 2026
723510e
test(approval): fail closed on exact release review conflict
ElliotSun Sep 21, 2026
c74f048
docs(readme): show approval artifact handoff
ElliotSun Sep 21, 2026
452752e
docs(deployment): make approval artifact the canonical handoff
ElliotSun Sep 21, 2026
b017439
docs(examples): document approval artifact handoff
ElliotSun Sep 21, 2026
302477c
refactor(approval): avoid duplicate ledger reads
ElliotSun Sep 21, 2026
3dcd3ec
refactor(deployment): align planner docs with canonical source model
ElliotSun Sep 21, 2026
486ce8e
test(cicd): exercise exact release approval artifact handoff
ElliotSun Sep 21, 2026
4ed10b4
docs(approval): align history with publish-only release approval
ElliotSun Sep 21, 2026
cad262c
docs(contractops): scope authorization to formal publication
ElliotSun Sep 21, 2026
fdfb5be
docs(architecture): make release and deployment boundaries canonical
ElliotSun Sep 21, 2026
b9e8c49
refactor(deployment): name provenance validation by responsibility
ElliotSun Sep 21, 2026
e9fb05a
refactor(deployment): import canonical provenance validator
ElliotSun Sep 21, 2026
c9e3249
refactor(deployment): remove obsolete authorization module name
ElliotSun Sep 21, 2026
839566e
refactor(deployment): remove obsolete authorization terminology
ElliotSun Sep 21, 2026
06261e2
refactor(contractops): remove deployment approval example
ElliotSun Sep 21, 2026
b7242f7
docs(deployment): remove obsolete authorization wording
ElliotSun Sep 21, 2026
218d921
fix(deployment): bind candidate bundle to exact change set
ElliotSun Sep 21, 2026
04ab2cc
test(deployment): reject mixed candidate governance artifacts
ElliotSun Sep 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .semapact.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ llm:
model_name: gpt-4-turbo
api_key: ''
base_url: ''

198 changes: 138 additions & 60 deletions ARCHITECTURE.md

Large diffs are not rendered by default.

186 changes: 149 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,20 +67,32 @@ GovernanceDecision
Governance Gate
```

Canonical ContractOps then carries the exact governed decision forward:
The exact governed decision then feeds either candidate deployment or an explicit formal release:

```text
GovernanceDecision
→ ChangeSet
→ ReleasePlan
→ VersionResolution
→ ContractOpsAuthorization
→ AppliedContractRelease
→ DeploymentPlan
→ DeploymentAuthorization
→ runtime mutation
├─ candidate deployment
│ → DeploymentSourceSnapshot(source_kind=candidate)
│ → DeploymentPlan
│ → DeploymentBundle
│
└─ formal release
→ ReleasePlan
→ VersionResolution
→ ReleaseSnapshot
→ ReleaseBundle
→ ContractRelease
↓
+ target
↓
DeploymentSourceSnapshot(source_kind=contract_release)
→ DeploymentPlan
→ DeploymentBundle
```

Release approval protects formal publication. Runtime deployment permission belongs to the surrounding protected execution context; ContractRelease is provenance, not DEPLOY authorization.

For production assurance:

```text
Expand Down Expand Up @@ -126,9 +138,9 @@ DRAFT → ACTIVE → DEPRECATED → RETIRED

Lifecycle status does not itself mean that a revision has been authorized for release.

### Side effects are operation-scoped
### Side effects have explicit trust boundaries

SemaPact distinguishes analysis and planning from side effects. APPLY, PUBLISH, and DEPLOY are separate protected operations. A publication authorization cannot be reused as runtime deployment authority.
SemaPact distinguishes pure planning/materialization from external side effects. Formal release PUBLISH approval is recorded explicitly when governance requires review. Runtime DEPLOY permission belongs to the surrounding protected execution boundary (for example a GitHub or Azure DevOps Environment), not to the ContractRelease artifact. Release state therefore cannot authorize runtime mutation by itself.

### Runtime-aware without becoming platform-owned

Expand All @@ -155,7 +167,7 @@ SemaPact currently supports deterministic change analysis and lifecycle-aware po
- relationship change handling;
- version-policy classification;
- deterministic `GovernanceDecision` artifacts;
- centralized governance gates for ANALYZE / PROPOSE / APPLY / PUBLISH / DEPLOY / CI operations.
- centralized governance and release-approval boundaries, with runtime deployment permission delegated to the protected execution environment.

### Canonical ContractOps release planning

Expand All @@ -177,33 +189,67 @@ SemaPact supports two version-authority modes:

See [`docs/contractops_phases.md`](docs/contractops_phases.md) and [`docs/version_authority.md`](docs/version_authority.md).

### Governed runtime deployment
### Contract release and runtime deployment

SemaPact treats formal contract release and runtime deployment as separate lifecycles.

`semapact deployment` exposes a canonical CLI/CI surface:
A formal release is target-neutral:

```text
plan
→ DeploymentPlan
release assess
→ GovernanceDecision
→ ChangeSet
→ ReleasePlan
→ VersionResolution
→ ReleaseSnapshot
→ ReleaseBundle

REVIEW → exact release approval
↓
release finalize
→ ContractRelease
→ materialize the selected version back to ODCS
```

The selected version is calculated once. The resulting `ContractRelease` can then be deployed to any number of runtime targets without another version bump:

```text
orders@1.4.0
├── dev
├── test
└── prod
```

preview
→ fresh runtime observation
→ DeploymentPreview
Deployment is target-specific:

execute
→ exact plan + preview + DeploymentAuthorization
→ provider execution
```text
deployment assess --release ./artifacts/contract-release.json
→ DeploymentSourceSnapshot
→ DeploymentPlan
→ fresh runtime preview
→ DeploymentBundle

verify
→ fresh observation + reconciliation
deployment deploy
→ fresh preview → execute → fresh verify
→ IN_SYNC / DRIFT / INDETERMINATE
```

Planning and preview are read-only. Runtime mutation occurs only through `deployment execute`, and provider execution success is not treated as convergence proof.
Candidate/non-release deployment remains available directly from base + candidate and does not create a new contract version or release history.

The first Databricks write capability is intentionally narrow: create a missing managed Delta table, add missing nullable governed columns to an existing managed table, or perform NO_OP when the governed shape is already satisfied. Rename, existing-column type/nullability mutation, required-column addition without a safe migration strategy, DROP, and existing external/non-managed asset mutation fail closed.
Deployment telemetry is disabled by default. High-frequency execution history can be enabled once in typed `.semapact.yaml` configuration with a SQLite or Delta backend; it is not written into Git governance history. The `--operational-history` CLI option is only an override.

See [`docs/deployment_plans.md`](docs/deployment_plans.md).
For Databricks, once deployment of a finalized formal release verifies `IN_SYNC`, SemaPact projects the finalized release provenance to governed Unity Catalog tables using reserved tags:

```text
semapact_contract_id
semapact_contract_version
semapact_release_id
semapact_source_revision
```

Candidate deployments do not publish formal version/release tags. Business classifications or ABAC tags are not automatically mapped.

See [`docs/deployment_plans.md`](docs/deployment_plans.md).
### Databricks discovery and observation

With the `databricks` extra, SemaPact provides a thin read-side integration using the official Databricks SDK:
Expand Down Expand Up @@ -329,15 +375,82 @@ pip install "semapact[databricks]"

The Databricks SDK owns authentication-provider selection. SemaPact forwards supported connection hints rather than implementing a separate credential system.

After an exact `AppliedContractRelease` and deployment authorization have been produced, the runtime path is exposed through:
Assess a candidate deployment without creating a new contract version:

```bash
semapact deployment assess \
--base ./contracts/orders.yaml \
--candidate ./contracts/orders.candidate.yaml \
--base-revision-ref git:abc123 \
--candidate-revision-ref git:def456 \
--server development \
--bundle-out ./artifacts/orders-dev.bundle.json
```

Build a target-neutral formal release separately:

```bash
semapact release assess \
--base ./contracts/orders.yaml \
--candidate ./contracts/orders.candidate.yaml \
--base-revision-ref git:abc123 \
--candidate-revision-ref git:def456 \
--bundle-out ./artifacts/orders.release.bundle.json
```

For REVIEW releases, record the exact external approval and then finalize the release:

```bash
semapact deployment plan --help
semapact deployment preview --help
semapact deployment execute --help
semapact deployment verify --help
semapact release approve \
--bundle ./artifacts/orders.release.bundle.json \
--actor-reference github-environment:contract-release \
--recorded-at 2026-09-20T10:00:00+10:00 \
--approval-out ./artifacts/orders.approval.json

semapact release finalize \
--bundle ./artifacts/orders.release.bundle.json \
--approval ./artifacts/orders.approval.json \
--output-contract ./contracts/orders.yaml \
--release-out ./artifacts/orders.contract-release.json
```

Finalization writes the selected semantic version back to the ODCS contract and records the immutable `ContractRelease` in the Git governance ledger. The release records the source revision from which it was derived; the finalized release identity is the immutable released-contract snapshot, not a claim that the source revision already contained the materialized version bump.

Deployment then consumes the finalized release artifact directly:

```bash
semapact deployment assess \
--release ./artifacts/orders.contract-release.json \
--server production \
--bundle-out ./artifacts/orders-prod.deployment.bundle.json

semapact deployment deploy \
--bundle ./artifacts/orders-prod.deployment.bundle.json \
--warehouse-id <databricks-sql-warehouse-id>
```

Candidate deployments do not require release approval.

Operational deployment history is configured project-wide rather than repeated on every deploy:

```yaml
history:
operational:
backend: sqlite
path: .semapact/operational.db
```

For a shared Delta sink:

```yaml
history:
operational:
backend: delta
table_uri: s3://governance/semapact/operational-history
```

The config is fail-closed against the typed `SemaPactConfigSchema`. `--operational-history` remains available only as a per-invocation override. If neither config nor override is present, operational persistence stays disabled. See [`docs/configuration.md`](docs/configuration.md) for precedence and schema details.

## Optional Dependencies

| Extra | Purpose |
Expand All @@ -359,29 +472,28 @@ Optional extras are intentionally separate from the base distribution. If an int

```text
semapact/
core/ # loading, validation, compatibility workflow boundaries
core/ # loading, configuration and validation
lifecycle/ # canonical identity, lifecycle and change policy
governance/ # GovernanceDecision and centralized gate
contractops/ # deterministic release planning / authorization / apply / publish domain
deployment/ # provider-neutral deployment plans, authorization, preview contracts
contractops/ # deterministic release planning, approval and release artifacts
deployment/ # provider-neutral deployment source, plan and preview contracts
runtime/ # provider-neutral governed runtime asset projection
application/ # interface-independent use-case models + orchestration
models/ # application result DTOs; no domain authority
services/ # thin orchestration over canonical domain rules/ports
services/ # backward-compatible imports only
observation/ # platform-neutral observed state + fingerprint
reconciliation/ # governed desired vs observed comparison
platforms/ # provider adapters such as Databricks
importers/ # external metadata → ODCS projection
exporters/ # SQL / graph and other outputs
quality/ # quality intent adapters
interfaces/ # CLI and user-facing boundaries
devops/ # Git / CI compatibility helpers
devops/ # Git / CI integration helpers
```

A central architectural rule is:

> **Interfaces parse and render. Application services orchestrate. Domain packages own business meaning. Platform adapters own provider-specific effects. Compatibility packages do not become new owners.**
> **Interfaces parse and render. Application services orchestrate. Domain packages own business meaning. Platform adapters own provider-specific effects. There is one canonical workflow per lifecycle.**

See [`ARCHITECTURE.md`](ARCHITECTURE.md) for package/model placement rules.

Expand Down
33 changes: 33 additions & 0 deletions docs/approval_history.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,39 @@ record = service.record_review_action(
Callers using another future persistence backend can provide the same
`ApprovalHistoryRepository` capability without changing `ApprovalRecordService`.

## Release approval handoff and resolution

Formal REVIEW approval belongs to the PUBLISH boundary, not to runtime deployment.

The canonical CI/CD handoff is an exact `ApprovalRecord` artifact:

```text
release assess
→ ReleaseBundle

protected release environment
→ release approve --approval-out release.approval.json

release finalize --approval release.approval.json
→ ContractRelease
```

The approval must match all of the following:

- exact `decisionId`;
- exact `changeSetId`;
- exact `releasePlanId`;
- exact `versionResolutionId`;
- operation `PUBLISH`;
- exact `ReleaseSnapshot` as `scopeReference`;
- exact `ReleaseBundle` digest in `evidenceReferences`.

`release approve` also persists the same approval in the Git governance ledger. That ledger is durable audit/conflict evidence, not the preferred in-pipeline transport.

As a convenience fallback, `release finalize` may resolve the same exact PUBLISH approval from the Git ledger when `--approval` is omitted. If the exact scope contains conflicting review evidence such as `REQUEST_CHANGES` or `REJECT`, finalization fails closed. SemaPact does not apply a hidden "latest review wins" rule.

Runtime deployment has no SemaPact deployment-approval artifact. Whether `semapact deployment deploy` may run is controlled by the surrounding protected CI/CD execution context. Candidate deployment therefore does not create or resolve release approval records, and a finalized `ContractRelease` is provenance rather than DEPLOY authority.

## Trust boundary

`ApprovalRecord` preserves review evidence; it is not an authentication credential.
Expand Down
59 changes: 59 additions & 0 deletions docs/configuration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Configuration

SemaPact loads configuration in this order:

1. explicit CLI override for the current operation;
2. local project config at `.semapact.yaml`;
3. global config at `~/.config/semapact/config.yaml`;
4. feature default.

Operational deployment history is disabled when no backend is configured.

## Operational history

SQLite:

```yaml
history:
operational:
backend: sqlite
path: .semapact/operational.db
```

Delta:

```yaml
history:
operational:
backend: delta
table_uri: s3://governance/semapact/operational-history
```

The configuration is validated fail closed. Supported backends require exactly their backend-specific fields:

- `sqlite`: `backend` + `path`;
- `delta`: `backend` + `table_uri`.

Unknown backends, missing required fields, and extra fields under `history.operational` are rejected.

The canonical schema is defined by `SemaPactConfigSchema` and published for editor/tooling use at:

```text
schemas/semapact-config.schema.json
```

## CLI override

`--operational-history` is a per-invocation override, not the normal configuration path.

For example:

```bash
semapact deployment deploy \
--bundle ./artifacts/orders.bundle.json \
--operational-history sqlite:///./tmp/one-run.db
```

If the flag is omitted, SemaPact resolves `history.operational` from project/global config. If neither exists, operational history persistence remains disabled.

Operational telemetry is separate from the Git governance ledger. Formal release/approval facts may be stored in Git, while high-frequency deployment events are written only to an explicitly configured SQLite or Delta backend.
Loading
Loading