From ccac283aea37a9d28521a5dca7ac206f0a822dec Mon Sep 17 00:00:00 2001
From: "MONTREAL.AI"
Date: Sun, 7 Jun 2026 17:34:33 -0400
Subject: [PATCH] Fix GoalOS public site validation rules
---
.github/workflows/check-no-paid-artifacts.yml | 23 +
.../goalos-public-site-release-v12.yml | 39 +
.../goalos-public-site-release-v3-1.yml | 627 +----------
.../goalos-public-site-release-v3-2.yml | 642 +----------
.../goalos-public-site-release-v3.yml | 601 +----------
...oalos-public-site-release-v4-bilingual.yml | 727 +------------
...-public-site-release-v5-quebec-ai-seal.yml | 782 +-------------
...ic-site-release-v6-quebec-ai-seal-icon.yml | 823 +--------------
...site-release-v7-quebec-ai-brand-assets.yml | 909 +---------------
...lic-site-release-v8-intelligent-assets.yml | 997 +-----------------
.../validate-docs-tables-figures.yml | 24 +
.../validate-goalos-public-site-v12.yml | 36 +
.../validate-goalos-public-site-v3-1.yml | 97 +-
.../validate-goalos-public-site-v3-2.yml | 97 +-
.../validate-goalos-public-site-v4.yml | 92 +-
.../validate-goalos-public-site-v5.yml | 97 +-
.../validate-goalos-public-site-v6.yml | 103 +-
.../validate-goalos-public-site-v7.yml | 107 +-
.../validate-goalos-public-site-v8.yml | 115 +-
.../workflows/validate-goalos-public-site.yml | 83 +-
README.md | 4 +
docs/GOALOS_PAID_ARTIFACT_POLICY.md | 45 +
docs/GOALOS_PUBLIC_SITE_VALIDATION.md | 101 ++
docs/GOALOS_REPO_AUDIT.md | 6 +
scripts/check_no_paid_artifacts.py | 52 +-
scripts/goalos_public_site_rules.py | 233 ++++
scripts/validate_docs_tables_figures.py | 45 +
scripts/validate_goalos_catalog.py | 38 +
scripts/validate_goalos_public_site.py | 122 +++
site/proofs/001-sovereign-swarm.html | 1 +
site/proofs/002-evolution-tournament.html | 1 +
.../003-recursive-evolution-ladder.html | 1 +
site/proofs/004-corporate-rsi-dominion.html | 1 +
.../005-enterprise-rsi-superorganism.html | 1 +
...06-sovereign-enterprise-constellation.html | 1 +
...07-sovereign-enterprise-proof-economy.html | 1 +
site/proofs/008-sovereign-domain-atlas.html | 1 +
...09-sovereign-kardashev-capital-engine.html | 1 +
.../010-proof-carrying-intelligence.html | 1 +
site/proofs/011-the-proof-loop.html | 1 +
site/proofs/index.html | 1 +
...irst-blockchain-capital-machine-proof.html | 5 +-
...first-governance-capital-engine-proof.html | 5 +-
tests/test_goalos_public_site_rules.py | 84 ++
44 files changed, 1048 insertions(+), 6725 deletions(-)
create mode 100644 .github/workflows/check-no-paid-artifacts.yml
create mode 100644 .github/workflows/goalos-public-site-release-v12.yml
create mode 100644 .github/workflows/validate-docs-tables-figures.yml
create mode 100644 .github/workflows/validate-goalos-public-site-v12.yml
create mode 100644 docs/GOALOS_PAID_ARTIFACT_POLICY.md
create mode 100644 docs/GOALOS_PUBLIC_SITE_VALIDATION.md
create mode 100755 scripts/goalos_public_site_rules.py
create mode 100755 scripts/validate_docs_tables_figures.py
create mode 100755 scripts/validate_goalos_catalog.py
create mode 100755 scripts/validate_goalos_public_site.py
create mode 100644 tests/test_goalos_public_site_rules.py
diff --git a/.github/workflows/check-no-paid-artifacts.yml b/.github/workflows/check-no-paid-artifacts.yml
new file mode 100644
index 00000000..cafc09bf
--- /dev/null
+++ b/.github/workflows/check-no-paid-artifacts.yml
@@ -0,0 +1,23 @@
+name: Check No Paid Artifacts
+
+on:
+ workflow_dispatch:
+ pull_request:
+ paths:
+ - 'site/**'
+ - 'public/**'
+ - 'scripts/goalos_public_site_rules.py'
+ - 'scripts/check_no_paid_artifacts.py'
+
+permissions:
+ contents: read
+
+jobs:
+ check:
+ name: Shared paid/private artifact guard
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+ - name: Check paid/private artifacts
+ run: python scripts/check_no_paid_artifacts.py
diff --git a/.github/workflows/goalos-public-site-release-v12.yml b/.github/workflows/goalos-public-site-release-v12.yml
new file mode 100644
index 00000000..c1d45ee6
--- /dev/null
+++ b/.github/workflows/goalos-public-site-release-v12.yml
@@ -0,0 +1,39 @@
+name: GoalOS Public Site Release v12
+
+on:
+ workflow_dispatch:
+ push:
+ branches: [ main ]
+ paths:
+ - 'site/**'
+ - 'public/**'
+ - 'scripts/**'
+ - 'docs/GOALOS_PUBLIC_SITE_VALIDATION.md'
+ - 'docs/GOALOS_PAID_ARTIFACT_POLICY.md'
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: pages
+ cancel-in-progress: false
+
+jobs:
+ validate:
+ name: Validate shared GoalOS release rules
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+ - name: Validate GoalOS public site
+ run: python scripts/validate_goalos_public_site.py
+ - name: Check paid/private artifacts
+ run: python scripts/check_no_paid_artifacts.py
+ - name: Validate docs, tables, and figures
+ run: python scripts/validate_docs_tables_figures.py
+ - name: Validate GoalOS catalog
+ run: python scripts/validate_goalos_catalog.py
+ - name: Run public-site rule regression tests
+ run: pytest tests/test_goalos_public_site_rules.py
diff --git a/.github/workflows/goalos-public-site-release-v3-1.yml b/.github/workflows/goalos-public-site-release-v3-1.yml
index 322c4822..e4fe53a2 100644
--- a/.github/workflows/goalos-public-site-release-v3-1.yml
+++ b/.github/workflows/goalos-public-site-release-v3-1.yml
@@ -1,624 +1,25 @@
-name: GoalOS Public Site Release v3.1.1
+name: goalos-public-site-release-v3-1 (obsolete; delegates to v12 validation)
on:
workflow_dispatch:
permissions:
- contents: write
- pages: write
- id-token: write
-
-concurrency:
- group: goalos-public-site-release-v3-1-1
- cancel-in-progress: false
+ contents: read
jobs:
- release-site:
- name: Refresh public site and RSI Sprint Workshop (v3.1)
+ validate:
+ name: Obsolete release workflow delegated to shared v12 scripts
runs-on: ubuntu-latest
-
steps:
- name: Check out repository
uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Generate unified GoalOS public site
- 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_public_site_release_v3.py" <<'PY'
- from pathlib import Path
- from html import escape
- import datetime, hashlib, json, re, shutil, sys
-
- 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"
- TODAY = datetime.datetime.utcnow().strftime("%Y-%m-%d")
- NOW = datetime.datetime.utcnow().replace(microsecond=0).isoformat() + "Z"
-
- ASSETS = WEB_ROOT / "assets"
- ASSETS.mkdir(parents=True, exist_ok=True)
- ARCHIVE = WEB_ROOT / "_archive" / f"before_goalos_public_site_release_v3_{TODAY}"
- ARCHIVE.mkdir(parents=True, exist_ok=True)
-
- REPORT = {
- "generated_at": NOW,
- "web_root": str(WEB_ROOT),
- "release": "GoalOS public site release v3.1",
- "purpose": "Unify public website, remove duplicate navbars, refresh commercial ladder, include RSI Sprint Workshop public pages, keep paid materials private.",
- "backups": [],
- "pages_written": [],
- "html_repaired": [],
- "old_markers_removed": 0,
- "old_assets_removed": 0,
- "topbars_removed": 0,
- "footers_removed": 0,
- "validation": {},
- "paid_artifact_policy": "No buyer ZIPs, workshop bundles, implementation kits, enterprise pilot delivery kits, or private materials are uploaded."
- }
-
- OFFERS = [
- {"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","audience":"Beginners, creators, freelancers, consultants, small-business owners.","bullets":["60-minute first win","offline workflow builder","copy-paste prompts","editable templates","completed beginner examples","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","audience":"Serious operators, consultants, agencies, creators, small teams.","bullets":["RSI Lite guide","offline builder","scorecard","version tracker","improvement prompts","v1.0 to v1.2 examples"]},
- {"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","audience":"Department leads, operations managers, AI champions, team leads.","bullets":["Proof Room charter","AI permission map","workflow owner cards","proof notes","weekly reviews","executive reports","rollback receipts","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":"Premium private workshop","audience":"Founders, operators, teams, consultants, agencies, AI champions.","bullets":["workflow v1.0","first run output","scorecard","diagnosis","workflow v1.1","proof note","public-safe proof-card draft","30-day next-run plan"]},
- {"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","audience":"Department leaders, AI champions, operations executives.","bullets":["3 workflows","owners and reviewers","AI permission map","weekly proof review","monthly report","rollback procedure","case study draft"]},
- {"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","audience":"Enterprise AI governance, CIO/CDO office, support/ops executives.","bullets":["90-day pilot","one workflow family","benchmark suite","proof records","v1.1 proposal","approval gate","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"),
- ]
-
- EXAMPLES = [
- ("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(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"].append(dest.relative_to(WEB_ROOT).as_posix())
-
- 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-v3.css").write_text(CSS, encoding="utf-8")
-
- JS = r"""(function(){function ready(f){document.readyState!=="loading"?f():document.addEventListener("DOMContentLoaded",f)}ready(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-v3.js").write_text(JS, encoding="utf-8")
-
- OG = """GOALOS · PROOF GRADIENT Recursive Workflow OS. Proof Rooms. RSI Sprint Workshop. Public site only · paid files stay private """
- (ASSETS / "goalos-public-site-og.svg").write_text(OG, encoding="utf-8")
-
- NAV = f"""
-
- """
-
- FOOTER = f"""
-
- """
-
- def base_page(title, desc, body):
- return f"""
-
-
-
-
- {escape(title)}
-
-
-
-
-
-
-
-
-
- {body}
-
-
- """
-
- def write_page(rel, title, desc, body):
- out = WEB_ROOT / rel / "index.html" if rel else WEB_ROOT / "index.html"
- out.parent.mkdir(parents=True, exist_ok=True)
- backup(out)
- out.write_text(base_page(title, desc, body), encoding="utf-8")
- REPORT["pages_written"].append(out.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 "" + "".join(f"{escape(i)} " for i in items) + " "
-
- # Core pages.
- write_page("", "GoalOS · Proof Gradient", "GoalOS Recursive Workflow OS and Proof Gradient public site.", f"""
-
- GoalOS · Proof Gradient
- A model can answer. An agent can act. An institution must prove.
- GoalOS turns repeated AI work into owned, scored, versioned, approved, monitored, and recursively improving workflows.
- Run → Score → Prove → Diagnose → Improve → Approve → Version → Monitor → Re-run
-
-
-
- Featured workshop
- GoalOS RSI Sprint Workshop turns one repeated AI task into a scored, versioned, proof-recorded, self-improving workflow.
- A premium private workshop for building workflow v1.0, running it, scoring it, diagnosing weakness, improving to v1.1, and leaving with a proof note and 30-day next-run plan.
-
-
-
- Latest software proof
- GoalOS Cloud MVP 0.2 proves recursive workflow improvement running in software.
- One workflow family. One Proof Room. One improvement proposal. One approval gate. One rollback target. One public-safe proof card.
-
-
-
- Commercial ladder
- From reusable workflow to Enterprise RSI.
- {''.join(card(o) for o in OFFERS)}
-
-
- Safe boundary
- GoalOS does not modify AI models. It improves workflows around AI through instructions, checks, scorecards, proof records, memory, evidence standards, versions, approvals, monitoring, and rollback.
-
- """)
-
- write_page("start-here", "Start Here · GoalOS", "Choose your GoalOS path.", f"""Start Here / Départ
Start with the outcome you need. Reusable workflow, self-improving workflow, department Proof Room, RSI Sprint Workshop, implementation sprint, or enterprise pilot.
{''.join(card(o) for o in OFFERS)}
""")
-
- write_page("products", "GoalOS Products", "GoalOS product and service ladder.", f"""Products / Produits
Choose your GoalOS path. Start with one reusable AI workflow, upgrade to self-improving workflows, then install Proof Rooms and Enterprise RSI.
{''.join(card(o) for o in OFFERS)}
""")
-
- pricing_rows = "".join(f"{escape(o['price'])} {escape(o['title'])} {escape(o['fr'])} {escape(o['promise'])} {escape(o['type'])} " for o in OFFERS)
- write_page("pricing", "GoalOS Pricing", "GoalOS pricing ladder.", f"""Pricing / Tarifs
Clear ladder. Clear outcomes. $49 → $199 → $997 → $2,500+ → $9,500+ → $49,000+.
Price Offer Outcome Type {pricing_rows}
""")
-
- write_page("services", "GoalOS Services", "GoalOS workshops, implementation, and enterprise pilots.", f"""Services
From RSI Sprint Workshop to Enterprise RSI Pilot. Use services to generate proof, install department Proof Rooms, and validate the enterprise platform.
{''.join(card(o) for o in OFFERS[3:])}
""")
-
- # Product detail pages.
- for o in OFFERS:
- write_page(f"products/{o['slug']}", o["title"], o["promise"], f"""{escape(o['price'])} · {escape(o['type'])}
{escape(o['title'])} {escape(o['fr'])}
{escape(o['promise'])}
Best for: {escape(o['audience'])}
{escape(o['price'])}
What it includes {bullets(o['bullets'])}Boundary No guaranteed ROI, income, compliance certification, safety guarantee, legal advice, or uncontrolled autonomous deployment. Human review required.
""")
-
- # Workshop page: v6 public content, no paid files.
- write_page("workshop/goalos-rsi-sprint-workshop", "GoalOS RSI Sprint Workshop", "Build your first self-improving AI workflow live.", f"""
-
- GoalOS RSI Sprint Workshop
- Build your first self-improving AI workflow live.
- A premium, executive-grade workshop that turns one repeated AI task into a scored, versioned, proof-recorded, self-improving workflow.
- Run → Score → Diagnose → Improve → Version → Prove → Re-run
-
-
-
- What you leave with
-
-
1 Workflow v1.0
-
2 First run output
-
3 Scorecard
-
4 Diagnosis
-
5 Workflow v1.1
-
6 Proof note
-
-
-
- Safe boundary
- GoalOS RSI Sprint Workshop does not modify AI models. It improves the workflow around your AI assistant through instructions, checks, scorecards, proof notes, versions, and human review.
-
- """)
-
- # Implementation and enterprise pages.
- write_page("implementation/goalos-proof-room-implementation-sprint", "Department RSI in 30 Days", "GoalOS Proof Room Implementation Sprint.", f"""Department RSI
Department RSI in 30 days. Deploy Recursive Self-Improving Workflows in one department.
In 30 days, set up the first version of a lightweight Proof Room for three repeated department AI workflows.
""")
- write_page("workshop/goalos-proof-room-implementation-sprint", "GoalOS Proof Room Implementation Sprint", "Department RSI in 30 Days.", f"""Department RSI
Department RSI in 30 days. Deploy Recursive Self-Improving Workflows in one department.
""")
- enterprise_body = f"""Enterprise RSI
Enterprise RSI without model self-modification. Pilot the Recursive Workflow Operating System for one enterprise workflow family.
Run → Score → Prove → Diagnose → Improve → Approve → Version → Monitor → Re-run
Formal platform name GoalOS Recursive Workflow OS
"""
- write_page("enterprise/goalos-enterprise-rsi-pilot", "GoalOS Enterprise RSI Pilot", "Enterprise RSI without model self-modification.", enterprise_body)
- write_page("platform/goalos-recursive-workflow-os", "GoalOS Recursive Workflow OS", "Enterprise Recursive Workflow OS platform direction.", enterprise_body)
-
- # Cloud MVP public page and fallback app if missing.
- write_page("products/goalos-cloud-mvp", "GoalOS Cloud MVP 0.2", "Enterprise recursive workflow proof running in software.", f"""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.
What it proves 1 Workflow Studio
2 Evaluation Engine
3 Proof Room
4 Improvement Proposal
5 Approval Gate
6 Rollback Target
""")
- if not (WEB_ROOT / "app/goalos-cloud-mvp/index.html").exists():
- write_page("app/goalos-cloud-mvp", "GoalOS Cloud MVP 0.2", "Public software proof placeholder.", f"""GoalOS Cloud MVP 0.2
Recursive workflow improvement, running in software. This page is ready for the full Cloud MVP action. Run the GoalOS Cloud MVP v0.2 action to install the interactive app.
""")
-
- # Standards and examples.
- standards_cards = "".join(f'AEP {escape(code)} {escape(title)}
' for code,title in STANDARDS)
- write_page("standards", "AEP Standards", "Proof Gradient standards.", f"""AEP Standards
The public trust layer. AEP standards provide the vocabulary for proof, permission, rollback, public-safe reports, and Proof Rooms.
""")
- for code,title in STANDARDS:
- target = WEB_ROOT / "standards" / code / "index.html"
- if not target.exists():
- write_page(f"standards/{code}", f"{code} — {title}", title, f"""AEP Standard
{escape(code)} — {escape(title)} Public trust layer for GoalOS and Proof Gradient.
""")
-
- example_cards = "".join(f'Example {escape(title)} {escape(desc)}
' for slug,title,desc in EXAMPLES)
- write_page("examples", "GoalOS Examples", "Practical GoalOS workflow examples.", f"""Examples
Practical GoalOS examples. Examples that teach reusable workflows, RSI Lite, Proof Room Lite, and Department RSI.
""")
- for slug,title,desc in EXAMPLES:
- target = WEB_ROOT / "workflow" / slug / "index.html"
- if not target.exists():
- write_page(f"workflow/{slug}", title, desc, f"""GoalOS Example
{escape(title)} {escape(desc)}
GoalOS structure Context → Rules → Memory → Workflow → Checks → Proof.
""")
-
- command_cards = "".join(card(o) for o in OFFERS)
- command_cards += f'MVP GoalOS Cloud MVP 0.2 Enterprise recursive workflow proof running in software.
'
- write_page("command-center", "GoalOS Command Center", "Unified GoalOS command center.", f"""Command Center
One site. One command center. Search the unified GoalOS / Proof Gradient website.
""")
-
- URLS = ["/","/start-here/","/products/","/pricing/","/services/","/examples/","/standards/","/command-center/","/site-map/","/products/goalos-cloud-mvp/","/app/goalos-cloud-mvp/","/workshop/goalos-rsi-sprint-workshop/","/implementation/goalos-proof-room-implementation-sprint/","/workshop/goalos-proof-room-implementation-sprint/","/enterprise/goalos-enterprise-rsi-pilot/","/platform/goalos-recursive-workflow-os/"]
- URLS += [f"/products/{o['slug']}/" for o in OFFERS] + [f"/standards/{c}/" for c,_ in STANDARDS] + [f"/workflow/{s}/" for s,_,_ in EXAMPLES]
- site_rows = "".join(f"{escape(u)} {href(u)} " for u in sorted(set(URLS)))
- write_page("site-map", "GoalOS Site Map", "Unified GoalOS site map.", f"""Site Map
Unified site map. """)
-
- backup(WEB_ROOT / "404.html")
- (WEB_ROOT / "404.html").write_text(base_page("404 · GoalOS", "Page not found.", f"""404
Page not found. Use the Command Center to find the right GoalOS page.
"""), encoding="utf-8")
-
- # Documentation page.
- DOCS = Path("docs")
- DOCS.mkdir(exist_ok=True)
- (DOCS / "GOALOS_PUBLIC_SITE_RELEASE_V3.md").write_text(f"""# GoalOS Public Site Release v3.1
-
- Generated: {NOW}
-
- ## Purpose
-
- Unify the public Proof Gradient / GoalOS website, include the GoalOS RSI Sprint Workshop public offer, preserve AEP standards, keep paid materials private, and support GoalOS Cloud MVP public proof.
-
- ## Public ladder
-
- - $49 GoalOS AI Efficiency Sprint Kit
- - $199 GoalOS RSI Lite
- - $997 Proof Room Lite / Department Pack
- - $2,500+ GoalOS RSI Sprint Workshop
- - $9,500+ Proof Room Implementation Sprint
- - $49,000+ Enterprise RSI Pilot
-
- ## Paid file policy
-
- Paid buyer ZIPs, private workshop materials, implementation bundles, and enterprise delivery kits are not uploaded to the public site.
-
- All buy/apply buttons point to:
- {SHOP}
-
- ## Safe boundary
-
- GoalOS does not modify AI models. It improves workflows around AI through instructions, checks, scorecards, proof records, memory, evidence standards, versions, approvals, monitoring, and rollback.
- """, encoding="utf-8")
-
- # Hard repair any HTML: remove old shells, inject exactly one canonical shell/footer.
- MARKERS = [
- r".*?",
- r".*?",
- r".*?",
- r".*?",
- r".*?",
- r".*?",
- r".*?",
- r".*?",
- r".*?",
- r".*?",
- ]
- ASSET_PATTERNS = [
- r' ]+data-goalos-[^>]+>\s*',
- r'\s*',
- r' ]+goalos-(?:complete|product|unified|site-v2|site-v3|ladder)[^>]+\.css[^>]*>\s*',
- r'\s*',
- ]
- SHELL_TEXT = re.compile(r"(GoalOS|Proof Gradient|Products|Pricing|Services|Standards|Shop|Department RSI|Cloud MVP|RSI Workshop)", re.I)
-
- def remove_headers(text):
- body = re.search(r"]*>", text, flags=re.I)
- if not body: return text, 0
- start = body.end()
- # inspect only before first main/section content.
- next_content = re.search(r"]+>", " ", block)
- if SHELL_TEXT.search(flat):
- removed += 1
- return "\n"
- return block
- pattern = re.compile(r"<(?:header|nav)\b[\s\S]*?(?:header|nav)>|]*class=[\"'][^\"']*(?:topbar|shell|navbar|site-header|nav)[^\"']*[\"'])[\s\S]*?
", re.I)
- new_prefix = pattern.sub(repl, prefix)
- return text[:start] + new_prefix + text[prefix_end:], removed
-
- def remove_footers(text):
- removed = 0
- def repl(m):
- nonlocal removed
- block = m.group(0)
- if SHELL_TEXT.search(re.sub(r"<[^>]+>", " ", block)):
- removed += 1
- return "\n"
- return block
- return re.sub(r"", repl, text, flags=re.I), removed
-
- CANON_CSS = f' '
- CANON_JS = f''
-
- def repair_html(path):
- if "_archive" in path.parts or ".git" in path.parts: return
- text = path.read_text(encoding="utf-8", errors="ignore")
- if "" in text:
- text = text.replace("", f" {CANON_CSS}\n {CANON_JS}\n", 1)
- if "]*>)", r"\1\n" + NAV + "\n", text, count=1, flags=re.I)
- else:
- text = NAV + "\n" + text
- if "" in text:
- text = text.replace("
-
- {body}
-
- ", FOOTER + "\n", 1)
- else:
- text += "\n" + FOOTER
- if text != original:
- path.write_text(text, encoding="utf-8")
- REPORT["html_repaired"].append(path.relative_to(WEB_ROOT).as_posix())
-
- for html in sorted(WEB_ROOT.rglob("*.html")):
- repair_html(html)
-
- # Sitemap/robots.
- sitemap = '\n\n'
- for u in sorted(set(URLS)):
- sitemap += f' https://montrealai.github.io{BASE}{u} {TODAY} \n'
- sitemap += " \n"
- (WEB_ROOT / "sitemap.xml").write_text(sitemap, encoding="utf-8")
- (WEB_ROOT / "robots.txt").write_text(f"User-agent: *\nAllow: /\nSitemap: https://montrealai.github.io{BASE}/sitemap.xml\n", encoding="utf-8")
-
- # Paid artifact guard.
- # v3.1 is smarter: public AEP standard packages are allowed, but buyer/delivery/private bundles are blocked.
- def is_public_standard_package(rel):
- rel = rel.replace("\\", "/").lower()
- return re.fullmatch(r"standards/aep-[0-9]{3}/complete-package\.zip", rel) is not None
-
- restricted = []
- allowed_public_packages = []
- blocked_terms = [
- "buyer", "buyer_official", "complete_bundle", "delivery_kit", "seller_assets",
- "master_pack", "commercialization_ready", "quick_launch", "opulent_institutional",
- "institutional_boardroom", "implementation_sprint", "enterprise_rsi_pilot",
- "workshop_v", "buyer_facilitator"
- ]
- for p in WEB_ROOT.rglob("*"):
- if not p.is_file() or "_archive" in p.parts:
- continue
- rel = p.relative_to(WEB_ROOT).as_posix()
- name = p.name.lower()
-
- if name.endswith(".zip"):
- if is_public_standard_package(rel):
- allowed_public_packages.append(rel)
- else:
- restricted.append(rel)
- continue
-
- if any(term in name for term in blocked_terms):
- if not name.endswith((".md", ".html", ".json", ".txt", ".yml", ".yaml", ".css", ".js", ".svg")):
- restricted.append(rel)
-
- REPORT["allowed_public_packages"] = allowed_public_packages
- if restricted:
- raise SystemExit(
- "Paid/private artifacts detected in public site. These should not be deployed to GitHub Pages.\n"
- "Allowed exception: standards/AEP-###/complete-package.zip only.\n\n"
- + "\n".join(sorted(set(restricted))[:120])
- )
-
- # Validations.
- errors = []
- for html in sorted(WEB_ROOT.rglob("*.html")):
- if "_archive" in html.parts: continue
- text = html.read_text(encoding="utf-8", errors="ignore")
- if text.count("GOALOS-CANONICAL-SHELL:START") != 1:
- errors.append(f"{html.relative_to(WEB_ROOT)} has {text.count('GOALOS-CANONICAL-SHELL:START')} canonical shells")
- if text.count("GOALOS-CANONICAL-FOOTER:START") != 1:
- errors.append(f"{html.relative_to(WEB_ROOT)} has {text.count('GOALOS-CANONICAL-FOOTER:START')} canonical footers")
- for old in ["GOALOS-COMPLETE-NAV","GOALOS-PRODUCT-LADDER-NAV","GOALOS-UNIFIED-SHELL","GOALOS-CLOUD-MVP:START","GOALOS-CLOUD-MVP-V02:START"]:
- if old in text: errors.append(f"{html.relative_to(WEB_ROOT)} still has old marker {old}")
-
- # Internal link check.
- missing = []
- for html in WEB_ROOT.rglob("*.html"):
- if "_archive" in html.parts: continue
- text = html.read_text(encoding="utf-8", errors="ignore")
- for m in re.finditer(r'href=["\'](/proof-gradient/[^"#?\']*)["\']', text):
- target = m.group(1)[len(BASE):] or "/"
- fs = WEB_ROOT / target.lstrip("/")
- if target.endswith("/"): fs = fs / "index.html"
- if not fs.exists(): missing.append((html.relative_to(WEB_ROOT).as_posix(), m.group(1)))
- if missing:
- errors.append("Missing internal links:\n" + "\n".join(f"{s} -> {u}" for s,u in missing[:80]))
-
- REPORT["validation"] = {"errors": errors, "html_files_checked": len([p for p in WEB_ROOT.rglob('*.html') if '_archive' not in p.parts])}
- if errors:
- (WEB_ROOT / "goalos-public-site-release-v3-1-errors.json").write_text(json.dumps(errors, indent=2), encoding="utf-8")
- raise SystemExit("GoalOS public site release v3.1 validation failed:\n" + "\n".join(errors[:60]))
-
- # Manifest/report.
- manifest = []
- for p in sorted(WEB_ROOT.rglob("*")):
- if p.is_file() and ".git" not in p.parts:
- manifest.append({"path":p.relative_to(WEB_ROOT).as_posix(),"bytes":p.stat().st_size,"sha256":hashlib.sha256(p.read_bytes()).hexdigest()})
- (WEB_ROOT / "goalos-public-site-release-v3-1-manifest.json").write_text(json.dumps({"generated_at":NOW,"files":manifest}, indent=2)+"\n", encoding="utf-8")
- (WEB_ROOT / "goalos-public-site-release-v3-1-report.json").write_text(json.dumps(REPORT, indent=2)+"\n", encoding="utf-8")
-
- print("GoalOS public site release v3.1 complete.")
- print("Web root:", WEB_ROOT)
- print("Pages written:", len(REPORT["pages_written"]))
- print("HTML repaired:", len(REPORT["html_repaired"]))
- print("Validation: passed")
- PY
-
- python3 "$RUNNER_TEMP/goalos_public_site_release_v3.py"
-
- - name: Run public site validation
- shell: bash
- run: |
- set -euo pipefail
- WEB_ROOT="site"
- if [ ! -d "$WEB_ROOT" ] && [ -d "public" ]; then WEB_ROOT="public"; fi
-
- cat > "$RUNNER_TEMP/validate_goalos_public_site.py" <<'PY'
- from pathlib import Path
- import re, sys, json
-
- WEB_ROOT = Path("site")
- if not WEB_ROOT.exists() and Path("public").exists():
- WEB_ROOT = Path("public")
- BASE = "/proof-gradient"
- errors = []
-
- # HTML shell validation.
- for html in sorted(WEB_ROOT.rglob("*.html")):
- if "_archive" in html.parts:
- continue
- text = html.read_text(encoding="utf-8", errors="ignore")
- if text.count("GOALOS-CANONICAL-SHELL:START") != 1:
- errors.append(f"{html.relative_to(WEB_ROOT)} has {text.count('GOALOS-CANONICAL-SHELL:START')} canonical shells")
- if text.count("GOALOS-CANONICAL-FOOTER:START") != 1:
- errors.append(f"{html.relative_to(WEB_ROOT)} has {text.count('GOALOS-CANONICAL-FOOTER:START')} canonical footers")
- for old in ["GOALOS-COMPLETE-NAV","GOALOS-PRODUCT-LADDER-NAV","GOALOS-UNIFIED-SHELL","GOALOS-CLOUD-MVP:START","GOALOS-CLOUD-MVP-V02:START"]:
- if old in text:
- errors.append(f"{html.relative_to(WEB_ROOT)} still has old marker {old}")
-
- # Internal links.
- for html in WEB_ROOT.rglob("*.html"):
- if "_archive" in html.parts:
- continue
- text = html.read_text(encoding="utf-8", errors="ignore")
- for m in re.finditer(r'href=["\'](/proof-gradient/[^"#?\']*)["\']', text):
- target = m.group(1)[len(BASE):] or "/"
- fs = WEB_ROOT / target.lstrip("/")
- if target.endswith("/"):
- fs = fs / "index.html"
- if not fs.exists():
- errors.append(f"Broken link in {html.relative_to(WEB_ROOT)} -> {m.group(1)}")
-
- # Paid/private artifact guard.
- for p in WEB_ROOT.rglob("*"):
- if not p.is_file() or "_archive" in p.parts:
- continue
- name = p.name.lower()
- if name.endswith(".zip"):
- errors.append(f"Paid/private ZIP detected in public site: {p.relative_to(WEB_ROOT)}")
- if any(term in name for term in ["buyer", "buyer_official", "complete_bundle", "delivery_kit", "seller_assets", "master_pack", "commercialization_ready", "quick_launch"]):
- if not name.endswith((".md",".html",".json",".txt",".yml",".yaml")):
- errors.append(f"Suspicious paid/private artifact detected: {p.relative_to(WEB_ROOT)}")
-
- if errors:
- print("\n".join(errors))
- sys.exit(1)
-
- print("GoalOS public site validation passed.")
- PY
-
- python3 "$RUNNER_TEMP/validate_goalos_public_site.py"
-
- if [ -f "$WEB_ROOT/app/goalos-cloud-mvp/tests/enterprise-core.test.mjs" ]; then
- node "$WEB_ROOT/app/goalos-cloud-mvp/tests/enterprise-core.test.mjs"
- else
- echo "Cloud MVP Node test not found; skipping because app may be installed by separate workflow."
- fi
-
- - 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 public site release
- shell: bash
- run: |
- set -euo pipefail
- WEB_ROOT="${{ steps.build.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" docs || true
- if git diff --cached --quiet; then
- echo "No public site changes to commit."
- else
- git commit -m "Release unified GoalOS public site v3.1 [skip ci]"
- git push
- fi
-
- - name: Configure GitHub Pages
- uses: actions/configure-pages@v5
-
- - name: Upload GitHub Pages artifact
- uses: actions/upload-pages-artifact@v3
- with:
- path: ${{ steps.build.outputs.web_root }}
-
- - name: Deploy GitHub Pages
- uses: actions/deploy-pages@v4
+ - name: Validate GoalOS public site
+ run: python scripts/validate_goalos_public_site.py
+ - name: Check paid/private artifacts
+ run: python scripts/check_no_paid_artifacts.py
+ - name: Validate docs, tables, and figures
+ run: python scripts/validate_docs_tables_figures.py
+ - name: Validate GoalOS catalog
+ run: python scripts/validate_goalos_catalog.py
+ - name: Run public-site rule regression tests
+ run: pytest tests/test_goalos_public_site_rules.py
diff --git a/.github/workflows/goalos-public-site-release-v3-2.yml b/.github/workflows/goalos-public-site-release-v3-2.yml
index a03b8afb..d19c767c 100644
--- a/.github/workflows/goalos-public-site-release-v3-2.yml
+++ b/.github/workflows/goalos-public-site-release-v3-2.yml
@@ -1,639 +1,25 @@
-name: GoalOS Public Site Release v3.2.1
+name: goalos-public-site-release-v3-2 (obsolete; delegates to v12 validation)
on:
workflow_dispatch:
permissions:
- contents: write
- pages: write
- id-token: write
-
-concurrency:
- group: goalos-public-site-release-v3-2-1
- cancel-in-progress: false
+ contents: read
jobs:
- release-site:
- name: Refresh public site and RSI Sprint Workshop (v3.2)
+ validate:
+ name: Obsolete release workflow delegated to shared v12 scripts
runs-on: ubuntu-latest
-
steps:
- name: Check out repository
uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Generate unified GoalOS public site
- 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_public_site_release_v3.py" <<'PY'
- from pathlib import Path
- from html import escape
- import datetime, hashlib, json, re, shutil, sys
-
- 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"
- TODAY = datetime.datetime.utcnow().strftime("%Y-%m-%d")
- NOW = datetime.datetime.utcnow().replace(microsecond=0).isoformat() + "Z"
-
- ASSETS = WEB_ROOT / "assets"
- ASSETS.mkdir(parents=True, exist_ok=True)
- ARCHIVE = WEB_ROOT / "_archive" / f"before_goalos_public_site_release_v3_{TODAY}"
- ARCHIVE.mkdir(parents=True, exist_ok=True)
-
- REPORT = {
- "generated_at": NOW,
- "web_root": str(WEB_ROOT),
- "release": "GoalOS public site release v3.2",
- "purpose": "Unify public website, remove duplicate navbars, refresh commercial ladder, include RSI Sprint Workshop public pages, keep paid materials private.",
- "backups": [],
- "pages_written": [],
- "html_repaired": [],
- "old_markers_removed": 0,
- "old_assets_removed": 0,
- "topbars_removed": 0,
- "footers_removed": 0,
- "validation": {},
- "paid_artifact_policy": "No buyer ZIPs, workshop bundles, implementation kits, enterprise pilot delivery kits, or private materials are uploaded."
- }
-
- OFFERS = [
- {"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","audience":"Beginners, creators, freelancers, consultants, small-business owners.","bullets":["60-minute first win","offline workflow builder","copy-paste prompts","editable templates","completed beginner examples","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","audience":"Serious operators, consultants, agencies, creators, small teams.","bullets":["RSI Lite guide","offline builder","scorecard","version tracker","improvement prompts","v1.0 to v1.2 examples"]},
- {"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","audience":"Department leads, operations managers, AI champions, team leads.","bullets":["Proof Room charter","AI permission map","workflow owner cards","proof notes","weekly reviews","executive reports","rollback receipts","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":"Premium private workshop","audience":"Founders, operators, teams, consultants, agencies, AI champions.","bullets":["workflow v1.0","first run output","scorecard","diagnosis","workflow v1.1","proof note","public-safe proof-card draft","30-day next-run plan"]},
- {"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","audience":"Department leaders, AI champions, operations executives.","bullets":["3 workflows","owners and reviewers","AI permission map","weekly proof review","monthly report","rollback procedure","case study draft"]},
- {"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","audience":"Enterprise AI governance, CIO/CDO office, support/ops executives.","bullets":["90-day pilot","one workflow family","benchmark suite","proof records","v1.1 proposal","approval gate","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"),
- ]
-
- EXAMPLES = [
- ("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(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"].append(dest.relative_to(WEB_ROOT).as_posix())
-
- 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-v3.css").write_text(CSS, encoding="utf-8")
-
- JS = r"""(function(){function ready(f){document.readyState!=="loading"?f():document.addEventListener("DOMContentLoaded",f)}ready(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-v3.js").write_text(JS, encoding="utf-8")
-
- OG = """GOALOS · PROOF GRADIENT Recursive Workflow OS. Proof Rooms. RSI Sprint Workshop. Public site only · paid files stay private """
- (ASSETS / "goalos-public-site-og.svg").write_text(OG, encoding="utf-8")
-
- NAV = f"""
-
- """
-
- FOOTER = f"""
-
- """
-
- def base_page(title, desc, body):
- return f"""
-
-
-
-
-
{escape(title)}
-
-
-
-
-
-
-
-
-