diff --git a/docs/specs/platform/portfolio.json b/docs/specs/platform/portfolio.json index e3c845f..a16dbe3 100644 --- a/docs/specs/platform/portfolio.json +++ b/docs/specs/platform/portfolio.json @@ -1 +1 @@ -{"meta":{"schema_version":"1.0.0","decision_evidence":["Engram #6375"],"source_documents":["openspec/changes/archive/2026-07-10-platform-subproject-redefinition/exploration.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/proposal.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/specs/platform-subproject-governance/spec.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/specs/platform-portfolio-documentation-integrity/spec.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/design.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/review-ledger.md","Engram #6366","Engram #6368","Engram #6370","Engram #6374","Engram #6375","Engram #6393","Engram #6396","Engram #6398","docs/specs/2026-07-05-modular-odoo-platform-design.md","docs/specs/2026-07-05-phase-1-image-factory-design.md","docs/specs/2026-07-06-phase-2-slices-roadmap.md","docs/specs/2026-07-08-platform-roadmap.md","docs/specs/platform/SP-1-image-registry-provider.md","docs/specs/platform/SP-2-database-provider-and-lifecycle.md","docs/specs/platform/SP-3-remote-backend-providers.md","docs/specs/platform/SP-4-control-plane-core.md","docs/specs/platform/SP-5-rbac-auth.md","docs/specs/platform/SP-6-cicd-integration.md","docs/specs/platform/SP-7-dev-onboarding-flow.md","docs/specs/platform/SP-8-instance-lifecycle-requests.md","docs/specs/platform/SP-9-control-panel-web-ui.md","docs/specs/platform/SP-10-governance-and-lifecycle.md","docs/specs/platform/platform-architecture.html","docs/diagrams/odoo-forge-current-implementation-guide.md","docs/diagrams/odoo-forge-current-implementation.mmd","docs/diagrams/odoo-forge-complete-platform.mmd","docs/specs/2026-07-29-operations-ui-route-design.md"],"protected_history_paths":["docs/specs/2026-07-05-modular-odoo-platform-design.md","docs/specs/2026-07-05-phase-1-image-factory-design.md","docs/specs/2026-07-06-phase-2-slices-roadmap.md","docs/specs/platform/SP-1-image-registry-provider.md","docs/specs/platform/SP-2-database-provider-and-lifecycle.md","docs/specs/platform/SP-3-remote-backend-providers.md","docs/specs/platform/SP-4-control-plane-core.md","docs/specs/platform/SP-5-rbac-auth.md","docs/specs/platform/SP-6-cicd-integration.md","docs/specs/platform/SP-7-dev-onboarding-flow.md","docs/specs/platform/SP-8-instance-lifecycle-requests.md","docs/specs/platform/SP-9-control-panel-web-ui.md","docs/specs/platform/SP-10-governance-and-lifecycle.md","openspec/changes/archive/2026-07-09-sp1","openspec/changes/archive/2026-07-09-sp1-a","openspec/changes/archive/2026-07-09-sp1-b","openspec/changes/archive/2026-07-09-platform-image-registry-provider","openspec/changes/archive/2026-07-09-platform-database-provider","openspec/changes/archive/2026-07-09-platform-database-provider-core","openspec/changes/archive/2026-07-09-platform-database-data-governance","openspec/changes/archive/2026-07-09-platform-coordinated-data-copy","openspec/changes/archive/2026-07-09-platform-database-runtime-integration","docs/diagrams/odoo-forge-current-implementation-guide.md","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER"],"parity_id":"sdd-design|portfolio-redefinition|machine-readable-plan|v1","evidence_catalog":{"S0":"docs/specs/2026-07-06-phase-2-slices-roadmap.md#slice-1--manifest-core--done-archived-2026-07-06","S1":"docs/specs/2026-07-06-phase-2-slices-roadmap.md#slice-2b--git-resolution--lock-writer--done-archived-2026-07-07","S2":"docs/specs/2026-07-06-phase-2-slices-roadmap.md#slice-3--workspace-projection--done-archived-2026-07-08","S3":"docs/specs/2026-07-06-phase-2-slices-roadmap.md#slice-4b--done-archived-2026-07-08","S4":"docs/specs/platform/SP-1-image-registry-provider.md","S5":"openspec/changes/archive/2026-07-09-platform-image-registry-provider/verify-report.md","S6":"commit:9d76b21","S7":"src/odoo_forge/ports/source_provider.py","S8":"docs/diagrams/odoo-forge-current-implementation.mmd","S9":"src/odoo_forge/ports/workspace_provider.py","S10":"src/odoo_forge/ports/backend_provider.py","S11":"src/odoo_forge/ports/image_registry_provider.py","S12":"src/odoo_forge_git/git_provider.py","S13":"src/odoo_forge_workspace/provider.py","S14":"src/odoo_forge_docker/provider.py","S15":"src/odoo_forge_registry/provider.py","S16":"commit:9dcbc77","S17":"openspec/changes/archive/2026-07-09-platform-database-runtime-integration/proposal.md","S18":"openspec/changes/archive/2026-07-09-platform-coordinated-data-copy/proposal.md","S19":"Engram #6375","S20":"docs/specs/2026-07-08-platform-roadmap.md#8-open-decisions-to-resolve-per-sub-project","S21":"openspec/changes/archive/2026-07-10-platform-subproject-redefinition/exploration.md#decisions-requiring-userproduct-confirmation","S22":"docs/specs/platform/SP-2-database-provider-and-lifecycle.md#open-decisions","S23":"docs/specs/platform/SP-3-remote-backend-providers.md#what-it-reuses-does-not-build","S24":"docs/specs/platform/SP-2-database-provider-and-lifecycle.md#port--adapters","S25":"docs/specs/platform/SP-3-remote-backend-providers.md#open-decisions","S26":"docs/specs/platform/SP-5-rbac-auth.md#open-decisions","S27":"docs/specs/platform/SP-6-cicd-integration.md#open-decisions","S28":"openspec/changes/archive/2026-07-10-platform-subproject-redefinition/exploration.md#revised-portfolio-and-old-to-new-traceability","S29":"docs/specs/platform/SP-2-database-provider-and-lifecycle.md","S30":"docs/specs/platform/SP-3-remote-backend-providers.md","S31":"docs/specs/platform/SP-4-control-plane-core.md","S32":"docs/specs/platform/SP-5-rbac-auth.md","S33":"docs/specs/platform/SP-7-dev-onboarding-flow.md","S34":"docs/specs/platform/SP-8-instance-lifecycle-requests.md","S35":"docs/specs/platform/SP-9-control-panel-web-ui.md","S36":"docs/specs/platform/SP-10-governance-and-lifecycle.md","S37":"openspec/changes/archive/2026-07-09-platform-database-provider/platform-database-provider/design.md","S38":"openspec/changes/archive/2026-07-09-platform-database-data-governance/proposal.md","S39":"openspec/changes/archive/2026-07-09-platform-database-provider/platform-database-provider/exploration.md","S40":"openspec/changes/archive/2026-07-09-platform-database-provider-core/platform-database-provider-core/proposal.md","S41":"docs/specs/platform/SP-6-cicd-integration.md","S42":"openspec/changes/archive/2026-07-10-platform-subproject-redefinition/exploration.md#evidence-grounded-dependency-dag-and-waves","S43":"Engram #6647","S44":"openspec/changes/archive/2026-07-11-CAP-CREDENTIALS/specs/credential-materialization/spec.md","S45":"openspec/changes/archive/2026-07-11-CAP-CREDENTIALS/design.md","S46":"tests/credentials/test_materialization.py","S47":"openspec/changes/archive/2026-07-11-CAP-PROJECT-CATALOG/specs/project-catalog-resolution/spec.md","S48":"openspec/changes/archive/2026-07-11-CAP-PROJECT-CATALOG/design.md","S49":"src/odoo_forge/project_catalog/resolver.py","S50":"tests/project_catalog/test_resolver.py","S51":"openspec/specs/credential-materialization/spec.md","S52":"openspec/specs/data-artifacts/spec.md","S53":"src/odoo_forge/data_artifacts/contracts.py","S54":"tests/data_artifacts/test_contracts.py","S55":"openspec/specs/database-provider/spec.md","S56":"src/odoo_forge/ports/database_provider.py","S57":"tests/ports/test_database_provider.py","S58":"openspec/specs/durable-operations/spec.md","S59":"src/odoo_forge/ports/durable_operation_store.py","S60":"tests/ports/test_durable_operation_store.py","S61":"openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/exploration.md","S62":"openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/apply-progress.md","S63":"openspec/specs/resource-ownership/spec.md","S64":"src/odoo_forge/resource_ownership/types.py","S65":"src/odoo_forge/ports/resource_ownership.py","S66":"tests/resource_ownership/test_types.py","S67":"tests/ports/test_resource_ownership.py","S68":"src/odoo_forge_cli/main.py","S69":"tests/cli/test_onboard.py","S71":"commit:890f8bb","S72":"src/odoo_forge_pipeline_github/provider.py","S73":"src/odoo_forge/ports/pipeline_provider.py","S74":"tests/pipeline_github/test_conformance.py","S75":"openspec/specs/tenancy-contract/spec.md","S76":"src/odoo_forge/tenancy/types.py","S77":"src/odoo_forge/tenancy/errors.py","S78":"tests/tenancy/test_types.py","S79":"tests/tenancy/test_errors.py","S80":"src/odoo_forge_docker/provider.py","S81":"src/odoo_forge/database/types.py","S82":"Engram #3347","S83":"docs/specs/2026-07-29-operations-ui-route-design.md","S84":"Engram #3727","S85":"Engram #3734","S86":"commit:f94b5ed","S87":"src/odoo_forge_cli/commands/copy.py","S88":"src/odoo_forge_postgres_docker/provider.py","S89":"tests/cli/test_copy_live_docker.py","S90":"Engram sdd/WF-DATA-COPY/acceptance-receipt","S91":"Engram #4721","S92":"src/odoo_forge/manifest/authoring.py","S93":"tests/manifest/test_authoring.py","S94":"Engram #4735","S95":"src/odoo_forge_cli/commands/manifest.py","S96":"src/odoo_forge_cli/_support.py","S97":"tests/cli/test_configure.py","S98":"commit:adf748a","S99":"commit:e9d4c49","S100":"commit:e0e9cfd","S101":"commit:b8c7dc6","S102":"commit:2cc27c3","S103":"commit:1f21983"},"gap_catalog":{"G0":"No implementation or aggregate outcome evidence","G1":"No live-registry end-to-end evidence","G2":"Artifact fabrication and promotion are not delivered","G3":"No provider contract exists","G4":"No identity port exists","G5":"No pipeline port exists","G6":"No adapter exists","G7":"Superseded planning only; no implementation","G8":"No implementation","G9":"Aggregate fabrication, promotion, build, test, and deploy acceptance remains incomplete","G10":"Complete cross-resource lifecycle acceptance, including image retention and generalized orphan reclamation, remains unproven"},"command_catalog":{"C37":"uv run pytest","C38":"uv run lint-imports","C39":"uv run mypy","C40":"uv run ruff check","C41":"uv build","C42":"uv run pytest tests/portfolio/test_portfolio_integrity.py","C43":"uv run pytest docs/tools/platform_portfolio/test_validate.py","C44":"python docs/tools/platform_portfolio/validate.py --root .","C45":"uv run pytest tests/odoo_forge_instances_postgres -m 'not integration and not real_docker'","C46":"uv run --with 'psycopg[binary]==3.2.10' pytest -m 'integration and real_docker' tests/odoo_forge_instances_postgres/test_real_postgres_integration.py"},"historical_alias_map":{"SP-1":["CAP-IMAGE-REGISTRY","SP-DELIVERY-AUTOMATION"],"SP-6":["SP-DELIVERY-AUTOMATION"],"SP-2":["SP-DATA-ENVIRONMENTS"],"SP-3":["SP-REMOTE-DEPLOYMENT"],"SP-4":["SP-CONTROL-PLANE-AUTHORITY"],"SP-5":["SP-PLATFORM-ACCESS"],"SP-7":["SP-DEVELOPER-ONBOARDING"],"SP-8":["SP-ENVIRONMENT-REQUESTS"],"SP-9":["SP-OPERATIONS-UI"],"SP-10":["SP-PRODUCTION-GOVERNANCE","SP-RESOURCE-LIFECYCLE","SP-DATA-RECOVERY"]},"sp2_status":"SP-DATA-ENVIRONMENTS (formerly SP-2) stays blocked until this documentation redefinition is independently reviewed and archived and its blocking decisions are resolved. Migration of the docs tree happens through ordinary SDD when undertaken; this plan is the portfolio, not a documentation-migration project plan.","live_location":"docs/specs/platform/portfolio.json","archived_change":"openspec/changes/archive/2026-07-10-platform-subproject-redefinition","protected_history_sha256":{"openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/exploration.md":"797c48a75bbe9a5f6b5794935e13bf999600b07edc84857c97e9044de0c50686","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/proposal.md":"48a6caba644da532bef0764987efcff778be025c25179367561077ad254f3796","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/design.md":"a2e34efe6284d1c626168301953d35c6fd37868c82febadba54fac1c90acc0aa","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/tasks.md":"71f25b91c1ac54f38337698cb7564ce28888f24e5fb335bafa878adc7f234376","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/apply-progress.md":"77538711f9bc45b3d6d59042be471d89d900e95f5046e2569b3ddf4a2e113e0e","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/specs/docker-postgresql-database-adapter/spec.md":"ddc2b708b9869f254881a254df70373bcbe5e625e1a9834cb1b0ab2ea483e21a"}},"items":[{"id":"SP-DATA-ENVIRONMENTS","kind":"sp","title":"Managed Data Environments","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-DATA-ENVIRONMENTS-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DD","DG"],"predecessors":["SP-2"],"successors":[],"historical_aliases":["SP-2"],"description":"Outcome posterior para entornos de datos administrados, copia coherente, linaje y pol\u00edticas de datos.","status_note":"Sigue propuesto y deliberadamente pospuesto hasta despu\u00e9s del onboarding MVP; reanudar solo cuando WF-DATA-COPY, CAP-RESOURCE-OWNERSHIP y SP-CONTROL-PLANE-AUTHORITY tengan evidencia aceptada.","notes":[]},{"id":"SP-REMOTE-DEPLOYMENT","kind":"sp","title":"Remote Deployment","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-REMOTE-DEPLOYMENT-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DP","DR","DG","DPROV-REMOTE"],"predecessors":["SP-3","CAP-TENANCY"],"successors":[],"historical_aliases":["SP-3"]},{"id":"SP-CONTROL-PLANE-AUTHORITY","kind":"sp","title":"Control Plane Authority","owner_role":"Control Plane","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-CONTROL-PLANE-AUTHORITY-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DP","DT","DG"],"predecessors":["SP-4","CAP-TENANCY"],"successors":[],"historical_aliases":["SP-4"],"status_note":"Enabler posterior al onboarding MVP; sigue requerido para authority, lineage y visibilidad antes de retomar SP-DATA-ENVIRONMENTS, pero no bloquea el primer forge onboard local."},{"id":"SP-PLATFORM-ACCESS","kind":"sp","title":"Platform Access","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-PLATFORM-ACCESS-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DT","DG","DPROV-IDP"],"predecessors":["SP-5"],"successors":[],"historical_aliases":["SP-5"]},{"id":"SP-DELIVERY-AUTOMATION","kind":"sp","title":"Delivery Automation","owner_role":"Delivery","status":"partially delivered","evidence_date":"2026-08-08","acceptance":[{"id":"AC-SP-DELIVERY-AUTOMATION-READY","status":"proposed","evidence":["S98"],"gaps":["G9"]}],"decision_ids":["DP","DG","DPROV-CI"],"predecessors":["SP-1","SP-6"],"successors":[],"historical_aliases":["SP-6","SP-1"],"status_note":"Pipeline trigger, status, and log inspection are delivered while aggregate delivery automation remains unachieved."},{"id":"SP-DEVELOPER-ONBOARDING","kind":"sp","title":"Developer Onboarding","owner_role":"Experience","status":"achieved","evidence_date":"2026-07-18","acceptance":[{"id":"AC-SP-DEVELOPER-ONBOARDING-READY","status":"achieved","evidence":["S68","S69"],"gaps":[]}],"decision_ids":["DD","DO","DG"],"predecessors":["SP-7"],"successors":[],"historical_aliases":["SP-7"],"description":"Outcome MVP-facing para pedir un cliente por nombre, materializar el workspace y entregar una instancia Odoo local corriendo con BD fresca, sin control plane ni copia de datos.","status_note":"Siguiente outcome pr\u00e1ctico despu\u00e9s de consolidar la instancia Odoo local real sobre foundations ya logradas: CAP-PROJECT-CATALOG, CAP-SOURCE, CAP-WORKSPACE, CAP-LOCAL-BACKEND, CAP-CREDENTIALS y el baseline Docker/PostgreSQL.","notes":["La primera bala de forge onboard usa BD fresca local y no depende de WF-DATA-COPY, CAP-RESOURCE-OWNERSHIP ni SP-CONTROL-PLANE-AUTHORITY."]},{"id":"SP-MANIFEST-AUTHORING","kind":"sp","title":"Guided Manifest Authoring","owner_role":"Experience","status":"partially delivered","evidence_date":"2026-08-06","acceptance":[{"id":"AC-SP-MANIFEST-AUTHORING-TUI","status":"achieved","evidence":["S91","S92","S93","S94","S95","S96","S97"],"gaps":[]},{"id":"AC-SP-MANIFEST-AUTHORING-WEB","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":["CAP-MANIFEST"],"successors":["SP-OPERATIONS-UI"],"description":"Experience outcome for producing a valid project.yaml through a guided step-by-step assistant, delivered first as terminal authoring and later as a guided flow inside the operations UI.","status_note":"Terminal authoring is delivered through the validated authoring contract and create-only CLI flow. The future web wizard consumes the same contract inside SP-OPERATIONS-UI and must not be delivered ahead of that surface.","notes":[]},{"id":"SP-ENVIRONMENT-REQUESTS","kind":"sp","title":"Environment Requests","owner_role":"Experience","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-ENVIRONMENT-REQUESTS-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DT","DD","DG"],"predecessors":["SP-8","CAP-TENANCY"],"successors":[],"historical_aliases":["SP-8"]},{"id":"SP-OPERATIONS-UI","kind":"sp","title":"Operations UI","owner_role":"Experience","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-OPERATIONS-UI-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DT","DG"],"predecessors":["SP-9"],"successors":[],"historical_aliases":["SP-9"]},{"id":"SP-PRODUCTION-GOVERNANCE","kind":"sp","title":"Production Governance","owner_role":"Operations","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-PRODUCTION-GOVERNANCE-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DT","DG"],"predecessors":["SP-10"],"successors":[],"historical_aliases":["SP-10"]},{"id":"SP-RESOURCE-LIFECYCLE","kind":"sp","title":"Resource Lifecycle","owner_role":"Operations","status":"partially delivered","evidence_date":"2026-08-07","acceptance":[{"id":"AC-SP-RESOURCE-LIFECYCLE-READY","status":"proposed","evidence":["S99","S100","S101","S102","S103"],"gaps":["G10"]}],"decision_ids":["DG"],"predecessors":["SP-10"],"successors":[],"historical_aliases":["SP-10"],"status_note":"Delivery is limited to the PostgreSQL Docker lifecycle and opt-in scheduler while broader cross-resource acceptance remains unproven."},{"id":"SP-DATA-RECOVERY","kind":"sp","title":"Data Recovery","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-DATA-RECOVERY-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DD","DG"],"predecessors":["SP-10"],"successors":[],"historical_aliases":["SP-10"]},{"id":"CAP-MANIFEST","kind":"prerequisite","title":"Manifest Core","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-CAP-MANIFEST-READY","status":"achieved","evidence":["S0"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CAP-SOURCE","kind":"prerequisite","title":"Source Resolution","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-CAP-SOURCE-READY","status":"achieved","evidence":["S1"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CAP-WORKSPACE","kind":"prerequisite","title":"Workspace Projection","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-CAP-WORKSPACE-READY","status":"achieved","evidence":["S2"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CAP-LOCAL-BACKEND","kind":"prerequisite","title":"Local Backend","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-CAP-LOCAL-BACKEND-READY","status":"achieved","evidence":["S3"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CAP-IMAGE-REGISTRY","kind":"prerequisite","title":"Image Registry Capability","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-09","acceptance":[{"id":"AC-CAP-IMAGE-REGISTRY-READY","status":"achieved","evidence":["S4","S5","S6"],"gaps":[]}],"decision_ids":["DG"],"predecessors":["SP-1"],"successors":[],"historical_aliases":["SP-1"]},{"id":"CAP-CREDENTIALS","kind":"prerequisite","title":"Credential Materialization","owner_role":"Security","status":"achieved","evidence_date":"2026-07-11","acceptance":[{"id":"AC-CAP-CREDENTIALS-READY","status":"approved","evidence":["S43","S44","S45","S46"],"gaps":[]}],"decision_ids":["DP","DG","DPROV-SECRETS"],"predecessors":["SP-1","SP-2","SP-3","SP-4"],"successors":[]},{"id":"CAP-DURABLE-OPERATIONS","kind":"prerequisite","title":"Durable Operations","owner_role":"Control Plane","status":"achieved","evidence_date":"2026-07-12","acceptance":[{"id":"AC-CAP-DURABLE-OPERATIONS-READY","status":"achieved","evidence":["S58","S59","S60"],"gaps":[]}],"decision_ids":["DG"],"predecessors":["SP-2","SP-6","SP-7","SP-8"],"successors":[]},{"id":"CAP-RESOURCE-OWNERSHIP","kind":"prerequisite","title":"Resource Ownership","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-19","acceptance":[{"id":"AC-CAP-RESOURCE-OWNERSHIP-READY","status":"achieved","evidence":["S63","S64","S65","S66","S67"],"gaps":[]}],"decision_ids":["DG"],"predecessors":["SP-2","SP-10"],"successors":["SP-CONTROL-PLANE-AUTHORITY","SP-RESOURCE-LIFECYCLE","WF-ENVIRONMENT-REQUEST","WF-DATA-COPY"],"status_note":"Enabler posterior al onboarding MVP; sigue requerido antes de retomar SP-DATA-ENVIRONMENTS."},{"id":"CAP-TENANCY","kind":"prerequisite","title":"Customer/Client Tenancy Contract and Quotas","owner_role":"Architecture/Product","status":"achieved","evidence_date":"2026-07-22","acceptance":[{"id":"AC-CAP-TENANCY-READY","status":"achieved","evidence":["S75","S76","S77","S78","S79"],"gaps":[]}],"decision_ids":["DT","DG"],"predecessors":[],"successors":["SP-REMOTE-DEPLOYMENT","SP-CONTROL-PLANE-AUTHORITY","SP-ENVIRONMENT-REQUESTS"]},{"id":"CAP-PROVIDER-CATALOG","kind":"prerequisite","title":"Provider Catalog","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CAP-PROVIDER-CATALOG-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DP","DG"],"predecessors":["SP-3","SP-4"],"successors":[]},{"id":"CAP-DATA-ARTIFACTS","kind":"prerequisite","title":"Data Artifacts","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-07-11","acceptance":[{"id":"AC-CAP-DATA-ARTIFACTS-READY","status":"achieved","evidence":["S52","S53","S54"],"gaps":[]}],"decision_ids":["DD","DG"],"predecessors":["SP-2"],"successors":[]},{"id":"CAP-PROJECT-CATALOG","kind":"prerequisite","title":"Project Catalog","owner_role":"Control Plane","status":"achieved","evidence_date":"2026-07-11","acceptance":[{"id":"AC-CAP-PROJECT-CATALOG-READY","status":"achieved","evidence":["S47","S48","S49","S50"],"gaps":[]}],"decision_ids":["DG"],"predecessors":["SP-7"],"successors":[]},{"id":"CAP-DEPLOYMENT-SPEC","kind":"prerequisite","title":"Provider-Neutral Deployment Spec","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CAP-DEPLOYMENT-SPEC-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DR","DG"],"predecessors":["SP-3"],"successors":[]},{"id":"PORT-SOURCE-PROVIDER","kind":"port","title":"SourceProvider","owner_role":"Core","status":"achieved","evidence_date":"2026-07-06","acceptance":[{"id":"AC-PORT-SOURCE-PROVIDER-READY","status":"achieved","evidence":["S7","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"PORT-WORKSPACE-PROVIDER","kind":"port","title":"WorkspaceProvider","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-PORT-WORKSPACE-PROVIDER-READY","status":"achieved","evidence":["S9","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"PORT-BACKEND-PROVIDER","kind":"port","title":"BackendProvider","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-PORT-BACKEND-PROVIDER-READY","status":"achieved","evidence":["S10","S3"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"PORT-IMAGE-REGISTRY","kind":"port","title":"ImageRegistryProvider","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-09","acceptance":[{"id":"AC-PORT-IMAGE-REGISTRY-READY","status":"achieved","evidence":["S11","S5"],"gaps":[]}],"decision_ids":[],"predecessors":["SP-1"],"successors":[]},{"id":"PORT-DATABASE-PROVIDER","kind":"port","title":"DatabaseProvider","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-07-10","acceptance":[{"id":"AC-PORT-DATABASE-PROVIDER-READY","status":"achieved","evidence":["S55","S56","S57"],"gaps":[]}],"decision_ids":["DP","DG","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"PORT-IDENTITY","kind":"port","title":"IdentityProvider","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-PORT-IDENTITY-READY","status":"proposed","evidence":[],"gaps":["G4"]}],"decision_ids":["DP","DG","DPROV-IDP"],"predecessors":["SP-5"],"successors":[]},{"id":"PORT-PIPELINE","kind":"port","title":"PipelineProvider","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-23","acceptance":[{"id":"AC-PORT-PIPELINE-READY","status":"achieved","evidence":["S71","S72","S73","S74"],"gaps":[]}],"decision_ids":["DP","DG","DPROV-CI"],"predecessors":["SP-6"],"successors":[]},{"id":"ADAPTER-SOURCE-GIT","kind":"adapter","title":"GitSourceProvider","owner_role":"Core","status":"achieved","evidence_date":"2026-07-07","acceptance":[{"id":"AC-ADAPTER-SOURCE-GIT-READY","status":"achieved","evidence":["S12","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"ADAPTER-WORKSPACE-GIT","kind":"adapter","title":"GitWorkspaceProvider","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-ADAPTER-WORKSPACE-GIT-READY","status":"achieved","evidence":["S13","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"ADAPTER-BACKEND-DOCKER","kind":"adapter","title":"DockerBackendProvider","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-ADAPTER-BACKEND-DOCKER-READY","status":"achieved","evidence":["S14","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"ADAPTER-IMAGE-REGISTRY-GHCR","kind":"adapter","title":"GHCR Image Registry Adapter","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-09","acceptance":[{"id":"AC-ADAPTER-IMAGE-REGISTRY-GHCR-READY","status":"achieved","evidence":["S15","S5"],"gaps":[]}],"decision_ids":[],"predecessors":["SP-1"],"successors":[]},{"id":"ADAPTER-DATABASE-DOCKER","kind":"adapter","title":"Docker PostgreSQL Adapter","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-07-14","acceptance":[{"id":"AC-ADAPTER-DATABASE-DOCKER-READY","status":"achieved","evidence":["S62"],"gaps":[]}],"decision_ids":["DP","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"ADAPTER-DATABASE-RDS","kind":"adapter","title":"AWS RDS Adapter","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-DATABASE-RDS-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"ADAPTER-DATABASE-VPS","kind":"adapter","title":"VPS PostgreSQL Adapter","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-DATABASE-VPS-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"ADAPTER-BACKEND-EC2","kind":"adapter","title":"EC2/VPS Backend Adapter","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-BACKEND-EC2-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DR","DPROV-REMOTE"],"predecessors":["SP-3"],"successors":[]},{"id":"ADAPTER-BACKEND-FARGATE","kind":"adapter","title":"Fargate Backend Adapter","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-BACKEND-FARGATE-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DR","DPROV-REMOTE"],"predecessors":["SP-3"],"successors":[]},{"id":"ADAPTER-BACKEND-K8S","kind":"adapter","title":"Kubernetes Backend Adapter","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-BACKEND-K8S-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DR","DPROV-REMOTE"],"predecessors":["SP-3"],"successors":[]},{"id":"ADAPTER-IDENTITY-GITHUB","kind":"adapter","title":"GitHub OIDC Adapter","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-IDENTITY-GITHUB-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DT","DPROV-IDP"],"predecessors":["SP-5"],"successors":[]},{"id":"ADAPTER-IDENTITY-GITLAB","kind":"adapter","title":"GitLab OIDC Adapter","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-IDENTITY-GITLAB-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DT","DPROV-IDP"],"predecessors":["SP-5"],"successors":[]},{"id":"ADAPTER-IDENTITY-GOOGLE","kind":"adapter","title":"Google OIDC Adapter","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-IDENTITY-GOOGLE-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DT","DPROV-IDP"],"predecessors":["SP-5"],"successors":[]},{"id":"ADAPTER-PIPELINE-GITHUB","kind":"adapter","title":"GitHub Actions Adapter","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-23","acceptance":[{"id":"AC-ADAPTER-PIPELINE-GITHUB-READY","status":"achieved","evidence":["S71","S72","S73","S74"],"gaps":[]}],"decision_ids":["DP","DPROV-CI"],"predecessors":["SP-6"],"successors":[]},{"id":"ADAPTER-PIPELINE-GITLAB","kind":"adapter","title":"GitLab CI Adapter","owner_role":"Delivery","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-PIPELINE-GITLAB-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DPROV-CI"],"predecessors":["SP-6"],"successors":[]},{"id":"INT-LOCAL-DIGEST-CONSUMPTION","kind":"integration","title":"Local Digest Image Consumption","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-09","acceptance":[{"id":"AC-INT-LOCAL-DIGEST-CONSUMPTION-READY","status":"achieved","evidence":["S14","S16"],"gaps":[]}],"decision_ids":[],"predecessors":["SP-1"],"successors":[]},{"id":"INT-DATABASE-RUNTIME-CUTOVER","kind":"integration","title":"Database Runtime Ownership Cutover","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-23","acceptance":[{"id":"AC-INT-DATABASE-RUNTIME-CUTOVER-READY","status":"achieved","evidence":["S17","S80","S81","S82"],"gaps":[]}],"decision_ids":["DP","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"WF-DATA-COPY","kind":"workflow","title":"Coordinated Data Copy","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-08-03","acceptance":[{"id":"AC-WF-DATA-COPY-READY","status":"achieved","evidence":["S18","S87","S88","S89","S90"],"gaps":[]}],"decision_ids":["DD"],"predecessors":["SP-2"],"successors":[],"status_note":"Enabler posterior al onboarding MVP; sigue requerido antes de retomar SP-DATA-ENVIRONMENTS."},{"id":"WF-PRODUCTION-PROMOTION","kind":"workflow","title":"Production Promotion Gate","owner_role":"Operations","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-WF-PRODUCTION-PROMOTION-READY","status":"proposed","evidence":[],"gaps":["G8"]}],"decision_ids":["DT"],"predecessors":["SP-10"],"successors":[]},{"id":"WF-ENVIRONMENT-REQUEST","kind":"workflow","title":"Environment Request Fulfillment","owner_role":"Experience","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-WF-ENVIRONMENT-REQUEST-READY","status":"proposed","evidence":[],"gaps":["G8"]}],"decision_ids":["DT","DD"],"predecessors":["SP-8"],"successors":[]},{"id":"CHG-FIRST-DATABASE-ADAPTER","kind":"sdd_change","title":"First Database Adapter Change","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-07-14","acceptance":[{"id":"AC-CHG-FIRST-DATABASE-ADAPTER-READY","status":"achieved","evidence":["S61","S62"],"gaps":[]}],"decision_ids":["DP","DD","DPROV-DB"],"predecessors":[],"successors":[]},{"id":"CHG-FIRST-REMOTE-ADAPTER","kind":"sdd_change","title":"First Remote Adapter Change","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-FIRST-REMOTE-ADAPTER-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DP","DR","DPROV-REMOTE"],"predecessors":[],"successors":[]},{"id":"CHG-FIRST-IDENTITY-ADAPTER","kind":"sdd_change","title":"First Identity Adapter Change","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-FIRST-IDENTITY-ADAPTER-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DP","DT","DPROV-IDP"],"predecessors":[],"successors":[]},{"id":"CHG-FIRST-PIPELINE-ADAPTER","kind":"sdd_change","title":"First Pipeline Adapter Change","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-23","acceptance":[{"id":"AC-CHG-FIRST-PIPELINE-ADAPTER-READY","status":"achieved","evidence":["S71","S72","S73","S74"],"gaps":[]}],"decision_ids":["DP","DPROV-CI"],"predecessors":[],"successors":[]},{"id":"CHG-OPS-UI-READONLY","kind":"sdd_change","title":"Operations UI Read-Only Slice","owner_role":"Experience","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-OPS-UI-READONLY-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-UI-PARTIAL","DEC-UI-STACK"],"predecessors":["SP-OPERATIONS-UI"],"successors":[],"status_note":"Decision adoption does not deliver UI or runtime readiness; implementation remains gated by the five post-registry SP4B leaves through CHG-SP4B-REAL-ACCEPTANCE, then CHG-SP4C-CONTROL-PLANE-EDGE and control-plane authority acceptance."},{"id":"CHG-PORTFOLIO-AUTHORITY-PATH","kind":"sdd_change","title":"Portfolio Authority Path Reconciliation","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-PORTFOLIO-AUTHORITY-PATH-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CHG-SP4B-VALIDATOR-GROUNDWORK","kind":"sdd_change","title":"Portfolio Validator Structural Groundwork","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-SP4B-VALIDATOR-GROUNDWORK-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":["CHG-PORTFOLIO-AUTHORITY-PATH"],"successors":[]},{"id":"CHG-SP4B-REDECOMPOSE","kind":"sdd_change","title":"SP4B PostgreSQL Registry Recomposition","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-SP4B-REDECOMPOSE-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":[],"successors":["CHG-SP4B-REGISTRY-POSTGRES"]},{"id":"CHG-SP4B-REGISTRY-POSTGRES","kind":"sdd_change","title":"SP4B Registry PostgreSQL Schema and Migration","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-08-01","acceptance":[{"id":"AC-SP4B-REGISTRY-POSTGRES-READY","status":"achieved","evidence":["S86"],"gaps":[]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-REDECOMPOSE"],"successors":["CHG-SP4B-ERRORS-PACKAGE"],"status_note":"Delivered by PR #106 at main commit f94b5ed."},{"id":"CHG-SP4B-ERRORS-PACKAGE","kind":"sdd_change","title":"SP4B Registry Errors and Package","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-ERRORS-PACKAGE-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-REGISTRY-POSTGRES"],"successors":["CHG-SP4B-ADAPTER"]},{"id":"CHG-SP4B-ADAPTER","kind":"sdd_change","title":"SP4B PostgreSQL Registry Adapter","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-ADAPTER-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-ERRORS-PACKAGE"],"successors":["CHG-SP4B-CONFORMANCE-FAKES"]},{"id":"CHG-SP4B-CONFORMANCE-FAKES","kind":"sdd_change","title":"SP4B Registry Conformance and Fakes","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-CONFORMANCE-FAKES-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-ADAPTER"],"successors":["CHG-SP4B-POSTGRES-HARNESS"]},{"id":"CHG-SP4B-POSTGRES-HARNESS","kind":"sdd_change","title":"SP4B PostgreSQL Test Harness","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-POSTGRES-HARNESS-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-CONFORMANCE-FAKES"],"successors":["CHG-SP4B-REAL-ACCEPTANCE"]},{"id":"CHG-SP4B-REAL-ACCEPTANCE","kind":"sdd_change","title":"SP4B Real PostgreSQL Acceptance","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-REAL-ACCEPTANCE-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-POSTGRES-HARNESS"],"successors":[]},{"id":"CHG-SP4B-ITEM-SCAFFOLD","kind":"sdd_change","title":"SP4B Item Scaffold and C42-C46 Command Catalog","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-SP4B-ITEM-SCAFFOLD-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":["CHG-SP4B-VALIDATOR-GROUNDWORK"],"successors":[]},{"id":"CHG-SP4B-DECOMPOSITION-ADOPTION","kind":"sdd_change","title":"SP4B Decomposition Adoption and SP4C Rewire","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-SP4B-DECOMPOSITION-ADOPTION-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":["CHG-SP4B-ITEM-SCAFFOLD"],"successors":[]}],"decisions":[{"id":"DEC-6375","owner":"Product/Architecture","due_gate":"design","blocking_effect":"Authorizes semantic portfolio model; does not select open product choices","options":["Approve outcome-first semantic model","Reject and retain numeric SP model"],"evidence":["S19"],"status":"decided"},{"id":"DP","owner":"Architecture","due_gate":"before provider-port implementation","blocking_effect":"Blocks provider catalog and all first-provider changes","options":["one adapter globally at init","per-instance selection from approved catalog"],"evidence":["S20","S19"],"status":"decided","chosen":"one adapter globally at init","decided_date":"2026-07-10","rationale":"Minimal machinery for first delivery; matches current single-Docker reality. Multi-provider deferred until a second real provider arrives (YAGNI).","consequence":"CAP-PROVIDER-CATALOG (per-instance registration/selection) deferred, not near-term; DPROV-* now select the single platform provider per kind rather than a first-of-many."},{"id":"DT","owner":"Architecture/Product","due_gate":"before tenancy-dependent consumer design","blocking_effect":"Defines canonical tenant identity, project subordination, quota authority, and consumer boundaries","options":["customer/client tenant","project tenant","provider-account tenant"],"evidence":["S21","S19"],"status":"decided","chosen":"customer/client tenant","decided_date":"2026-07-11","rationale":"A customer/client is the sole tenancy unit; stable tenant_id separates technical scope from business labels and provider identifiers.","consequence":"Project is the only normative subordinate scope in v1. PROD/QA/DEV are operational classifications, environment_family is not normative, and quota authority is defined once at CAP-TENANCY for consumers to use."},{"id":"DD","owner":"Data Governance/Product","due_gate":"before production-derived data delivery","blocking_effect":"Blocks data environments, recovery policy, and data-bearing workflows","options":["always anonymize non-PROD","default anonymize with audited QA/preprod exception","destination-specific stricter policy"],"evidence":["S22","S19"],"status":"decided","chosen":"default anonymize with audited QA/preprod exception","decided_date":"2026-07-10","rationale":"Protect production-derived data by default while allowing explicitly justified QA or preproduction cases.","consequence":"Non-production data is anonymized by default; every exception must be explicit, justified, approved, and auditable."},{"id":"DO","owner":"Developer Experience/Product","due_gate":"before onboarding implementation","blocking_effect":"Blocks onboarding delivery boundary","options":["CLI/local first","server-mediated authenticated first"],"evidence":["S21","S19"],"status":"unresolved"},{"id":"DR","owner":"Runtime/Networking","due_gate":"before first remote adapter","blocking_effect":"Blocks deployment spec and remote target contract","options":["platform owns routing DNS TLS","target adapter owns routing DNS TLS by contract","shared explicit boundary"],"evidence":["S23","S19"],"status":"unresolved"},{"id":"DG","owner":"Portfolio/Product","due_gate":"before prerequisite activation","blocking_effect":"Blocks roadmap grouping and prerequisite ownership","options":["independent roadmap enablers","grouped platform-foundation program"],"evidence":["S21","S19"],"status":"decided","chosen":"independent roadmap enablers","decided_date":"2026-07-10","rationale":"Activate each prerequisite only when a concrete subproject requires it, avoiding a broad umbrella initiative without an immediate delivery need.","consequence":"Cross-cutting capabilities remain independently owned and scheduled; no Platform Foundation program is created."},{"id":"DPROV-DB","owner":"Data Platform","due_gate":"before CHG-FIRST-DATABASE-ADAPTER","blocking_effect":"Selects exactly one first database adapter","options":["Docker PostgreSQL","AWS RDS","VPS PostgreSQL"],"evidence":["S24"],"status":"decided","chosen":"Docker PostgreSQL","decided_date":"2026-07-11","rationale":"Reuses the existing tested local backend and minimizes initial delivery risk.","consequence":"CHG-FIRST-DATABASE-ADAPTER targets Docker PostgreSQL first; managed-environment outcome contracts remain provider-neutral, and implementation stays blocked until required prerequisite evidence is accepted."},{"id":"DPROV-REMOTE","owner":"Runtime","due_gate":"before CHG-FIRST-REMOTE-ADAPTER","blocking_effect":"Selects first remote target","options":["EC2/VPS","Fargate","Kubernetes"],"evidence":["S25"],"status":"unresolved"},{"id":"DPROV-IDP","owner":"Security","due_gate":"before CHG-FIRST-IDENTITY-ADAPTER","blocking_effect":"Selects first organization IdP","options":["GitHub OIDC","GitLab OIDC","Google OIDC"],"evidence":["S26"],"status":"unresolved"},{"id":"DPROV-CI","owner":"Delivery","due_gate":"before CHG-FIRST-PIPELINE-ADAPTER","blocking_effect":"Selects first CI engine","options":["GitHub Actions","GitLab CI"],"evidence":["S27"],"status":"decided","chosen":"GitHub Actions","decided_date":"2026-07-22","rationale":"Coherent with the delivered GitHub ecosystem: ADAPTER-IMAGE-REGISTRY-GHCR is already achieved (GitHub Container Registry) and source resolution runs on git. Selecting GitLab CI would introduce a second CI ecosystem with no real consumer, contradicting the one-provider-at-init posture of DP (YAGNI).","consequence":"CHG-FIRST-PIPELINE-ADAPTER and ADAPTER-PIPELINE-GITHUB target GitHub Actions first; the PipelineProvider port (PORT-PIPELINE) stays provider-neutral. ADAPTER-PIPELINE-GITLAB remains deferred until a second real CI ecosystem arrives."},{"id":"DPROV-SECRETS","owner":"Security","due_gate":"before credential materialization","blocking_effect":"Selects credential store and whether a secrets port is required","options":["environment","SOPS","AWS Secrets Manager","Vault"],"evidence":["S20","S43"],"status":"decided","chosen":"SOPS","decided_date":"2026-07-11","rationale":"Approved as the smallest first-store path for opaque, ref-only credential handoffs; Vault and multi-store abstractions are deferred.","consequence":"CAP-CREDENTIALS may create only opaque sops:// references for ref-capable targets. AC-CAP-CREDENTIALS-READY remains proposed until verification evidence is approved."},{"id":"DEC-CP-STACK","owner":"Architecture","due_gate":"before CHG-SP4B-REGISTRY-POSTGRES","blocking_effect":"Blocks the registry persistence and control-plane edge changes","options":["FastAPI + psycopg","Flask + psycopg","Starlette + psycopg"],"evidence":["S83","S84","S85"],"status":"decided","chosen":"FastAPI + psycopg","decided_date":"2026-07-30","rationale":"FastAPI best matches the typed Pydantic control-plane API, while psycopg is the shared PostgreSQL driver and Docker aligns with the repository's existing adapter/runtime investment.","consequence":"Initial production uses Docker Compose on one server; core domain, ports, and adapters remain framework-neutral to preserve a no-rewrite scaling path; psycopg pools are per worker and must be bounded against PostgreSQL capacity; Jinja2 is an explicit dependency only for a later SSR slice; this decision records architecture and does not implement or deliver the control plane."},{"id":"DEC-UI-PARTIAL","owner":"Security + Product","due_gate":"before CHG-OPS-UI-READONLY","blocking_effect":"Allows a visible read-only slice while RBAC and actions remain deferred","options":["Allow a localhost-only single-operator read-only slice with a permanent gap","Require identity and RBAC before any UI surface"],"evidence":["S83"],"status":"decided","chosen":"Allow a localhost-only single-operator read-only slice with a permanent gap","decided_date":"2026-07-31","rationale":"The localhost-only, single-operator, read-only slice preserves useful visibility while identity/RBAC remains deferred rather than cancelled.","consequence":"Accepted costs: identity/RBAC remains a permanent acceptance gap for this slice, deferred rather than cancelled; loopback enforcement must be executable. Downstream acceptance shows Docker-observed truth with a visible drift label and keeps drifted rows visible. Data availability distinguishes exactly six states: fresh, drifted, stale/unverified, empty, persistence error, and per-row partial failure; anything not confirmed live is labelled."},{"id":"DEC-UI-STACK","owner":"Experience","due_gate":"before CHG-OPS-UI-READONLY","blocking_effect":"Selects the rendering and refresh model for the Operations UI","options":["Server-rendered views with polling","Single-page application with push transport"],"evidence":["S83"],"status":"decided","chosen":"Server-rendered views with polling","decided_date":"2026-07-31","rationale":"Server-rendered views with polling fit the decided FastAPI process without a SPA, push transport, Node toolchain, or second artifact.","consequence":"Accepted cost: polling latency. The future slice uses server-rendered views with polling inside FastAPI, with no SPA, push transport, Node toolchain, or second artifact."}],"transitions":[{"id":"TR-SP1-REGISTRY","kind":"reclassify","predecessors":[{"id":"SP-1","scope":"registry.port"},{"id":"SP-1","scope":"registry.adapter"},{"id":"SP-1","scope":"registry.cli"},{"id":"SP-1","scope":"registry.local-digest"}],"successors":[{"id":"PORT-IMAGE-REGISTRY","scope":"registry.port"},{"id":"ADAPTER-IMAGE-REGISTRY-GHCR","scope":"registry.adapter"},{"id":"CAP-IMAGE-REGISTRY","scope":"registry.cli"},{"id":"INT-LOCAL-DIGEST-CONSUMPTION","scope":"registry.local-digest"}],"evidence":["S4"]},{"id":"TR-SP1-SP6-DELIVERY","kind":"merge","predecessors":[{"id":"SP-1","scope":"delivery.fabrication"},{"id":"SP-1","scope":"delivery.promotion"},{"id":"SP-6","scope":"delivery.build"},{"id":"SP-6","scope":"delivery.test"},{"id":"SP-6","scope":"delivery.deploy"}],"successors":[{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.fabrication"},{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.promotion"},{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.build"},{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.test"},{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.deploy"}],"evidence":["S28"]},{"id":"TR-SP2","kind":"rename","predecessors":[{"id":"SP-2","scope":"environment.provision"}],"successors":[{"id":"SP-DATA-ENVIRONMENTS","scope":"environment.provision"}],"evidence":["S29"]},{"id":"TR-SP3","kind":"rename","predecessors":[{"id":"SP-3","scope":"deployment.remote-lifecycle"}],"successors":[{"id":"SP-REMOTE-DEPLOYMENT","scope":"deployment.remote-lifecycle"}],"evidence":["S30"]},{"id":"TR-SP4","kind":"rename","predecessors":[{"id":"SP-4","scope":"authority.api"}],"successors":[{"id":"SP-CONTROL-PLANE-AUTHORITY","scope":"authority.api"}],"evidence":["S31"]},{"id":"TR-SP5","kind":"rename","predecessors":[{"id":"SP-5","scope":"access.authentication"}],"successors":[{"id":"SP-PLATFORM-ACCESS","scope":"access.authentication"}],"evidence":["S32"]},{"id":"TR-SP7","kind":"rename","predecessors":[{"id":"SP-7","scope":"onboarding.journey"}],"successors":[{"id":"SP-DEVELOPER-ONBOARDING","scope":"onboarding.journey"}],"evidence":["S33"]},{"id":"TR-SP8","kind":"rename","predecessors":[{"id":"SP-8","scope":"request.intake-fulfillment"}],"successors":[{"id":"SP-ENVIRONMENT-REQUESTS","scope":"request.intake-fulfillment"}],"evidence":["S34"]},{"id":"TR-SP9","kind":"rename","predecessors":[{"id":"SP-9","scope":"inventory.read-only"}],"successors":[{"id":"SP-OPERATIONS-UI","scope":"inventory.read-only"}],"evidence":["S35"]},{"id":"TR-SP10-SPLIT","kind":"split","predecessors":[{"id":"SP-10","scope":"governance.audit-append-only"},{"id":"SP-10","scope":"governance.production-guardrails"},{"id":"SP-10","scope":"governance.promotion-gate"},{"id":"SP-10","scope":"lifecycle.resource-ttl"},{"id":"SP-10","scope":"lifecycle.resource-retention"},{"id":"SP-10","scope":"lifecycle.image-retention"},{"id":"SP-10","scope":"lifecycle.orphan-reclamation"},{"id":"SP-10","scope":"recovery.backup-scheduling"},{"id":"SP-10","scope":"recovery.backup-retention"},{"id":"SP-10","scope":"recovery.restore-drills"}],"successors":[{"id":"SP-PRODUCTION-GOVERNANCE","scope":"governance.audit-append-only"},{"id":"SP-PRODUCTION-GOVERNANCE","scope":"governance.production-guardrails"},{"id":"SP-PRODUCTION-GOVERNANCE","scope":"governance.promotion-gate"},{"id":"SP-RESOURCE-LIFECYCLE","scope":"lifecycle.resource-ttl"},{"id":"SP-RESOURCE-LIFECYCLE","scope":"lifecycle.resource-retention"},{"id":"SP-RESOURCE-LIFECYCLE","scope":"lifecycle.image-retention"},{"id":"SP-RESOURCE-LIFECYCLE","scope":"lifecycle.orphan-reclamation"},{"id":"SP-DATA-RECOVERY","scope":"recovery.backup-scheduling"},{"id":"SP-DATA-RECOVERY","scope":"recovery.backup-retention"},{"id":"SP-DATA-RECOVERY","scope":"recovery.restore-drills"}],"evidence":["S36"]}],"transfers":[{"id":"X1","origin":"SP-1","dotted_scope":"registry.port","destination":"PORT-IMAGE-REGISTRY","evidence":["S4"]},{"id":"X2","origin":"SP-1","dotted_scope":"registry.adapter","destination":"ADAPTER-IMAGE-REGISTRY-GHCR","evidence":["S4"]},{"id":"X3","origin":"SP-1","dotted_scope":"registry.cli","destination":"CAP-IMAGE-REGISTRY","evidence":["S4"]},{"id":"X4","origin":"SP-1","dotted_scope":"registry.local-digest","destination":"INT-LOCAL-DIGEST-CONSUMPTION","evidence":["S4"]},{"id":"X5","origin":"SP-1","dotted_scope":"delivery.fabrication","destination":"SP-DELIVERY-AUTOMATION","evidence":["S4"]},{"id":"X6","origin":"SP-1","dotted_scope":"delivery.promotion","destination":"SP-DELIVERY-AUTOMATION","evidence":["S4"]},{"id":"X7","origin":"SP-2","dotted_scope":"provider.contract","destination":"PORT-DATABASE-PROVIDER","evidence":["S29"]},{"id":"X8","origin":"SP-2","dotted_scope":"provider.adapter.docker","destination":"ADAPTER-DATABASE-DOCKER","evidence":["S29"]},{"id":"X9","origin":"SP-2","dotted_scope":"provider.adapter.rds","destination":"ADAPTER-DATABASE-RDS","evidence":["S29"]},{"id":"X10","origin":"SP-2","dotted_scope":"provider.adapter.vps","destination":"ADAPTER-DATABASE-VPS","evidence":["S29"]},{"id":"X11","origin":"SP-2","dotted_scope":"environment.provision","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29"]},{"id":"X12","origin":"SP-2","dotted_scope":"environment.clone","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29"]},{"id":"X13","origin":"SP-2","dotted_scope":"environment.randomize","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29"]},{"id":"X14","origin":"SP-2","dotted_scope":"environment.pre-production-copy","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29"]},{"id":"X15","origin":"SP-2","dotted_scope":"credential.materialization","destination":"CAP-CREDENTIALS","evidence":["S37"]},{"id":"X16","origin":"SP-2","dotted_scope":"data.capture","destination":"CAP-DATA-ARTIFACTS","evidence":["S18"]},{"id":"X17","origin":"SP-2","dotted_scope":"data.consistency","destination":"CAP-DATA-ARTIFACTS","evidence":["S18"]},{"id":"X18","origin":"SP-2","dotted_scope":"operation.journal","destination":"CAP-DURABLE-OPERATIONS","evidence":["S38"]},{"id":"X19","origin":"SP-2","dotted_scope":"operation.compensation","destination":"CAP-DURABLE-OPERATIONS","evidence":["S18"]},{"id":"X20","origin":"SP-2","dotted_scope":"operation.request-durability","destination":"CAP-DURABLE-OPERATIONS","evidence":["S39"]},{"id":"X21","origin":"SP-2","dotted_scope":"resource.receipt","destination":"CAP-RESOURCE-OWNERSHIP","evidence":["S40"]},{"id":"X22","origin":"SP-2","dotted_scope":"resource.deletion","destination":"CAP-RESOURCE-OWNERSHIP","evidence":["S40"]},{"id":"X23","origin":"SP-2","dotted_scope":"resource.orphan","destination":"CAP-RESOURCE-OWNERSHIP","evidence":["S18"]},{"id":"X24","origin":"SP-2","dotted_scope":"runtime.ownership-cutover","destination":"INT-DATABASE-RUNTIME-CUTOVER","evidence":["S17"]},{"id":"X25","origin":"SP-2","dotted_scope":"workflow.coordinated-copy","destination":"WF-DATA-COPY","evidence":["S18"]},{"id":"X26","origin":"SP-2","dotted_scope":"policy.randomization","destination":"DD","evidence":["S29"]},{"id":"X27","origin":"SP-3","dotted_scope":"deployment.remote-lifecycle","destination":"SP-REMOTE-DEPLOYMENT","evidence":["S30"]},{"id":"X28","origin":"SP-3","dotted_scope":"target.adapter.ec2","destination":"ADAPTER-BACKEND-EC2","evidence":["S30"]},{"id":"X29","origin":"SP-3","dotted_scope":"target.adapter.fargate","destination":"ADAPTER-BACKEND-FARGATE","evidence":["S30"]},{"id":"X30","origin":"SP-3","dotted_scope":"target.adapter.k8s","destination":"ADAPTER-BACKEND-K8S","evidence":["S30"]},{"id":"X31","origin":"SP-3","dotted_scope":"deployment.intent","destination":"CAP-DEPLOYMENT-SPEC","evidence":["S30"]},{"id":"X32","origin":"SP-3","dotted_scope":"tenant.isolation","destination":"CAP-TENANCY","evidence":["S30"]},{"id":"X33","origin":"SP-3","dotted_scope":"credential.injection","destination":"CAP-CREDENTIALS","evidence":["S30"]},{"id":"X34","origin":"SP-3","dotted_scope":"target.routing-dns-tls","destination":"DR","evidence":["S30"]},{"id":"X35","origin":"SP-3","dotted_scope":"provider.selection","destination":"DP","evidence":["S30"]},{"id":"X36","origin":"SP-4","dotted_scope":"authority.api","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X37","origin":"SP-4","dotted_scope":"authority.registry","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X38","origin":"SP-4","dotted_scope":"authority.persistence","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X39","origin":"SP-4","dotted_scope":"authority.reconciliation","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X40","origin":"SP-4","dotted_scope":"authority.composition","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X41","origin":"SP-4","dotted_scope":"tenant.boundary","destination":"CAP-TENANCY","evidence":["S31"]},{"id":"X42","origin":"SP-4","dotted_scope":"credential.resolution","destination":"CAP-CREDENTIALS","evidence":["S31"]},{"id":"X43","origin":"SP-4","dotted_scope":"provider.selection","destination":"DP","evidence":["S31"]},{"id":"X44","origin":"SP-5","dotted_scope":"access.authentication","destination":"SP-PLATFORM-ACCESS","evidence":["S32"]},{"id":"X45","origin":"SP-5","dotted_scope":"access.authorization","destination":"SP-PLATFORM-ACCESS","evidence":["S32"]},{"id":"X46","origin":"SP-5","dotted_scope":"identity.port","destination":"PORT-IDENTITY","evidence":["S32"]},{"id":"X47","origin":"SP-5","dotted_scope":"identity.adapter.github","destination":"ADAPTER-IDENTITY-GITHUB","evidence":["S32"]},{"id":"X48","origin":"SP-5","dotted_scope":"identity.adapter.gitlab","destination":"ADAPTER-IDENTITY-GITLAB","evidence":["S32"]},{"id":"X49","origin":"SP-5","dotted_scope":"identity.adapter.google","destination":"ADAPTER-IDENTITY-GOOGLE","evidence":["S32"]},{"id":"X50","origin":"SP-5","dotted_scope":"policy.tenancy-access","destination":"DT","evidence":["S32"]},{"id":"X51","origin":"SP-6","dotted_scope":"pipeline.port","destination":"PORT-PIPELINE","evidence":["S41"]},{"id":"X52","origin":"SP-6","dotted_scope":"pipeline.adapter.github","destination":"ADAPTER-PIPELINE-GITHUB","evidence":["S41"]},{"id":"X53","origin":"SP-6","dotted_scope":"pipeline.adapter.gitlab","destination":"ADAPTER-PIPELINE-GITLAB","evidence":["S41"]},{"id":"X54","origin":"SP-6","dotted_scope":"delivery.build","destination":"SP-DELIVERY-AUTOMATION","evidence":["S41"]},{"id":"X55","origin":"SP-6","dotted_scope":"delivery.test","destination":"SP-DELIVERY-AUTOMATION","evidence":["S41"]},{"id":"X56","origin":"SP-6","dotted_scope":"delivery.deploy","destination":"SP-DELIVERY-AUTOMATION","evidence":["S41"]},{"id":"X57","origin":"SP-6","dotted_scope":"governance.promotion","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S41"]},{"id":"X58","origin":"SP-6","dotted_scope":"governance.audit","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S41"]},{"id":"X59","origin":"SP-6","dotted_scope":"data.pre-production","destination":"SP-DATA-ENVIRONMENTS","evidence":["S41"]},{"id":"X60","origin":"SP-6","dotted_scope":"data.randomized","destination":"SP-DATA-ENVIRONMENTS","evidence":["S41"]},{"id":"X61","origin":"SP-6","dotted_scope":"operation.pipeline-state","destination":"CAP-DURABLE-OPERATIONS","evidence":["S41"]},{"id":"X62","origin":"SP-7","dotted_scope":"onboarding.journey","destination":"SP-DEVELOPER-ONBOARDING","evidence":["S33"]},{"id":"X63","origin":"SP-7","dotted_scope":"project.resolution","destination":"CAP-PROJECT-CATALOG","evidence":["S33"]},{"id":"X64","origin":"SP-7","dotted_scope":"data.randomized","destination":"SP-DATA-ENVIRONMENTS","evidence":["S33"]},{"id":"X65","origin":"SP-7","dotted_scope":"operation.request-durability","destination":"CAP-DURABLE-OPERATIONS","evidence":["S33"]},{"id":"X66","origin":"SP-7","dotted_scope":"delivery.ci-handoff","destination":"SP-DELIVERY-AUTOMATION","evidence":["S33"]},{"id":"X67","origin":"SP-7","dotted_scope":"onboarding.mode","destination":"DO","evidence":["S33"]},{"id":"X68","origin":"SP-8","dotted_scope":"request.intake-fulfillment","destination":"SP-ENVIRONMENT-REQUESTS","evidence":["S34"]},{"id":"X69","origin":"SP-8","dotted_scope":"data.randomized-dev","destination":"SP-DATA-ENVIRONMENTS","evidence":["S34"]},{"id":"X70","origin":"SP-8","dotted_scope":"governance.production-approval","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S34"]},{"id":"X71","origin":"SP-8","dotted_scope":"operation.request-durability","destination":"CAP-DURABLE-OPERATIONS","evidence":["S34"]},{"id":"X72","origin":"SP-8","dotted_scope":"request.quota-policy","destination":"CAP-TENANCY","evidence":["S34"]},{"id":"X73","origin":"SP-8","dotted_scope":"access.role-authorization","destination":"SP-PLATFORM-ACCESS","evidence":["S34"]},{"id":"X74","origin":"SP-8","dotted_scope":"resource.lineage-registration","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S34"]},{"id":"X75","origin":"SP-9","dotted_scope":"inventory.read-only","destination":"SP-OPERATIONS-UI","evidence":["S35"]},{"id":"X76","origin":"SP-9","dotted_scope":"request.status-actions","destination":"SP-ENVIRONMENT-REQUESTS","evidence":["S35"]},{"id":"X77","origin":"SP-9","dotted_scope":"delivery.pipeline-status-update-actions","destination":"SP-DELIVERY-AUTOMATION","evidence":["S35"]},{"id":"X78","origin":"SP-9","dotted_scope":"access.oidc-role-gating","destination":"SP-PLATFORM-ACCESS","evidence":["S35"]},{"id":"X79","origin":"SP-9","dotted_scope":"state.api-source","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S35"]},{"id":"X80","origin":"SP-10","dotted_scope":"governance.audit-append-only","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S36"]},{"id":"X81","origin":"SP-10","dotted_scope":"governance.production-guardrails","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S36"]},{"id":"X82","origin":"SP-10","dotted_scope":"governance.promotion-gate","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S36"]},{"id":"X83","origin":"SP-10","dotted_scope":"lifecycle.resource-ttl","destination":"SP-RESOURCE-LIFECYCLE","evidence":["S36"]},{"id":"X84","origin":"SP-10","dotted_scope":"lifecycle.resource-retention","destination":"SP-RESOURCE-LIFECYCLE","evidence":["S36"]},{"id":"X85","origin":"SP-10","dotted_scope":"lifecycle.image-retention","destination":"SP-RESOURCE-LIFECYCLE","evidence":["S36"]},{"id":"X86","origin":"SP-10","dotted_scope":"lifecycle.orphan-reclamation","destination":"SP-RESOURCE-LIFECYCLE","evidence":["S36"]},{"id":"X87","origin":"SP-10","dotted_scope":"recovery.backup-scheduling","destination":"SP-DATA-RECOVERY","evidence":["S36"]},{"id":"X88","origin":"SP-10","dotted_scope":"recovery.backup-retention","destination":"SP-DATA-RECOVERY","evidence":["S36"]},{"id":"X89","origin":"SP-10","dotted_scope":"recovery.restore-drills","destination":"SP-DATA-RECOVERY","evidence":["S36"]},{"id":"X90","origin":"SP-2","dotted_scope":"interface.cli","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29","S28"]},{"id":"X91","origin":"SP-2","dotted_scope":"audit.local-operation","destination":"CAP-DURABLE-OPERATIONS","evidence":["S29","S28"]},{"id":"X92","origin":"SP-4","dotted_scope":"authority.provider-catalog","destination":"CAP-PROVIDER-CATALOG","evidence":["S31","S28"]},{"id":"X93","origin":"SP-3","dotted_scope":"provider.catalog-registration","destination":"CAP-PROVIDER-CATALOG","evidence":["S30","S25"]}],"edges":[{"id":"G1","from":"CAP-MANIFEST","to":"CAP-PROJECT-CATALOG","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-MANIFEST-READY"],"evidence":["S42"],"ownership_destination":"CAP-PROJECT-CATALOG"},{"id":"G2","from":"CAP-MANIFEST","to":"CAP-DEPLOYMENT-SPEC","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-MANIFEST-READY"],"evidence":["S42"],"ownership_destination":"CAP-DEPLOYMENT-SPEC"},{"id":"G3","from":"CAP-SOURCE","to":"CAP-PROJECT-CATALOG","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-SOURCE-READY"],"evidence":["S42"],"ownership_destination":"CAP-PROJECT-CATALOG"},{"id":"G4","from":"CAP-WORKSPACE","to":"SP-DEVELOPER-ONBOARDING","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-WORKSPACE-READY"],"evidence":["S42"],"ownership_destination":"SP-DEVELOPER-ONBOARDING"},{"id":"G5","from":"CAP-LOCAL-BACKEND","to":"SP-DEVELOPER-ONBOARDING","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-LOCAL-BACKEND-READY"],"evidence":["S42"],"ownership_destination":"SP-DEVELOPER-ONBOARDING"},{"id":"G6","from":"PORT-SOURCE-PROVIDER","to":"CAP-PROJECT-CATALOG","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-SOURCE-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CAP-PROJECT-CATALOG"},{"id":"G7","from":"ADAPTER-SOURCE-GIT","to":"CAP-SOURCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-ADAPTER-SOURCE-GIT-READY"],"evidence":["S42"],"ownership_destination":"CAP-SOURCE"},{"id":"G8","from":"PORT-WORKSPACE-PROVIDER","to":"CAP-WORKSPACE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-WORKSPACE-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CAP-WORKSPACE"},{"id":"G9","from":"ADAPTER-WORKSPACE-GIT","to":"CAP-WORKSPACE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-ADAPTER-WORKSPACE-GIT-READY"],"evidence":["S42"],"ownership_destination":"CAP-WORKSPACE"},{"id":"G10","from":"PORT-BACKEND-PROVIDER","to":"CAP-DEPLOYMENT-SPEC","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-BACKEND-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CAP-DEPLOYMENT-SPEC"},{"id":"G11","from":"ADAPTER-BACKEND-DOCKER","to":"CAP-LOCAL-BACKEND","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-ADAPTER-BACKEND-DOCKER-READY"],"evidence":["S42"],"ownership_destination":"CAP-LOCAL-BACKEND"},{"id":"G12","from":"PORT-IMAGE-REGISTRY","to":"CAP-IMAGE-REGISTRY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-IMAGE-REGISTRY-READY"],"evidence":["S42"],"ownership_destination":"CAP-IMAGE-REGISTRY"},{"id":"G13","from":"ADAPTER-IMAGE-REGISTRY-GHCR","to":"CAP-IMAGE-REGISTRY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-ADAPTER-IMAGE-REGISTRY-GHCR-READY"],"evidence":["S42"],"ownership_destination":"CAP-IMAGE-REGISTRY"},{"id":"G14","from":"CAP-IMAGE-REGISTRY","to":"INT-LOCAL-DIGEST-CONSUMPTION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-IMAGE-REGISTRY-READY"],"evidence":["S42"],"ownership_destination":"INT-LOCAL-DIGEST-CONSUMPTION"},{"id":"G15","from":"CAP-CREDENTIALS","to":"CHG-FIRST-DATABASE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-DATABASE-ADAPTER"},{"id":"G16","from":"CAP-DATA-ARTIFACTS","to":"CHG-FIRST-DATABASE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-DATA-ARTIFACTS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-DATABASE-ADAPTER"},{"id":"G17","from":"PORT-DATABASE-PROVIDER","to":"CHG-FIRST-DATABASE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-DATABASE-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-DATABASE-ADAPTER"},{"id":"G18","from":"CAP-CREDENTIALS","to":"CHG-FIRST-REMOTE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-REMOTE-ADAPTER"},{"id":"G19","from":"CAP-TENANCY","to":"CHG-FIRST-REMOTE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-REMOTE-ADAPTER"},{"id":"G20","from":"CAP-DEPLOYMENT-SPEC","to":"CHG-FIRST-REMOTE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-DEPLOYMENT-SPEC-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-REMOTE-ADAPTER"},{"id":"G21","from":"PORT-BACKEND-PROVIDER","to":"CHG-FIRST-REMOTE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-BACKEND-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-REMOTE-ADAPTER"},{"id":"G22","from":"CAP-TENANCY","to":"CHG-FIRST-IDENTITY-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-IDENTITY-ADAPTER"},{"id":"G23","from":"PORT-IDENTITY","to":"CHG-FIRST-IDENTITY-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-IDENTITY-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-IDENTITY-ADAPTER"},{"id":"G24","from":"CAP-CREDENTIALS","to":"CHG-FIRST-IDENTITY-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-IDENTITY-ADAPTER"},{"id":"G25","from":"PORT-PIPELINE","to":"CHG-FIRST-PIPELINE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-PIPELINE-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-PIPELINE-ADAPTER"},{"id":"G26","from":"CAP-DURABLE-OPERATIONS","to":"CHG-FIRST-PIPELINE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-PIPELINE-ADAPTER"},{"id":"G27","from":"CAP-CREDENTIALS","to":"CHG-FIRST-PIPELINE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-PIPELINE-ADAPTER"},{"id":"G28","from":"CAP-PROVIDER-CATALOG","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-PROVIDER-CATALOG-READY"],"evidence":["S42"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G29","from":"CAP-TENANCY","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G30","from":"CAP-CREDENTIALS","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G31","from":"CAP-DURABLE-OPERATIONS","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S42"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G32","from":"CAP-RESOURCE-OWNERSHIP","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-RESOURCE-OWNERSHIP-READY"],"evidence":["S42","S63","S64","S65","S66","S67"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G33","from":"CHG-FIRST-DATABASE-ADAPTER","to":"INT-DATABASE-RUNTIME-CUTOVER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-DATABASE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"INT-DATABASE-RUNTIME-CUTOVER"},{"id":"G34","from":"INT-DATABASE-RUNTIME-CUTOVER","to":"WF-DATA-COPY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-INT-DATABASE-RUNTIME-CUTOVER-READY"],"evidence":["S42"],"ownership_destination":"WF-DATA-COPY"},{"id":"G35","from":"CHG-FIRST-DATABASE-ADAPTER","to":"WF-DATA-COPY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-DATABASE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"WF-DATA-COPY"},{"id":"G36","from":"WF-DATA-COPY","to":"SP-DATA-ENVIRONMENTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-WF-DATA-COPY-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-ENVIRONMENTS"},{"id":"G37","from":"CHG-FIRST-DATABASE-ADAPTER","to":"SP-DATA-ENVIRONMENTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-DATABASE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-ENVIRONMENTS"},{"id":"G38","from":"CHG-FIRST-REMOTE-ADAPTER","to":"SP-REMOTE-DEPLOYMENT","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-REMOTE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"SP-REMOTE-DEPLOYMENT"},{"id":"G39","from":"CHG-FIRST-IDENTITY-ADAPTER","to":"SP-PLATFORM-ACCESS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-IDENTITY-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"SP-PLATFORM-ACCESS"},{"id":"G40","from":"CHG-FIRST-PIPELINE-ADAPTER","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-PIPELINE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G41","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-DATA-ENVIRONMENTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-ENVIRONMENTS"},{"id":"G42","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-REMOTE-DEPLOYMENT","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-REMOTE-DEPLOYMENT"},{"id":"G43","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-PLATFORM-ACCESS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-PLATFORM-ACCESS"},{"id":"G45","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-ENVIRONMENT-REQUESTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-ENVIRONMENT-REQUESTS"},{"id":"G46","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-OPERATIONS-UI","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-OPERATIONS-UI"},{"id":"G47","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-RESOURCE-LIFECYCLE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-RESOURCE-LIFECYCLE"},{"id":"G48","from":"SP-DATA-ENVIRONMENTS","to":"SP-PRODUCTION-GOVERNANCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-DATA-ENVIRONMENTS-READY"],"evidence":["S42"],"ownership_destination":"SP-PRODUCTION-GOVERNANCE"},{"id":"G49","from":"SP-REMOTE-DEPLOYMENT","to":"SP-PRODUCTION-GOVERNANCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-REMOTE-DEPLOYMENT-READY"],"evidence":["S42"],"ownership_destination":"SP-PRODUCTION-GOVERNANCE"},{"id":"G50","from":"SP-PLATFORM-ACCESS","to":"SP-PRODUCTION-GOVERNANCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PLATFORM-ACCESS-READY"],"evidence":["S42"],"ownership_destination":"SP-PRODUCTION-GOVERNANCE"},{"id":"G51","from":"WF-PRODUCTION-PROMOTION","to":"SP-PRODUCTION-GOVERNANCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-WF-PRODUCTION-PROMOTION-READY"],"evidence":["S42"],"ownership_destination":"SP-PRODUCTION-GOVERNANCE"},{"id":"G52","from":"SP-DATA-ENVIRONMENTS","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-DATA-ENVIRONMENTS-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G53","from":"SP-REMOTE-DEPLOYMENT","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-REMOTE-DEPLOYMENT-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G54","from":"SP-PRODUCTION-GOVERNANCE","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PRODUCTION-GOVERNANCE-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G55","from":"CAP-IMAGE-REGISTRY","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-IMAGE-REGISTRY-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G57","from":"CAP-PROJECT-CATALOG","to":"SP-DEVELOPER-ONBOARDING","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-PROJECT-CATALOG-READY"],"evidence":["S42"],"ownership_destination":"SP-DEVELOPER-ONBOARDING"},{"id":"G58","from":"SP-DATA-ENVIRONMENTS","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-DATA-ENVIRONMENTS-READY"],"evidence":["S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G59","from":"SP-REMOTE-DEPLOYMENT","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-REMOTE-DEPLOYMENT-READY"],"evidence":["S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G60","from":"SP-PLATFORM-ACCESS","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PLATFORM-ACCESS-READY"],"evidence":["S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G61","from":"SP-PRODUCTION-GOVERNANCE","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PRODUCTION-GOVERNANCE-READY"],"evidence":["S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G62","from":"WF-ENVIRONMENT-REQUEST","to":"SP-ENVIRONMENT-REQUESTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-WF-ENVIRONMENT-REQUEST-READY"],"evidence":["S42"],"ownership_destination":"SP-ENVIRONMENT-REQUESTS"},{"id":"G63","from":"SP-DATA-ENVIRONMENTS","to":"SP-DATA-RECOVERY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-DATA-ENVIRONMENTS-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-RECOVERY"},{"id":"G64","from":"SP-PRODUCTION-GOVERNANCE","to":"SP-DATA-RECOVERY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PRODUCTION-GOVERNANCE-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-RECOVERY"},{"id":"G65","from":"SP-PLATFORM-ACCESS","to":"SP-OPERATIONS-UI","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PLATFORM-ACCESS-READY"],"evidence":["S42"],"ownership_destination":"SP-OPERATIONS-UI"},{"id":"G66","from":"SP-DELIVERY-AUTOMATION","to":"SP-OPERATIONS-UI","type":"soft","reason":"required acceptance handoff","handoff_ids":["AC-SP-DELIVERY-AUTOMATION-READY"],"evidence":["S42"],"ownership_destination":"SP-OPERATIONS-UI"},{"id":"G67","from":"SP-ENVIRONMENT-REQUESTS","to":"SP-OPERATIONS-UI","type":"soft","reason":"required acceptance handoff","handoff_ids":["AC-SP-ENVIRONMENT-REQUESTS-READY"],"evidence":["S42"],"ownership_destination":"SP-OPERATIONS-UI"},{"id":"G68","from":"CAP-DURABLE-OPERATIONS","to":"WF-DATA-COPY","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S29","S42"],"ownership_destination":"WF-DATA-COPY"},{"id":"G69","from":"CAP-DURABLE-OPERATIONS","to":"WF-PRODUCTION-PROMOTION","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S41","S42"],"ownership_destination":"WF-PRODUCTION-PROMOTION"},{"id":"G70","from":"CAP-DURABLE-OPERATIONS","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S34","S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G71","from":"CAP-RESOURCE-OWNERSHIP","to":"SP-RESOURCE-LIFECYCLE","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-RESOURCE-OWNERSHIP-READY"],"evidence":["S36","S28","S63","S64","S65","S66","S67"],"ownership_destination":"SP-RESOURCE-LIFECYCLE"},{"id":"G72","from":"CAP-RESOURCE-OWNERSHIP","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-RESOURCE-OWNERSHIP-READY"],"evidence":["S34","S42","S63","S64","S65","S66","S67"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G73","from":"CAP-RESOURCE-OWNERSHIP","to":"WF-DATA-COPY","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-RESOURCE-OWNERSHIP-READY"],"evidence":["S29","S42","S63","S64","S65","S66","S67"],"ownership_destination":"WF-DATA-COPY"},{"id":"G74","from":"CAP-TENANCY","to":"SP-REMOTE-DEPLOYMENT","type":"hard","reason":"required tenancy contract handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"SP-REMOTE-DEPLOYMENT"},{"id":"G75","from":"CAP-TENANCY","to":"SP-ENVIRONMENT-REQUESTS","type":"hard","reason":"required tenancy contract handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"SP-ENVIRONMENT-REQUESTS"},{"id":"G76","from":"SP-CONTROL-PLANE-AUTHORITY","to":"CHG-OPS-UI-READONLY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S83"],"ownership_destination":"CHG-OPS-UI-READONLY"}],"decompositions":[{"id":"CHG-FIRST-DATABASE-ADAPTER","owner":"Data Platform","type":"implementation_change","inputs":["PORT-DATABASE-PROVIDER","CAP-CREDENTIALS","CAP-DATA-ARTIFACTS"],"outputs":["openspec/changes/CHG-FIRST-DATABASE-ADAPTER/proposal.md","openspec/changes/CHG-FIRST-DATABASE-ADAPTER/specs/provider-adapter/spec.md","openspec/changes/CHG-FIRST-DATABASE-ADAPTER/design.md"],"acceptance_ids":["AC-CHG-FIRST-DATABASE-ADAPTER-READY"],"start_boundary":"start:CHG-FIRST-DATABASE-ADAPTER","finish_boundary":"finish:CHG-FIRST-DATABASE-ADAPTER","dependencies":["PORT-DATABASE-PROVIDER","CAP-CREDENTIALS","CAP-DATA-ARTIFACTS"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"openspec/changes/CHG-FIRST-DATABASE-ADAPTER/proposal.md","additions":100,"deletions":0,"total":100},{"path":"openspec/changes/CHG-FIRST-DATABASE-ADAPTER/specs/provider-adapter/spec.md","additions":120,"deletions":0,"total":120},{"path":"openspec/changes/CHG-FIRST-DATABASE-ADAPTER/design.md","additions":110,"deletions":0,"total":110}],"total":330,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-FIRST-REMOTE-ADAPTER","owner":"Runtime","type":"blocked_product_placeholder","inputs":["PORT-BACKEND-PROVIDER","CAP-CREDENTIALS","CAP-TENANCY","CAP-DEPLOYMENT-SPEC"],"outputs":["openspec/changes/platform-first-remote-adapter/proposal.md","openspec/changes/platform-first-remote-adapter/specs/provider-adapter/spec.md","openspec/changes/platform-first-remote-adapter/design.md"],"acceptance_ids":["AC-CHG-FIRST-REMOTE-ADAPTER-READY"],"start_boundary":"start:CHG-FIRST-REMOTE-ADAPTER","finish_boundary":"finish:CHG-FIRST-REMOTE-ADAPTER","dependencies":["PORT-BACKEND-PROVIDER","CAP-CREDENTIALS","CAP-TENANCY","CAP-DEPLOYMENT-SPEC"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"openspec/changes/platform-first-remote-adapter/proposal.md","additions":100,"deletions":0,"total":100},{"path":"openspec/changes/platform-first-remote-adapter/specs/provider-adapter/spec.md","additions":120,"deletions":0,"total":120},{"path":"openspec/changes/platform-first-remote-adapter/design.md","additions":110,"deletions":0,"total":110}],"total":330,"hard_gate":400},"status":"blocked_placeholder","blocking_decision_ids":["DP","DR","DPROV-REMOTE"]},{"id":"CHG-FIRST-IDENTITY-ADAPTER","owner":"Security","type":"blocked_product_placeholder","inputs":["PORT-IDENTITY","CAP-CREDENTIALS","CAP-TENANCY"],"outputs":["openspec/changes/platform-first-identity-adapter/proposal.md","openspec/changes/platform-first-identity-adapter/specs/provider-adapter/spec.md","openspec/changes/platform-first-identity-adapter/design.md"],"acceptance_ids":["AC-CHG-FIRST-IDENTITY-ADAPTER-READY"],"start_boundary":"start:CHG-FIRST-IDENTITY-ADAPTER","finish_boundary":"finish:CHG-FIRST-IDENTITY-ADAPTER","dependencies":["PORT-IDENTITY","CAP-CREDENTIALS","CAP-TENANCY"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"openspec/changes/platform-first-identity-adapter/proposal.md","additions":100,"deletions":0,"total":100},{"path":"openspec/changes/platform-first-identity-adapter/specs/provider-adapter/spec.md","additions":120,"deletions":0,"total":120},{"path":"openspec/changes/platform-first-identity-adapter/design.md","additions":110,"deletions":0,"total":110}],"total":330,"hard_gate":400},"status":"blocked_placeholder","blocking_decision_ids":["DP","DT","DPROV-IDP"]},{"id":"CHG-PORTFOLIO-VALIDATOR","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["tests/portfolio/test_portfolio_integrity.py"],"acceptance_ids":["AC-CAP-PROJECT-CATALOG-READY"],"start_boundary":"start:CHG-PORTFOLIO-VALIDATOR","finish_boundary":"finish:CHG-PORTFOLIO-VALIDATOR","dependencies":[],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"tests/portfolio/test_portfolio_integrity.py","additions":260,"deletions":0,"total":260}],"total":260,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-ADOPT-UI-ROUTE","owner":"Architecture","type":"implementation_change","inputs":["CHG-PORTFOLIO-VALIDATOR"],"outputs":["docs/specs/platform/portfolio.json"],"acceptance_ids":["AC-SP-OPERATIONS-UI-READY"],"start_boundary":"start:CHG-ADOPT-UI-ROUTE","finish_boundary":"finish:CHG-ADOPT-UI-ROUTE","dependencies":["CHG-PORTFOLIO-VALIDATOR"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-PORTFOLIO-VALIDATOR","changed_line_forecast":{"files":[{"path":"docs/specs/platform/portfolio.json","additions":250,"deletions":0,"total":250}],"total":250,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-PROVIDER-CATALOG","owner":"Architecture","type":"implementation_change","inputs":["CAP-PROVIDER-CATALOG"],"outputs":["src/odoo_forge/provider_catalog/","tests/provider_catalog/"],"acceptance_ids":["AC-CAP-PROVIDER-CATALOG-READY"],"start_boundary":"start:CHG-PROVIDER-CATALOG","finish_boundary":"finish:CHG-PROVIDER-CATALOG","dependencies":["CHG-ADOPT-UI-ROUTE"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-ADOPT-UI-ROUTE","changed_line_forecast":{"files":[{"path":"src/odoo_forge/provider_catalog/","additions":300,"deletions":0,"total":300}],"total":300,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4A-INSTANCE-REGISTRY","owner":"Control Plane","type":"implementation_change","inputs":["CAP-TENANCY","CAP-RESOURCE-OWNERSHIP"],"outputs":["src/odoo_forge/instance_registry/","src/odoo_forge/ports/"],"acceptance_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"start_boundary":"start:CHG-SP4A-INSTANCE-REGISTRY","finish_boundary":"finish:CHG-SP4A-INSTANCE-REGISTRY","dependencies":["CHG-ADOPT-UI-ROUTE"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-ADOPT-UI-ROUTE","changed_line_forecast":{"files":[{"path":"src/odoo_forge/instance_registry/","additions":180,"deletions":0,"total":180},{"path":"src/odoo_forge/ports/","additions":150,"deletions":0,"total":150}],"total":330,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-REGISTRY-POSTGRES","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4A-INSTANCE-REGISTRY"],"outputs":["src/odoo_forge_instances_postgres/migrate.py","src/odoo_forge_instances_postgres/migrations/__init__.py","src/odoo_forge_instances_postgres/migrations/0001_instance_registry.sql","tests/odoo_forge_instances_postgres/test_migrate.py","tests/odoo_forge_instances_postgres/test_migration_process.py"],"acceptance_ids":["AC-SP4B-REGISTRY-POSTGRES-READY"],"start_boundary":"start:CHG-SP4B-REGISTRY-POSTGRES","finish_boundary":"finish:CHG-SP4B-REGISTRY-POSTGRES","dependencies":["CHG-SP4A-INSTANCE-REGISTRY"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert the migration module, SQL migration, and their tests; source rollback drops no migrated database","immediate_parent":"CHG-SP4A-INSTANCE-REGISTRY","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/migrate.py","additions":82,"deletions":0,"total":82},{"path":"src/odoo_forge_instances_postgres/migrations/__init__.py","additions":2,"deletions":0,"total":2},{"path":"src/odoo_forge_instances_postgres/migrations/0001_instance_registry.sql","additions":24,"deletions":0,"total":24},{"path":"tests/odoo_forge_instances_postgres/test_migrate.py","additions":142,"deletions":0,"total":142},{"path":"tests/odoo_forge_instances_postgres/test_migration_process.py","additions":50,"deletions":0,"total":50}],"total":300,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4C-CONTROL-PLANE-EDGE","owner":"Control Plane","type":"implementation_change","inputs":["CHG-PROVIDER-CATALOG","CHG-SP4B-REAL-ACCEPTANCE"],"outputs":["src/odoo_forge_server/","tests/odoo_forge_server/"],"acceptance_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"start_boundary":"start:CHG-SP4C-CONTROL-PLANE-EDGE","finish_boundary":"finish:CHG-SP4C-CONTROL-PLANE-EDGE","dependencies":["CHG-PROVIDER-CATALOG","CHG-SP4B-REAL-ACCEPTANCE"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-SP4B-REAL-ACCEPTANCE","changed_line_forecast":{"files":[{"path":"src/odoo_forge_server/","additions":220,"deletions":0,"total":220},{"path":"tests/odoo_forge_server/","additions":160,"deletions":0,"total":160}],"total":380,"hard_gate":400},"status":"delivered","blocking_decision_ids":[]},{"id":"CHG-OPS-UI-READONLY","owner":"Experience","type":"blocked_product_placeholder","inputs":["CHG-SP4C-CONTROL-PLANE-EDGE"],"outputs":["src/odoo_forge_server/templates/","src/odoo_forge_server/views.py","tests/odoo_forge_server/test_ui.py"],"acceptance_ids":["AC-CHG-OPS-UI-READONLY-READY"],"start_boundary":"start:CHG-OPS-UI-READONLY","finish_boundary":"finish:CHG-OPS-UI-READONLY","dependencies":["CHG-SP4C-CONTROL-PLANE-EDGE"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-SP4C-CONTROL-PLANE-EDGE","changed_line_forecast":{"files":[{"path":"src/odoo_forge_server/templates/","additions":160,"deletions":0,"total":160},{"path":"src/odoo_forge_server/views.py","additions":100,"deletions":0,"total":100},{"path":"tests/odoo_forge_server/test_ui.py","additions":80,"deletions":0,"total":80}],"total":340,"hard_gate":400},"status":"blocked_placeholder","blocking_decision_ids":[]},{"id":"CHG-PORTFOLIO-AUTHORITY-PATH","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["openspec/specs/platform-subproject-governance/spec.md","docs/specs/platform/portfolio.json","tests/portfolio/test_portfolio_integrity.py"],"acceptance_ids":["AC-CHG-PORTFOLIO-AUTHORITY-PATH-READY"],"start_boundary":"start:CHG-PORTFOLIO-AUTHORITY-PATH","finish_boundary":"finish:CHG-PORTFOLIO-AUTHORITY-PATH","dependencies":[],"verification_commands":["C37"],"rollback":"revert the single commit; restore portfolio.json to prior committed bytes","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"openspec/specs/platform-subproject-governance/spec.md","additions":3,"deletions":3,"total":6},{"path":"docs/specs/platform/portfolio.json","additions":31,"deletions":0,"total":31},{"path":"tests/portfolio/test_portfolio_integrity.py","additions":24,"deletions":2,"total":26}],"total":63,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-VALIDATOR-GROUNDWORK","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["docs/tools/platform_portfolio/validate.py","docs/tools/platform_portfolio/test_validate.py","tests/portfolio/test_portfolio_integrity.py","docs/specs/platform/portfolio.json"],"acceptance_ids":["AC-CHG-SP4B-VALIDATOR-GROUNDWORK-READY"],"start_boundary":"start:CHG-SP4B-VALIDATOR-GROUNDWORK","finish_boundary":"finish:CHG-SP4B-VALIDATOR-GROUNDWORK","dependencies":["CHG-PORTFOLIO-AUTHORITY-PATH"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"revert the single commit; restore portfolio.json to prior committed bytes","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"docs/tools/platform_portfolio/validate.py","additions":46,"deletions":4,"total":50},{"path":"docs/tools/platform_portfolio/test_validate.py","additions":106,"deletions":0,"total":106},{"path":"tests/portfolio/test_portfolio_integrity.py","additions":36,"deletions":2,"total":38},{"path":"docs/specs/platform/portfolio.json","additions":45,"deletions":0,"total":45}],"total":239,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-ITEM-SCAFFOLD","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["docs/specs/platform/portfolio.json","tests/portfolio/test_portfolio_integrity.py"],"acceptance_ids":["AC-CHG-SP4B-ITEM-SCAFFOLD-READY"],"start_boundary":"start:CHG-SP4B-ITEM-SCAFFOLD","finish_boundary":"finish:CHG-SP4B-ITEM-SCAFFOLD","dependencies":["CHG-SP4B-VALIDATOR-GROUNDWORK"],"verification_commands":["C42","C43","C44"],"rollback":"revert the single commit; restore portfolio.json to prior committed bytes","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"docs/specs/platform/portfolio.json","additions":134,"deletions":0,"total":134},{"path":"tests/portfolio/test_portfolio_integrity.py","additions":107,"deletions":0,"total":107}],"total":241,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-DECOMPOSITION-ADOPTION","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["docs/specs/platform/portfolio.json","tests/portfolio/test_portfolio_integrity.py"],"acceptance_ids":["AC-CHG-SP4B-DECOMPOSITION-ADOPTION-READY"],"start_boundary":"start:CHG-SP4B-DECOMPOSITION-ADOPTION","finish_boundary":"finish:CHG-SP4B-DECOMPOSITION-ADOPTION","dependencies":["CHG-SP4B-ITEM-SCAFFOLD"],"verification_commands":["C42","C43","C44"],"rollback":"revert the slice commits; restore portfolio.json to prior committed bytes","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"docs/specs/platform/portfolio.json","additions":90,"deletions":0,"total":90},{"path":"tests/portfolio/test_portfolio_integrity.py","additions":210,"deletions":0,"total":210}],"total":300,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-ERRORS-PACKAGE","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-REGISTRY-POSTGRES"],"outputs":["src/odoo_forge_instances_postgres/__init__.py","src/odoo_forge_instances_postgres/errors.py","pyproject.toml","uv.lock",".github/workflows/release.yml","tests/odoo_forge_instances_postgres/test_errors.py","tests/odoo_forge_instances_postgres/test_package.py"],"acceptance_ids":["AC-SP4B-ERRORS-PACKAGE-READY"],"start_boundary":"start:CHG-SP4B-ERRORS-PACKAGE","finish_boundary":"finish:CHG-SP4B-ERRORS-PACKAGE","dependencies":["CHG-SP4B-REGISTRY-POSTGRES"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert the errors package, packaging metadata, and their tests; no migrated database state is affected","immediate_parent":"CHG-SP4B-REGISTRY-POSTGRES","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/__init__.py","additions":12,"deletions":0,"total":12},{"path":"src/odoo_forge_instances_postgres/errors.py","additions":58,"deletions":0,"total":58},{"path":"pyproject.toml","additions":22,"deletions":0,"total":22},{"path":"uv.lock","additions":115,"deletions":0,"total":115},{"path":".github/workflows/release.yml","additions":8,"deletions":0,"total":8},{"path":"tests/odoo_forge_instances_postgres/test_errors.py","additions":95,"deletions":0,"total":95},{"path":"tests/odoo_forge_instances_postgres/test_package.py","additions":30,"deletions":0,"total":30}],"total":340,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-ADAPTER","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-ERRORS-PACKAGE"],"outputs":["src/odoo_forge_instances_postgres/adapter.py","tests/odoo_forge_instances_postgres/test_adapter.py"],"acceptance_ids":["AC-SP4B-ADAPTER-READY"],"start_boundary":"start:CHG-SP4B-ADAPTER","finish_boundary":"finish:CHG-SP4B-ADAPTER","dependencies":["CHG-SP4B-ERRORS-PACKAGE"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert the adapter module and its tests; no migrated database state is affected","immediate_parent":"CHG-SP4B-ERRORS-PACKAGE","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/adapter.py","additions":160,"deletions":0,"total":160},{"path":"tests/odoo_forge_instances_postgres/test_adapter.py","additions":160,"deletions":0,"total":160}],"total":320,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-CONFORMANCE-FAKES","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-ADAPTER"],"outputs":["src/odoo_forge_instances_postgres/fakes.py","tests/odoo_forge_instances_postgres/test_conformance.py","tests/odoo_forge_instances_postgres/test_fake_boundary.py"],"acceptance_ids":["AC-SP4B-CONFORMANCE-FAKES-READY"],"start_boundary":"start:CHG-SP4B-CONFORMANCE-FAKES","finish_boundary":"finish:CHG-SP4B-CONFORMANCE-FAKES","dependencies":["CHG-SP4B-ADAPTER"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert the conformance fakes module and its tests; no migrated database state is affected","immediate_parent":"CHG-SP4B-ADAPTER","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/fakes.py","additions":90,"deletions":0,"total":90},{"path":"tests/odoo_forge_instances_postgres/test_conformance.py","additions":70,"deletions":0,"total":70},{"path":"tests/odoo_forge_instances_postgres/test_fake_boundary.py","additions":80,"deletions":0,"total":80}],"total":240,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-POSTGRES-HARNESS","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-CONFORMANCE-FAKES"],"outputs":["src/odoo_forge_instances_postgres/real_postgres.py","tests/odoo_forge_instances_postgres/test_real_postgres_harness.py","tests/odoo_forge_instances_postgres/test_real_postgres_process.py"],"acceptance_ids":["AC-SP4B-POSTGRES-HARNESS-READY"],"start_boundary":"start:CHG-SP4B-POSTGRES-HARNESS","finish_boundary":"finish:CHG-SP4B-POSTGRES-HARNESS","dependencies":["CHG-SP4B-CONFORMANCE-FAKES"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert harness module and process tests; persisted database state is removed only by an explicit retention-approved operation","immediate_parent":"CHG-SP4B-CONFORMANCE-FAKES","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/real_postgres.py","additions":150,"deletions":0,"total":150},{"path":"tests/odoo_forge_instances_postgres/test_real_postgres_harness.py","additions":150,"deletions":0,"total":150},{"path":"tests/odoo_forge_instances_postgres/test_real_postgres_process.py","additions":80,"deletions":0,"total":80}],"total":380,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-REAL-ACCEPTANCE","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-POSTGRES-HARNESS"],"outputs":["tests/odoo_forge_instances_postgres/test_real_postgres_integration.py","tests/odoo_forge_instances_postgres/postgres_test_database.py","tests/odoo_forge_instances_postgres/test_real_postgres_acceptance.py"],"acceptance_ids":["AC-SP4B-REAL-ACCEPTANCE-READY","AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"start_boundary":"start:CHG-SP4B-REAL-ACCEPTANCE","finish_boundary":"finish:CHG-SP4B-REAL-ACCEPTANCE","dependencies":["CHG-SP4B-POSTGRES-HARNESS"],"verification_commands":["C37","C38","C39","C40","C41","C45","C46"],"rollback":"revert acceptance-only tests and helpers; database cleanup stays explicit and retention-governed","immediate_parent":"CHG-SP4B-POSTGRES-HARNESS","changed_line_forecast":{"files":[{"path":"tests/odoo_forge_instances_postgres/test_real_postgres_integration.py","additions":220,"deletions":0,"total":220},{"path":"tests/odoo_forge_instances_postgres/postgres_test_database.py","additions":80,"deletions":0,"total":80},{"path":"tests/odoo_forge_instances_postgres/test_real_postgres_acceptance.py","additions":50,"deletions":0,"total":50}],"total":350,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]}]} \ No newline at end of file +{"meta":{"schema_version":"1.0.0","decision_evidence":["Engram #6375"],"source_documents":["openspec/changes/archive/2026-07-10-platform-subproject-redefinition/exploration.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/proposal.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/specs/platform-subproject-governance/spec.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/specs/platform-portfolio-documentation-integrity/spec.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/design.md","openspec/changes/archive/2026-07-10-platform-subproject-redefinition/review-ledger.md","Engram #6366","Engram #6368","Engram #6370","Engram #6374","Engram #6375","Engram #6393","Engram #6396","Engram #6398","docs/specs/2026-07-05-modular-odoo-platform-design.md","docs/specs/2026-07-05-phase-1-image-factory-design.md","docs/specs/2026-07-06-phase-2-slices-roadmap.md","docs/specs/2026-07-08-platform-roadmap.md","docs/specs/platform/SP-1-image-registry-provider.md","docs/specs/platform/SP-2-database-provider-and-lifecycle.md","docs/specs/platform/SP-3-remote-backend-providers.md","docs/specs/platform/SP-4-control-plane-core.md","docs/specs/platform/SP-5-rbac-auth.md","docs/specs/platform/SP-6-cicd-integration.md","docs/specs/platform/SP-7-dev-onboarding-flow.md","docs/specs/platform/SP-8-instance-lifecycle-requests.md","docs/specs/platform/SP-9-control-panel-web-ui.md","docs/specs/platform/SP-10-governance-and-lifecycle.md","docs/specs/platform/platform-architecture.html","docs/diagrams/odoo-forge-current-implementation-guide.md","docs/diagrams/odoo-forge-current-implementation.mmd","docs/diagrams/odoo-forge-complete-platform.mmd","docs/specs/2026-07-29-operations-ui-route-design.md"],"protected_history_paths":["docs/specs/2026-07-05-modular-odoo-platform-design.md","docs/specs/2026-07-05-phase-1-image-factory-design.md","docs/specs/2026-07-06-phase-2-slices-roadmap.md","docs/specs/platform/SP-1-image-registry-provider.md","docs/specs/platform/SP-2-database-provider-and-lifecycle.md","docs/specs/platform/SP-3-remote-backend-providers.md","docs/specs/platform/SP-4-control-plane-core.md","docs/specs/platform/SP-5-rbac-auth.md","docs/specs/platform/SP-6-cicd-integration.md","docs/specs/platform/SP-7-dev-onboarding-flow.md","docs/specs/platform/SP-8-instance-lifecycle-requests.md","docs/specs/platform/SP-9-control-panel-web-ui.md","docs/specs/platform/SP-10-governance-and-lifecycle.md","openspec/changes/archive/2026-07-09-sp1","openspec/changes/archive/2026-07-09-sp1-a","openspec/changes/archive/2026-07-09-sp1-b","openspec/changes/archive/2026-07-09-platform-image-registry-provider","openspec/changes/archive/2026-07-09-platform-database-provider","openspec/changes/archive/2026-07-09-platform-database-provider-core","openspec/changes/archive/2026-07-09-platform-database-data-governance","openspec/changes/archive/2026-07-09-platform-coordinated-data-copy","openspec/changes/archive/2026-07-09-platform-database-runtime-integration","docs/diagrams/odoo-forge-current-implementation-guide.md","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER"],"parity_id":"sdd-design|portfolio-redefinition|machine-readable-plan|v1","evidence_catalog":{"S0":"docs/specs/2026-07-06-phase-2-slices-roadmap.md#slice-1--manifest-core--done-archived-2026-07-06","S1":"docs/specs/2026-07-06-phase-2-slices-roadmap.md#slice-2b--git-resolution--lock-writer--done-archived-2026-07-07","S2":"docs/specs/2026-07-06-phase-2-slices-roadmap.md#slice-3--workspace-projection--done-archived-2026-07-08","S3":"docs/specs/2026-07-06-phase-2-slices-roadmap.md#slice-4b--done-archived-2026-07-08","S4":"docs/specs/platform/SP-1-image-registry-provider.md","S5":"openspec/changes/archive/2026-07-09-platform-image-registry-provider/verify-report.md","S6":"commit:9d76b21","S7":"src/odoo_forge/ports/source_provider.py","S8":"docs/diagrams/odoo-forge-current-implementation.mmd","S9":"src/odoo_forge/ports/workspace_provider.py","S10":"src/odoo_forge/ports/backend_provider.py","S11":"src/odoo_forge/ports/image_registry_provider.py","S12":"src/odoo_forge_git/git_provider.py","S13":"src/odoo_forge_workspace/provider.py","S14":"src/odoo_forge_docker/provider.py","S15":"src/odoo_forge_registry/provider.py","S16":"commit:9dcbc77","S17":"openspec/changes/archive/2026-07-09-platform-database-runtime-integration/proposal.md","S18":"openspec/changes/archive/2026-07-09-platform-coordinated-data-copy/proposal.md","S19":"Engram #6375","S20":"docs/specs/2026-07-08-platform-roadmap.md#8-open-decisions-to-resolve-per-sub-project","S21":"openspec/changes/archive/2026-07-10-platform-subproject-redefinition/exploration.md#decisions-requiring-userproduct-confirmation","S22":"docs/specs/platform/SP-2-database-provider-and-lifecycle.md#open-decisions","S23":"docs/specs/platform/SP-3-remote-backend-providers.md#what-it-reuses-does-not-build","S24":"docs/specs/platform/SP-2-database-provider-and-lifecycle.md#port--adapters","S25":"docs/specs/platform/SP-3-remote-backend-providers.md#open-decisions","S26":"docs/specs/platform/SP-5-rbac-auth.md#open-decisions","S27":"docs/specs/platform/SP-6-cicd-integration.md#open-decisions","S28":"openspec/changes/archive/2026-07-10-platform-subproject-redefinition/exploration.md#revised-portfolio-and-old-to-new-traceability","S29":"docs/specs/platform/SP-2-database-provider-and-lifecycle.md","S30":"docs/specs/platform/SP-3-remote-backend-providers.md","S31":"docs/specs/platform/SP-4-control-plane-core.md","S32":"docs/specs/platform/SP-5-rbac-auth.md","S33":"docs/specs/platform/SP-7-dev-onboarding-flow.md","S34":"docs/specs/platform/SP-8-instance-lifecycle-requests.md","S35":"docs/specs/platform/SP-9-control-panel-web-ui.md","S36":"docs/specs/platform/SP-10-governance-and-lifecycle.md","S37":"openspec/changes/archive/2026-07-09-platform-database-provider/platform-database-provider/design.md","S38":"openspec/changes/archive/2026-07-09-platform-database-data-governance/proposal.md","S39":"openspec/changes/archive/2026-07-09-platform-database-provider/platform-database-provider/exploration.md","S40":"openspec/changes/archive/2026-07-09-platform-database-provider-core/platform-database-provider-core/proposal.md","S41":"docs/specs/platform/SP-6-cicd-integration.md","S42":"openspec/changes/archive/2026-07-10-platform-subproject-redefinition/exploration.md#evidence-grounded-dependency-dag-and-waves","S43":"Engram #6647","S44":"openspec/changes/archive/2026-07-11-CAP-CREDENTIALS/specs/credential-materialization/spec.md","S45":"openspec/changes/archive/2026-07-11-CAP-CREDENTIALS/design.md","S46":"tests/credentials/test_materialization.py","S47":"openspec/changes/archive/2026-07-11-CAP-PROJECT-CATALOG/specs/project-catalog-resolution/spec.md","S48":"openspec/changes/archive/2026-07-11-CAP-PROJECT-CATALOG/design.md","S49":"src/odoo_forge/project_catalog/resolver.py","S50":"tests/project_catalog/test_resolver.py","S51":"openspec/specs/credential-materialization/spec.md","S52":"openspec/specs/data-artifacts/spec.md","S53":"src/odoo_forge/data_artifacts/contracts.py","S54":"tests/data_artifacts/test_contracts.py","S55":"openspec/specs/database-provider/spec.md","S56":"src/odoo_forge/ports/database_provider.py","S57":"tests/ports/test_database_provider.py","S58":"openspec/specs/durable-operations/spec.md","S59":"src/odoo_forge/ports/durable_operation_store.py","S60":"tests/ports/test_durable_operation_store.py","S61":"openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/exploration.md","S62":"openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/apply-progress.md","S63":"openspec/specs/resource-ownership/spec.md","S64":"src/odoo_forge/resource_ownership/types.py","S65":"src/odoo_forge/ports/resource_ownership.py","S66":"tests/resource_ownership/test_types.py","S67":"tests/ports/test_resource_ownership.py","S68":"src/odoo_forge_cli/main.py","S69":"tests/cli/test_onboard.py","S71":"commit:890f8bb","S72":"src/odoo_forge_pipeline_github/provider.py","S73":"src/odoo_forge/ports/pipeline_provider.py","S74":"tests/pipeline_github/test_conformance.py","S75":"openspec/specs/tenancy-contract/spec.md","S76":"src/odoo_forge/tenancy/types.py","S77":"src/odoo_forge/tenancy/errors.py","S78":"tests/tenancy/test_types.py","S79":"tests/tenancy/test_errors.py","S80":"src/odoo_forge_docker/provider.py","S81":"src/odoo_forge/database/types.py","S82":"Engram #3347","S83":"docs/specs/2026-07-29-operations-ui-route-design.md","S84":"Engram #3727","S85":"Engram #3734","S86":"commit:f94b5ed","S87":"src/odoo_forge_cli/commands/copy.py","S88":"src/odoo_forge_postgres_docker/provider.py","S89":"tests/cli/test_copy_live_docker.py","S90":"Engram sdd/WF-DATA-COPY/acceptance-receipt","S91":"Engram #4721","S92":"src/odoo_forge/manifest/authoring.py","S93":"tests/manifest/test_authoring.py","S94":"Engram #4735","S95":"src/odoo_forge_cli/commands/manifest.py","S96":"src/odoo_forge_cli/_support.py","S97":"tests/cli/test_configure.py","S98":"commit:adf748a","S99":"commit:e9d4c49","S100":"commit:e0e9cfd","S101":"commit:b8c7dc6","S102":"commit:2cc27c3","S103":"commit:1f21983","S104":"commit:37d4527faeda54c7fc69c7b1a67b5b4f49c8f7ca","S105":"src/odoo_forge/deployment_spec/types.py","S106":"tests/deployment_spec/test_deployment_spec_types.py","S107":"Engram #5378","S108":"Engram #5435","S109":"commit:46e5b69762783336d69fde547a5ee93d9a0cedcc","S110":"src/odoo_forge_docker/vps/provider.py","S111":"tests/adapters/test_vps_provider.py","S112":"tests/adapters/test_vps_provider_integration.py"},"gap_catalog":{"G0":"No implementation or aggregate outcome evidence","G1":"No live-registry end-to-end evidence","G2":"Artifact fabrication and promotion are not delivered","G3":"No provider contract exists","G4":"No identity port exists","G5":"No pipeline port exists","G6":"No adapter exists","G7":"Superseded planning only; no implementation","G8":"No implementation","G9":"Aggregate fabrication, promotion, build, test, and deploy acceptance remains incomplete","G10":"Complete cross-resource lifecycle acceptance, including image retention and generalized orphan reclamation, remains unproven"},"command_catalog":{"C37":"uv run pytest","C38":"uv run lint-imports","C39":"uv run mypy","C40":"uv run ruff check","C41":"uv build","C42":"uv run pytest tests/portfolio/test_portfolio_integrity.py","C43":"uv run pytest docs/tools/platform_portfolio/test_validate.py","C44":"python docs/tools/platform_portfolio/validate.py --root .","C45":"uv run pytest tests/odoo_forge_instances_postgres -m 'not integration and not real_docker'","C46":"uv run --with 'psycopg[binary]==3.2.10' pytest -m 'integration and real_docker' tests/odoo_forge_instances_postgres/test_real_postgres_integration.py"},"historical_alias_map":{"SP-1":["CAP-IMAGE-REGISTRY","SP-DELIVERY-AUTOMATION"],"SP-6":["SP-DELIVERY-AUTOMATION"],"SP-2":["SP-DATA-ENVIRONMENTS"],"SP-3":["SP-REMOTE-DEPLOYMENT"],"SP-4":["SP-CONTROL-PLANE-AUTHORITY"],"SP-5":["SP-PLATFORM-ACCESS"],"SP-7":["SP-DEVELOPER-ONBOARDING"],"SP-8":["SP-ENVIRONMENT-REQUESTS"],"SP-9":["SP-OPERATIONS-UI"],"SP-10":["SP-PRODUCTION-GOVERNANCE","SP-RESOURCE-LIFECYCLE","SP-DATA-RECOVERY"]},"sp2_status":"SP-DATA-ENVIRONMENTS (formerly SP-2) stays blocked until this documentation redefinition is independently reviewed and archived and its blocking decisions are resolved. Migration of the docs tree happens through ordinary SDD when undertaken; this plan is the portfolio, not a documentation-migration project plan.","live_location":"docs/specs/platform/portfolio.json","archived_change":"openspec/changes/archive/2026-07-10-platform-subproject-redefinition","protected_history_sha256":{"openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/exploration.md":"797c48a75bbe9a5f6b5794935e13bf999600b07edc84857c97e9044de0c50686","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/proposal.md":"48a6caba644da532bef0764987efcff778be025c25179367561077ad254f3796","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/design.md":"a2e34efe6284d1c626168301953d35c6fd37868c82febadba54fac1c90acc0aa","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/tasks.md":"71f25b91c1ac54f38337698cb7564ce28888f24e5fb335bafa878adc7f234376","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/apply-progress.md":"77538711f9bc45b3d6d59042be471d89d900e95f5046e2569b3ddf4a2e113e0e","openspec/changes/archive/2026-07-16-CHG-FIRST-DATABASE-ADAPTER/specs/docker-postgresql-database-adapter/spec.md":"ddc2b708b9869f254881a254df70373bcbe5e625e1a9834cb1b0ab2ea483e21a"}},"items":[{"id":"SP-DATA-ENVIRONMENTS","kind":"sp","title":"Managed Data Environments","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-DATA-ENVIRONMENTS-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DD","DG"],"predecessors":["SP-2"],"successors":[],"historical_aliases":["SP-2"],"description":"Outcome posterior para entornos de datos administrados, copia coherente, linaje y pol\u00edticas de datos.","status_note":"Sigue propuesto y deliberadamente pospuesto hasta despu\u00e9s del onboarding MVP; reanudar solo cuando WF-DATA-COPY, CAP-RESOURCE-OWNERSHIP y SP-CONTROL-PLANE-AUTHORITY tengan evidencia aceptada.","notes":[]},{"id":"SP-REMOTE-DEPLOYMENT","kind":"sp","title":"Remote Deployment","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-REMOTE-DEPLOYMENT-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DP","DR","DG","DPROV-REMOTE"],"predecessors":["SP-3","CAP-TENANCY"],"successors":[],"historical_aliases":["SP-3"]},{"id":"SP-CONTROL-PLANE-AUTHORITY","kind":"sp","title":"Control Plane Authority","owner_role":"Control Plane","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-CONTROL-PLANE-AUTHORITY-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DP","DT","DG"],"predecessors":["SP-4","CAP-TENANCY"],"successors":[],"historical_aliases":["SP-4"],"status_note":"Enabler posterior al onboarding MVP; sigue requerido para authority, lineage y visibilidad antes de retomar SP-DATA-ENVIRONMENTS, pero no bloquea el primer forge onboard local."},{"id":"SP-PLATFORM-ACCESS","kind":"sp","title":"Platform Access","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-PLATFORM-ACCESS-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DT","DG","DPROV-IDP"],"predecessors":["SP-5"],"successors":[],"historical_aliases":["SP-5"]},{"id":"SP-DELIVERY-AUTOMATION","kind":"sp","title":"Delivery Automation","owner_role":"Delivery","status":"partially delivered","evidence_date":"2026-08-08","acceptance":[{"id":"AC-SP-DELIVERY-AUTOMATION-READY","status":"proposed","evidence":["S98"],"gaps":["G9"]}],"decision_ids":["DP","DG","DPROV-CI"],"predecessors":["SP-1","SP-6"],"successors":[],"historical_aliases":["SP-6","SP-1"],"status_note":"Pipeline trigger, status, and log inspection are delivered while aggregate delivery automation remains unachieved."},{"id":"SP-DEVELOPER-ONBOARDING","kind":"sp","title":"Developer Onboarding","owner_role":"Experience","status":"achieved","evidence_date":"2026-07-18","acceptance":[{"id":"AC-SP-DEVELOPER-ONBOARDING-READY","status":"achieved","evidence":["S68","S69"],"gaps":[]}],"decision_ids":["DD","DO","DG"],"predecessors":["SP-7"],"successors":[],"historical_aliases":["SP-7"],"description":"Outcome MVP-facing para pedir un cliente por nombre, materializar el workspace y entregar una instancia Odoo local corriendo con BD fresca, sin control plane ni copia de datos.","status_note":"Siguiente outcome pr\u00e1ctico despu\u00e9s de consolidar la instancia Odoo local real sobre foundations ya logradas: CAP-PROJECT-CATALOG, CAP-SOURCE, CAP-WORKSPACE, CAP-LOCAL-BACKEND, CAP-CREDENTIALS y el baseline Docker/PostgreSQL.","notes":["La primera bala de forge onboard usa BD fresca local y no depende de WF-DATA-COPY, CAP-RESOURCE-OWNERSHIP ni SP-CONTROL-PLANE-AUTHORITY."]},{"id":"SP-MANIFEST-AUTHORING","kind":"sp","title":"Guided Manifest Authoring","owner_role":"Experience","status":"partially delivered","evidence_date":"2026-08-06","acceptance":[{"id":"AC-SP-MANIFEST-AUTHORING-TUI","status":"achieved","evidence":["S91","S92","S93","S94","S95","S96","S97"],"gaps":[]},{"id":"AC-SP-MANIFEST-AUTHORING-WEB","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":["CAP-MANIFEST"],"successors":["SP-OPERATIONS-UI"],"description":"Experience outcome for producing a valid project.yaml through a guided step-by-step assistant, delivered first as terminal authoring and later as a guided flow inside the operations UI.","status_note":"Terminal authoring is delivered through the validated authoring contract and create-only CLI flow. The future web wizard consumes the same contract inside SP-OPERATIONS-UI and must not be delivered ahead of that surface.","notes":[]},{"id":"SP-ENVIRONMENT-REQUESTS","kind":"sp","title":"Environment Requests","owner_role":"Experience","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-ENVIRONMENT-REQUESTS-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DT","DD","DG"],"predecessors":["SP-8","CAP-TENANCY"],"successors":[],"historical_aliases":["SP-8"]},{"id":"SP-OPERATIONS-UI","kind":"sp","title":"Operations UI","owner_role":"Experience","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-OPERATIONS-UI-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DT","DG"],"predecessors":["SP-9"],"successors":[],"historical_aliases":["SP-9"]},{"id":"SP-PRODUCTION-GOVERNANCE","kind":"sp","title":"Production Governance","owner_role":"Operations","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-PRODUCTION-GOVERNANCE-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DT","DG"],"predecessors":["SP-10"],"successors":[],"historical_aliases":["SP-10"]},{"id":"SP-RESOURCE-LIFECYCLE","kind":"sp","title":"Resource Lifecycle","owner_role":"Operations","status":"partially delivered","evidence_date":"2026-08-07","acceptance":[{"id":"AC-SP-RESOURCE-LIFECYCLE-READY","status":"proposed","evidence":["S99","S100","S101","S102","S103"],"gaps":["G10"]}],"decision_ids":["DG"],"predecessors":["SP-10"],"successors":[],"historical_aliases":["SP-10"],"status_note":"Delivery is limited to the PostgreSQL Docker lifecycle and opt-in scheduler while broader cross-resource acceptance remains unproven."},{"id":"SP-DATA-RECOVERY","kind":"sp","title":"Data Recovery","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP-DATA-RECOVERY-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DD","DG"],"predecessors":["SP-10"],"successors":[],"historical_aliases":["SP-10"]},{"id":"CAP-MANIFEST","kind":"prerequisite","title":"Manifest Core","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-CAP-MANIFEST-READY","status":"achieved","evidence":["S0"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CAP-SOURCE","kind":"prerequisite","title":"Source Resolution","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-CAP-SOURCE-READY","status":"achieved","evidence":["S1"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CAP-WORKSPACE","kind":"prerequisite","title":"Workspace Projection","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-CAP-WORKSPACE-READY","status":"achieved","evidence":["S2"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CAP-LOCAL-BACKEND","kind":"prerequisite","title":"Local Backend","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-CAP-LOCAL-BACKEND-READY","status":"achieved","evidence":["S3"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CAP-IMAGE-REGISTRY","kind":"prerequisite","title":"Image Registry Capability","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-09","acceptance":[{"id":"AC-CAP-IMAGE-REGISTRY-READY","status":"achieved","evidence":["S4","S5","S6"],"gaps":[]}],"decision_ids":["DG"],"predecessors":["SP-1"],"successors":[],"historical_aliases":["SP-1"]},{"id":"CAP-CREDENTIALS","kind":"prerequisite","title":"Credential Materialization","owner_role":"Security","status":"achieved","evidence_date":"2026-07-11","acceptance":[{"id":"AC-CAP-CREDENTIALS-READY","status":"approved","evidence":["S43","S44","S45","S46"],"gaps":[]}],"decision_ids":["DP","DG","DPROV-SECRETS"],"predecessors":["SP-1","SP-2","SP-3","SP-4"],"successors":[]},{"id":"CAP-DURABLE-OPERATIONS","kind":"prerequisite","title":"Durable Operations","owner_role":"Control Plane","status":"achieved","evidence_date":"2026-07-12","acceptance":[{"id":"AC-CAP-DURABLE-OPERATIONS-READY","status":"achieved","evidence":["S58","S59","S60"],"gaps":[]}],"decision_ids":["DG"],"predecessors":["SP-2","SP-6","SP-7","SP-8"],"successors":[]},{"id":"CAP-RESOURCE-OWNERSHIP","kind":"prerequisite","title":"Resource Ownership","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-19","acceptance":[{"id":"AC-CAP-RESOURCE-OWNERSHIP-READY","status":"achieved","evidence":["S63","S64","S65","S66","S67"],"gaps":[]}],"decision_ids":["DG"],"predecessors":["SP-2","SP-10"],"successors":["SP-CONTROL-PLANE-AUTHORITY","SP-RESOURCE-LIFECYCLE","WF-ENVIRONMENT-REQUEST","WF-DATA-COPY"],"status_note":"Enabler posterior al onboarding MVP; sigue requerido antes de retomar SP-DATA-ENVIRONMENTS."},{"id":"CAP-TENANCY","kind":"prerequisite","title":"Customer/Client Tenancy Contract and Quotas","owner_role":"Architecture/Product","status":"achieved","evidence_date":"2026-07-22","acceptance":[{"id":"AC-CAP-TENANCY-READY","status":"achieved","evidence":["S75","S76","S77","S78","S79"],"gaps":[]}],"decision_ids":["DT","DG"],"predecessors":[],"successors":["SP-REMOTE-DEPLOYMENT","SP-CONTROL-PLANE-AUTHORITY","SP-ENVIRONMENT-REQUESTS"]},{"id":"CAP-PROVIDER-CATALOG","kind":"prerequisite","title":"Provider Catalog","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CAP-PROVIDER-CATALOG-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DP","DG"],"predecessors":["SP-3","SP-4"],"successors":[]},{"id":"CAP-DATA-ARTIFACTS","kind":"prerequisite","title":"Data Artifacts","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-07-11","acceptance":[{"id":"AC-CAP-DATA-ARTIFACTS-READY","status":"achieved","evidence":["S52","S53","S54"],"gaps":[]}],"decision_ids":["DD","DG"],"predecessors":["SP-2"],"successors":[]},{"id":"CAP-PROJECT-CATALOG","kind":"prerequisite","title":"Project Catalog","owner_role":"Control Plane","status":"achieved","evidence_date":"2026-07-11","acceptance":[{"id":"AC-CAP-PROJECT-CATALOG-READY","status":"achieved","evidence":["S47","S48","S49","S50"],"gaps":[]}],"decision_ids":["DG"],"predecessors":["SP-7"],"successors":[]},{"id":"CAP-DEPLOYMENT-SPEC","kind":"prerequisite","title":"Provider-Neutral Deployment Spec","owner_role":"Runtime","status":"achieved","evidence_date":"2026-08-06","acceptance":[{"id":"AC-CAP-DEPLOYMENT-SPEC-READY","status":"achieved","evidence":["S104","S105","S106"],"gaps":[]}],"decision_ids":["DR","DG"],"predecessors":["SP-3"],"successors":[]},{"id":"PORT-SOURCE-PROVIDER","kind":"port","title":"SourceProvider","owner_role":"Core","status":"achieved","evidence_date":"2026-07-06","acceptance":[{"id":"AC-PORT-SOURCE-PROVIDER-READY","status":"achieved","evidence":["S7","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"PORT-WORKSPACE-PROVIDER","kind":"port","title":"WorkspaceProvider","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-PORT-WORKSPACE-PROVIDER-READY","status":"achieved","evidence":["S9","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"PORT-BACKEND-PROVIDER","kind":"port","title":"BackendProvider","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-PORT-BACKEND-PROVIDER-READY","status":"achieved","evidence":["S10","S3"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"PORT-IMAGE-REGISTRY","kind":"port","title":"ImageRegistryProvider","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-09","acceptance":[{"id":"AC-PORT-IMAGE-REGISTRY-READY","status":"achieved","evidence":["S11","S5"],"gaps":[]}],"decision_ids":[],"predecessors":["SP-1"],"successors":[]},{"id":"PORT-DATABASE-PROVIDER","kind":"port","title":"DatabaseProvider","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-07-10","acceptance":[{"id":"AC-PORT-DATABASE-PROVIDER-READY","status":"achieved","evidence":["S55","S56","S57"],"gaps":[]}],"decision_ids":["DP","DG","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"PORT-IDENTITY","kind":"port","title":"IdentityProvider","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-PORT-IDENTITY-READY","status":"proposed","evidence":[],"gaps":["G4"]}],"decision_ids":["DP","DG","DPROV-IDP"],"predecessors":["SP-5"],"successors":[]},{"id":"PORT-PIPELINE","kind":"port","title":"PipelineProvider","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-23","acceptance":[{"id":"AC-PORT-PIPELINE-READY","status":"achieved","evidence":["S71","S72","S73","S74"],"gaps":[]}],"decision_ids":["DP","DG","DPROV-CI"],"predecessors":["SP-6"],"successors":[]},{"id":"ADAPTER-SOURCE-GIT","kind":"adapter","title":"GitSourceProvider","owner_role":"Core","status":"achieved","evidence_date":"2026-07-07","acceptance":[{"id":"AC-ADAPTER-SOURCE-GIT-READY","status":"achieved","evidence":["S12","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"ADAPTER-WORKSPACE-GIT","kind":"adapter","title":"GitWorkspaceProvider","owner_role":"Core","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-ADAPTER-WORKSPACE-GIT-READY","status":"achieved","evidence":["S13","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"ADAPTER-BACKEND-DOCKER","kind":"adapter","title":"DockerBackendProvider","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-08","acceptance":[{"id":"AC-ADAPTER-BACKEND-DOCKER-READY","status":"achieved","evidence":["S14","S8"],"gaps":[]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"ADAPTER-IMAGE-REGISTRY-GHCR","kind":"adapter","title":"GHCR Image Registry Adapter","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-09","acceptance":[{"id":"AC-ADAPTER-IMAGE-REGISTRY-GHCR-READY","status":"achieved","evidence":["S15","S5"],"gaps":[]}],"decision_ids":[],"predecessors":["SP-1"],"successors":[]},{"id":"ADAPTER-DATABASE-DOCKER","kind":"adapter","title":"Docker PostgreSQL Adapter","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-07-14","acceptance":[{"id":"AC-ADAPTER-DATABASE-DOCKER-READY","status":"achieved","evidence":["S62"],"gaps":[]}],"decision_ids":["DP","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"ADAPTER-DATABASE-RDS","kind":"adapter","title":"AWS RDS Adapter","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-DATABASE-RDS-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"ADAPTER-DATABASE-VPS","kind":"adapter","title":"VPS PostgreSQL Adapter","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-DATABASE-VPS-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"ADAPTER-BACKEND-EC2","kind":"adapter","title":"EC2/VPS Backend Adapter","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-BACKEND-EC2-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DR","DPROV-REMOTE"],"predecessors":["SP-3"],"successors":[]},{"id":"ADAPTER-BACKEND-FARGATE","kind":"adapter","title":"Fargate Backend Adapter","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-BACKEND-FARGATE-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DR","DPROV-REMOTE"],"predecessors":["SP-3"],"successors":[]},{"id":"ADAPTER-BACKEND-K8S","kind":"adapter","title":"Kubernetes Backend Adapter","owner_role":"Runtime","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-BACKEND-K8S-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DR","DPROV-REMOTE"],"predecessors":["SP-3"],"successors":[]},{"id":"ADAPTER-IDENTITY-GITHUB","kind":"adapter","title":"GitHub OIDC Adapter","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-IDENTITY-GITHUB-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DT","DPROV-IDP"],"predecessors":["SP-5"],"successors":[]},{"id":"ADAPTER-IDENTITY-GITLAB","kind":"adapter","title":"GitLab OIDC Adapter","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-IDENTITY-GITLAB-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DT","DPROV-IDP"],"predecessors":["SP-5"],"successors":[]},{"id":"ADAPTER-IDENTITY-GOOGLE","kind":"adapter","title":"Google OIDC Adapter","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-IDENTITY-GOOGLE-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DT","DPROV-IDP"],"predecessors":["SP-5"],"successors":[]},{"id":"ADAPTER-PIPELINE-GITHUB","kind":"adapter","title":"GitHub Actions Adapter","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-23","acceptance":[{"id":"AC-ADAPTER-PIPELINE-GITHUB-READY","status":"achieved","evidence":["S71","S72","S73","S74"],"gaps":[]}],"decision_ids":["DP","DPROV-CI"],"predecessors":["SP-6"],"successors":[]},{"id":"ADAPTER-PIPELINE-GITLAB","kind":"adapter","title":"GitLab CI Adapter","owner_role":"Delivery","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-ADAPTER-PIPELINE-GITLAB-READY","status":"proposed","evidence":[],"gaps":["G6"]}],"decision_ids":["DP","DPROV-CI"],"predecessors":["SP-6"],"successors":[]},{"id":"INT-LOCAL-DIGEST-CONSUMPTION","kind":"integration","title":"Local Digest Image Consumption","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-09","acceptance":[{"id":"AC-INT-LOCAL-DIGEST-CONSUMPTION-READY","status":"achieved","evidence":["S14","S16"],"gaps":[]}],"decision_ids":[],"predecessors":["SP-1"],"successors":[]},{"id":"INT-DATABASE-RUNTIME-CUTOVER","kind":"integration","title":"Database Runtime Ownership Cutover","owner_role":"Runtime","status":"achieved","evidence_date":"2026-07-23","acceptance":[{"id":"AC-INT-DATABASE-RUNTIME-CUTOVER-READY","status":"achieved","evidence":["S17","S80","S81","S82"],"gaps":[]}],"decision_ids":["DP","DPROV-DB"],"predecessors":["SP-2"],"successors":[]},{"id":"WF-DATA-COPY","kind":"workflow","title":"Coordinated Data Copy","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-08-03","acceptance":[{"id":"AC-WF-DATA-COPY-READY","status":"achieved","evidence":["S18","S87","S88","S89","S90"],"gaps":[]}],"decision_ids":["DD"],"predecessors":["SP-2"],"successors":[],"status_note":"Enabler posterior al onboarding MVP; sigue requerido antes de retomar SP-DATA-ENVIRONMENTS."},{"id":"WF-PRODUCTION-PROMOTION","kind":"workflow","title":"Production Promotion Gate","owner_role":"Operations","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-WF-PRODUCTION-PROMOTION-READY","status":"proposed","evidence":[],"gaps":["G8"]}],"decision_ids":["DT"],"predecessors":["SP-10"],"successors":[]},{"id":"WF-ENVIRONMENT-REQUEST","kind":"workflow","title":"Environment Request Fulfillment","owner_role":"Experience","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-WF-ENVIRONMENT-REQUEST-READY","status":"proposed","evidence":[],"gaps":["G8"]}],"decision_ids":["DT","DD"],"predecessors":["SP-8"],"successors":[]},{"id":"CHG-FIRST-DATABASE-ADAPTER","kind":"sdd_change","title":"First Database Adapter Change","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-07-14","acceptance":[{"id":"AC-CHG-FIRST-DATABASE-ADAPTER-READY","status":"achieved","evidence":["S61","S62"],"gaps":[]}],"decision_ids":["DP","DD","DPROV-DB"],"predecessors":[],"successors":[]},{"id":"CHG-FIRST-REMOTE-ADAPTER","kind":"sdd_change","title":"First Remote Adapter Change","owner_role":"Runtime","status":"achieved","evidence_date":"2026-08-13","acceptance":[{"id":"AC-CHG-FIRST-REMOTE-ADAPTER-READY","status":"achieved","evidence":["S107","S108","S109","S110","S111","S112"],"gaps":[]}],"decision_ids":["DP","DR","DPROV-REMOTE"],"predecessors":[],"successors":[]},{"id":"CHG-FIRST-IDENTITY-ADAPTER","kind":"sdd_change","title":"First Identity Adapter Change","owner_role":"Security","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-FIRST-IDENTITY-ADAPTER-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DP","DT","DPROV-IDP"],"predecessors":[],"successors":[]},{"id":"CHG-FIRST-PIPELINE-ADAPTER","kind":"sdd_change","title":"First Pipeline Adapter Change","owner_role":"Delivery","status":"achieved","evidence_date":"2026-07-23","acceptance":[{"id":"AC-CHG-FIRST-PIPELINE-ADAPTER-READY","status":"achieved","evidence":["S71","S72","S73","S74"],"gaps":[]}],"decision_ids":["DP","DPROV-CI"],"predecessors":[],"successors":[]},{"id":"CHG-OPS-UI-READONLY","kind":"sdd_change","title":"Operations UI Read-Only Slice","owner_role":"Experience","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-OPS-UI-READONLY-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-UI-PARTIAL","DEC-UI-STACK"],"predecessors":["SP-OPERATIONS-UI"],"successors":[],"status_note":"Decision adoption does not deliver UI or runtime readiness; implementation remains gated by the five post-registry SP4B leaves through CHG-SP4B-REAL-ACCEPTANCE, then CHG-SP4C-CONTROL-PLANE-EDGE and control-plane authority acceptance."},{"id":"CHG-PORTFOLIO-AUTHORITY-PATH","kind":"sdd_change","title":"Portfolio Authority Path Reconciliation","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-PORTFOLIO-AUTHORITY-PATH-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":[],"successors":[]},{"id":"CHG-SP4B-VALIDATOR-GROUNDWORK","kind":"sdd_change","title":"Portfolio Validator Structural Groundwork","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-SP4B-VALIDATOR-GROUNDWORK-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":["CHG-PORTFOLIO-AUTHORITY-PATH"],"successors":[]},{"id":"CHG-SP4B-REDECOMPOSE","kind":"sdd_change","title":"SP4B PostgreSQL Registry Recomposition","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-SP4B-REDECOMPOSE-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":[],"successors":["CHG-SP4B-REGISTRY-POSTGRES"]},{"id":"CHG-SP4B-REGISTRY-POSTGRES","kind":"sdd_change","title":"SP4B Registry PostgreSQL Schema and Migration","owner_role":"Data Platform","status":"achieved","evidence_date":"2026-08-01","acceptance":[{"id":"AC-SP4B-REGISTRY-POSTGRES-READY","status":"achieved","evidence":["S86"],"gaps":[]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-REDECOMPOSE"],"successors":["CHG-SP4B-ERRORS-PACKAGE"],"status_note":"Delivered by PR #106 at main commit f94b5ed."},{"id":"CHG-SP4B-ERRORS-PACKAGE","kind":"sdd_change","title":"SP4B Registry Errors and Package","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-ERRORS-PACKAGE-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-REGISTRY-POSTGRES"],"successors":["CHG-SP4B-ADAPTER"]},{"id":"CHG-SP4B-ADAPTER","kind":"sdd_change","title":"SP4B PostgreSQL Registry Adapter","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-ADAPTER-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-ERRORS-PACKAGE"],"successors":["CHG-SP4B-CONFORMANCE-FAKES"]},{"id":"CHG-SP4B-CONFORMANCE-FAKES","kind":"sdd_change","title":"SP4B Registry Conformance and Fakes","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-CONFORMANCE-FAKES-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-ADAPTER"],"successors":["CHG-SP4B-POSTGRES-HARNESS"]},{"id":"CHG-SP4B-POSTGRES-HARNESS","kind":"sdd_change","title":"SP4B PostgreSQL Test Harness","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-POSTGRES-HARNESS-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-CONFORMANCE-FAKES"],"successors":["CHG-SP4B-REAL-ACCEPTANCE"]},{"id":"CHG-SP4B-REAL-ACCEPTANCE","kind":"sdd_change","title":"SP4B Real PostgreSQL Acceptance","owner_role":"Data Platform","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-SP4B-REAL-ACCEPTANCE-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":["DEC-CP-STACK"],"predecessors":["CHG-SP4B-POSTGRES-HARNESS"],"successors":[]},{"id":"CHG-SP4B-ITEM-SCAFFOLD","kind":"sdd_change","title":"SP4B Item Scaffold and C42-C46 Command Catalog","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-SP4B-ITEM-SCAFFOLD-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":["CHG-SP4B-VALIDATOR-GROUNDWORK"],"successors":[]},{"id":"CHG-SP4B-DECOMPOSITION-ADOPTION","kind":"sdd_change","title":"SP4B Decomposition Adoption and SP4C Rewire","owner_role":"Architecture","status":"proposed","evidence_date":null,"acceptance":[{"id":"AC-CHG-SP4B-DECOMPOSITION-ADOPTION-READY","status":"proposed","evidence":[],"gaps":["G0"]}],"decision_ids":[],"predecessors":["CHG-SP4B-ITEM-SCAFFOLD"],"successors":[]}],"decisions":[{"id":"DEC-6375","owner":"Product/Architecture","due_gate":"design","blocking_effect":"Authorizes semantic portfolio model; does not select open product choices","options":["Approve outcome-first semantic model","Reject and retain numeric SP model"],"evidence":["S19"],"status":"decided"},{"id":"DP","owner":"Architecture","due_gate":"before provider-port implementation","blocking_effect":"Blocks provider catalog and all first-provider changes","options":["one adapter globally at init","per-instance selection from approved catalog"],"evidence":["S20","S19"],"status":"decided","chosen":"one adapter globally at init","decided_date":"2026-07-10","rationale":"Minimal machinery for first delivery; matches current single-Docker reality. Multi-provider deferred until a second real provider arrives (YAGNI).","consequence":"CAP-PROVIDER-CATALOG (per-instance registration/selection) deferred, not near-term; DPROV-* now select the single platform provider per kind rather than a first-of-many."},{"id":"DT","owner":"Architecture/Product","due_gate":"before tenancy-dependent consumer design","blocking_effect":"Defines canonical tenant identity, project subordination, quota authority, and consumer boundaries","options":["customer/client tenant","project tenant","provider-account tenant"],"evidence":["S21","S19"],"status":"decided","chosen":"customer/client tenant","decided_date":"2026-07-11","rationale":"A customer/client is the sole tenancy unit; stable tenant_id separates technical scope from business labels and provider identifiers.","consequence":"Project is the only normative subordinate scope in v1. PROD/QA/DEV are operational classifications, environment_family is not normative, and quota authority is defined once at CAP-TENANCY for consumers to use."},{"id":"DD","owner":"Data Governance/Product","due_gate":"before production-derived data delivery","blocking_effect":"Blocks data environments, recovery policy, and data-bearing workflows","options":["always anonymize non-PROD","default anonymize with audited QA/preprod exception","destination-specific stricter policy"],"evidence":["S22","S19"],"status":"decided","chosen":"default anonymize with audited QA/preprod exception","decided_date":"2026-07-10","rationale":"Protect production-derived data by default while allowing explicitly justified QA or preproduction cases.","consequence":"Non-production data is anonymized by default; every exception must be explicit, justified, approved, and auditable."},{"id":"DO","owner":"Developer Experience/Product","due_gate":"before onboarding implementation","blocking_effect":"Blocks onboarding delivery boundary","options":["CLI/local first","server-mediated authenticated first"],"evidence":["S21","S19"],"status":"unresolved"},{"id":"DR","owner":"Runtime/Networking","due_gate":"before first remote adapter","blocking_effect":"Blocks deployment spec and remote target contract","options":["platform owns routing DNS TLS","target adapter owns routing DNS TLS by contract","shared explicit boundary"],"evidence":["S23","S19"],"status":"unresolved"},{"id":"DG","owner":"Portfolio/Product","due_gate":"before prerequisite activation","blocking_effect":"Blocks roadmap grouping and prerequisite ownership","options":["independent roadmap enablers","grouped platform-foundation program"],"evidence":["S21","S19"],"status":"decided","chosen":"independent roadmap enablers","decided_date":"2026-07-10","rationale":"Activate each prerequisite only when a concrete subproject requires it, avoiding a broad umbrella initiative without an immediate delivery need.","consequence":"Cross-cutting capabilities remain independently owned and scheduled; no Platform Foundation program is created."},{"id":"DPROV-DB","owner":"Data Platform","due_gate":"before CHG-FIRST-DATABASE-ADAPTER","blocking_effect":"Selects exactly one first database adapter","options":["Docker PostgreSQL","AWS RDS","VPS PostgreSQL"],"evidence":["S24"],"status":"decided","chosen":"Docker PostgreSQL","decided_date":"2026-07-11","rationale":"Reuses the existing tested local backend and minimizes initial delivery risk.","consequence":"CHG-FIRST-DATABASE-ADAPTER targets Docker PostgreSQL first; managed-environment outcome contracts remain provider-neutral, and implementation stays blocked until required prerequisite evidence is accepted."},{"id":"DPROV-REMOTE","owner":"Runtime","due_gate":"before CHG-FIRST-REMOTE-ADAPTER","blocking_effect":"Selects first remote target","options":["EC2/VPS","Fargate","Kubernetes"],"evidence":["S25"],"status":"unresolved"},{"id":"DPROV-IDP","owner":"Security","due_gate":"before CHG-FIRST-IDENTITY-ADAPTER","blocking_effect":"Selects first organization IdP","options":["GitHub OIDC","GitLab OIDC","Google OIDC"],"evidence":["S26"],"status":"unresolved"},{"id":"DPROV-CI","owner":"Delivery","due_gate":"before CHG-FIRST-PIPELINE-ADAPTER","blocking_effect":"Selects first CI engine","options":["GitHub Actions","GitLab CI"],"evidence":["S27"],"status":"decided","chosen":"GitHub Actions","decided_date":"2026-07-22","rationale":"Coherent with the delivered GitHub ecosystem: ADAPTER-IMAGE-REGISTRY-GHCR is already achieved (GitHub Container Registry) and source resolution runs on git. Selecting GitLab CI would introduce a second CI ecosystem with no real consumer, contradicting the one-provider-at-init posture of DP (YAGNI).","consequence":"CHG-FIRST-PIPELINE-ADAPTER and ADAPTER-PIPELINE-GITHUB target GitHub Actions first; the PipelineProvider port (PORT-PIPELINE) stays provider-neutral. ADAPTER-PIPELINE-GITLAB remains deferred until a second real CI ecosystem arrives."},{"id":"DPROV-SECRETS","owner":"Security","due_gate":"before credential materialization","blocking_effect":"Selects credential store and whether a secrets port is required","options":["environment","SOPS","AWS Secrets Manager","Vault"],"evidence":["S20","S43"],"status":"decided","chosen":"SOPS","decided_date":"2026-07-11","rationale":"Approved as the smallest first-store path for opaque, ref-only credential handoffs; Vault and multi-store abstractions are deferred.","consequence":"CAP-CREDENTIALS may create only opaque sops:// references for ref-capable targets. AC-CAP-CREDENTIALS-READY remains proposed until verification evidence is approved."},{"id":"DEC-CP-STACK","owner":"Architecture","due_gate":"before CHG-SP4B-REGISTRY-POSTGRES","blocking_effect":"Blocks the registry persistence and control-plane edge changes","options":["FastAPI + psycopg","Flask + psycopg","Starlette + psycopg"],"evidence":["S83","S84","S85"],"status":"decided","chosen":"FastAPI + psycopg","decided_date":"2026-07-30","rationale":"FastAPI best matches the typed Pydantic control-plane API, while psycopg is the shared PostgreSQL driver and Docker aligns with the repository's existing adapter/runtime investment.","consequence":"Initial production uses Docker Compose on one server; core domain, ports, and adapters remain framework-neutral to preserve a no-rewrite scaling path; psycopg pools are per worker and must be bounded against PostgreSQL capacity; Jinja2 is an explicit dependency only for a later SSR slice; this decision records architecture and does not implement or deliver the control plane."},{"id":"DEC-UI-PARTIAL","owner":"Security + Product","due_gate":"before CHG-OPS-UI-READONLY","blocking_effect":"Allows a visible read-only slice while RBAC and actions remain deferred","options":["Allow a localhost-only single-operator read-only slice with a permanent gap","Require identity and RBAC before any UI surface"],"evidence":["S83"],"status":"decided","chosen":"Allow a localhost-only single-operator read-only slice with a permanent gap","decided_date":"2026-07-31","rationale":"The localhost-only, single-operator, read-only slice preserves useful visibility while identity/RBAC remains deferred rather than cancelled.","consequence":"Accepted costs: identity/RBAC remains a permanent acceptance gap for this slice, deferred rather than cancelled; loopback enforcement must be executable. Downstream acceptance shows Docker-observed truth with a visible drift label and keeps drifted rows visible. Data availability distinguishes exactly six states: fresh, drifted, stale/unverified, empty, persistence error, and per-row partial failure; anything not confirmed live is labelled."},{"id":"DEC-UI-STACK","owner":"Experience","due_gate":"before CHG-OPS-UI-READONLY","blocking_effect":"Selects the rendering and refresh model for the Operations UI","options":["Server-rendered views with polling","Single-page application with push transport"],"evidence":["S83"],"status":"decided","chosen":"Server-rendered views with polling","decided_date":"2026-07-31","rationale":"Server-rendered views with polling fit the decided FastAPI process without a SPA, push transport, Node toolchain, or second artifact.","consequence":"Accepted cost: polling latency. The future slice uses server-rendered views with polling inside FastAPI, with no SPA, push transport, Node toolchain, or second artifact."}],"transitions":[{"id":"TR-SP1-REGISTRY","kind":"reclassify","predecessors":[{"id":"SP-1","scope":"registry.port"},{"id":"SP-1","scope":"registry.adapter"},{"id":"SP-1","scope":"registry.cli"},{"id":"SP-1","scope":"registry.local-digest"}],"successors":[{"id":"PORT-IMAGE-REGISTRY","scope":"registry.port"},{"id":"ADAPTER-IMAGE-REGISTRY-GHCR","scope":"registry.adapter"},{"id":"CAP-IMAGE-REGISTRY","scope":"registry.cli"},{"id":"INT-LOCAL-DIGEST-CONSUMPTION","scope":"registry.local-digest"}],"evidence":["S4"]},{"id":"TR-SP1-SP6-DELIVERY","kind":"merge","predecessors":[{"id":"SP-1","scope":"delivery.fabrication"},{"id":"SP-1","scope":"delivery.promotion"},{"id":"SP-6","scope":"delivery.build"},{"id":"SP-6","scope":"delivery.test"},{"id":"SP-6","scope":"delivery.deploy"}],"successors":[{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.fabrication"},{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.promotion"},{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.build"},{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.test"},{"id":"SP-DELIVERY-AUTOMATION","scope":"delivery.deploy"}],"evidence":["S28"]},{"id":"TR-SP2","kind":"rename","predecessors":[{"id":"SP-2","scope":"environment.provision"}],"successors":[{"id":"SP-DATA-ENVIRONMENTS","scope":"environment.provision"}],"evidence":["S29"]},{"id":"TR-SP3","kind":"rename","predecessors":[{"id":"SP-3","scope":"deployment.remote-lifecycle"}],"successors":[{"id":"SP-REMOTE-DEPLOYMENT","scope":"deployment.remote-lifecycle"}],"evidence":["S30"]},{"id":"TR-SP4","kind":"rename","predecessors":[{"id":"SP-4","scope":"authority.api"}],"successors":[{"id":"SP-CONTROL-PLANE-AUTHORITY","scope":"authority.api"}],"evidence":["S31"]},{"id":"TR-SP5","kind":"rename","predecessors":[{"id":"SP-5","scope":"access.authentication"}],"successors":[{"id":"SP-PLATFORM-ACCESS","scope":"access.authentication"}],"evidence":["S32"]},{"id":"TR-SP7","kind":"rename","predecessors":[{"id":"SP-7","scope":"onboarding.journey"}],"successors":[{"id":"SP-DEVELOPER-ONBOARDING","scope":"onboarding.journey"}],"evidence":["S33"]},{"id":"TR-SP8","kind":"rename","predecessors":[{"id":"SP-8","scope":"request.intake-fulfillment"}],"successors":[{"id":"SP-ENVIRONMENT-REQUESTS","scope":"request.intake-fulfillment"}],"evidence":["S34"]},{"id":"TR-SP9","kind":"rename","predecessors":[{"id":"SP-9","scope":"inventory.read-only"}],"successors":[{"id":"SP-OPERATIONS-UI","scope":"inventory.read-only"}],"evidence":["S35"]},{"id":"TR-SP10-SPLIT","kind":"split","predecessors":[{"id":"SP-10","scope":"governance.audit-append-only"},{"id":"SP-10","scope":"governance.production-guardrails"},{"id":"SP-10","scope":"governance.promotion-gate"},{"id":"SP-10","scope":"lifecycle.resource-ttl"},{"id":"SP-10","scope":"lifecycle.resource-retention"},{"id":"SP-10","scope":"lifecycle.image-retention"},{"id":"SP-10","scope":"lifecycle.orphan-reclamation"},{"id":"SP-10","scope":"recovery.backup-scheduling"},{"id":"SP-10","scope":"recovery.backup-retention"},{"id":"SP-10","scope":"recovery.restore-drills"}],"successors":[{"id":"SP-PRODUCTION-GOVERNANCE","scope":"governance.audit-append-only"},{"id":"SP-PRODUCTION-GOVERNANCE","scope":"governance.production-guardrails"},{"id":"SP-PRODUCTION-GOVERNANCE","scope":"governance.promotion-gate"},{"id":"SP-RESOURCE-LIFECYCLE","scope":"lifecycle.resource-ttl"},{"id":"SP-RESOURCE-LIFECYCLE","scope":"lifecycle.resource-retention"},{"id":"SP-RESOURCE-LIFECYCLE","scope":"lifecycle.image-retention"},{"id":"SP-RESOURCE-LIFECYCLE","scope":"lifecycle.orphan-reclamation"},{"id":"SP-DATA-RECOVERY","scope":"recovery.backup-scheduling"},{"id":"SP-DATA-RECOVERY","scope":"recovery.backup-retention"},{"id":"SP-DATA-RECOVERY","scope":"recovery.restore-drills"}],"evidence":["S36"]}],"transfers":[{"id":"X1","origin":"SP-1","dotted_scope":"registry.port","destination":"PORT-IMAGE-REGISTRY","evidence":["S4"]},{"id":"X2","origin":"SP-1","dotted_scope":"registry.adapter","destination":"ADAPTER-IMAGE-REGISTRY-GHCR","evidence":["S4"]},{"id":"X3","origin":"SP-1","dotted_scope":"registry.cli","destination":"CAP-IMAGE-REGISTRY","evidence":["S4"]},{"id":"X4","origin":"SP-1","dotted_scope":"registry.local-digest","destination":"INT-LOCAL-DIGEST-CONSUMPTION","evidence":["S4"]},{"id":"X5","origin":"SP-1","dotted_scope":"delivery.fabrication","destination":"SP-DELIVERY-AUTOMATION","evidence":["S4"]},{"id":"X6","origin":"SP-1","dotted_scope":"delivery.promotion","destination":"SP-DELIVERY-AUTOMATION","evidence":["S4"]},{"id":"X7","origin":"SP-2","dotted_scope":"provider.contract","destination":"PORT-DATABASE-PROVIDER","evidence":["S29"]},{"id":"X8","origin":"SP-2","dotted_scope":"provider.adapter.docker","destination":"ADAPTER-DATABASE-DOCKER","evidence":["S29"]},{"id":"X9","origin":"SP-2","dotted_scope":"provider.adapter.rds","destination":"ADAPTER-DATABASE-RDS","evidence":["S29"]},{"id":"X10","origin":"SP-2","dotted_scope":"provider.adapter.vps","destination":"ADAPTER-DATABASE-VPS","evidence":["S29"]},{"id":"X11","origin":"SP-2","dotted_scope":"environment.provision","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29"]},{"id":"X12","origin":"SP-2","dotted_scope":"environment.clone","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29"]},{"id":"X13","origin":"SP-2","dotted_scope":"environment.randomize","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29"]},{"id":"X14","origin":"SP-2","dotted_scope":"environment.pre-production-copy","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29"]},{"id":"X15","origin":"SP-2","dotted_scope":"credential.materialization","destination":"CAP-CREDENTIALS","evidence":["S37"]},{"id":"X16","origin":"SP-2","dotted_scope":"data.capture","destination":"CAP-DATA-ARTIFACTS","evidence":["S18"]},{"id":"X17","origin":"SP-2","dotted_scope":"data.consistency","destination":"CAP-DATA-ARTIFACTS","evidence":["S18"]},{"id":"X18","origin":"SP-2","dotted_scope":"operation.journal","destination":"CAP-DURABLE-OPERATIONS","evidence":["S38"]},{"id":"X19","origin":"SP-2","dotted_scope":"operation.compensation","destination":"CAP-DURABLE-OPERATIONS","evidence":["S18"]},{"id":"X20","origin":"SP-2","dotted_scope":"operation.request-durability","destination":"CAP-DURABLE-OPERATIONS","evidence":["S39"]},{"id":"X21","origin":"SP-2","dotted_scope":"resource.receipt","destination":"CAP-RESOURCE-OWNERSHIP","evidence":["S40"]},{"id":"X22","origin":"SP-2","dotted_scope":"resource.deletion","destination":"CAP-RESOURCE-OWNERSHIP","evidence":["S40"]},{"id":"X23","origin":"SP-2","dotted_scope":"resource.orphan","destination":"CAP-RESOURCE-OWNERSHIP","evidence":["S18"]},{"id":"X24","origin":"SP-2","dotted_scope":"runtime.ownership-cutover","destination":"INT-DATABASE-RUNTIME-CUTOVER","evidence":["S17"]},{"id":"X25","origin":"SP-2","dotted_scope":"workflow.coordinated-copy","destination":"WF-DATA-COPY","evidence":["S18"]},{"id":"X26","origin":"SP-2","dotted_scope":"policy.randomization","destination":"DD","evidence":["S29"]},{"id":"X27","origin":"SP-3","dotted_scope":"deployment.remote-lifecycle","destination":"SP-REMOTE-DEPLOYMENT","evidence":["S30"]},{"id":"X28","origin":"SP-3","dotted_scope":"target.adapter.ec2","destination":"ADAPTER-BACKEND-EC2","evidence":["S30"]},{"id":"X29","origin":"SP-3","dotted_scope":"target.adapter.fargate","destination":"ADAPTER-BACKEND-FARGATE","evidence":["S30"]},{"id":"X30","origin":"SP-3","dotted_scope":"target.adapter.k8s","destination":"ADAPTER-BACKEND-K8S","evidence":["S30"]},{"id":"X31","origin":"SP-3","dotted_scope":"deployment.intent","destination":"CAP-DEPLOYMENT-SPEC","evidence":["S30"]},{"id":"X32","origin":"SP-3","dotted_scope":"tenant.isolation","destination":"CAP-TENANCY","evidence":["S30"]},{"id":"X33","origin":"SP-3","dotted_scope":"credential.injection","destination":"CAP-CREDENTIALS","evidence":["S30"]},{"id":"X34","origin":"SP-3","dotted_scope":"target.routing-dns-tls","destination":"DR","evidence":["S30"]},{"id":"X35","origin":"SP-3","dotted_scope":"provider.selection","destination":"DP","evidence":["S30"]},{"id":"X36","origin":"SP-4","dotted_scope":"authority.api","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X37","origin":"SP-4","dotted_scope":"authority.registry","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X38","origin":"SP-4","dotted_scope":"authority.persistence","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X39","origin":"SP-4","dotted_scope":"authority.reconciliation","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X40","origin":"SP-4","dotted_scope":"authority.composition","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S31"]},{"id":"X41","origin":"SP-4","dotted_scope":"tenant.boundary","destination":"CAP-TENANCY","evidence":["S31"]},{"id":"X42","origin":"SP-4","dotted_scope":"credential.resolution","destination":"CAP-CREDENTIALS","evidence":["S31"]},{"id":"X43","origin":"SP-4","dotted_scope":"provider.selection","destination":"DP","evidence":["S31"]},{"id":"X44","origin":"SP-5","dotted_scope":"access.authentication","destination":"SP-PLATFORM-ACCESS","evidence":["S32"]},{"id":"X45","origin":"SP-5","dotted_scope":"access.authorization","destination":"SP-PLATFORM-ACCESS","evidence":["S32"]},{"id":"X46","origin":"SP-5","dotted_scope":"identity.port","destination":"PORT-IDENTITY","evidence":["S32"]},{"id":"X47","origin":"SP-5","dotted_scope":"identity.adapter.github","destination":"ADAPTER-IDENTITY-GITHUB","evidence":["S32"]},{"id":"X48","origin":"SP-5","dotted_scope":"identity.adapter.gitlab","destination":"ADAPTER-IDENTITY-GITLAB","evidence":["S32"]},{"id":"X49","origin":"SP-5","dotted_scope":"identity.adapter.google","destination":"ADAPTER-IDENTITY-GOOGLE","evidence":["S32"]},{"id":"X50","origin":"SP-5","dotted_scope":"policy.tenancy-access","destination":"DT","evidence":["S32"]},{"id":"X51","origin":"SP-6","dotted_scope":"pipeline.port","destination":"PORT-PIPELINE","evidence":["S41"]},{"id":"X52","origin":"SP-6","dotted_scope":"pipeline.adapter.github","destination":"ADAPTER-PIPELINE-GITHUB","evidence":["S41"]},{"id":"X53","origin":"SP-6","dotted_scope":"pipeline.adapter.gitlab","destination":"ADAPTER-PIPELINE-GITLAB","evidence":["S41"]},{"id":"X54","origin":"SP-6","dotted_scope":"delivery.build","destination":"SP-DELIVERY-AUTOMATION","evidence":["S41"]},{"id":"X55","origin":"SP-6","dotted_scope":"delivery.test","destination":"SP-DELIVERY-AUTOMATION","evidence":["S41"]},{"id":"X56","origin":"SP-6","dotted_scope":"delivery.deploy","destination":"SP-DELIVERY-AUTOMATION","evidence":["S41"]},{"id":"X57","origin":"SP-6","dotted_scope":"governance.promotion","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S41"]},{"id":"X58","origin":"SP-6","dotted_scope":"governance.audit","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S41"]},{"id":"X59","origin":"SP-6","dotted_scope":"data.pre-production","destination":"SP-DATA-ENVIRONMENTS","evidence":["S41"]},{"id":"X60","origin":"SP-6","dotted_scope":"data.randomized","destination":"SP-DATA-ENVIRONMENTS","evidence":["S41"]},{"id":"X61","origin":"SP-6","dotted_scope":"operation.pipeline-state","destination":"CAP-DURABLE-OPERATIONS","evidence":["S41"]},{"id":"X62","origin":"SP-7","dotted_scope":"onboarding.journey","destination":"SP-DEVELOPER-ONBOARDING","evidence":["S33"]},{"id":"X63","origin":"SP-7","dotted_scope":"project.resolution","destination":"CAP-PROJECT-CATALOG","evidence":["S33"]},{"id":"X64","origin":"SP-7","dotted_scope":"data.randomized","destination":"SP-DATA-ENVIRONMENTS","evidence":["S33"]},{"id":"X65","origin":"SP-7","dotted_scope":"operation.request-durability","destination":"CAP-DURABLE-OPERATIONS","evidence":["S33"]},{"id":"X66","origin":"SP-7","dotted_scope":"delivery.ci-handoff","destination":"SP-DELIVERY-AUTOMATION","evidence":["S33"]},{"id":"X67","origin":"SP-7","dotted_scope":"onboarding.mode","destination":"DO","evidence":["S33"]},{"id":"X68","origin":"SP-8","dotted_scope":"request.intake-fulfillment","destination":"SP-ENVIRONMENT-REQUESTS","evidence":["S34"]},{"id":"X69","origin":"SP-8","dotted_scope":"data.randomized-dev","destination":"SP-DATA-ENVIRONMENTS","evidence":["S34"]},{"id":"X70","origin":"SP-8","dotted_scope":"governance.production-approval","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S34"]},{"id":"X71","origin":"SP-8","dotted_scope":"operation.request-durability","destination":"CAP-DURABLE-OPERATIONS","evidence":["S34"]},{"id":"X72","origin":"SP-8","dotted_scope":"request.quota-policy","destination":"CAP-TENANCY","evidence":["S34"]},{"id":"X73","origin":"SP-8","dotted_scope":"access.role-authorization","destination":"SP-PLATFORM-ACCESS","evidence":["S34"]},{"id":"X74","origin":"SP-8","dotted_scope":"resource.lineage-registration","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S34"]},{"id":"X75","origin":"SP-9","dotted_scope":"inventory.read-only","destination":"SP-OPERATIONS-UI","evidence":["S35"]},{"id":"X76","origin":"SP-9","dotted_scope":"request.status-actions","destination":"SP-ENVIRONMENT-REQUESTS","evidence":["S35"]},{"id":"X77","origin":"SP-9","dotted_scope":"delivery.pipeline-status-update-actions","destination":"SP-DELIVERY-AUTOMATION","evidence":["S35"]},{"id":"X78","origin":"SP-9","dotted_scope":"access.oidc-role-gating","destination":"SP-PLATFORM-ACCESS","evidence":["S35"]},{"id":"X79","origin":"SP-9","dotted_scope":"state.api-source","destination":"SP-CONTROL-PLANE-AUTHORITY","evidence":["S35"]},{"id":"X80","origin":"SP-10","dotted_scope":"governance.audit-append-only","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S36"]},{"id":"X81","origin":"SP-10","dotted_scope":"governance.production-guardrails","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S36"]},{"id":"X82","origin":"SP-10","dotted_scope":"governance.promotion-gate","destination":"SP-PRODUCTION-GOVERNANCE","evidence":["S36"]},{"id":"X83","origin":"SP-10","dotted_scope":"lifecycle.resource-ttl","destination":"SP-RESOURCE-LIFECYCLE","evidence":["S36"]},{"id":"X84","origin":"SP-10","dotted_scope":"lifecycle.resource-retention","destination":"SP-RESOURCE-LIFECYCLE","evidence":["S36"]},{"id":"X85","origin":"SP-10","dotted_scope":"lifecycle.image-retention","destination":"SP-RESOURCE-LIFECYCLE","evidence":["S36"]},{"id":"X86","origin":"SP-10","dotted_scope":"lifecycle.orphan-reclamation","destination":"SP-RESOURCE-LIFECYCLE","evidence":["S36"]},{"id":"X87","origin":"SP-10","dotted_scope":"recovery.backup-scheduling","destination":"SP-DATA-RECOVERY","evidence":["S36"]},{"id":"X88","origin":"SP-10","dotted_scope":"recovery.backup-retention","destination":"SP-DATA-RECOVERY","evidence":["S36"]},{"id":"X89","origin":"SP-10","dotted_scope":"recovery.restore-drills","destination":"SP-DATA-RECOVERY","evidence":["S36"]},{"id":"X90","origin":"SP-2","dotted_scope":"interface.cli","destination":"SP-DATA-ENVIRONMENTS","evidence":["S29","S28"]},{"id":"X91","origin":"SP-2","dotted_scope":"audit.local-operation","destination":"CAP-DURABLE-OPERATIONS","evidence":["S29","S28"]},{"id":"X92","origin":"SP-4","dotted_scope":"authority.provider-catalog","destination":"CAP-PROVIDER-CATALOG","evidence":["S31","S28"]},{"id":"X93","origin":"SP-3","dotted_scope":"provider.catalog-registration","destination":"CAP-PROVIDER-CATALOG","evidence":["S30","S25"]}],"edges":[{"id":"G1","from":"CAP-MANIFEST","to":"CAP-PROJECT-CATALOG","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-MANIFEST-READY"],"evidence":["S42"],"ownership_destination":"CAP-PROJECT-CATALOG"},{"id":"G2","from":"CAP-MANIFEST","to":"CAP-DEPLOYMENT-SPEC","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-MANIFEST-READY"],"evidence":["S42"],"ownership_destination":"CAP-DEPLOYMENT-SPEC"},{"id":"G3","from":"CAP-SOURCE","to":"CAP-PROJECT-CATALOG","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-SOURCE-READY"],"evidence":["S42"],"ownership_destination":"CAP-PROJECT-CATALOG"},{"id":"G4","from":"CAP-WORKSPACE","to":"SP-DEVELOPER-ONBOARDING","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-WORKSPACE-READY"],"evidence":["S42"],"ownership_destination":"SP-DEVELOPER-ONBOARDING"},{"id":"G5","from":"CAP-LOCAL-BACKEND","to":"SP-DEVELOPER-ONBOARDING","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-LOCAL-BACKEND-READY"],"evidence":["S42"],"ownership_destination":"SP-DEVELOPER-ONBOARDING"},{"id":"G6","from":"PORT-SOURCE-PROVIDER","to":"CAP-PROJECT-CATALOG","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-SOURCE-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CAP-PROJECT-CATALOG"},{"id":"G7","from":"ADAPTER-SOURCE-GIT","to":"CAP-SOURCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-ADAPTER-SOURCE-GIT-READY"],"evidence":["S42"],"ownership_destination":"CAP-SOURCE"},{"id":"G8","from":"PORT-WORKSPACE-PROVIDER","to":"CAP-WORKSPACE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-WORKSPACE-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CAP-WORKSPACE"},{"id":"G9","from":"ADAPTER-WORKSPACE-GIT","to":"CAP-WORKSPACE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-ADAPTER-WORKSPACE-GIT-READY"],"evidence":["S42"],"ownership_destination":"CAP-WORKSPACE"},{"id":"G10","from":"PORT-BACKEND-PROVIDER","to":"CAP-DEPLOYMENT-SPEC","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-BACKEND-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CAP-DEPLOYMENT-SPEC"},{"id":"G11","from":"ADAPTER-BACKEND-DOCKER","to":"CAP-LOCAL-BACKEND","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-ADAPTER-BACKEND-DOCKER-READY"],"evidence":["S42"],"ownership_destination":"CAP-LOCAL-BACKEND"},{"id":"G12","from":"PORT-IMAGE-REGISTRY","to":"CAP-IMAGE-REGISTRY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-IMAGE-REGISTRY-READY"],"evidence":["S42"],"ownership_destination":"CAP-IMAGE-REGISTRY"},{"id":"G13","from":"ADAPTER-IMAGE-REGISTRY-GHCR","to":"CAP-IMAGE-REGISTRY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-ADAPTER-IMAGE-REGISTRY-GHCR-READY"],"evidence":["S42"],"ownership_destination":"CAP-IMAGE-REGISTRY"},{"id":"G14","from":"CAP-IMAGE-REGISTRY","to":"INT-LOCAL-DIGEST-CONSUMPTION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-IMAGE-REGISTRY-READY"],"evidence":["S42"],"ownership_destination":"INT-LOCAL-DIGEST-CONSUMPTION"},{"id":"G15","from":"CAP-CREDENTIALS","to":"CHG-FIRST-DATABASE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-DATABASE-ADAPTER"},{"id":"G16","from":"CAP-DATA-ARTIFACTS","to":"CHG-FIRST-DATABASE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-DATA-ARTIFACTS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-DATABASE-ADAPTER"},{"id":"G17","from":"PORT-DATABASE-PROVIDER","to":"CHG-FIRST-DATABASE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-DATABASE-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-DATABASE-ADAPTER"},{"id":"G18","from":"CAP-CREDENTIALS","to":"CHG-FIRST-REMOTE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-REMOTE-ADAPTER"},{"id":"G19","from":"CAP-TENANCY","to":"CHG-FIRST-REMOTE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-REMOTE-ADAPTER"},{"id":"G20","from":"CAP-DEPLOYMENT-SPEC","to":"CHG-FIRST-REMOTE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-DEPLOYMENT-SPEC-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-REMOTE-ADAPTER"},{"id":"G21","from":"PORT-BACKEND-PROVIDER","to":"CHG-FIRST-REMOTE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-BACKEND-PROVIDER-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-REMOTE-ADAPTER"},{"id":"G22","from":"CAP-TENANCY","to":"CHG-FIRST-IDENTITY-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-IDENTITY-ADAPTER"},{"id":"G23","from":"PORT-IDENTITY","to":"CHG-FIRST-IDENTITY-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-IDENTITY-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-IDENTITY-ADAPTER"},{"id":"G24","from":"CAP-CREDENTIALS","to":"CHG-FIRST-IDENTITY-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-IDENTITY-ADAPTER"},{"id":"G25","from":"PORT-PIPELINE","to":"CHG-FIRST-PIPELINE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-PORT-PIPELINE-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-PIPELINE-ADAPTER"},{"id":"G26","from":"CAP-DURABLE-OPERATIONS","to":"CHG-FIRST-PIPELINE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-PIPELINE-ADAPTER"},{"id":"G27","from":"CAP-CREDENTIALS","to":"CHG-FIRST-PIPELINE-ADAPTER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"CHG-FIRST-PIPELINE-ADAPTER"},{"id":"G28","from":"CAP-PROVIDER-CATALOG","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-PROVIDER-CATALOG-READY"],"evidence":["S42"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G29","from":"CAP-TENANCY","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G30","from":"CAP-CREDENTIALS","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-CREDENTIALS-READY"],"evidence":["S42"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G31","from":"CAP-DURABLE-OPERATIONS","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S42"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G32","from":"CAP-RESOURCE-OWNERSHIP","to":"SP-CONTROL-PLANE-AUTHORITY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-RESOURCE-OWNERSHIP-READY"],"evidence":["S42","S63","S64","S65","S66","S67"],"ownership_destination":"SP-CONTROL-PLANE-AUTHORITY"},{"id":"G33","from":"CHG-FIRST-DATABASE-ADAPTER","to":"INT-DATABASE-RUNTIME-CUTOVER","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-DATABASE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"INT-DATABASE-RUNTIME-CUTOVER"},{"id":"G34","from":"INT-DATABASE-RUNTIME-CUTOVER","to":"WF-DATA-COPY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-INT-DATABASE-RUNTIME-CUTOVER-READY"],"evidence":["S42"],"ownership_destination":"WF-DATA-COPY"},{"id":"G35","from":"CHG-FIRST-DATABASE-ADAPTER","to":"WF-DATA-COPY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-DATABASE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"WF-DATA-COPY"},{"id":"G36","from":"WF-DATA-COPY","to":"SP-DATA-ENVIRONMENTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-WF-DATA-COPY-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-ENVIRONMENTS"},{"id":"G37","from":"CHG-FIRST-DATABASE-ADAPTER","to":"SP-DATA-ENVIRONMENTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-DATABASE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-ENVIRONMENTS"},{"id":"G38","from":"CHG-FIRST-REMOTE-ADAPTER","to":"SP-REMOTE-DEPLOYMENT","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-REMOTE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"SP-REMOTE-DEPLOYMENT"},{"id":"G39","from":"CHG-FIRST-IDENTITY-ADAPTER","to":"SP-PLATFORM-ACCESS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-IDENTITY-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"SP-PLATFORM-ACCESS"},{"id":"G40","from":"CHG-FIRST-PIPELINE-ADAPTER","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CHG-FIRST-PIPELINE-ADAPTER-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G41","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-DATA-ENVIRONMENTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-ENVIRONMENTS"},{"id":"G42","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-REMOTE-DEPLOYMENT","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-REMOTE-DEPLOYMENT"},{"id":"G43","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-PLATFORM-ACCESS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-PLATFORM-ACCESS"},{"id":"G45","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-ENVIRONMENT-REQUESTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-ENVIRONMENT-REQUESTS"},{"id":"G46","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-OPERATIONS-UI","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-OPERATIONS-UI"},{"id":"G47","from":"SP-CONTROL-PLANE-AUTHORITY","to":"SP-RESOURCE-LIFECYCLE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S42"],"ownership_destination":"SP-RESOURCE-LIFECYCLE"},{"id":"G48","from":"SP-DATA-ENVIRONMENTS","to":"SP-PRODUCTION-GOVERNANCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-DATA-ENVIRONMENTS-READY"],"evidence":["S42"],"ownership_destination":"SP-PRODUCTION-GOVERNANCE"},{"id":"G49","from":"SP-REMOTE-DEPLOYMENT","to":"SP-PRODUCTION-GOVERNANCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-REMOTE-DEPLOYMENT-READY"],"evidence":["S42"],"ownership_destination":"SP-PRODUCTION-GOVERNANCE"},{"id":"G50","from":"SP-PLATFORM-ACCESS","to":"SP-PRODUCTION-GOVERNANCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PLATFORM-ACCESS-READY"],"evidence":["S42"],"ownership_destination":"SP-PRODUCTION-GOVERNANCE"},{"id":"G51","from":"WF-PRODUCTION-PROMOTION","to":"SP-PRODUCTION-GOVERNANCE","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-WF-PRODUCTION-PROMOTION-READY"],"evidence":["S42"],"ownership_destination":"SP-PRODUCTION-GOVERNANCE"},{"id":"G52","from":"SP-DATA-ENVIRONMENTS","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-DATA-ENVIRONMENTS-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G53","from":"SP-REMOTE-DEPLOYMENT","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-REMOTE-DEPLOYMENT-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G54","from":"SP-PRODUCTION-GOVERNANCE","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PRODUCTION-GOVERNANCE-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G55","from":"CAP-IMAGE-REGISTRY","to":"SP-DELIVERY-AUTOMATION","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-IMAGE-REGISTRY-READY"],"evidence":["S42"],"ownership_destination":"SP-DELIVERY-AUTOMATION"},{"id":"G57","from":"CAP-PROJECT-CATALOG","to":"SP-DEVELOPER-ONBOARDING","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-CAP-PROJECT-CATALOG-READY"],"evidence":["S42"],"ownership_destination":"SP-DEVELOPER-ONBOARDING"},{"id":"G58","from":"SP-DATA-ENVIRONMENTS","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-DATA-ENVIRONMENTS-READY"],"evidence":["S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G59","from":"SP-REMOTE-DEPLOYMENT","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-REMOTE-DEPLOYMENT-READY"],"evidence":["S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G60","from":"SP-PLATFORM-ACCESS","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PLATFORM-ACCESS-READY"],"evidence":["S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G61","from":"SP-PRODUCTION-GOVERNANCE","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PRODUCTION-GOVERNANCE-READY"],"evidence":["S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G62","from":"WF-ENVIRONMENT-REQUEST","to":"SP-ENVIRONMENT-REQUESTS","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-WF-ENVIRONMENT-REQUEST-READY"],"evidence":["S42"],"ownership_destination":"SP-ENVIRONMENT-REQUESTS"},{"id":"G63","from":"SP-DATA-ENVIRONMENTS","to":"SP-DATA-RECOVERY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-DATA-ENVIRONMENTS-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-RECOVERY"},{"id":"G64","from":"SP-PRODUCTION-GOVERNANCE","to":"SP-DATA-RECOVERY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PRODUCTION-GOVERNANCE-READY"],"evidence":["S42"],"ownership_destination":"SP-DATA-RECOVERY"},{"id":"G65","from":"SP-PLATFORM-ACCESS","to":"SP-OPERATIONS-UI","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-PLATFORM-ACCESS-READY"],"evidence":["S42"],"ownership_destination":"SP-OPERATIONS-UI"},{"id":"G66","from":"SP-DELIVERY-AUTOMATION","to":"SP-OPERATIONS-UI","type":"soft","reason":"required acceptance handoff","handoff_ids":["AC-SP-DELIVERY-AUTOMATION-READY"],"evidence":["S42"],"ownership_destination":"SP-OPERATIONS-UI"},{"id":"G67","from":"SP-ENVIRONMENT-REQUESTS","to":"SP-OPERATIONS-UI","type":"soft","reason":"required acceptance handoff","handoff_ids":["AC-SP-ENVIRONMENT-REQUESTS-READY"],"evidence":["S42"],"ownership_destination":"SP-OPERATIONS-UI"},{"id":"G68","from":"CAP-DURABLE-OPERATIONS","to":"WF-DATA-COPY","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S29","S42"],"ownership_destination":"WF-DATA-COPY"},{"id":"G69","from":"CAP-DURABLE-OPERATIONS","to":"WF-PRODUCTION-PROMOTION","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S41","S42"],"ownership_destination":"WF-PRODUCTION-PROMOTION"},{"id":"G70","from":"CAP-DURABLE-OPERATIONS","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-DURABLE-OPERATIONS-READY"],"evidence":["S34","S42"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G71","from":"CAP-RESOURCE-OWNERSHIP","to":"SP-RESOURCE-LIFECYCLE","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-RESOURCE-OWNERSHIP-READY"],"evidence":["S36","S28","S63","S64","S65","S66","S67"],"ownership_destination":"SP-RESOURCE-LIFECYCLE"},{"id":"G72","from":"CAP-RESOURCE-OWNERSHIP","to":"WF-ENVIRONMENT-REQUEST","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-RESOURCE-OWNERSHIP-READY"],"evidence":["S34","S42","S63","S64","S65","S66","S67"],"ownership_destination":"WF-ENVIRONMENT-REQUEST"},{"id":"G73","from":"CAP-RESOURCE-OWNERSHIP","to":"WF-DATA-COPY","type":"hard","reason":"required capability handoff","handoff_ids":["AC-CAP-RESOURCE-OWNERSHIP-READY"],"evidence":["S29","S42","S63","S64","S65","S66","S67"],"ownership_destination":"WF-DATA-COPY"},{"id":"G74","from":"CAP-TENANCY","to":"SP-REMOTE-DEPLOYMENT","type":"hard","reason":"required tenancy contract handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"SP-REMOTE-DEPLOYMENT"},{"id":"G75","from":"CAP-TENANCY","to":"SP-ENVIRONMENT-REQUESTS","type":"hard","reason":"required tenancy contract handoff","handoff_ids":["AC-CAP-TENANCY-READY"],"evidence":["S42"],"ownership_destination":"SP-ENVIRONMENT-REQUESTS"},{"id":"G76","from":"SP-CONTROL-PLANE-AUTHORITY","to":"CHG-OPS-UI-READONLY","type":"hard","reason":"required acceptance handoff","handoff_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"evidence":["S83"],"ownership_destination":"CHG-OPS-UI-READONLY"}],"decompositions":[{"id":"CHG-FIRST-DATABASE-ADAPTER","owner":"Data Platform","type":"implementation_change","inputs":["PORT-DATABASE-PROVIDER","CAP-CREDENTIALS","CAP-DATA-ARTIFACTS"],"outputs":["openspec/changes/CHG-FIRST-DATABASE-ADAPTER/proposal.md","openspec/changes/CHG-FIRST-DATABASE-ADAPTER/specs/provider-adapter/spec.md","openspec/changes/CHG-FIRST-DATABASE-ADAPTER/design.md"],"acceptance_ids":["AC-CHG-FIRST-DATABASE-ADAPTER-READY"],"start_boundary":"start:CHG-FIRST-DATABASE-ADAPTER","finish_boundary":"finish:CHG-FIRST-DATABASE-ADAPTER","dependencies":["PORT-DATABASE-PROVIDER","CAP-CREDENTIALS","CAP-DATA-ARTIFACTS"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"openspec/changes/CHG-FIRST-DATABASE-ADAPTER/proposal.md","additions":100,"deletions":0,"total":100},{"path":"openspec/changes/CHG-FIRST-DATABASE-ADAPTER/specs/provider-adapter/spec.md","additions":120,"deletions":0,"total":120},{"path":"openspec/changes/CHG-FIRST-DATABASE-ADAPTER/design.md","additions":110,"deletions":0,"total":110}],"total":330,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-FIRST-REMOTE-ADAPTER","owner":"Runtime","type":"blocked_product_placeholder","inputs":["PORT-BACKEND-PROVIDER","CAP-CREDENTIALS","CAP-TENANCY","CAP-DEPLOYMENT-SPEC"],"outputs":["openspec/changes/platform-first-remote-adapter/proposal.md","openspec/changes/platform-first-remote-adapter/specs/provider-adapter/spec.md","openspec/changes/platform-first-remote-adapter/design.md"],"acceptance_ids":["AC-CHG-FIRST-REMOTE-ADAPTER-READY"],"start_boundary":"start:CHG-FIRST-REMOTE-ADAPTER","finish_boundary":"finish:CHG-FIRST-REMOTE-ADAPTER","dependencies":["PORT-BACKEND-PROVIDER","CAP-CREDENTIALS","CAP-TENANCY","CAP-DEPLOYMENT-SPEC"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"openspec/changes/platform-first-remote-adapter/proposal.md","additions":100,"deletions":0,"total":100},{"path":"openspec/changes/platform-first-remote-adapter/specs/provider-adapter/spec.md","additions":120,"deletions":0,"total":120},{"path":"openspec/changes/platform-first-remote-adapter/design.md","additions":110,"deletions":0,"total":110}],"total":330,"hard_gate":400},"status":"blocked_placeholder","blocking_decision_ids":["DP","DR","DPROV-REMOTE"]},{"id":"CHG-FIRST-IDENTITY-ADAPTER","owner":"Security","type":"blocked_product_placeholder","inputs":["PORT-IDENTITY","CAP-CREDENTIALS","CAP-TENANCY"],"outputs":["openspec/changes/platform-first-identity-adapter/proposal.md","openspec/changes/platform-first-identity-adapter/specs/provider-adapter/spec.md","openspec/changes/platform-first-identity-adapter/design.md"],"acceptance_ids":["AC-CHG-FIRST-IDENTITY-ADAPTER-READY"],"start_boundary":"start:CHG-FIRST-IDENTITY-ADAPTER","finish_boundary":"finish:CHG-FIRST-IDENTITY-ADAPTER","dependencies":["PORT-IDENTITY","CAP-CREDENTIALS","CAP-TENANCY"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"openspec/changes/platform-first-identity-adapter/proposal.md","additions":100,"deletions":0,"total":100},{"path":"openspec/changes/platform-first-identity-adapter/specs/provider-adapter/spec.md","additions":120,"deletions":0,"total":120},{"path":"openspec/changes/platform-first-identity-adapter/design.md","additions":110,"deletions":0,"total":110}],"total":330,"hard_gate":400},"status":"blocked_placeholder","blocking_decision_ids":["DP","DT","DPROV-IDP"]},{"id":"CHG-PORTFOLIO-VALIDATOR","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["tests/portfolio/test_portfolio_integrity.py"],"acceptance_ids":["AC-CAP-PROJECT-CATALOG-READY"],"start_boundary":"start:CHG-PORTFOLIO-VALIDATOR","finish_boundary":"finish:CHG-PORTFOLIO-VALIDATOR","dependencies":[],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"tests/portfolio/test_portfolio_integrity.py","additions":260,"deletions":0,"total":260}],"total":260,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-ADOPT-UI-ROUTE","owner":"Architecture","type":"implementation_change","inputs":["CHG-PORTFOLIO-VALIDATOR"],"outputs":["docs/specs/platform/portfolio.json"],"acceptance_ids":["AC-SP-OPERATIONS-UI-READY"],"start_boundary":"start:CHG-ADOPT-UI-ROUTE","finish_boundary":"finish:CHG-ADOPT-UI-ROUTE","dependencies":["CHG-PORTFOLIO-VALIDATOR"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-PORTFOLIO-VALIDATOR","changed_line_forecast":{"files":[{"path":"docs/specs/platform/portfolio.json","additions":250,"deletions":0,"total":250}],"total":250,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-PROVIDER-CATALOG","owner":"Architecture","type":"implementation_change","inputs":["CAP-PROVIDER-CATALOG"],"outputs":["src/odoo_forge/provider_catalog/","tests/provider_catalog/"],"acceptance_ids":["AC-CAP-PROVIDER-CATALOG-READY"],"start_boundary":"start:CHG-PROVIDER-CATALOG","finish_boundary":"finish:CHG-PROVIDER-CATALOG","dependencies":["CHG-ADOPT-UI-ROUTE"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-ADOPT-UI-ROUTE","changed_line_forecast":{"files":[{"path":"src/odoo_forge/provider_catalog/","additions":300,"deletions":0,"total":300}],"total":300,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4A-INSTANCE-REGISTRY","owner":"Control Plane","type":"implementation_change","inputs":["CAP-TENANCY","CAP-RESOURCE-OWNERSHIP"],"outputs":["src/odoo_forge/instance_registry/","src/odoo_forge/ports/"],"acceptance_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"start_boundary":"start:CHG-SP4A-INSTANCE-REGISTRY","finish_boundary":"finish:CHG-SP4A-INSTANCE-REGISTRY","dependencies":["CHG-ADOPT-UI-ROUTE"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-ADOPT-UI-ROUTE","changed_line_forecast":{"files":[{"path":"src/odoo_forge/instance_registry/","additions":180,"deletions":0,"total":180},{"path":"src/odoo_forge/ports/","additions":150,"deletions":0,"total":150}],"total":330,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-REGISTRY-POSTGRES","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4A-INSTANCE-REGISTRY"],"outputs":["src/odoo_forge_instances_postgres/migrate.py","src/odoo_forge_instances_postgres/migrations/__init__.py","src/odoo_forge_instances_postgres/migrations/0001_instance_registry.sql","tests/odoo_forge_instances_postgres/test_migrate.py","tests/odoo_forge_instances_postgres/test_migration_process.py"],"acceptance_ids":["AC-SP4B-REGISTRY-POSTGRES-READY"],"start_boundary":"start:CHG-SP4B-REGISTRY-POSTGRES","finish_boundary":"finish:CHG-SP4B-REGISTRY-POSTGRES","dependencies":["CHG-SP4A-INSTANCE-REGISTRY"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert the migration module, SQL migration, and their tests; source rollback drops no migrated database","immediate_parent":"CHG-SP4A-INSTANCE-REGISTRY","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/migrate.py","additions":82,"deletions":0,"total":82},{"path":"src/odoo_forge_instances_postgres/migrations/__init__.py","additions":2,"deletions":0,"total":2},{"path":"src/odoo_forge_instances_postgres/migrations/0001_instance_registry.sql","additions":24,"deletions":0,"total":24},{"path":"tests/odoo_forge_instances_postgres/test_migrate.py","additions":142,"deletions":0,"total":142},{"path":"tests/odoo_forge_instances_postgres/test_migration_process.py","additions":50,"deletions":0,"total":50}],"total":300,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4C-CONTROL-PLANE-EDGE","owner":"Control Plane","type":"implementation_change","inputs":["CHG-PROVIDER-CATALOG","CHG-SP4B-REAL-ACCEPTANCE"],"outputs":["src/odoo_forge_server/","tests/odoo_forge_server/"],"acceptance_ids":["AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"start_boundary":"start:CHG-SP4C-CONTROL-PLANE-EDGE","finish_boundary":"finish:CHG-SP4C-CONTROL-PLANE-EDGE","dependencies":["CHG-PROVIDER-CATALOG","CHG-SP4B-REAL-ACCEPTANCE"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-SP4B-REAL-ACCEPTANCE","changed_line_forecast":{"files":[{"path":"src/odoo_forge_server/","additions":220,"deletions":0,"total":220},{"path":"tests/odoo_forge_server/","additions":160,"deletions":0,"total":160}],"total":380,"hard_gate":400},"status":"delivered","blocking_decision_ids":[]},{"id":"CHG-OPS-UI-READONLY","owner":"Experience","type":"blocked_product_placeholder","inputs":["CHG-SP4C-CONTROL-PLANE-EDGE"],"outputs":["src/odoo_forge_server/templates/","src/odoo_forge_server/views.py","tests/odoo_forge_server/test_ui.py"],"acceptance_ids":["AC-CHG-OPS-UI-READONLY-READY"],"start_boundary":"start:CHG-OPS-UI-READONLY","finish_boundary":"finish:CHG-OPS-UI-READONLY","dependencies":["CHG-SP4C-CONTROL-PLANE-EDGE"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"deactivate if active; revert listed outputs","immediate_parent":"CHG-SP4C-CONTROL-PLANE-EDGE","changed_line_forecast":{"files":[{"path":"src/odoo_forge_server/templates/","additions":160,"deletions":0,"total":160},{"path":"src/odoo_forge_server/views.py","additions":100,"deletions":0,"total":100},{"path":"tests/odoo_forge_server/test_ui.py","additions":80,"deletions":0,"total":80}],"total":340,"hard_gate":400},"status":"blocked_placeholder","blocking_decision_ids":[]},{"id":"CHG-PORTFOLIO-AUTHORITY-PATH","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["openspec/specs/platform-subproject-governance/spec.md","docs/specs/platform/portfolio.json","tests/portfolio/test_portfolio_integrity.py"],"acceptance_ids":["AC-CHG-PORTFOLIO-AUTHORITY-PATH-READY"],"start_boundary":"start:CHG-PORTFOLIO-AUTHORITY-PATH","finish_boundary":"finish:CHG-PORTFOLIO-AUTHORITY-PATH","dependencies":[],"verification_commands":["C37"],"rollback":"revert the single commit; restore portfolio.json to prior committed bytes","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"openspec/specs/platform-subproject-governance/spec.md","additions":3,"deletions":3,"total":6},{"path":"docs/specs/platform/portfolio.json","additions":31,"deletions":0,"total":31},{"path":"tests/portfolio/test_portfolio_integrity.py","additions":24,"deletions":2,"total":26}],"total":63,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-VALIDATOR-GROUNDWORK","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["docs/tools/platform_portfolio/validate.py","docs/tools/platform_portfolio/test_validate.py","tests/portfolio/test_portfolio_integrity.py","docs/specs/platform/portfolio.json"],"acceptance_ids":["AC-CHG-SP4B-VALIDATOR-GROUNDWORK-READY"],"start_boundary":"start:CHG-SP4B-VALIDATOR-GROUNDWORK","finish_boundary":"finish:CHG-SP4B-VALIDATOR-GROUNDWORK","dependencies":["CHG-PORTFOLIO-AUTHORITY-PATH"],"verification_commands":["C37","C38","C39","C40","C41"],"rollback":"revert the single commit; restore portfolio.json to prior committed bytes","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"docs/tools/platform_portfolio/validate.py","additions":46,"deletions":4,"total":50},{"path":"docs/tools/platform_portfolio/test_validate.py","additions":106,"deletions":0,"total":106},{"path":"tests/portfolio/test_portfolio_integrity.py","additions":36,"deletions":2,"total":38},{"path":"docs/specs/platform/portfolio.json","additions":45,"deletions":0,"total":45}],"total":239,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-ITEM-SCAFFOLD","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["docs/specs/platform/portfolio.json","tests/portfolio/test_portfolio_integrity.py"],"acceptance_ids":["AC-CHG-SP4B-ITEM-SCAFFOLD-READY"],"start_boundary":"start:CHG-SP4B-ITEM-SCAFFOLD","finish_boundary":"finish:CHG-SP4B-ITEM-SCAFFOLD","dependencies":["CHG-SP4B-VALIDATOR-GROUNDWORK"],"verification_commands":["C42","C43","C44"],"rollback":"revert the single commit; restore portfolio.json to prior committed bytes","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"docs/specs/platform/portfolio.json","additions":134,"deletions":0,"total":134},{"path":"tests/portfolio/test_portfolio_integrity.py","additions":107,"deletions":0,"total":107}],"total":241,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-DECOMPOSITION-ADOPTION","owner":"Architecture","type":"implementation_change","inputs":[],"outputs":["docs/specs/platform/portfolio.json","tests/portfolio/test_portfolio_integrity.py"],"acceptance_ids":["AC-CHG-SP4B-DECOMPOSITION-ADOPTION-READY"],"start_boundary":"start:CHG-SP4B-DECOMPOSITION-ADOPTION","finish_boundary":"finish:CHG-SP4B-DECOMPOSITION-ADOPTION","dependencies":["CHG-SP4B-ITEM-SCAFFOLD"],"verification_commands":["C42","C43","C44"],"rollback":"revert the slice commits; restore portfolio.json to prior committed bytes","immediate_parent":null,"changed_line_forecast":{"files":[{"path":"docs/specs/platform/portfolio.json","additions":90,"deletions":0,"total":90},{"path":"tests/portfolio/test_portfolio_integrity.py","additions":210,"deletions":0,"total":210}],"total":300,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-ERRORS-PACKAGE","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-REGISTRY-POSTGRES"],"outputs":["src/odoo_forge_instances_postgres/__init__.py","src/odoo_forge_instances_postgres/errors.py","pyproject.toml","uv.lock",".github/workflows/release.yml","tests/odoo_forge_instances_postgres/test_errors.py","tests/odoo_forge_instances_postgres/test_package.py"],"acceptance_ids":["AC-SP4B-ERRORS-PACKAGE-READY"],"start_boundary":"start:CHG-SP4B-ERRORS-PACKAGE","finish_boundary":"finish:CHG-SP4B-ERRORS-PACKAGE","dependencies":["CHG-SP4B-REGISTRY-POSTGRES"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert the errors package, packaging metadata, and their tests; no migrated database state is affected","immediate_parent":"CHG-SP4B-REGISTRY-POSTGRES","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/__init__.py","additions":12,"deletions":0,"total":12},{"path":"src/odoo_forge_instances_postgres/errors.py","additions":58,"deletions":0,"total":58},{"path":"pyproject.toml","additions":22,"deletions":0,"total":22},{"path":"uv.lock","additions":115,"deletions":0,"total":115},{"path":".github/workflows/release.yml","additions":8,"deletions":0,"total":8},{"path":"tests/odoo_forge_instances_postgres/test_errors.py","additions":95,"deletions":0,"total":95},{"path":"tests/odoo_forge_instances_postgres/test_package.py","additions":30,"deletions":0,"total":30}],"total":340,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-ADAPTER","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-ERRORS-PACKAGE"],"outputs":["src/odoo_forge_instances_postgres/adapter.py","tests/odoo_forge_instances_postgres/test_adapter.py"],"acceptance_ids":["AC-SP4B-ADAPTER-READY"],"start_boundary":"start:CHG-SP4B-ADAPTER","finish_boundary":"finish:CHG-SP4B-ADAPTER","dependencies":["CHG-SP4B-ERRORS-PACKAGE"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert the adapter module and its tests; no migrated database state is affected","immediate_parent":"CHG-SP4B-ERRORS-PACKAGE","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/adapter.py","additions":160,"deletions":0,"total":160},{"path":"tests/odoo_forge_instances_postgres/test_adapter.py","additions":160,"deletions":0,"total":160}],"total":320,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-CONFORMANCE-FAKES","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-ADAPTER"],"outputs":["src/odoo_forge_instances_postgres/fakes.py","tests/odoo_forge_instances_postgres/test_conformance.py","tests/odoo_forge_instances_postgres/test_fake_boundary.py"],"acceptance_ids":["AC-SP4B-CONFORMANCE-FAKES-READY"],"start_boundary":"start:CHG-SP4B-CONFORMANCE-FAKES","finish_boundary":"finish:CHG-SP4B-CONFORMANCE-FAKES","dependencies":["CHG-SP4B-ADAPTER"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert the conformance fakes module and its tests; no migrated database state is affected","immediate_parent":"CHG-SP4B-ADAPTER","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/fakes.py","additions":90,"deletions":0,"total":90},{"path":"tests/odoo_forge_instances_postgres/test_conformance.py","additions":70,"deletions":0,"total":70},{"path":"tests/odoo_forge_instances_postgres/test_fake_boundary.py","additions":80,"deletions":0,"total":80}],"total":240,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-POSTGRES-HARNESS","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-CONFORMANCE-FAKES"],"outputs":["src/odoo_forge_instances_postgres/real_postgres.py","tests/odoo_forge_instances_postgres/test_real_postgres_harness.py","tests/odoo_forge_instances_postgres/test_real_postgres_process.py"],"acceptance_ids":["AC-SP4B-POSTGRES-HARNESS-READY"],"start_boundary":"start:CHG-SP4B-POSTGRES-HARNESS","finish_boundary":"finish:CHG-SP4B-POSTGRES-HARNESS","dependencies":["CHG-SP4B-CONFORMANCE-FAKES"],"verification_commands":["C37","C38","C39","C40","C41","C45"],"rollback":"revert harness module and process tests; persisted database state is removed only by an explicit retention-approved operation","immediate_parent":"CHG-SP4B-CONFORMANCE-FAKES","changed_line_forecast":{"files":[{"path":"src/odoo_forge_instances_postgres/real_postgres.py","additions":150,"deletions":0,"total":150},{"path":"tests/odoo_forge_instances_postgres/test_real_postgres_harness.py","additions":150,"deletions":0,"total":150},{"path":"tests/odoo_forge_instances_postgres/test_real_postgres_process.py","additions":80,"deletions":0,"total":80}],"total":380,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]},{"id":"CHG-SP4B-REAL-ACCEPTANCE","owner":"Data Platform","type":"implementation_change","inputs":["CHG-SP4B-POSTGRES-HARNESS"],"outputs":["tests/odoo_forge_instances_postgres/test_real_postgres_integration.py","tests/odoo_forge_instances_postgres/postgres_test_database.py","tests/odoo_forge_instances_postgres/test_real_postgres_acceptance.py"],"acceptance_ids":["AC-SP4B-REAL-ACCEPTANCE-READY","AC-SP-CONTROL-PLANE-AUTHORITY-READY"],"start_boundary":"start:CHG-SP4B-REAL-ACCEPTANCE","finish_boundary":"finish:CHG-SP4B-REAL-ACCEPTANCE","dependencies":["CHG-SP4B-POSTGRES-HARNESS"],"verification_commands":["C37","C38","C39","C40","C41","C45","C46"],"rollback":"revert acceptance-only tests and helpers; database cleanup stays explicit and retention-governed","immediate_parent":"CHG-SP4B-POSTGRES-HARNESS","changed_line_forecast":{"files":[{"path":"tests/odoo_forge_instances_postgres/test_real_postgres_integration.py","additions":220,"deletions":0,"total":220},{"path":"tests/odoo_forge_instances_postgres/postgres_test_database.py","additions":80,"deletions":0,"total":80},{"path":"tests/odoo_forge_instances_postgres/test_real_postgres_acceptance.py","additions":50,"deletions":0,"total":50}],"total":350,"hard_gate":400},"status":"ready_for_proposal","blocking_decision_ids":[]}]} \ No newline at end of file