From 375e8829002dd970f5447821e01ff29f0d647747 Mon Sep 17 00:00:00 2001
From: "MONTREAL.AI"
Date: Sat, 6 Jun 2026 20:19:41 -0400
Subject: [PATCH 1/2] Polish canonical site skip links
---
.../workflows/build-goalos-cloud-mvp-v0-2.yml | 201 +-
.../refresh-complete-goalos-public-site.yml | 49 +
.../repair-goalos-canonical-shell-v2.yml | 487 +-
README.md | 145 +-
docs/GOALOS_CLOUD_MVP_0_2.md | 49 +
docs/GOALOS_COMMERCIALIZATION_STATUS.md | 36 +
docs/GOALOS_PUBLIC_SITE_REPAIR.md | 36 +
docs/GOALOS_REPO_AUDIT.md | 66 +
scripts/check_no_paid_artifacts.py | 61 +
scripts/check_site_links.py | 2 +
scripts/validate_goalos_site_v2.py | 77 +
site/404.html | 10 +-
.../404.html | 46 +
.../ai-efficiency-score/index.html | 74 +
.../app/goalos-cloud-mvp/index.html | 59 +
.../autonomous-market-readiness.html | 139 +
.../command-center/index.html | 76 +
.../docs/index.html | 82 +
.../enterprise-ops-proof.html | 144 +
.../goalos-enterprise-rsi-pilot/index.html | 46 +
.../build-one-reusable-ai-workflow/index.html | 206 +
.../examples/checkout-recovery/index.html | 290 +
.../index.html | 312 +
.../department-ai-permission-map/index.html | 347 +
.../index.html | 305 +
.../department-proof-room-lite/index.html | 322 +
.../index.html | 331 +
.../department-weekly-proof-review/index.html | 297 +
.../feedback-to-product-update/index.html | 268 +
.../examples/idea-to-demand-engine/index.html | 258 +
.../examples/index.html | 46 +
.../internal-approval-memo/index.html | 291 +
.../lead-magnet-email-sequence/index.html | 292 +
.../meeting-to-action-plan/index.html | 225 +
.../monthly-workflow-vault-drop/index.html | 279 +
.../examples/offer-to-sales-page/index.html | 241 +
.../examples/order-bump-builder/index.html | 256 +
.../examples/partner-referral-kit/index.html | 280 +
.../post-purchase-onboarding/index.html | 282 +
.../proof-card-referral-loop/index.html | 252 +
.../examples/support-faq-triage/index.html | 260 +
.../examples/team-pack-upsell/index.html | 288 +
.../team-sprint-facilitator/index.html | 294 +
.../examples/weekly-growth-review/index.html | 251 +
.../goalos/index.html | 89 +
...home-before-checkout-recovery-example.html | 248 +
.../home-before-demand-engine-example.html | 118 +
...rtment-ai-correction-rollback-example.html | 365 +
...-department-ai-permission-map-example.html | 352 +
...partment-monthly-proof-report-example.html | 339 +
...re-department-proof-room-lite-example.html | 313 +
...rtment-public-safe-case-study-example.html | 378 +
...epartment-weekly-proof-review-example.html | 326 +
...re-feedback-to-product-update-example.html | 183 +
...before-internal-approval-memo-example.html | 287 +
...re-lead-magnet-email-sequence-example.html | 144 +
.../home-before-meeting-workflow-example.html | 105 +
...e-monthly-workflow-vault-drop-example.html | 209 +
...me-before-offer-to-sales-page-example.html | 131 +
...ome-before-order-bump-builder-example.html | 261 +
...e-before-partner-referral-kit-example.html | 222 +
...fore-post-purchase-onboarding-example.html | 157 +
...fore-proof-card-referral-loop-example.html | 196 +
...home-before-reusable-workflow-example.html | 92 +
...ome-before-support-faq-triage-example.html | 170 +
.../home-before-team-pack-upsell-example.html | 274 +
...efore-team-sprint-facilitator-example.html | 300 +
...e-before-weekly-growth-review-example.html | 235 +
.../index.html | 46 +
.../index.html | 99 +
.../launch/index.html | 89 +
.../legacy-command-center.html | 388 +
.../goalos-recursive-workflow-os/index.html | 46 +
.../pricing/index.html | 46 +
.../production.html | 150 +
.../products/ai-efficiency-sprint/index.html | 79 +
.../department-proof-room-lite/index.html | 78 +
.../index.html | 79 +
.../index.html | 46 +
.../products/goalos-cloud-mvp/index.html | 46 +
.../goalos-enterprise-pilot/index.html | 41 +
.../goalos-enterprise-rsi-pilot/index.html | 46 +
.../index.html | 46 +
.../goalos-proof-room-lite/index.html | 46 +
.../products/goalos-rsi-lite/index.html | 46 +
.../goalos-rsi-sprint-workshop/index.html | 46 +
.../products/index.html | 76 +
.../index.html | 79 +
.../proof-page-template-pack/index.html | 78 +
.../sme-ai-adoption-sprint/index.html | 79 +
.../index.html | 79 +
.../index.html | 79 +
.../sovereign-nation-state/index.html | 79 +
.../products/team-pack/index.html | 78 +
.../products/workflow-vault/index.html | 78 +
.../products/workshop/index.html | 79 +
.../proof-room-lite/index.html | 41 +
.../proofs/001-sovereign-swarm.html | 130 +
.../proofs/002-evolution-tournament.html | 132 +
.../003-recursive-evolution-ladder.html | 132 +
.../proofs/004-corporate-rsi-dominion.html | 132 +
.../005-enterprise-rsi-superorganism.html | 132 +
...06-sovereign-enterprise-constellation.html | 132 +
...07-sovereign-enterprise-proof-economy.html | 132 +
.../proofs/008-sovereign-domain-atlas.html | 132 +
...09-sovereign-kardashev-capital-engine.html | 132 +
.../010-proof-carrying-intelligence.html | 20112 ++++++++++++++++
.../proofs/011-the-proof-loop.html | 632 +
.../proofs/index.html | 198 +
...lti-agent-market-command-center-proof.html | 232 +
...irst-blockchain-capital-machine-proof.html | 94 +
...first-governance-capital-engine-proof.html | 76 +
.../rsi-capability-command-center-proof.html | 238 +
...i-capability-command-center-v17-proof.html | 125 +
...si-capital-to-capability-engine-proof.html | 125 +
.../rsi-cloudops-proof.html | 183 +
.../rsi-corporate-os-proof.html | 200 +
.../rsi-cyberdefense-proof.html | 189 +
.../rsi-marketplace-flywheel-proof.html | 202 +
.../rsi-metamaterials-discovery-proof.html | 182 +
...i-proof-forge-meta-coordination-proof.html | 102 +
.../rsi-revenue-experiment-factory-proof.html | 202 +
.../rsi-silicon-verification-proof.html | 195 +
.../rsi-unit-economics-proof.html | 197 +
.../services/index.html | 61 +
.../site-map/index.html | 46 +
.../standards/AEP-001/figures/index.html | 86 +
.../standards/AEP-001/index.html | 94 +
.../standards/AEP-002/conformance/index.html | 77 +
.../standards/AEP-002/examples/index.html | 81 +
.../standards/AEP-002/figures/index.html | 79 +
.../standards/AEP-002/index.html | 98 +
.../standards/AEP-002/schemas/index.html | 80 +
.../standards/AEP-002/templates/index.html | 79 +
.../standards/AEP-002/tools/index.html | 79 +
.../standards/AEP-003/conformance/index.html | 77 +
.../standards/AEP-003/examples/index.html | 90 +
.../standards/AEP-003/figures/index.html | 79 +
.../AEP-003/implementation/index.html | 79 +
.../standards/AEP-003/index.html | 98 +
.../standards/AEP-003/one_page/index.html | 79 +
.../standards/AEP-003/schemas/index.html | 80 +
.../standards/AEP-003/templates/index.html | 78 +
.../standards/AEP-003/tools/index.html | 81 +
.../standards/AEP-004/conformance/index.html | 77 +
.../standards/AEP-004/examples/index.html | 87 +
.../standards/AEP-004/figures/index.html | 80 +
.../AEP-004/implementation/index.html | 79 +
.../standards/AEP-004/index.html | 98 +
.../standards/AEP-004/one_page/index.html | 79 +
.../standards/AEP-004/schemas/index.html | 85 +
.../standards/AEP-004/templates/index.html | 79 +
.../standards/AEP-004/tools/index.html | 81 +
.../standards/AEP-005/conformance/index.html | 77 +
.../standards/AEP-005/examples/index.html | 92 +
.../standards/AEP-005/figures/index.html | 80 +
.../AEP-005/implementation/index.html | 80 +
.../standards/AEP-005/index.html | 98 +
.../standards/AEP-005/one_page/index.html | 79 +
.../standards/AEP-005/schemas/index.html | 88 +
.../standards/AEP-005/templates/index.html | 85 +
.../standards/AEP-005/tools/index.html | 82 +
.../standards/AEP-006/conformance/index.html | 77 +
.../standards/AEP-006/examples/index.html | 87 +
.../standards/AEP-006/figures/index.html | 80 +
.../AEP-006/implementation/index.html | 79 +
.../standards/AEP-006/index.html | 98 +
.../standards/AEP-006/one_page/index.html | 79 +
.../standards/AEP-006/schemas/index.html | 85 +
.../standards/AEP-006/templates/index.html | 85 +
.../standards/AEP-006/tools/index.html | 81 +
.../standards/AEP-007/conformance/index.html | 77 +
.../standards/AEP-007/examples/index.html | 84 +
.../standards/AEP-007/figures/index.html | 80 +
.../AEP-007/implementation/index.html | 83 +
.../standards/AEP-007/index.html | 98 +
.../standards/AEP-007/one_page/index.html | 78 +
.../standards/AEP-007/schemas/index.html | 93 +
.../standards/AEP-007/templates/index.html | 85 +
.../standards/AEP-007/tools/index.html | 82 +
.../standards/AEP-008/conformance/index.html | 77 +
.../standards/AEP-008/examples/index.html | 84 +
.../standards/AEP-008/figures/index.html | 80 +
.../AEP-008/implementation/index.html | 80 +
.../standards/AEP-008/index.html | 98 +
.../standards/AEP-008/one_page/index.html | 79 +
.../standards/AEP-008/schemas/index.html | 87 +
.../standards/AEP-008/templates/index.html | 85 +
.../standards/AEP-008/tools/index.html | 81 +
.../standards/index.html | 46 +
.../start-here/index.html | 76 +
.../build-one-reusable-ai-workflow/index.html | 89 +
.../workflow/checkout-recovery/index.html | 290 +
.../index.html | 312 +
.../department-ai-permission-map/index.html | 347 +
.../index.html | 305 +
.../department-proof-room-lite/index.html | 322 +
.../index.html | 331 +
.../department-weekly-proof-review/index.html | 297 +
.../feedback-to-product-update/index.html | 268 +
.../workflow/idea-to-demand-engine/index.html | 258 +
.../workflow/index.html | 164 +
.../internal-approval-memo/index.html | 291 +
.../lead-magnet-email-sequence/index.html | 292 +
.../meeting-to-action-plan/index.html | 225 +
.../monthly-workflow-vault-drop/index.html | 279 +
.../workflow/offer-to-sales-page/index.html | 241 +
.../workflow/order-bump-builder/index.html | 256 +
.../workflow/partner-referral-kit/index.html | 280 +
.../post-purchase-onboarding/index.html | 282 +
.../proof-card-referral-loop/index.html | 252 +
.../index.html | 41 +
.../workflow/support-faq-triage/index.html | 260 +
.../workflow/team-pack-upsell/index.html | 288 +
.../team-sprint-facilitator/index.html | 294 +
.../workflow/weekly-growth-review/index.html | 251 +
.../index.html | 46 +
.../goalos-rsi-sprint-workshop/index.html | 46 +
site/ai-efficiency-score/index.html | 8 +-
site/app/goalos-cloud-mvp/README.md | 48 +-
site/app/goalos-cloud-mvp/index.html | 5 +-
site/app/goalos-cloud-mvp/site-manifest.json | 134 +-
site/assets/goalos-site-v2.css | 6 +-
site/assets/goalos-site-v2.js | 9 +-
site/autonomous-market-readiness.html | 7 +-
site/command-center/index.html | 48 +-
site/docs/index.html | 5 +-
site/enterprise-ops-proof.html | 7 +-
.../goalos-enterprise-rsi-pilot/index.html | 10 +-
.../build-one-reusable-ai-workflow/index.html | 5 +-
site/examples/checkout-recovery/index.html | 5 +-
.../index.html | 5 +-
.../department-ai-permission-map/index.html | 5 +-
.../index.html | 5 +-
.../department-proof-room-lite/index.html | 5 +-
.../index.html | 5 +-
.../department-weekly-proof-review/index.html | 5 +-
.../feedback-to-product-update/index.html | 5 +-
.../examples/idea-to-demand-engine/index.html | 5 +-
site/examples/index.html | 18 +-
.../internal-approval-memo/index.html | 5 +-
.../lead-magnet-email-sequence/index.html | 5 +-
.../meeting-to-action-plan/index.html | 5 +-
.../monthly-workflow-vault-drop/index.html | 5 +-
site/examples/offer-to-sales-page/index.html | 5 +-
site/examples/order-bump-builder/index.html | 5 +-
site/examples/partner-referral-kit/index.html | 5 +-
.../post-purchase-onboarding/index.html | 5 +-
.../proof-card-referral-loop/index.html | 5 +-
site/examples/support-faq-triage/index.html | 5 +-
site/examples/team-pack-upsell/index.html | 5 +-
.../team-sprint-facilitator/index.html | 5 +-
site/examples/weekly-growth-review/index.html | 5 +-
site/goalos-site-manifest-v2.json | 4818 +---
site/goalos-site-repair-v2-report.json | 466 +-
site/goalos/index.html | 8 +-
...home-before-checkout-recovery-example.html | 7 +-
site/home-before-demand-engine-example.html | 7 +-
...rtment-ai-correction-rollback-example.html | 7 +-
...-department-ai-permission-map-example.html | 7 +-
...partment-monthly-proof-report-example.html | 7 +-
...re-department-proof-room-lite-example.html | 7 +-
...rtment-public-safe-case-study-example.html | 7 +-
...epartment-weekly-proof-review-example.html | 7 +-
...re-feedback-to-product-update-example.html | 7 +-
...before-internal-approval-memo-example.html | 7 +-
...re-lead-magnet-email-sequence-example.html | 7 +-
.../home-before-meeting-workflow-example.html | 7 +-
...e-monthly-workflow-vault-drop-example.html | 7 +-
...me-before-offer-to-sales-page-example.html | 7 +-
...ome-before-order-bump-builder-example.html | 7 +-
...e-before-partner-referral-kit-example.html | 7 +-
...fore-post-purchase-onboarding-example.html | 7 +-
...fore-proof-card-referral-loop-example.html | 7 +-
...home-before-reusable-workflow-example.html | 7 +-
...ome-before-support-faq-triage-example.html | 7 +-
.../home-before-team-pack-upsell-example.html | 7 +-
...efore-team-sprint-facilitator-example.html | 7 +-
...e-before-weekly-growth-review-example.html | 7 +-
.../index.html | 18 +-
site/index.html | 67 +-
site/launch/index.html | 5 +-
site/legacy-command-center.html | 5 +-
.../goalos-recursive-workflow-os/index.html | 14 +-
site/pricing/index.html | 18 +-
site/production.html | 7 +-
site/products/ai-efficiency-sprint/index.html | 8 +-
.../department-proof-room-lite/index.html | 5 +-
.../index.html | 8 +-
.../index.html | 14 +-
site/products/goalos-cloud-mvp/index.html | 14 +-
.../goalos-enterprise-pilot/index.html | 5 +-
.../goalos-enterprise-rsi-pilot/index.html | 18 +-
.../index.html | 14 +-
.../goalos-proof-room-lite/index.html | 14 +-
site/products/goalos-rsi-lite/index.html | 14 +-
.../goalos-rsi-sprint-workshop/index.html | 14 +-
site/products/index.html | 48 +-
.../index.html | 8 +-
.../proof-page-template-pack/index.html | 5 +-
.../sme-ai-adoption-sprint/index.html | 8 +-
.../index.html | 8 +-
.../index.html | 8 +-
.../sovereign-nation-state/index.html | 8 +-
site/products/team-pack/index.html | 8 +-
site/products/workflow-vault/index.html | 5 +-
site/products/workshop/index.html | 8 +-
site/proof-room-lite/index.html | 5 +-
site/proofs/001-sovereign-swarm.html | 7 +-
site/proofs/002-evolution-tournament.html | 7 +-
.../003-recursive-evolution-ladder.html | 7 +-
site/proofs/004-corporate-rsi-dominion.html | 7 +-
.../005-enterprise-rsi-superorganism.html | 7 +-
...06-sovereign-enterprise-constellation.html | 7 +-
...07-sovereign-enterprise-proof-economy.html | 7 +-
site/proofs/008-sovereign-domain-atlas.html | 7 +-
...09-sovereign-kardashev-capital-engine.html | 7 +-
.../010-proof-carrying-intelligence.html | 7 +-
site/proofs/011-the-proof-loop.html | 7 +-
site/proofs/index.html | 7 +-
...lti-agent-market-command-center-proof.html | 5 +-
...irst-blockchain-capital-machine-proof.html | 5 +-
...first-governance-capital-engine-proof.html | 5 +-
site/rsi-capability-command-center-proof.html | 5 +-
...i-capability-command-center-v17-proof.html | 7 +-
...si-capital-to-capability-engine-proof.html | 7 +-
site/rsi-cloudops-proof.html | 7 +-
site/rsi-corporate-os-proof.html | 7 +-
site/rsi-cyberdefense-proof.html | 7 +-
site/rsi-marketplace-flywheel-proof.html | 5 +-
site/rsi-metamaterials-discovery-proof.html | 7 +-
...i-proof-forge-meta-coordination-proof.html | 7 +-
.../rsi-revenue-experiment-factory-proof.html | 5 +-
site/rsi-silicon-verification-proof.html | 7 +-
site/rsi-unit-economics-proof.html | 5 +-
site/services/index.html | 33 +-
site/site-map/index.html | 18 +-
site/sitemap.xml | 240 +-
site/standards/AEP-001/figures/index.html | 7 +-
site/standards/AEP-001/index.html | 7 +-
site/standards/AEP-002/conformance/index.html | 7 +-
site/standards/AEP-002/examples/index.html | 7 +-
site/standards/AEP-002/figures/index.html | 7 +-
site/standards/AEP-002/index.html | 7 +-
site/standards/AEP-002/schemas/index.html | 7 +-
site/standards/AEP-002/templates/index.html | 7 +-
site/standards/AEP-002/tools/index.html | 7 +-
site/standards/AEP-003/conformance/index.html | 7 +-
site/standards/AEP-003/examples/index.html | 7 +-
site/standards/AEP-003/figures/index.html | 7 +-
.../AEP-003/implementation/index.html | 7 +-
site/standards/AEP-003/index.html | 7 +-
site/standards/AEP-003/one_page/index.html | 7 +-
site/standards/AEP-003/schemas/index.html | 7 +-
site/standards/AEP-003/templates/index.html | 7 +-
site/standards/AEP-003/tools/index.html | 7 +-
site/standards/AEP-004/conformance/index.html | 7 +-
site/standards/AEP-004/examples/index.html | 7 +-
site/standards/AEP-004/figures/index.html | 7 +-
.../AEP-004/implementation/index.html | 7 +-
site/standards/AEP-004/index.html | 7 +-
site/standards/AEP-004/one_page/index.html | 7 +-
site/standards/AEP-004/schemas/index.html | 7 +-
site/standards/AEP-004/templates/index.html | 7 +-
site/standards/AEP-004/tools/index.html | 7 +-
site/standards/AEP-005/conformance/index.html | 7 +-
site/standards/AEP-005/examples/index.html | 7 +-
site/standards/AEP-005/figures/index.html | 7 +-
.../AEP-005/implementation/index.html | 7 +-
site/standards/AEP-005/index.html | 7 +-
site/standards/AEP-005/one_page/index.html | 7 +-
site/standards/AEP-005/schemas/index.html | 7 +-
site/standards/AEP-005/templates/index.html | 7 +-
site/standards/AEP-005/tools/index.html | 7 +-
site/standards/AEP-006/conformance/index.html | 7 +-
site/standards/AEP-006/examples/index.html | 7 +-
site/standards/AEP-006/figures/index.html | 7 +-
.../AEP-006/implementation/index.html | 7 +-
site/standards/AEP-006/index.html | 7 +-
site/standards/AEP-006/one_page/index.html | 7 +-
site/standards/AEP-006/schemas/index.html | 7 +-
site/standards/AEP-006/templates/index.html | 7 +-
site/standards/AEP-006/tools/index.html | 7 +-
site/standards/AEP-007/conformance/index.html | 7 +-
site/standards/AEP-007/examples/index.html | 7 +-
site/standards/AEP-007/figures/index.html | 7 +-
.../AEP-007/implementation/index.html | 7 +-
site/standards/AEP-007/index.html | 7 +-
site/standards/AEP-007/one_page/index.html | 7 +-
site/standards/AEP-007/schemas/index.html | 7 +-
site/standards/AEP-007/templates/index.html | 7 +-
site/standards/AEP-007/tools/index.html | 7 +-
site/standards/AEP-008/conformance/index.html | 7 +-
site/standards/AEP-008/examples/index.html | 7 +-
site/standards/AEP-008/figures/index.html | 7 +-
.../AEP-008/implementation/index.html | 7 +-
site/standards/AEP-008/index.html | 7 +-
site/standards/AEP-008/one_page/index.html | 7 +-
site/standards/AEP-008/schemas/index.html | 7 +-
site/standards/AEP-008/templates/index.html | 7 +-
site/standards/AEP-008/tools/index.html | 7 +-
site/standards/index.html | 18 +-
site/start-here/index.html | 48 +-
.../build-one-reusable-ai-workflow/index.html | 7 +-
site/workflow/checkout-recovery/index.html | 5 +-
.../index.html | 5 +-
.../department-ai-permission-map/index.html | 5 +-
.../index.html | 5 +-
.../department-proof-room-lite/index.html | 5 +-
.../index.html | 5 +-
.../department-weekly-proof-review/index.html | 5 +-
.../feedback-to-product-update/index.html | 5 +-
.../workflow/idea-to-demand-engine/index.html | 5 +-
site/workflow/index.html | 5 +-
.../internal-approval-memo/index.html | 5 +-
.../lead-magnet-email-sequence/index.html | 5 +-
.../meeting-to-action-plan/index.html | 5 +-
.../monthly-workflow-vault-drop/index.html | 5 +-
site/workflow/offer-to-sales-page/index.html | 5 +-
site/workflow/order-bump-builder/index.html | 5 +-
site/workflow/partner-referral-kit/index.html | 5 +-
.../post-purchase-onboarding/index.html | 5 +-
.../proof-card-referral-loop/index.html | 5 +-
.../index.html | 5 +-
site/workflow/support-faq-triage/index.html | 5 +-
site/workflow/team-pack-upsell/index.html | 5 +-
.../team-sprint-facilitator/index.html | 5 +-
site/workflow/weekly-growth-review/index.html | 5 +-
.../index.html | 14 +-
.../goalos-rsi-sprint-workshop/index.html | 14 +-
430 files changed, 53633 insertions(+), 6657 deletions(-)
create mode 100644 .github/workflows/refresh-complete-goalos-public-site.yml
create mode 100644 docs/GOALOS_CLOUD_MVP_0_2.md
create mode 100644 docs/GOALOS_COMMERCIALIZATION_STATUS.md
create mode 100644 docs/GOALOS_PUBLIC_SITE_REPAIR.md
create mode 100644 docs/GOALOS_REPO_AUDIT.md
create mode 100755 scripts/check_no_paid_artifacts.py
create mode 100755 scripts/validate_goalos_site_v2.py
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/404.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/ai-efficiency-score/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/app/goalos-cloud-mvp/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/autonomous-market-readiness.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/command-center/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/docs/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/enterprise-ops-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/enterprise/goalos-enterprise-rsi-pilot/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/build-one-reusable-ai-workflow/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/checkout-recovery/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/department-ai-correction-rollback/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/department-ai-permission-map/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/department-monthly-proof-report/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/department-proof-room-lite/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/department-public-safe-case-study/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/department-weekly-proof-review/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/feedback-to-product-update/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/idea-to-demand-engine/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/internal-approval-memo/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/lead-magnet-email-sequence/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/meeting-to-action-plan/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/monthly-workflow-vault-drop/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/offer-to-sales-page/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/order-bump-builder/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/partner-referral-kit/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/post-purchase-onboarding/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/proof-card-referral-loop/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/support-faq-triage/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/team-pack-upsell/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/team-sprint-facilitator/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/examples/weekly-growth-review/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/goalos/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-checkout-recovery-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-demand-engine-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-department-ai-correction-rollback-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-department-ai-permission-map-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-department-monthly-proof-report-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-department-proof-room-lite-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-department-public-safe-case-study-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-department-weekly-proof-review-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-feedback-to-product-update-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-internal-approval-memo-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-lead-magnet-email-sequence-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-meeting-workflow-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-monthly-workflow-vault-drop-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-offer-to-sales-page-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-order-bump-builder-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-partner-referral-kit-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-post-purchase-onboarding-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-proof-card-referral-loop-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-reusable-workflow-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-support-faq-triage-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-team-pack-upsell-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-team-sprint-facilitator-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/home-before-weekly-growth-review-example.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/implementation/goalos-proof-room-implementation-sprint/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/launch/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/legacy-command-center.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/platform/goalos-recursive-workflow-os/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/pricing/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/production.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/ai-efficiency-sprint/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/department-proof-room-lite/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/enterprise-proof-room-agent-control-plane/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/goalos-ai-efficiency-sprint-kit/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/goalos-cloud-mvp/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/goalos-enterprise-pilot/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/goalos-enterprise-rsi-pilot/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/goalos-proof-room-implementation-sprint/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/goalos-proof-room-lite/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/goalos-rsi-lite/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/goalos-rsi-sprint-workshop/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/nation-state-ai-leverage-proof-infrastructure/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/proof-page-template-pack/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/sme-ai-adoption-sprint/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/sovereign-country-ai-operating-system/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/sovereign-empire-ai-operating-system/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/sovereign-nation-state/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/team-pack/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/workflow-vault/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/products/workshop/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proof-room-lite/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/001-sovereign-swarm.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/002-evolution-tournament.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/003-recursive-evolution-ladder.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/004-corporate-rsi-dominion.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/005-enterprise-rsi-superorganism.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/006-sovereign-enterprise-constellation.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/007-sovereign-enterprise-proof-economy.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/008-sovereign-domain-atlas.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/009-sovereign-kardashev-capital-engine.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/010-proof-carrying-intelligence.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/011-the-proof-loop.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/proofs/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-adversarial-multi-agent-market-command-center-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-ai-first-blockchain-capital-machine-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-ai-first-governance-capital-engine-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-capability-command-center-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-capability-command-center-v17-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-capital-to-capability-engine-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-cloudops-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-corporate-os-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-cyberdefense-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-marketplace-flywheel-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-metamaterials-discovery-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-proof-forge-meta-coordination-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-revenue-experiment-factory-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-silicon-verification-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/rsi-unit-economics-proof.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/services/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/site-map/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-001/figures/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-001/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-002/conformance/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-002/examples/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-002/figures/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-002/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-002/schemas/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-002/templates/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-002/tools/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-003/conformance/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-003/examples/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-003/figures/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-003/implementation/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-003/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-003/one_page/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-003/schemas/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-003/templates/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-003/tools/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-004/conformance/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-004/examples/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-004/figures/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-004/implementation/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-004/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-004/one_page/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-004/schemas/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-004/templates/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-004/tools/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-005/conformance/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-005/examples/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-005/figures/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-005/implementation/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-005/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-005/one_page/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-005/schemas/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-005/templates/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-005/tools/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-006/conformance/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-006/examples/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-006/figures/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-006/implementation/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-006/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-006/one_page/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-006/schemas/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-006/templates/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-006/tools/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-007/conformance/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-007/examples/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-007/figures/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-007/implementation/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-007/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-007/one_page/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-007/schemas/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-007/templates/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-007/tools/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-008/conformance/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-008/examples/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-008/figures/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-008/implementation/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-008/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-008/one_page/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-008/schemas/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-008/templates/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/AEP-008/tools/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/standards/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/start-here/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/build-one-reusable-ai-workflow/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/checkout-recovery/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/department-ai-correction-rollback/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/department-ai-permission-map/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/department-monthly-proof-report/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/department-proof-room-lite/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/department-public-safe-case-study/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/department-weekly-proof-review/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/feedback-to-product-update/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/idea-to-demand-engine/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/internal-approval-memo/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/lead-magnet-email-sequence/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/meeting-to-action-plan/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/monthly-workflow-vault-drop/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/offer-to-sales-page/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/order-bump-builder/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/partner-referral-kit/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/post-purchase-onboarding/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/proof-card-referral-loop/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/rsi-lite-self-improving-workflows/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/support-faq-triage/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/team-pack-upsell/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/team-sprint-facilitator/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workflow/weekly-growth-review/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workshop/goalos-proof-room-implementation-sprint/index.html
create mode 100644 site/_archive/before_unified_shell_v2_2026-06-07/workshop/goalos-rsi-sprint-workshop/index.html
diff --git a/.github/workflows/build-goalos-cloud-mvp-v0-2.yml b/.github/workflows/build-goalos-cloud-mvp-v0-2.yml
index 6a3ec112..d88b7b7a 100644
--- a/.github/workflows/build-goalos-cloud-mvp-v0-2.yml
+++ b/.github/workflows/build-goalos-cloud-mvp-v0-2.yml
@@ -4,197 +4,46 @@ on:
workflow_dispatch:
permissions:
- contents: write
+ contents: read
pages: write
id-token: write
concurrency:
- group: build-goalos-cloud-mvp-v02
+ group: goalos-pages
cancel-in-progress: false
jobs:
- build-goalos-mvp-v02:
- name: Build GoalOS Cloud MVP 0.2
+ mvp-test-and-deploy:
runs-on: ubuntu-latest
-
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
steps:
- - name: Check out repository
+ - name: Checkout
uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Generate GoalOS Cloud MVP v0.2 files
- id: generate
- shell: bash
+ - name: Detect site root
+ id: root
run: |
- set -euo pipefail
- WEB_ROOT="site"
- if [ ! -d "$WEB_ROOT" ] && [ -d "public" ]; then WEB_ROOT="public"; fi
- mkdir -p "$WEB_ROOT"
- echo "web_root=$WEB_ROOT" >> "$GITHUB_OUTPUT"
- cat > "$RUNNER_TEMP/generate_goalos_cloud_mvp_v02.py" <<'PY'
-
- from pathlib import Path
- import re, json, hashlib
-
- WEB_ROOT = Path("site")
- if not WEB_ROOT.exists() and Path("public").exists():
- WEB_ROOT = Path("public")
- WEB_ROOT.mkdir(parents=True, exist_ok=True)
- (WEB_ROOT / ".nojekyll").write_text("", encoding="utf-8")
-
- APP = WEB_ROOT / "app" / "goalos-cloud-mvp"
- ASSETS = APP / "assets"
- TESTS = APP / "tests"
- SCHEMAS = APP / "schemas"
- DOCS = APP / "docs"
- for d in [ASSETS, TESTS, SCHEMAS, DOCS]:
- d.mkdir(parents=True, exist_ok=True)
-
- (ASSETS / "enterprise-core.mjs").write_text('export const DATA_CLASSES = ["public", "internal", "confidential", "restricted"];\n\nexport const DEMO_CASES = [\n { id: "case_refund_001", dataClass: "internal", type: "refund", title: "Refund / access issue", input: "I bought the digital kit but cannot access the files. Can I get a refund?", expected: ["digital product terms", "technical access exception", "human review"] },\n { id: "case_refund_002", dataClass: "internal", type: "refund", title: "Changed mind after download", input: "I downloaded the product but changed my mind. Can you refund me?", expected: ["final sale boundary", "no legal advice", "human review"] },\n { id: "case_access_003", dataClass: "internal", type: "access", title: "Missing file", input: "The ZIP opens but one file seems missing.", expected: ["access support", "replacement path"] },\n { id: "case_claims_004", dataClass: "public", type: "claims", title: "ROI guarantee question", input: "Will this guarantee I save 10 hours per week or make more revenue?", expected: ["no ROI guarantee", "safe claim boundary"] },\n { id: "case_fr_005", dataClass: "internal", type: "onboarding", title: "French beginner", input: "Je suis débutant. Quelle est la première étape pour utiliser RSI Lite?", expected: ["French guidance", "first step"] },\n { id: "case_security_006", dataClass: "confidential", type: "security", title: "Confidential upload blocked", input: "Here is an internal customer file with private details. Can I paste it into a public model?", expected: ["block external provider", "escalation"] }\n];\n\nexport function createInitialState() {\n const workflow = createWorkflowV1();\n return {\n organization: { id: "org_demo", name: "GoalOS Demo Enterprise", region: "CA", plan: "enterprise-pilot" },\n workspace: { id: "ws_demo", name: "Customer Support Proof Room", organizationId: "org_demo" },\n users: [\n { id: "user_owner", name: "Owner", role: "Owner" },\n { id: "user_reviewer", name: "Reviewer", role: "Reviewer" },\n { id: "user_runner", name: "Runner", role: "Runner" }\n ],\n policies: [defaultPolicy()],\n modelProviders: [\n { id: "provider_local", name: "GoalOS Local Demo Model", classesAllowed: ["public", "internal"], enabled: true },\n { id: "provider_restricted", name: "Restricted Internal Model Placeholder", classesAllowed: ["public", "internal", "confidential"], enabled: true }\n ],\n memoryItems: [\n { id: "mem_terms", type: "product_terms", status: "approved", scope: "workspace", title: "Digital product terms", content: "Digital product with instant access. Sales are final once delivered except where required by law or for duplicate charges / technical access failures.", approvedBy: "user_owner" },\n { id: "mem_boundary", type: "claim_boundary", status: "approved", scope: "workspace", title: "No guaranteed results", content: "No guaranteed income, ROI, productivity, compliance, safety, or business results. Human review required.", approvedBy: "user_owner" },\n { id: "mem_voice", type: "brand_voice", status: "approved", scope: "workspace", title: "Support voice", content: "Calm, clear, direct, practical, no hype.", approvedBy: "user_owner" }\n ],\n workflows: [workflow],\n activeWorkflowVersionId: workflow.versions[0].id,\n runs: [],\n evaluations: [],\n proofRecords: [],\n benchmarkRuns: [],\n improvementProposals: [],\n approvals: [],\n deployments: [],\n rollbackEvents: [],\n auditLogs: [audit("system", "state_initialized", "GoalOS Cloud MVP v0.2 initialized.")]\n };\n}\n\nexport function defaultPolicy() {\n return {\n id: "policy_default",\n name: "Default enterprise-safe pilot policy",\n noModelSelfModification: true,\n humanApprovalRequiredFor: ["workflow_logic_change", "external_output", "confidential_data", "public_proof", "model_provider_change"],\n providerRestrictions: {\n public: ["provider_local", "provider_restricted"],\n internal: ["provider_local", "provider_restricted"],\n confidential: ["provider_restricted"],\n restricted: []\n },\n externalOutputRequiresReview: true,\n publicProofRequiresRedaction: true,\n noUnsupportedClaims: true,\n noHiddenMemoryUpdates: true,\n noUnapprovedToolCalls: true\n };\n}\n\nexport function audit(actor, action, detail, target = null) {\n return { id: "audit_" + cryptoId(), time: now(), actor, action, target, detail };\n}\n\nexport function createWorkflowV1() {\n return {\n id: "wf_support_reply",\n name: "Customer Support Reply Workflow",\n owner: "user_owner",\n riskLevel: "medium",\n productionVersionId: "wfv_1_0_0",\n versions: [{\n id: "wfv_1_0_0",\n version: "1.0.0",\n status: "production-demo",\n author: "GoalOS",\n timestamp: now(),\n changeSummary: "Initial support reply workflow.",\n reasonForChange: "Baseline workflow.",\n riskLevel: "medium",\n approvalStatus: "approved-demo",\n benchmarkScore: null,\n rollbackOption: null,\n definition: {\n goal: "Draft helpful customer support replies for digital product buyers.",\n context: [\n "Buyer may be non-technical.",\n "Products are digital educational products.",\n "Support is limited to access issues, duplicate charges, missing files, or corrupted files."\n ],\n rules: [\n "Be calm, clear, and helpful.",\n "Do not guarantee income, ROI, productivity, compliance, safety, or business results.",\n "Do not provide legal, financial, medical, employment, security, tax, or regulatory advice.",\n "If uncertain, mark the answer for human review."\n ],\n memoryRefs: ["mem_terms", "mem_boundary", "mem_voice"],\n inputs: [{ key: "customer_message", type: "text", required: true }],\n steps: [\n "Classify the buyer issue.",\n "Draft a short answer.",\n "Add one next step.",\n "Add support boundary when relevant."\n ],\n outputFormat: "support_reply",\n checks: [\n "No ROI or income guarantee.",\n "No legal/compliance claim.",\n "Tone is calm and useful.",\n "Uncertainty is marked."\n ],\n proofRequirements: ["claims_made", "claims_avoided", "checks_performed", "review_status", "next_improvement"],\n humanReview: { requiredWhen: ["refund", "billing", "legal", "privacy", "confidential_data"] },\n modelSettings: { providerId: "provider_local", model: "goalos-local-demo-model" },\n toolsAllowed: []\n }\n }]\n };\n}\n\nexport function latestVersion(workflow) {\n return workflow.versions[0];\n}\n\nexport function findActiveVersion(state) {\n for (const w of state.workflows) {\n const v = w.versions.find(x => x.id === state.activeWorkflowVersionId);\n if (v) return { workflow: w, version: v };\n }\n return { workflow: state.workflows[0], version: latestVersion(state.workflows[0]) };\n}\n\nexport function policyDecision(state, caseData, version) {\n const policy = state.policies[0];\n const providerId = version.definition.modelSettings.providerId;\n const allowedProviders = policy.providerRestrictions[caseData.dataClass] || [];\n const allowed = allowedProviders.includes(providerId);\n const reasons = [];\n if (!allowed) reasons.push(`Provider ${providerId} is not allowed for ${caseData.dataClass} data.`);\n if (caseData.dataClass === "confidential" || caseData.dataClass === "restricted") reasons.push("Human review required for sensitive data.");\n if (["refund", "billing", "security"].includes(caseData.type)) reasons.push("Human review required by workflow policy.");\n return {\n allowed,\n blocked: !allowed,\n humanReviewRequired: reasons.length > 0,\n reasons\n };\n}\n\nfunction memoryText(state, version) {\n return version.definition.memoryRefs.map(id => state.memoryItems.find(m => m.id === id)).filter(Boolean).map(m => m.content).join("\\n");\n}\n\nfunction hasRefundPolicyRule(version) {\n const def = version.definition;\n return [...def.rules, ...def.steps, ...def.checks].join(" ").toLowerCase().includes("refund") &&\n [...def.rules, ...def.steps, ...def.checks].join(" ").toLowerCase().includes("policy");\n}\n\nexport function executeWorkflow(state, caseData, actor = "user_runner") {\n const { workflow, version } = findActiveVersion(state);\n const policy = policyDecision(state, caseData, version);\n const run = {\n id: "run_" + cryptoId(),\n organizationId: state.organization.id,\n workspaceId: state.workspace.id,\n workflowId: workflow.id,\n workflowName: workflow.name,\n workflowVersionId: version.id,\n workflowVersion: version.version,\n actor,\n providerId: version.definition.modelSettings.providerId,\n model: version.definition.modelSettings.model,\n input: { caseId: caseData.id, title: caseData.title, dataClass: caseData.dataClass, type: caseData.type, summary: caseData.input.slice(0, 160) },\n status: policy.blocked ? "blocked_by_policy" : "completed",\n policyDecision: policy,\n output: "",\n reasoningSummary: "",\n warnings: [],\n assumptions: ["Demo input is treated as sanitized unless marked confidential."],\n uncertainty: [],\n modelMetadata: { provider: version.definition.modelSettings.providerId, model: version.definition.modelSettings.model, latencyMs: 140, costUsd: 0 },\n createdAt: now()\n };\n\n if (policy.blocked) {\n run.output = "This input is blocked by policy for the selected model provider. Use an approved internal provider or sanitized data.";\n run.warnings.push("Policy blocked execution.");\n run.reasoningSummary = "Provider/data-class policy prevented execution.";\n return run;\n }\n\n const refundAware = hasRefundPolicyRule(version);\n const memory = memoryText(state, version);\n if (caseData.type === "refund" && refundAware) {\n run.output = `Thanks for reaching out. I can help check the access or refund-related issue.\\n\\nBecause this is a digital educational product with instant access, sales are generally final once delivered, except where required by law or for duplicate charges / technical access failures.\\n\\nNext step: please send the order email and a screenshot or description of the access problem so support can check whether this is a technical access issue.\\n\\nHuman review required: refund/access cases should be reviewed before a final decision is sent.`;\n run.reasoningSummary = "The issue was classified as refund/access. The workflow used approved digital product terms and added human review.";\n run.uncertainty.push("Final refund/access decision requires human review.");\n } else if (caseData.type === "refund") {\n run.output = "Thanks for reaching out. Please send your order email and we will review the situation. We will do our best to help.";\n run.reasoningSummary = "The workflow recognized a support request but did not apply a specific refund/access policy step.";\n run.warnings.push("Refund/access policy boundary missing.");\n } else if (caseData.type === "claims") {\n run.output = "GoalOS is an educational workflow product. It can help you structure repeated AI work, but it does not guarantee income, ROI, savings, productivity, compliance, safety, or business results. The best next step is to use it on one repeated task and review the result.";\n run.reasoningSummary = "The workflow avoided unsupported ROI and productivity claims.";\n } else if (caseData.type === "onboarding" && /je suis|étape|débutant/i.test(caseData.input)) {\n run.output = "Bonjour — commencez par une seule tâche IA répétée. Ouvrez le guide Start Here, créez le flux v1.0, exécutez-le, notez-le, puis améliorez-le. La revue humaine reste requise avant toute utilisation importante.";\n run.reasoningSummary = "The buyer asked in French, so the output used French beginner guidance.";\n } else if (caseData.type === "security") {\n run.output = "Do not paste private or confidential customer data into an unapproved public AI tool. Use sanitized examples or an approved internal model/provider. Escalate to the workspace owner before proceeding.";\n run.reasoningSummary = "The case was security-sensitive and received a data-boundary response.";\n run.uncertainty.push("Security-sensitive issue requires review.");\n } else {\n run.output = "Thanks for reaching out. Please describe the access issue and include your order email. If a file is missing or corrupted, support can help with access or replacement.";\n run.reasoningSummary = "The workflow created a simple access-support response.";\n }\n run.memoryUsed = version.definition.memoryRefs;\n run.memoryInfluenceSummary = memory.slice(0, 240);\n return run;\n}\n\nexport function evaluateRun(state, run) {\n const caseData = DEMO_CASES.find(c => c.id === run.input.caseId);\n const { version } = state.workflows.flatMap(w => w.versions.map(v => ({ workflow: w, version: v }))).find(x => x.version.id === run.workflowVersionId) || findActiveVersion(state);\n const text = (run.output || "").toLowerCase();\n let subScores = { accuracy: 8, completeness: 8, clarity: 8, brandFit: 8, policy: 8, proofReadiness: 8 };\n const issues = [];\n const recommendedFixes = [];\n if (run.status === "blocked_by_policy") {\n subScores = { accuracy: 6, completeness: 7, clarity: 8, brandFit: 8, policy: 10, proofReadiness: 8 };\n issues.push("Execution blocked by policy.");\n }\n if (/guarantee.*(income|roi|save|productivity)|guaranteed/i.test(run.output)) {\n subScores.policy = 1;\n issues.push("Unsupported guarantee detected.");\n recommendedFixes.push("Remove unsupported guarantee language.");\n }\n if (caseData?.type === "refund") {\n if (!text.includes("digital educational product") || !text.includes("technical access")) {\n subScores.policy = 2;\n subScores.completeness = Math.max(0, subScores.completeness - 2);\n issues.push("Refund/access policy boundary missing or incomplete.");\n recommendedFixes.push("Add approved digital-product terms and technical-access exception language.");\n }\n if (!text.includes("human review")) {\n subScores.policy = Math.max(0, subScores.policy - 1);\n issues.push("Human review flag missing for refund/access issue.");\n recommendedFixes.push("Add human review flag for refund/access cases.");\n }\n }\n if (caseData?.type === "onboarding" && /je suis|étape|débutant/i.test(caseData.input) && !/bonjour|étape|revue humaine/i.test(run.output)) {\n subScores.clarity -= 3;\n issues.push("French buyer did not receive French-friendly guidance.");\n recommendedFixes.push("Add bilingual handling for French buyer questions.");\n }\n Object.keys(subScores).forEach(k => subScores[k] = Math.max(0, Math.min(10, subScores[k])));\n const overallScore = Math.round(Object.values(subScores).reduce((a,b)=>a+b,0) / Object.keys(subScores).length * 10) / 10;\n return {\n id: "eval_" + run.id,\n runId: run.id,\n workflowVersionId: run.workflowVersionId,\n workflowVersion: run.workflowVersion,\n overallScore,\n subScores,\n pass: overallScore >= 7.5 && !(caseData?.type === "refund" && subScores.policy < 7),\n severity: overallScore >= 8 ? "low" : overallScore >= 6.5 ? "medium" : "high",\n issues,\n recommendedFixes,\n confidence: 0.87,\n humanReviewNeeded: run.policyDecision.humanReviewRequired || issues.some(i => /refund|policy|blocked/i.test(i)),\n explanation: issues.length ? "Issues found; revise or review before external use." : "Evaluation passed demo threshold.",\n createdAt: now()\n };\n}\n\nexport function createProofRecord(state, run, evaluation) {\n return {\n id: "proof_" + run.id,\n organizationId: state.organization.id,\n workspaceId: state.workspace.id,\n workflowName: run.workflowName,\n workflowVersion: run.workflowVersion,\n inputSummary: run.input.summary,\n outputSummary: run.output.slice(0, 260) + (run.output.length > 260 ? "..." : ""),\n modelUsed: run.model,\n providerId: run.providerId,\n time: run.createdAt,\n user: run.actor,\n checksPerformed: Object.entries(evaluation.subScores).map(([k,v]) => `${k}: ${v}/10`),\n claimsMade: detectClaims(run.output),\n claimsAvoided: ["No ROI guarantee", "No productivity guarantee", "No compliance certification", "No autonomous sending claim", "No model self-modification claim"],\n evidenceUsed: ["Workflow definition", "Demo input", "Evaluation scorecard", "Memory retrieval log"],\n uncertaintyFlagged: run.uncertainty,\n reviewer: evaluation.humanReviewNeeded ? "human-review-required" : "not-required-for-demo",\n approvalStatus: evaluation.pass && !evaluation.humanReviewNeeded ? "approved-demo" : "needs-review",\n finalDecision: evaluation.pass ? "keep" : "revise",\n nextImprovementRecommendation: evaluation.recommendedFixes.join(" ") || "Monitor repeated runs.",\n publicSafe: true,\n createdAt: now()\n };\n}\n\nfunction detectClaims(output) {\n const claims = [];\n const t = output.toLowerCase();\n if (t.includes("digital educational product")) claims.push("Digital product terms explained.");\n if (t.includes("human review")) claims.push("Human review requirement stated.");\n if (t.includes("does not guarantee")) claims.push("No guaranteed results boundary stated.");\n if (t.includes("do not paste")) claims.push("Sensitive-data boundary stated.");\n return claims;\n}\n\nexport function runBenchmark(state, versionId = state.activeWorkflowVersionId) {\n const found = findVersionById(state, versionId);\n if (!found) throw new Error("version not found");\n const runs = [], evaluations = [], proofs = [];\n for (const c of DEMO_CASES) {\n const stateWithVersion = { ...state, activeWorkflowVersionId: versionId };\n const run = executeWorkflow(stateWithVersion, c);\n const evaluation = evaluateRun(stateWithVersion, run);\n const proof = createProofRecord(stateWithVersion, run, evaluation);\n runs.push(run); evaluations.push(evaluation); proofs.push(proof);\n }\n const avgScore = round1(evaluations.reduce((a,e)=>a+e.overallScore,0) / evaluations.length);\n const passRate = Math.round(evaluations.filter(e=>e.pass).length / evaluations.length * 100);\n const refund = DEMO_CASES.filter(c=>c.type==="refund").length;\n const refundPass = evaluations.filter((e,i)=>DEMO_CASES[i].type==="refund" && e.subScores.policy >= 7).length;\n const refundPolicyCompliance = refund ? Math.round(refundPass/refund*100) : 100;\n return {\n id: "bench_" + cryptoId(),\n benchmarkSuiteId: "suite_support_reply",\n workflowVersionId: versionId,\n workflowVersion: found.version.version,\n avgScore,\n passRate,\n refundPolicyCompliance,\n caseCount: DEMO_CASES.length,\n runs, evaluations, proofRecords: proofs,\n createdAt: now()\n };\n}\n\nexport function detectFailurePattern(benchmark) {\n if (benchmark.refundPolicyCompliance < 90) {\n return {\n pattern: "refund_policy_failure",\n severity: "high",\n problem: `${100 - benchmark.refundPolicyCompliance}% of refund/access benchmark cases failed the policy check.`,\n evidence: { avgScore: benchmark.avgScore, passRate: benchmark.passRate, refundPolicyCompliance: benchmark.refundPolicyCompliance },\n diagnosis: "Workflow lacks a dedicated refund/access policy classification step before drafting.",\n recommendedChange: "Add policy classification, approved digital-product terms, and human-review flag for refund/access issues."\n };\n }\n if (benchmark.passRate < 80) {\n return {\n pattern: "general_quality_failure",\n severity: "medium",\n problem: `Only ${benchmark.passRate}% of benchmark cases passed.`,\n evidence: { avgScore: benchmark.avgScore, passRate: benchmark.passRate },\n diagnosis: "Workflow rules/checks are too generic.",\n recommendedChange: "Add task-specific checks and clearer output requirements."\n };\n }\n return {\n pattern: "stable",\n severity: "low",\n problem: "No major repeated failure pattern detected.",\n evidence: { avgScore: benchmark.avgScore, passRate: benchmark.passRate, refundPolicyCompliance: benchmark.refundPolicyCompliance },\n diagnosis: "Workflow is stable in current benchmark.",\n recommendedChange: "Monitor more runs."\n };\n}\n\nexport function proposeImprovement(state, benchmark) {\n const found = findVersionById(state, benchmark.workflowVersionId);\n const pattern = detectFailurePattern(benchmark);\n const proposedDefinition = JSON.parse(JSON.stringify(found.version.definition));\n if (pattern.pattern === "refund_policy_failure") {\n proposedDefinition.rules.push("If the issue involves refund, cancellation, billing, access failure, or policy uncertainty, use approved digital-product terms and flag for human review before final decision.");\n proposedDefinition.steps = [\n "Classify the buyer issue.",\n "If refund/access/billing/policy issue, classify policy sensitivity before drafting.",\n "Draft a short answer using approved policy boundaries.",\n "Add one next step.",\n "Add support boundary and human-review flag when relevant."\n ];\n proposedDefinition.checks.push("Refund/access policy boundary is present when relevant.");\n proposedDefinition.checks.push("Human review flag is present for refund/access or policy uncertainty.");\n }\n const proposedVersion = {\n id: "wfv_1_1_0_draft_" + cryptoId(),\n version: "1.1.0-draft",\n status: "draft",\n author: "Recursive Improvement Engine",\n timestamp: now(),\n changeSummary: pattern.recommendedChange,\n reasonForChange: pattern.problem,\n riskLevel: pattern.severity,\n approvalStatus: "pending",\n benchmarkScore: null,\n rollbackOption: found.version.id,\n definition: proposedDefinition\n };\n const tempState = JSON.parse(JSON.stringify(state));\n tempState.workflows[0].versions.unshift(proposedVersion);\n tempState.activeWorkflowVersionId = proposedVersion.id;\n const proposedBenchmark = runBenchmark(tempState, proposedVersion.id);\n return {\n id: "imp_" + cryptoId(),\n workflowId: found.workflow.id,\n fromVersionId: found.version.id,\n proposedVersion,\n problemDetected: pattern.problem,\n evidence: pattern.evidence,\n diagnosis: pattern.diagnosis,\n proposedChange: pattern.recommendedChange,\n expectedBenefit: "Improve refund/access policy compliance and reduce unsafe support replies.",\n potentialRisk: "Slightly longer replies and higher human-review load.",\n diff: [\n { field: "rules", action: "add", value: proposedDefinition.rules[proposedDefinition.rules.length - 1] },\n { field: "steps", action: "replace", value: "Add policy classification before drafting." },\n { field: "checks", action: "add", value: "Refund/access boundary + human review flag." }\n ],\n testResults: { avgScore: proposedBenchmark.avgScore, passRate: proposedBenchmark.passRate, refundPolicyCompliance: proposedBenchmark.refundPolicyCompliance },\n benchmarkComparison: {\n current: { version: found.version.version, avgScore: benchmark.avgScore, passRate: benchmark.passRate, refundPolicyCompliance: benchmark.refundPolicyCompliance },\n proposed: { version: proposedVersion.version, avgScore: proposedBenchmark.avgScore, passRate: proposedBenchmark.passRate, refundPolicyCompliance: proposedBenchmark.refundPolicyCompliance }\n },\n rollbackPlan: `Restore workflow version ${found.version.version} if quality drops.`,\n approvalRequirement: "Human reviewer approval required before deployment.",\n deploymentRecommendation: "Approve canary after review.",\n status: "pending-approval",\n createdAt: now()\n };\n}\n\nexport function approveImprovement(state, proposal, reviewer = "user_reviewer") {\n const workflow = state.workflows.find(w => w.id === proposal.workflowId);\n const approvedVersion = JSON.parse(JSON.stringify(proposal.proposedVersion));\n approvedVersion.id = "wfv_1_1_0";\n approvedVersion.version = "1.1.0";\n approvedVersion.status = "approved-canary";\n approvedVersion.approvalStatus = "approved";\n approvedVersion.timestamp = now();\n workflow.versions.unshift(approvedVersion);\n workflow.productionVersionId = approvedVersion.id;\n state.activeWorkflowVersionId = approvedVersion.id;\n proposal.status = "approved";\n const approval = {\n id: "approval_" + cryptoId(),\n proposalId: proposal.id,\n reviewer,\n decision: "approved-canary",\n comments: "Approved after benchmark comparison. Human review remains required for refund/access outputs.",\n rollbackTargetVersionId: proposal.fromVersionId,\n createdAt: now()\n };\n const deployment = {\n id: "dep_" + cryptoId(),\n workflowId: workflow.id,\n workflowVersionId: approvedVersion.id,\n environment: "canary-demo",\n status: "deployed",\n deployedBy: reviewer,\n rollbackTargetVersionId: proposal.fromVersionId,\n monitoringRule: "Monitor refund-policy compliance and pass rate.",\n createdAt: now()\n };\n return { approval, deployment, approvedVersion };\n}\n\nexport function rollback(state, targetVersionId = "wfv_1_0_0", actor = "user_reviewer") {\n const workflow = state.workflows[0];\n const target = workflow.versions.find(v => v.id === targetVersionId);\n if (!target) throw new Error("rollback target not found");\n workflow.productionVersionId = targetVersionId;\n state.activeWorkflowVersionId = targetVersionId;\n const event = {\n id: "rb_" + cryptoId(),\n workflowId: workflow.id,\n toVersionId: targetVersionId,\n reason: "Manual rollback target selected in demo.",\n triggeredBy: actor,\n status: "complete",\n createdAt: now()\n };\n state.rollbackEvents.unshift(event);\n return event;\n}\n\nexport function buildProofGraph(state) {\n const nodes = [];\n const edges = [];\n for (const workflow of state.workflows) {\n nodes.push({ id: workflow.id, type: "workflow", label: workflow.name });\n for (const version of workflow.versions) {\n nodes.push({ id: version.id, type: "workflow_version", label: version.version });\n edges.push({ from: workflow.id, to: version.id, type: "has_version" });\n }\n }\n for (const run of state.runs) {\n nodes.push({ id: run.id, type: "run", label: run.input.title || run.id });\n edges.push({ from: run.workflowVersionId, to: run.id, type: "produced_run" });\n }\n for (const evaluation of state.evaluations) {\n nodes.push({ id: evaluation.id, type: "evaluation", label: String(evaluation.overallScore) });\n edges.push({ from: evaluation.runId, to: evaluation.id, type: "evaluated_by" });\n }\n for (const proof of state.proofRecords) {\n nodes.push({ id: proof.id, type: "proof", label: proof.finalDecision });\n edges.push({ from: proof.id.replace("proof_", ""), to: proof.id, type: "produced_proof" });\n }\n for (const proposal of state.improvementProposals) {\n nodes.push({ id: proposal.id, type: "improvement_proposal", label: proposal.status });\n edges.push({ from: proposal.fromVersionId, to: proposal.id, type: "proposed_from" });\n }\n for (const approval of state.approvals) {\n nodes.push({ id: approval.id, type: "approval", label: approval.decision });\n edges.push({ from: approval.proposalId, to: approval.id, type: "approved_by" });\n }\n return { nodes, edges, createdAt: now() };\n}\n\nexport function createPublicSafeProofCard(state) {\n const before = state.benchmarkRuns.find(b => b.workflowVersion === "1.0.0");\n const after = state.benchmarkRuns.find(b => b.workflowVersion === "1.1.0");\n return {\n title: "GoalOS Public-Safe Proof Card 001",\n workflowFamily: "Customer Support Reply Workflow",\n summary: "A repeated support workflow was run, scored, proven, diagnosed, improved, approved, versioned, and re-run.",\n before: before ? { version: before.workflowVersion, avgScore: before.avgScore, passRate: before.passRate, refundPolicyCompliance: before.refundPolicyCompliance } : null,\n after: after ? { version: after.workflowVersion, avgScore: after.avgScore, passRate: after.passRate, refundPolicyCompliance: after.refundPolicyCompliance } : null,\n claimsAvoided: ["No ROI guarantee", "No productivity guarantee", "No compliance certification", "No autonomous sending claim", "No model self-modification claim"],\n publicSafe: true,\n note: "Private customer details, exact messages, and internal policies removed. Human review remains required.",\n createdAt: now()\n };\n}\n\nexport function findVersionById(state, id) {\n for (const workflow of state.workflows) {\n const version = workflow.versions.find(v => v.id === id);\n if (version) return { workflow, version };\n }\n return null;\n}\n\nfunction cryptoId() {\n return Math.random().toString(16).slice(2, 10) + Date.now().toString(16).slice(-5);\n}\nfunction now() {\n return new Date().toISOString();\n}\nfunction round1(n) {\n return Math.round(n * 10) / 10;\n}\n', encoding="utf-8")
- (ASSETS / "app.js").write_text('import {\n DEMO_CASES,\n createInitialState,\n executeWorkflow,\n evaluateRun,\n createProofRecord,\n runBenchmark,\n proposeImprovement,\n approveImprovement,\n rollback,\n buildProofGraph,\n createPublicSafeProofCard,\n findVersionById,\n audit\n} from "./enterprise-core.mjs";\n\nconst KEY = "goalos_cloud_mvp_v0_2_state";\nlet state = load();\n\nfunction load(){ try { return JSON.parse(localStorage.getItem(KEY)) || createInitialState(); } catch { return createInitialState(); } }\nfunction save(){ localStorage.setItem(KEY, JSON.stringify(state)); }\nfunction log(action, detail, target=null){ state.auditLogs.unshift(audit("demo-user", action, detail, target)); state.auditLogs = state.auditLogs.slice(0,160); save(); }\nfunction el(id){ return document.getElementById(id); }\nfunction pretty(x){ return JSON.stringify(x, null, 2); }\nfunction active(){ return findVersionById(state, state.activeWorkflowVersionId); }\nfunction activeCase(){ return DEMO_CASES.find(c => c.id === el("caseSelect")?.value) || DEMO_CASES[0]; }\n\nfunction tab(name){\n document.querySelectorAll("[data-tab]").forEach(b => b.classList.toggle("active", b.dataset.tab === name));\n document.querySelectorAll("[data-panel]").forEach(p => p.hidden = p.dataset.panel !== name);\n}\nfunction render(){\n renderMetrics(); renderGovernance(); renderStudio(); renderRun(); renderEval(); renderProof(); renderImprove(); renderVersions(); renderGraph(); renderAdmin();\n}\nfunction renderMetrics(){\n const latestBench = state.benchmarkRuns[0];\n const graph = buildProofGraph(state);\n el("metrics").innerHTML = [\n ["Versions", state.workflows[0].versions.length],\n ["Runs", state.runs.length],\n ["Proof", state.proofRecords.length],\n ["Proposals", state.improvementProposals.length],\n ["Graph nodes", graph.nodes.length],\n ["Latest pass", latestBench ? latestBench.passRate + "%" : "—"]\n ].map(([a,b]) => `${b} ${a}
`).join("");\n}\nfunction renderGovernance(){\n el("orgJson").textContent = pretty({ organization: state.organization, workspace: state.workspace, users: state.users });\n el("policyJson").textContent = pretty(state.policies[0]);\n el("memoryJson").textContent = pretty(state.memoryItems);\n el("modelJson").textContent = pretty(state.modelProviders);\n}\nfunction renderStudio(){\n const found = active();\n el("versionSelect").innerHTML = state.workflows[0].versions.map(v => `${v.version} — ${v.status} `).join("");\n el("workflowSummary").innerHTML = `${state.workflows[0].name} Active: ${found.version.version} · Status: ${found.version.status} · Risk: ${found.version.riskLevel}
${found.version.definition.goal}
`;\n el("workflowJson").value = pretty(found.version);\n}\nfunction renderRun(){\n el("caseSelect").innerHTML = DEMO_CASES.map(c => `${c.title} — ${c.type} — ${c.dataClass} `).join("");\n const latest = state.runs[0];\n el("latestRun").textContent = latest ? pretty(latest) : "No run yet.";\n}\nfunction renderEval(){\n const latest = state.evaluations[0];\n el("latestEval").textContent = latest ? pretty(latest) : "No evaluation yet.";\n}\nfunction renderProof(){\n el("proofRows").innerHTML = state.proofRecords.map(p => `${p.createdAt.slice(0,19).replace("T"," ")} ${p.workflowVersion} ${p.inputSummary} ${p.approvalStatus} ${p.finalDecision} `).join("") || `No proof records. `;\n el("latestProof").textContent = state.proofRecords[0] ? pretty(state.proofRecords[0]) : "No proof yet.";\n}\nfunction renderImprove(){\n el("latestBenchmark").textContent = state.benchmarkRuns[0] ? pretty(summaryBenchmark(state.benchmarkRuns[0])) : "No benchmark yet.";\n el("latestProposal").textContent = state.improvementProposals[0] ? pretty(state.improvementProposals[0]) : "No proposal yet.";\n const canApprove = state.improvementProposals[0]?.status === "pending-approval";\n el("approveBtn").disabled = !canApprove;\n}\nfunction renderVersions(){\n el("versionsRows").innerHTML = state.workflows[0].versions.map(v => `${v.version} ${v.status} ${v.approvalStatus} ${v.rollbackOption || "—"} ${v.changeSummary} `).join("");\n const b10 = state.benchmarkRuns.find(b => b.workflowVersion === "1.0.0");\n const b11 = state.benchmarkRuns.find(b => b.workflowVersion === "1.1.0");\n el("versionCompare").textContent = pretty({ v1_0: b10 ? summaryBenchmark(b10) : null, v1_1: b11 ? summaryBenchmark(b11) : null, rollbackTarget: "wfv_1_0_0" });\n}\nfunction renderGraph(){\n const graph = buildProofGraph(state);\n el("graphJson").textContent = pretty(graph);\n el("graphSummary").innerHTML = `${graph.nodes.length} nodes · ${graph.edges.length} edges
workflow → version → run → evaluation → proof → proposal → approval
`;\n}\nfunction renderAdmin(){\n el("auditLog").innerHTML = state.auditLogs.map(a => `${a.time.slice(0,19).replace("T"," ")} — ${a.action}: ${a.detail} `).join("");\n el("stateExport").value = pretty(state);\n}\nfunction summaryBenchmark(b){ return { version: b.workflowVersion, avgScore: b.avgScore, passRate: b.passRate, refundPolicyCompliance: b.refundPolicyCompliance, caseCount: b.caseCount, createdAt: b.createdAt }; }\n\nfunction runCase(){\n const run = executeWorkflow(state, activeCase());\n const ev = evaluateRun(state, run);\n const proof = createProofRecord(state, run, ev);\n state.runs.unshift(run); state.evaluations.unshift(ev); state.proofRecords.unshift(proof);\n log("workflow_run", `${run.workflowVersion} ${run.input.caseId} score ${ev.overallScore}`, run.id);\n save(); render(); tab("run");\n}\nfunction benchmark(){\n const b = runBenchmark(state, state.activeWorkflowVersionId);\n state.benchmarkRuns.unshift(b);\n state.runs.unshift(...b.runs.reverse()); state.evaluations.unshift(...b.evaluations.reverse()); state.proofRecords.unshift(...b.proofRecords.reverse());\n log("benchmark_run", `${b.workflowVersion}: pass ${b.passRate}%, refund policy ${b.refundPolicyCompliance}%`, b.id);\n save(); render(); tab("improve");\n}\nfunction proposal(){\n let b = state.benchmarkRuns.find(x => x.workflowVersionId === state.activeWorkflowVersionId);\n if (!b){ b = runBenchmark(state, state.activeWorkflowVersionId); state.benchmarkRuns.unshift(b); }\n const p = proposeImprovement(state, b);\n state.improvementProposals.unshift(p);\n log("improvement_proposal", p.problemDetected, p.id);\n save(); render(); tab("improve");\n}\nfunction approve(){\n const p = state.improvementProposals[0];\n if (!p || p.status !== "pending-approval") return;\n const res = approveImprovement(state, p);\n state.approvals.unshift(res.approval); state.deployments.unshift(res.deployment);\n const b = runBenchmark(state, res.approvedVersion.id);\n state.benchmarkRuns.unshift(b);\n state.runs.unshift(...b.runs.reverse()); state.evaluations.unshift(...b.evaluations.reverse()); state.proofRecords.unshift(...b.proofRecords.reverse());\n log("proposal_approved", `Approved ${res.approvedVersion.version} with rollback target ${res.approval.rollbackTargetVersionId}`, res.approval.id);\n save(); render(); tab("versions");\n}\nfunction doRollback(){\n const ev = rollback(state);\n log("rollback", "Rollback target selected: wfv_1_0_0", ev.id);\n save(); render(); tab("versions");\n}\nfunction download(filename, text, type="application/json"){\n const blob = new Blob([text], { type });\n const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = filename; a.click(); URL.revokeObjectURL(a.href);\n}\nfunction exportGraph(){ download("goalos_proof_graph.json", pretty(buildProofGraph(state))); log("export_graph", "Proof Graph exported."); }\nfunction proofCard(){ download("goalos_public_safe_proof_card_001.json", pretty(createPublicSafeProofCard(state))); log("export_public_safe_proof_card", "Public-safe proof card exported."); }\nfunction report(){\n const b10 = state.benchmarkRuns.find(b => b.workflowVersion === "1.0.0");\n const b11 = state.benchmarkRuns.find(b => b.workflowVersion === "1.1.0");\n const txt = `GoalOS Cloud MVP 0.2 Executive Proof Room Report\n\nLoop:\nRun → Score → Prove → Diagnose → Improve → Approve → Version → Monitor → Re-run\n\nWorkflow family:\nCustomer Support Reply Workflow\n\nv1.0:\n${b10 ? `${b10.passRate}% pass rate, ${b10.refundPolicyCompliance}% refund-policy compliance, average score ${b10.avgScore}` : "not run"}\n\nv1.1:\n${b11 ? `${b11.passRate}% pass rate, ${b11.refundPolicyCompliance}% refund-policy compliance, average score ${b11.avgScore}` : "not approved/run"}\n\nProof records:\n${state.proofRecords.length}\n\nSafe boundary:\nGoalOS does not modify AI models. It improves workflows around AI through instructions, checks, scorecards, proof records, versions, approvals, monitoring, and rollback.\n\nClaims avoided:\nNo ROI guarantee. No productivity guarantee. No compliance certification. No autonomous sending claim. No model self-modification claim.\n`;\n download("goalos_cloud_mvp_executive_report.txt", txt, "text/plain"); log("export_report", "Executive report exported.");\n}\nfunction exportState(){ download("goalos_cloud_mvp_state.json", pretty(state)); }\nfunction reset(){ if(!confirm("Reset demo state?")) return; state = createInitialState(); save(); render(); log("reset", "State reset."); }\n\ndocument.addEventListener("DOMContentLoaded", () => {\n document.querySelectorAll("[data-tab]").forEach(btn => btn.addEventListener("click", () => tab(btn.dataset.tab)));\n el("versionSelect").addEventListener("change", e => { state.activeWorkflowVersionId = e.target.value; save(); render(); });\n el("runBtn").addEventListener("click", runCase);\n el("benchmarkBtn").addEventListener("click", benchmark);\n el("proposalBtn").addEventListener("click", proposal);\n el("approveBtn").addEventListener("click", approve);\n el("rollbackBtn").addEventListener("click", doRollback);\n el("proofCardBtn").addEventListener("click", proofCard);\n el("reportBtn").addEventListener("click", report);\n el("graphBtn").addEventListener("click", exportGraph);\n el("stateBtn").addEventListener("click", exportState);\n el("resetBtn").addEventListener("click", reset);\n tab("governance"); render();\n});\n', encoding="utf-8")
- (ASSETS / "styles.css").write_text('*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 14% -8%,rgba(143,179,255,.22),transparent 34rem),radial-gradient(circle at 90% 0%,rgba(255,215,106,.13),transparent 30rem),linear-gradient(180deg,#05070d,#080b13 55%,#05070d);color:#f7f8ff;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.topbar{position:sticky;top:0;z-index:10;display:flex;justify-content:space-between;gap:16px;align-items:center;padding:14px min(26px,4vw);background:rgba(5,7,13,.86);border-bottom:1px solid rgba(255,255,255,.16);backdrop-filter:blur(16px)}.brand{text-decoration:none;font-weight:950;letter-spacing:-.03em}.brand span{display:inline-grid;place-items:center;width:32px;height:32px;margin-right:8px;border:1px solid rgba(255,215,106,.6);border-radius:9px;color:#ffd76a}nav{display:flex;gap:8px;flex-wrap:wrap}nav a{font-size:13px;text-decoration:none;color:#b8c0da;border:1px solid rgba(255,255,255,.13);border-radius:999px;padding:8px 10px}main{width:min(1260px,calc(100% - 34px));margin:0 auto;padding:56px 0 86px}.hero{padding:26px 0 34px}.eyebrow{color:#ffd76a;text-transform:uppercase;letter-spacing:.22em;font-weight:950;font-size:12px}h1{font-size:clamp(46px,8vw,102px);line-height:.86;letter-spacing:-.08em;margin:16px 0 24px;max-width:1120px}h2{font-size:clamp(30px,4vw,52px);line-height:.96;letter-spacing:-.055em;margin:0 0 12px}h3{margin:0 0 10px}.lead{font-size:clamp(19px,2vw,23px);color:#b8c0da;line-height:1.55;max-width:940px}.loop{display:inline-flex;border:1px solid rgba(255,215,106,.45);border-radius:999px;color:#ffd76a;background:rgba(255,215,106,.08);padding:10px 14px;font-weight:900;margin:12px 0}.boundary{color:#d7def6;max-width:960px}.metrics{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin:16px 0 24px}.metric{border:1px solid rgba(255,255,255,.16);border-radius:18px;padding:16px;background:rgba(255,255,255,.06)}.metric strong{display:block;font-size:32px;color:#ffd76a}.metric span{color:#b8c0da}.tabs{display:flex;flex-wrap:wrap;gap:8px;margin:24px 0}.tabs button,.buttons button,.panelHead button{cursor:pointer;border:1px solid rgba(255,215,106,.52);border-radius:999px;padding:11px 14px;background:rgba(255,255,255,.055);color:#f7f8ff;font-weight:900}.tabs button.active,.buttons button:hover,.panelHead button:hover{background:#ffd76a;color:#05070d}.buttons{display:flex;gap:8px;flex-wrap:wrap}.danger{border-color:rgba(255,80,80,.6)!important}.panel{border:1px solid rgba(255,255,255,.16);border-radius:26px;background:linear-gradient(180deg,rgba(255,255,255,.08),rgba(255,255,255,.045));box-shadow:0 28px 78px rgba(0,0,0,.34);padding:24px;margin:22px 0}.panelHead{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;margin-bottom:16px}.panelHead p,.panel p{color:#b8c0da;line-height:1.45}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.callout{border:1px solid rgba(255,215,106,.32);border-radius:20px;padding:16px;background:rgba(255,215,106,.07);margin:14px 0;color:#d7def6}label{display:block;color:#ffd76a;font-weight:900;margin:14px 0 8px}select,textarea{width:100%;border:1px solid rgba(255,255,255,.16);border-radius:16px;background:#080b13;color:#f7f8ff;padding:14px;font:inherit}textarea{min-height:260px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px}pre{white-space:pre-wrap;overflow:auto;max-height:520px;background:#080b13;border:1px solid rgba(255,255,255,.14);border-radius:16px;padding:16px;color:#dbe7ff}table{width:100%;border-collapse:separate;border-spacing:0 8px}td,th{padding:12px;background:rgba(255,255,255,.055);border-top:1px solid rgba(255,255,255,.13);border-bottom:1px solid rgba(255,255,255,.13);color:#b8c0da;text-align:left;vertical-align:top}th{color:#f7f8ff}td:first-child,th:first-child{border-left:1px solid rgba(255,255,255,.13);border-radius:12px 0 0 12px}td:last-child,th:last-child{border-right:1px solid rgba(255,255,255,.13);border-radius:0 12px 12px 0}.audit{display:grid;gap:8px;color:#b8c0da}.final p{font-size:18px}footer{padding:30px;text-align:center;color:#b8c0da;border-top:1px solid rgba(255,255,255,.16)}@media(max-width:980px){.metrics,.grid2{grid-template-columns:1fr}.panelHead{display:block}nav{display:none}}', encoding="utf-8")
- (TESTS / "enterprise-core.test.mjs").write_text('import assert from "node:assert/strict";\nimport {\n createInitialState,\n DEMO_CASES,\n executeWorkflow,\n evaluateRun,\n createProofRecord,\n runBenchmark,\n proposeImprovement,\n approveImprovement,\n rollback,\n buildProofGraph,\n createPublicSafeProofCard,\n policyDecision\n} from "../assets/enterprise-core.mjs";\n\nconst state = createInitialState();\nconst b10 = runBenchmark(state);\nassert.equal(b10.workflowVersion, "1.0.0");\nassert.ok(b10.refundPolicyCompliance < 90, "v1.0 should reveal refund-policy weakness");\n\nconst proposal = proposeImprovement(state, b10);\nassert.equal(proposal.status, "pending-approval");\nassert.ok(proposal.proposedVersion.definition.rules.join(" ").toLowerCase().includes("refund"));\n\nstate.improvementProposals.unshift(proposal);\nconst result = approveImprovement(state, proposal);\nstate.approvals.unshift(result.approval);\nstate.deployments.unshift(result.deployment);\nassert.equal(result.approvedVersion.version, "1.1.0");\nassert.equal(result.approval.rollbackTargetVersionId, "wfv_1_0_0");\n\nconst b11 = runBenchmark(state, result.approvedVersion.id);\nassert.ok(b11.refundPolicyCompliance > b10.refundPolicyCompliance, "v1.1 should improve refund policy compliance");\nassert.ok(b11.passRate >= b10.passRate, "v1.1 should not regress pass rate in demo");\n\nconst confidential = DEMO_CASES.find(c => c.dataClass === "confidential");\nconst policy = policyDecision(state, confidential, result.approvedVersion);\nassert.equal(policy.allowed, false, "external/local provider should be blocked for confidential data");\n\nconst run = executeWorkflow(state, DEMO_CASES[0]);\nconst ev = evaluateRun(state, run);\nconst proof = createProofRecord(state, run, ev);\nstate.runs.unshift(run); state.evaluations.unshift(ev); state.proofRecords.unshift(proof);\nconst graph = buildProofGraph(state);\nassert.ok(graph.nodes.length > 0);\nassert.ok(graph.edges.length > 0);\n\nconst rb = rollback(state);\nassert.equal(rb.status, "complete");\nassert.equal(state.activeWorkflowVersionId, "wfv_1_0_0");\n\nconst card = createPublicSafeProofCard(state);\nassert.equal(card.publicSafe, true);\nassert.ok(card.claimsAvoided.includes("No model self-modification claim"));\n\nconsole.log("GoalOS Cloud MVP v0.2 tests passed", {\n v10RefundPolicyCompliance: b10.refundPolicyCompliance,\n v11RefundPolicyCompliance: b11.refundPolicyCompliance,\n graphNodes: graph.nodes.length,\n graphEdges: graph.edges.length\n});\n', encoding="utf-8")
- (APP / "index.html").write_text('GoalOS Cloud MVP 0.2 — Enterprise Recursive Workflow OS \n\n\nEnterprise Recursive Workflow OS · software proof
Run. Score. Prove. Improve. Approve. Version. Monitor. Re-run. A working public MVP proving recursive workflow improvement on one enterprise workflow family: Customer Support Reply Workflow.
Run → Score → Prove → Diagnose → Improve → Approve → Version → Monitor → Re-run
GoalOS does not modify AI models. It improves workflows around AI through instructions, checks, scorecards, proof records, versions, approvals, monitoring, and rollback.
\n\n1 · Governance 2 · Workflow Studio 3 · Run 4 · Evaluate 5 · Proof Room 6 · Improve 7 · Versions 8 · Proof Graph 9 · Admin \n\nGovernance + model gateway Tenant, roles, policy, memory, model-provider restrictions, and safe execution boundaries.
\n\nWorkflow Studio Versioned workflow definition with GoalOS structure.
\n\nExecution Engine Run the active workflow against one demo case.
Run selected case Demo case Latest run \n\nEvaluation Engine Score accuracy, completeness, clarity, brand fit, policy, and proof readiness.
Run benchmark suite \n\nProof Room Every run creates an auditable proof record.
Public-safe proof card Executive report
Time Version Input Approval Decision
Latest proof \n\nRecursive Improvement Engine Detect repeated failure, draft v1.1, compare benchmarks, require approval.
Generate proposal Approve + deploy v1.1
\n\nVersioning + rollback Immutable versions, approval state, rollback target.
Select rollback v1.0 Version Status Approval Rollback Summary
\n\nProof Graph workflow → version → run → evaluation → proof → proposal → approval
Export Proof Graph
\n\nAdmin / Export Audit logs and state export. Static MVP state persists in browser storage.
Download state Reset
Audit log State export \n\nEnterprise acceptance test v1.0 runs → evaluations detect refund-policy failure → Recursive Improvement Engine proposes v1.1 → human approval deploys v1.1 → benchmark improves → rollback target remains available → Proof Room exports public-safe proof.
\n GoalOS Cloud MVP 0.2 · Static public software proof · Paid products stay on QUEBEC.AI · No buyer ZIPs included ', encoding="utf-8")
- (APP / "README.md").write_text('# GoalOS Cloud MVP 0.2\n\nThis is the stronger public software proof for GoalOS Recursive Workflow OS.\n\nIt demonstrates:\n\n`Run → Score → Prove → Diagnose → Improve → Approve → Version → Monitor → Re-run`\n\n## Included modules\n\n- Governance / organization / roles\n- Policy engine\n- Controlled memory\n- Model gateway restrictions\n- Workflow Studio\n- Execution Engine\n- Evaluation Engine\n- Proof Room\n- Recursive Improvement Engine\n- Human approval gate\n- Versioning and rollback\n- Proof Graph export\n- Public-safe proof card export\n- Executive report export\n- Audit log\n- Browser-local persistence\n- Node unit tests\n\n## Safe boundary\n\nGoalOS does not modify AI models.\n\nIt improves workflows around AI through instructions, checks, scorecards, proof records, versions, approvals, monitoring, and rollback.\n\n## What this is\n\nA static public MVP hosted on GitHub Pages. It proves the software loop and gives a production-grade skeleton for future backend/SaaS work.\n\n## What this is not\n\nIt is not the full enterprise SaaS backend yet.\nIt does not upload paid buyer ZIPs.\nIt does not include private delivery materials.\n', encoding="utf-8")
- (SCHEMAS / "workflow.schema.json").write_text(json.dumps({'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://montrealai.github.io/proof-gradient/app/goalos-cloud-mvp/schemas/workflow.schema.json', 'title': 'GoalOS Workflow Version', 'type': 'object', 'required': ['id', 'version', 'status', 'definition'], 'properties': {'id': {'type': 'string'}, 'version': {'type': 'string'}, 'status': {'type': 'string'}, 'definition': {'type': 'object', 'required': ['goal', 'context', 'rules', 'steps', 'checks', 'proofRequirements'], 'properties': {'goal': {'type': 'string'}, 'context': {'type': 'array', 'items': {'type': 'string'}}, 'rules': {'type': 'array', 'items': {'type': 'string'}}, 'memoryRefs': {'type': 'array', 'items': {'type': 'string'}}, 'steps': {'type': 'array', 'items': {'type': 'string'}}, 'checks': {'type': 'array', 'items': {'type': 'string'}}, 'proofRequirements': {'type': 'array', 'items': {'type': 'string'}}}}}}, indent=2), encoding="utf-8")
- (SCHEMAS / "proof-record.schema.json").write_text(json.dumps({'$schema': 'https://json-schema.org/draft/2020-12/schema', 'title': 'GoalOS Proof Record', 'type': 'object', 'required': ['id', 'workflowName', 'workflowVersion', 'inputSummary', 'outputSummary', 'checksPerformed', 'claimsAvoided', 'approvalStatus'], 'properties': {'id': {'type': 'string'}, 'workflowName': {'type': 'string'}, 'workflowVersion': {'type': 'string'}, 'inputSummary': {'type': 'string'}, 'outputSummary': {'type': 'string'}, 'checksPerformed': {'type': 'array', 'items': {'type': 'string'}}, 'claimsAvoided': {'type': 'array', 'items': {'type': 'string'}}, 'approvalStatus': {'type': 'string'}}}, indent=2), encoding="utf-8")
- (APP / "openapi.json").write_text(json.dumps({'openapi': '3.1.0', 'info': {'title': 'GoalOS Cloud MVP API Blueprint', 'version': '0.2.0'}, 'paths': {'/workflows': {'get': {'summary': 'List workflows'}}, '/workflows/{id}/versions': {'post': {'summary': 'Create workflow version'}}, '/runs': {'post': {'summary': 'Run workflow'}}, '/runs/{id}/proof': {'get': {'summary': 'Get proof record'}}, '/benchmarks/run': {'post': {'summary': 'Run benchmark suite'}}, '/improvement-proposals': {'post': {'summary': 'Generate improvement proposal'}}, '/improvement-proposals/{id}/approve': {'post': {'summary': 'Approve improvement proposal'}}, '/workflow-versions/{id}/rollback': {'post': {'summary': 'Rollback to workflow version'}}}}, indent=2), encoding="utf-8")
-
- (DOCS / "STATE_OF_THE_ART_ENTERPRISE_GATES.md").write_text("""# GoalOS Cloud MVP 0.2 — Enterprise SOTA Gates
-
- This MVP is intentionally narrow but maps to the enterprise software bar.
-
- ## Proved in this MVP
-
- - workflow-native core
- - proof-native run records
- - evaluation engine
- - recursive improvement proposal
- - human approval gate
- - versioning and rollback target
- - policy engine and data-class restrictions
- - controlled memory
- - model gateway placeholder
- - proof graph export
- - audit log
- - OpenAPI blueprint
- - schemas
- - tests
-
- ## Not yet full SaaS
-
- - production backend
- - SSO / SAML / OIDC
- - real model-provider secrets
- - database persistence
- - tenant-isolated API server
- - SCIM
- - SOC 2 controls
- - enterprise integrations
-
- ## Safe boundary
-
- GoalOS does not modify AI models. It improves workflows around AI through instructions, checks, scorecards, proof records, versions, approvals, monitoring, and rollback.
- """, encoding="utf-8")
-
- # public info page
- product = WEB_ROOT / "products" / "goalos-cloud-mvp"
- product.mkdir(parents=True, exist_ok=True)
- product_html = """GoalOS Cloud MVP 0.2 GoalOS Cloud MVP 0.2
Enterprise recursive workflow proof, running in software. A public MVP that proves Run → Score → Prove → Diagnose → Improve → Approve → Version → Monitor → Re-run on one workflow family.
Open the MVP Shop / Apply Safe boundary GoalOS does not modify AI models. It improves workflows around AI through instructions, checks, scorecards, proof records, versions, approvals, monitoring, and rollback.
"""
- (product / "index.html").write_text(product_html, encoding="utf-8")
-
- # homepage insert
- home = WEB_ROOT / "index.html"
- block = """
-
- GoalOS Cloud MVP 0.2
- Enterprise recursive workflow proof, running in software.
- A public MVP proving: Run → Score → Prove → Diagnose → Improve → Approve → Version → Monitor → Re-run.
-
-
- """
- if home.exists():
- text = home.read_text(encoding="utf-8", errors="ignore")
- text = re.sub(r".*?", block, text, flags=re.S)
- if "GOALOS-CLOUD-MVP-V02:START" not in text:
- if "" in text:
- text = text.replace("", block + "\n", 1)
- elif "
-
- {body}
-
- " in text:
- text = text.replace("", block + "\n", 1)
- else:
- text += block
- home.write_text(text, encoding="utf-8")
- else:
- home.write_text(product_html, encoding="utf-8")
-
- # sitemap
- sitemap = WEB_ROOT / "sitemap.xml"
- urls = ["https://montrealai.github.io/proof-gradient/app/goalos-cloud-mvp/", "https://montrealai.github.io/proof-gradient/products/goalos-cloud-mvp/"]
- if sitemap.exists():
- text = sitemap.read_text(encoding="utf-8", errors="ignore")
- if "" in text:
- for url in urls:
- if url not in text:
- text = text.replace("", f" {url} \n")
- sitemap.write_text(text, encoding="utf-8")
- else:
- sitemap.write_text('\n\n' + ''.join(f' {u} \n' for u in urls) + ' \n', encoding="utf-8")
-
- # manifest
- manifest=[]
- for p in sorted(APP.rglob("*")):
- if p.is_file():
- manifest.append({"path":p.relative_to(APP).as_posix(),"bytes":p.stat().st_size,"sha256":hashlib.sha256(p.read_bytes()).hexdigest()})
- (APP/"site-manifest.json").write_text(json.dumps(manifest, indent=2)+"\n", encoding="utf-8")
- print("Generated GoalOS Cloud MVP v0.2 at", APP)
-
- PY
- python3 "$RUNNER_TEMP/generate_goalos_cloud_mvp_v02.py"
-
- - name: Run GoalOS Cloud MVP v0.2 unit tests
- shell: bash
+ if [ -d site ]; then echo "root=site" >> "$GITHUB_OUTPUT"; elif [ -d public ]; then echo "root=public" >> "$GITHUB_OUTPUT"; else echo "No site/ or public/ root found"; exit 1; fi
+ - name: Refuse repository deletions
run: |
- set -euo pipefail
- WEB_ROOT="${{ steps.generate.outputs.web_root }}"
- node "$WEB_ROOT/app/goalos-cloud-mvp/tests/enterprise-core.test.mjs"
-
- - name: Safety check — refuse deletions
- shell: bash
- run: |
- set -euo pipefail
- deleted="$(git diff --name-status | awk '$1 ~ /^D/ {print}')"
- if [ -n "$deleted" ]; then
- echo "Refusing to continue because deletions were detected:"
- echo "$deleted"
- exit 1
- fi
-
- - name: Commit GoalOS Cloud MVP v0.2
- shell: bash
+ if git diff --name-only --diff-filter=D --exit-code HEAD -- .; then echo "No deletions detected."; else echo "Deletion detected; refusing deploy."; exit 1; fi
+ - name: Run GoalOS Cloud MVP 0.2 unit test
+ run: node site/app/goalos-cloud-mvp/tests/enterprise-core.test.mjs
+ - name: Validate schemas and OpenAPI are present
run: |
- set -euo pipefail
- WEB_ROOT="${{ steps.generate.outputs.web_root }}"
- git config user.name "github-actions[bot]"
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- git add "$WEB_ROOT"
- if git diff --cached --quiet; then
- echo "No GoalOS Cloud MVP changes to commit."
- else
- git commit -m "Build GoalOS Cloud MVP 0.2 [skip ci]"
- git push
- fi
-
- - name: Configure GitHub Pages
- uses: actions/configure-pages@v5
-
+ test -f site/app/goalos-cloud-mvp/openapi.json
+ test -f site/app/goalos-cloud-mvp/schemas/workflow.schema.json
+ test -f site/app/goalos-cloud-mvp/schemas/proof-record.schema.json
+ python -m json.tool site/app/goalos-cloud-mvp/openapi.json >/dev/null
+ python -m json.tool site/app/goalos-cloud-mvp/schemas/workflow.schema.json >/dev/null
+ python -m json.tool site/app/goalos-cloud-mvp/schemas/proof-record.schema.json >/dev/null
+ - name: Run paid artifact guard
+ run: python scripts/check_no_paid_artifacts.py
- name: Upload GitHub Pages artifact
uses: actions/upload-pages-artifact@v3
with:
- path: ${{ steps.generate.outputs.web_root }}
-
+ path: ${{ steps.root.outputs.root }}
- name: Deploy GitHub Pages
+ id: deployment
uses: actions/deploy-pages@v4
diff --git a/.github/workflows/refresh-complete-goalos-public-site.yml b/.github/workflows/refresh-complete-goalos-public-site.yml
new file mode 100644
index 00000000..b9796c69
--- /dev/null
+++ b/.github/workflows/refresh-complete-goalos-public-site.yml
@@ -0,0 +1,49 @@
+name: Refresh Complete GoalOS Public Site
+
+on:
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: goalos-pages
+ cancel-in-progress: false
+
+jobs:
+ validate-and-deploy:
+ runs-on: ubuntu-latest
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Detect site root
+ id: root
+ run: |
+ if [ -d site ]; then echo "root=site" >> "$GITHUB_OUTPUT"; elif [ -d public ]; then echo "root=public" >> "$GITHUB_OUTPUT"; else echo "No site/ or public/ root found"; exit 1; fi
+ - name: Refuse repository deletions
+ run: |
+ if git diff --name-only --diff-filter=D --exit-code HEAD -- .; then echo "No deletions detected."; else echo "Deletion detected; refusing deploy."; exit 1; fi
+ - name: Run GoalOS Cloud MVP test
+ run: node site/app/goalos-cloud-mvp/tests/enterprise-core.test.mjs
+ - name: Validate canonical site shell and links
+ run: python scripts/validate_goalos_site_v2.py
+ - name: Run paid artifact guard
+ run: python scripts/check_no_paid_artifacts.py
+ - name: Produce deployment manifest summary
+ run: |
+ test -f site/goalos-site-manifest-v2.json
+ test -f site/goalos-site-repair-v2-report.json
+ python -m json.tool site/goalos-site-manifest-v2.json >/dev/null
+ python -m json.tool site/goalos-site-repair-v2-report.json >/dev/null
+ - name: Upload GitHub Pages artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: ${{ steps.root.outputs.root }}
+ - name: Deploy GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.github/workflows/repair-goalos-canonical-shell-v2.yml b/.github/workflows/repair-goalos-canonical-shell-v2.yml
index 6e14dbfc..6b94b2ba 100644
--- a/.github/workflows/repair-goalos-canonical-shell-v2.yml
+++ b/.github/workflows/repair-goalos-canonical-shell-v2.yml
@@ -4,487 +4,40 @@ on:
workflow_dispatch:
permissions:
- contents: write
+ contents: read
pages: write
id-token: write
concurrency:
- group: repair-goalos-canonical-shell-v2
+ group: goalos-pages
cancel-in-progress: false
jobs:
- repair:
- name: Remove duplicate navbars and refresh one canonical site
+ validate-and-deploy:
runs-on: ubuntu-latest
-
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
steps:
- - name: Check out repository
+ - name: Checkout
uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Repair site shell and refresh canonical pages
- id: build
- shell: bash
- run: |
- set -euo pipefail
-
- WEB_ROOT="site"
- if [ ! -d "$WEB_ROOT" ] && [ -d "public" ]; then WEB_ROOT="public"; fi
- mkdir -p "$WEB_ROOT"
- touch "$WEB_ROOT/.nojekyll"
- echo "web_root=$WEB_ROOT" >> "$GITHUB_OUTPUT"
-
- cat > "$RUNNER_TEMP/goalos_unified_site_repair_v2.py" <<'PY'
- from pathlib import Path
- from html import escape
- import re, json, hashlib, datetime, shutil
-
- WEB_ROOT = Path("site")
- if not WEB_ROOT.exists() and Path("public").exists():
- WEB_ROOT = Path("public")
- WEB_ROOT.mkdir(parents=True, exist_ok=True)
-
- BASE = "/proof-gradient"
- SHOP = "https://www.quebecartificialintelligence.com/shop"
- GITHUB = "https://github.com/MontrealAI/proof-gradient"
- NOW = datetime.datetime.utcnow().replace(microsecond=0).isoformat() + "Z"
-
- assets = WEB_ROOT / "assets"
- assets.mkdir(parents=True, exist_ok=True)
-
- archive = WEB_ROOT / "_archive" / ("before_unified_shell_v2_" + NOW[:10])
- archive.mkdir(parents=True, exist_ok=True)
-
- report = {
- "generated_at": NOW,
- "web_root": str(WEB_ROOT),
- "mode": "unified_shell_v2_hard_repair",
- "backups_created": [],
- "pages_rewritten": [],
- "html_files_repaired": [],
- "nav_headers_removed": 0,
- "footers_removed": 0,
- "old_markers_removed": 0,
- "old_assets_removed": 0,
- "duplicate_home_blocks_removed": 0,
- "validation": {},
- "paid_material_policy": "No buyer ZIPs, paid workshop materials, or private delivery assets are uploaded."
- }
-
- PRODUCTS = [
- {"slug":"goalos-ai-efficiency-sprint-kit","price":"$49","title":"GoalOS AI Efficiency Sprint Kit","fr":"Trousse GoalOS Sprint d’efficacité IA","promise":"Build one reusable AI workflow.","type":"Self-serve digital product","bullets":["60-minute first win","offline builder","copy-paste prompts","editable templates","proof note"]},
- {"slug":"goalos-rsi-lite","price":"$199","title":"GoalOS RSI Lite","fr":"GoalOS RSI Lite","promise":"Build one self-improving AI workflow.","type":"Premium self-serve system","bullets":["Run","Score","Diagnose","Improve","Version","Prove","Re-run"]},
- {"slug":"goalos-proof-room-lite","price":"$997","title":"GoalOS Proof Room Lite / Department Pack","fr":"GoalOS Proof Room Lite / Pack Département","promise":"Set up a lightweight department Proof Room.","type":"Premium department pack","bullets":["owners","permissions","proof notes","weekly reviews","executive reports","rollback","public-safe proof"]},
- {"slug":"goalos-rsi-sprint-workshop","price":"$2,500+","title":"GoalOS RSI Sprint Workshop","fr":"Atelier GoalOS RSI Sprint","promise":"Build the first self-improving workflow live.","type":"Private workshop","bullets":["workflow v1.0","first run","scorecard","diagnosis","workflow v1.1","proof note"]},
- {"slug":"goalos-proof-room-implementation-sprint","price":"$9,500+","title":"GoalOS Proof Room Implementation Sprint","fr":"Sprint de mise en œuvre GoalOS Proof Room","promise":"Department RSI in 30 days.","type":"Done-with-you implementation","bullets":["3 workflows","permission map","proof review","monthly report","rollback procedure","case study"]},
- {"slug":"goalos-enterprise-rsi-pilot","price":"$49,000+","title":"GoalOS Enterprise RSI Pilot","fr":"GoalOS Enterprise RSI Pilot","promise":"Pilot the Recursive Workflow OS.","type":"Enterprise pilot","bullets":["90-day pilot","workflow family","benchmark","proof records","v1.1 proposal","architecture blueprint"]},
- ]
-
- STANDARDS = [
- ("AEP-001", "GoalOS Proof-of-Evolution Constitution"),
- ("AEP-002", "Evidence Docket Standard"),
- ("AEP-003", "ProofPacket Schema"),
- ("AEP-004", "Selection Gate Standard"),
- ("AEP-005", "Tool Permission Standard"),
- ("AEP-006", "Rollback Receipt Standard"),
- ("AEP-007", "Public-Safe Proof Report Standard"),
- ("AEP-008", "Proof Room Standard"),
- ]
-
- WORKFLOWS = [
- ("build-one-reusable-ai-workflow", "Build one reusable AI workflow", "Customer question → clear reply."),
- ("rsi-lite-self-improving-workflows", "Recursive Self-Improving Workflows", "Run, score, diagnose, improve, version, prove, and re-run."),
- ("department-proof-room-lite", "Department Proof Room Lite", "Set up owners, permissions, proof notes, reviews, reports, and rollback."),
- ("department-ai-permission-map", "AI Permission Map", "Green / Yellow / Red boundaries for department AI use."),
- ("department-public-safe-case-study", "Public-safe case study", "Turn internal proof into safe external evidence."),
- ]
-
- def href(path):
- if path.startswith("http"):
- return path
- return BASE + path
-
- def backup_file(path):
- if not path.exists() or not path.is_file() or "_archive" in path.parts:
- return
- rel = path.relative_to(WEB_ROOT)
- dest = archive / rel
- dest.parent.mkdir(parents=True, exist_ok=True)
- if not dest.exists():
- shutil.copy2(path, dest)
- report["backups_created"].append(dest.relative_to(WEB_ROOT).as_posix())
-
- def card(item):
- return f"""
- {escape(item['price'])}
- {escape(item['title'])}
- {escape(item['fr'])}
- {escape(item['promise'])}
- """
-
- def bullets(items):
- return "
"
-
- CSS = r"""
- :root{--bg:#05070d;--panel:rgba(255,255,255,.078);--panel2:rgba(255,255,255,.045);--line:rgba(255,255,255,.16);--text:#f7f8ff;--muted:#b8c0da;--gold:#ffd76a;--green:#7ce0a3;--radius:26px;--shadow:0 28px 78px rgba(0,0,0,.36)}
- *{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:radial-gradient(circle at 14% -8%,rgba(143,179,255,.22),transparent 34rem),radial-gradient(circle at 90% 0%,rgba(255,215,106,.13),transparent 30rem),linear-gradient(180deg,#05070d,#080b13 55%,#05070d);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}a{color:inherit}.goalos-shell{position:sticky;top:0;z-index:99999;backdrop-filter:blur(18px);background:rgba(5,7,13,.92);border-bottom:1px solid var(--line)}.goalos-nav{width:min(1240px,calc(100% - 28px));margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:13px 0}.goalos-brand{display:flex;align-items:center;gap:10px;text-decoration:none;font-weight:950;letter-spacing:-.035em}.goalos-mark{width:34px;height:34px;border-radius:10px;border:1px solid rgba(255,215,106,.65);display:grid;place-items:center;color:var(--gold);font-weight:950;background:rgba(255,215,106,.08)}.goalos-links{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end}.goalos-links a{font-size:13px;text-decoration:none;padding:9px 11px;border:1px solid transparent;border-radius:999px;color:var(--muted);font-weight:850}.goalos-links a:hover{color:var(--text);border-color:rgba(255,255,255,.18);background:rgba(255,255,255,.06)}.goalos-links a.shop{color:#05070d;background:var(--gold);border-color:var(--gold)}.goalos-wrap{width:min(1240px,calc(100% - 36px));margin:0 auto;padding:68px 0 94px}.hero{padding:42px 0}.eyebrow{color:var(--gold);text-transform:uppercase;letter-spacing:.22em;font-weight:950;font-size:12px;margin-bottom:18px}.goalos-wrap h1{font-size:clamp(50px,8vw,114px);line-height:.86;letter-spacing:-.085em;margin:0 0 24px;max-width:1130px}.goalos-wrap h2{font-size:clamp(34px,5.4vw,66px);line-height:.92;letter-spacing:-.065em;margin:0 0 18px}.goalos-wrap h3{font-size:24px;letter-spacing:-.04em;margin:0 0 10px}.lead{font-size:clamp(19px,2vw,24px);line-height:1.55;color:var(--muted);max-width:960px;margin:0 0 24px}.fr{color:#d7def6}.actions{display:flex;flex-wrap:wrap;gap:12px;margin:28px 0}.btn{display:inline-flex;align-items:center;justify-content:center;padding:13px 17px;border:1px solid rgba(255,215,106,.52);border-radius:999px;text-decoration:none;font-weight:900;background:rgba(255,255,255,.055);color:var(--text)}.btn.primary{background:var(--gold);color:#05070d;border-color:var(--gold)}.section{margin:62px 0}.panel,.card{border:1px solid var(--line);background:linear-gradient(180deg,var(--panel),var(--panel2));border-radius:var(--radius);box-shadow:var(--shadow)}.panel{padding:30px}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.grid.two{grid-template-columns:repeat(2,1fr)}.card{padding:22px;text-decoration:none;display:flex;flex-direction:column;min-height:188px}.card:hover{transform:translateY(-2px);border-color:rgba(255,215,106,.5)}.card p{color:var(--muted);line-height:1.45;margin:0 0 12px}.price{font-size:44px;font-weight:950;letter-spacing:-.06em;color:var(--gold);margin:4px 0 12px}.badge{display:inline-flex;align-self:flex-start;margin-bottom:13px;font-size:12px;color:var(--gold);border:1px solid rgba(255,215,106,.45);border-radius:999px;padding:6px 9px;font-weight:900}.list{display:grid;gap:10px;margin:18px 0 0;padding:0;list-style:none}.list li{padding-left:26px;position:relative;color:var(--muted);line-height:1.42}.list li:before{content:"✓";position:absolute;left:0;color:var(--gold);font-weight:950}.law{font-size:clamp(26px,3.6vw,46px);line-height:1.1;letter-spacing:-.05em;margin:0;color:var(--text)}.loop{display:inline-flex;border:1px solid rgba(255,215,106,.45);border-radius:999px;color:var(--gold);background:rgba(255,215,106,.08);padding:10px 14px;font-weight:900;margin:12px 0}.steps{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-top:24px}.steps div{border:1px solid var(--line);border-radius:20px;padding:16px;background:rgba(255,255,255,.045)}.steps strong{display:block;color:var(--gold);font-size:13px;margin-bottom:8px}.steps span{color:var(--muted);font-size:14px;line-height:1.35}.table{width:100%;border-collapse:separate;border-spacing:0 8px}.table td,.table th{padding:14px;background:rgba(255,255,255,.055);border-top:1px solid var(--line);border-bottom:1px solid var(--line);text-align:left;color:var(--muted);vertical-align:top}.table th{color:var(--text)}.table td:first-child,.table th:first-child{border-left:1px solid var(--line);border-radius:14px 0 0 14px}.table td:last-child,.table th:last-child{border-right:1px solid var(--line);border-radius:0 14px 14px 0}.search input{width:100%;padding:16px 18px;border-radius:18px;border:1px solid var(--line);background:#080b13;color:var(--text);font-size:17px;outline:none}.goalos-footer{border-top:1px solid var(--line);padding:34px 0;color:var(--muted);font-size:13px;background:rgba(5,7,13,.74)}.goalos-footer-inner{width:min(1240px,calc(100% - 36px));margin:0 auto;display:flex;gap:18px;justify-content:space-between;flex-wrap:wrap}.goalos-footer a{color:var(--muted);text-decoration:none;margin-right:14px}@media(max-width:980px){.grid,.grid.two,.steps{grid-template-columns:1fr}.goalos-links{display:none}.goalos-wrap{padding-top:42px}}
- """
- (assets / "goalos-site-v2.css").write_text(CSS, encoding="utf-8")
-
- JS = r"""(function(){function r(f){document.readyState!=="loading"?f():document.addEventListener("DOMContentLoaded",f)}r(function(){var input=document.querySelector("[data-site-search]");if(!input)return;var cards=[].slice.call(document.querySelectorAll("[data-site-card]"));input.addEventListener("input",function(){var q=input.value.toLowerCase().trim();cards.forEach(function(c){c.style.display=!q||c.textContent.toLowerCase().indexOf(q)!==-1?"":"none"})})})})();"""
- (assets / "goalos-site-v2.js").write_text(JS, encoding="utf-8")
-
- OG = """GOALOS · PROOF GRADIENT One canonical website. Recursive Workflow OS. Proof Rooms. No duplicate navbars · no paid ZIPs · public proof only """
- (assets / "goalos-unified-og.svg").write_text(OG, encoding="utf-8")
-
- NAV = f"""
-
- """
-
- FOOTER = f"""
-
- """
-
- def base_page(title, desc, body):
- return f"""
-
-