From d3b7959a418d7052b70fddf0dd0cef58feb38548 Mon Sep 17 00:00:00 2001
From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com>
Date: Mon, 7 Sep 2026 03:32:28 +0100
Subject: [PATCH 1/8] Execute CMake and pipeline commands with failure
propagation
---
.github/workflows/actions.lock | 24 +++----
.github/workflows/governance.yml | 5 +-
.github/workflows/hypatia-scan.yml | 7 +-
.machine_readable/ai/AI.a2ml | 4 +-
.../{6a2 => descriptiles}/AGENTIC.a2ml | 0
.../{6a2 => descriptiles}/ECOSYSTEM.a2ml | 0
.../{6a2 => descriptiles}/META.a2ml | 0
.../{6a2 => descriptiles}/NEUROSYM.a2ml | 0
.../{6a2 => descriptiles}/PLAYBOOK.a2ml | 0
.../{6a2 => descriptiles}/STATE.a2ml | 5 ++
0-AI-MANIFEST.a2ml | 6 +-
src/codegen/mod.rs | 45 +++++++++++--
tests/build_process.rs | 65 +++++++++++++++++++
13 files changed, 131 insertions(+), 30 deletions(-)
rename .machine_readable/{6a2 => descriptiles}/AGENTIC.a2ml (100%)
rename .machine_readable/{6a2 => descriptiles}/ECOSYSTEM.a2ml (100%)
rename .machine_readable/{6a2 => descriptiles}/META.a2ml (100%)
rename .machine_readable/{6a2 => descriptiles}/NEUROSYM.a2ml (100%)
rename .machine_readable/{6a2 => descriptiles}/PLAYBOOK.a2ml (100%)
rename .machine_readable/{6a2 => descriptiles}/STATE.a2ml (80%)
create mode 100644 tests/build_process.rs
diff --git a/.github/workflows/actions.lock b/.github/workflows/actions.lock
index 62bb9f7..9b0678f 100644
--- a/.github/workflows/actions.lock
+++ b/.github/workflows/actions.lock
@@ -11,12 +11,12 @@ workflows:
- 'actions/cache@v6.1.0'
- 'actions/checkout@v7.0.1'
- 'actions/configure-pages@v6.0.0'
- - 'actions/deploy-pages@v5.0.0'
+ - 'actions/deploy-pages@v5.0.1'
- 'actions/upload-pages-artifact@v5.0.0'
- 'haskell-actions/setup@v2.12.0'
'.github/workflows/codeql.yml':
- 'actions/checkout@v7.0.1'
- - 'github/codeql-action@v4.37.7'
+ - 'github/codeql-action@v4.37.9'
'.github/workflows/dogfood-gate.yml':
- 'actions/checkout@v7.0.1'
'.github/workflows/governance.yml': []
@@ -31,7 +31,7 @@ workflows:
'.github/workflows/release.yml':
- 'actions/checkout@v7.0.1'
- 'actions/upload-artifact@v7.0.1'
- - 'softprops/action-gh-release@v3.0.2'
+ - 'softprops/action-gh-release@v3.0.3'
'.github/workflows/rhodibot.yml':
- 'actions/checkout@v7.0.1'
'.github/workflows/rust-ci.yml': []
@@ -58,9 +58,9 @@ dependencies:
commit: 'sha1-45bfe0192ca1faeb007ade9deae92b16b8254a0d'
owner_id: 44036562
repo_id: 513659658
- 'actions/deploy-pages@v5.0.0':
- ref: 'v5.0.0'
- commit: 'sha1-cd2ce8fcbc39b97be8ca5fce6e763baed58fa128'
+ 'actions/deploy-pages@v5.0.1':
+ ref: 'v5.0.1'
+ commit: 'sha1-368f82528645a54fb793d4d04e342629a3f51346'
owner_id: 44036562
repo_id: 438112499
'actions/download-artifact@v8.0.1':
@@ -90,9 +90,9 @@ dependencies:
commit: 'sha1-54075bcc5e249e4758d363f27d099f55d843f124'
owner_id: 47606891
repo_id: 331103973
- 'github/codeql-action@v4.37.7':
- ref: 'v4.37.7'
- commit: 'sha1-ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd'
+ 'github/codeql-action@v4.37.9':
+ ref: 'v4.37.9'
+ commit: 'sha1-cdf488f595d80d6e07e03d4674febd5ab45fa938'
owner_id: 9919
repo_id: 259445878
'haskell-actions/setup@v2.12.0':
@@ -110,8 +110,8 @@ dependencies:
commit: 'sha1-28959ce8df70de7be546dd1250a005dd32156697'
owner_id: 18365890
repo_id: 220359305
- 'softprops/action-gh-release@v3.0.2':
- ref: 'v3.0.2'
- commit: 'sha1-3d0d9888cb7fd7b750713d6e236d1fcb99157228'
+ 'softprops/action-gh-release@v3.0.3':
+ ref: 'v3.0.3'
+ commit: 'sha1-efb35369e0ad2afab669f228072c1b0d510eae64'
owner_id: 2242
repo_id: 204253808
diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml
index be5d5f2..4854041 100644
--- a/.github/workflows/governance.yml
+++ b/.github/workflows/governance.yml
@@ -1,6 +1,5 @@
-# SPDX-License-Identifier: MPL-2.0
-# This workflow is managed by gh actions-lock.
# This workflow is managed by gh actions-lock.
+# SPDX-License-Identifier: MPL-2.0
name: Governance
on:
@@ -16,4 +15,4 @@ permissions:
jobs:
governance:
- uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@84355587cb2a1f86e6882de83514a32db2646e7a
+ uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@fcb566cfb8a86cea2d3666bf65a4f177a49b1313
diff --git a/.github/workflows/hypatia-scan.yml b/.github/workflows/hypatia-scan.yml
index 23785f3..698f33d 100644
--- a/.github/workflows/hypatia-scan.yml
+++ b/.github/workflows/hypatia-scan.yml
@@ -1,6 +1,5 @@
-# SPDX-License-Identifier: MPL-2.0
-# This workflow is managed by gh actions-lock.
# This workflow is managed by gh actions-lock.
+# SPDX-License-Identifier: MPL-2.0
name: Hypatia Security Scan
on:
@@ -19,4 +18,6 @@ permissions:
jobs:
scan:
- uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@84355587cb2a1f86e6882de83514a32db2646e7a
+ uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@fcb566cfb8a86cea2d3666bf65a4f177a49b1313
+ with:
+ block-on-high: true
diff --git a/.machine_readable/ai/AI.a2ml b/.machine_readable/ai/AI.a2ml
index ba07cd4..bb5fdb2 100644
--- a/.machine_readable/ai/AI.a2ml
+++ b/.machine_readable/ai/AI.a2ml
@@ -24,8 +24,8 @@ Key domain concepts:
## Workflow
-1. Inspect `.machine_readable/6a2/STATE.a2ml` for blockers and next actions.
-2. Respect constraints in `.machine_readable/6a2/AGENTIC.a2ml`.
+1. Inspect `.machine_readable/descriptiles/STATE.a2ml` for blockers and next actions.
+2. Respect constraints in `.machine_readable/descriptiles/AGENTIC.a2ml`.
3. After finishing edits, update STATE.a2ml with outcomes and commit.
## Key Rules
diff --git a/.machine_readable/6a2/AGENTIC.a2ml b/.machine_readable/descriptiles/AGENTIC.a2ml
similarity index 100%
rename from .machine_readable/6a2/AGENTIC.a2ml
rename to .machine_readable/descriptiles/AGENTIC.a2ml
diff --git a/.machine_readable/6a2/ECOSYSTEM.a2ml b/.machine_readable/descriptiles/ECOSYSTEM.a2ml
similarity index 100%
rename from .machine_readable/6a2/ECOSYSTEM.a2ml
rename to .machine_readable/descriptiles/ECOSYSTEM.a2ml
diff --git a/.machine_readable/6a2/META.a2ml b/.machine_readable/descriptiles/META.a2ml
similarity index 100%
rename from .machine_readable/6a2/META.a2ml
rename to .machine_readable/descriptiles/META.a2ml
diff --git a/.machine_readable/6a2/NEUROSYM.a2ml b/.machine_readable/descriptiles/NEUROSYM.a2ml
similarity index 100%
rename from .machine_readable/6a2/NEUROSYM.a2ml
rename to .machine_readable/descriptiles/NEUROSYM.a2ml
diff --git a/.machine_readable/6a2/PLAYBOOK.a2ml b/.machine_readable/descriptiles/PLAYBOOK.a2ml
similarity index 100%
rename from .machine_readable/6a2/PLAYBOOK.a2ml
rename to .machine_readable/descriptiles/PLAYBOOK.a2ml
diff --git a/.machine_readable/6a2/STATE.a2ml b/.machine_readable/descriptiles/STATE.a2ml
similarity index 80%
rename from .machine_readable/6a2/STATE.a2ml
rename to .machine_readable/descriptiles/STATE.a2ml
index c75386c..ea972ba 100644
--- a/.machine_readable/6a2/STATE.a2ml
+++ b/.machine_readable/descriptiles/STATE.a2ml
@@ -38,3 +38,8 @@ actions = [
[maintenance-status]
last-run-utc = "2026-03-21T00:00:00Z"
last-result = "unknown" # unknown | pass | warn | fail
+
+[language-portfolio-audit-20260907]
+scope = "Evidence audit and scoped repairs; no blanket readiness upgrade"
+report = "https://github.com/hyperpolymath/nextgen-languages/blob/main/docs/audits/2026-09-07-language-portfolio.md"
+metadata-path = ".machine_readable/descriptiles/"
diff --git a/0-AI-MANIFEST.a2ml b/0-AI-MANIFEST.a2ml
index 9075eb6..b4243dd 100644
--- a/0-AI-MANIFEST.a2ml
+++ b/0-AI-MANIFEST.a2ml
@@ -18,7 +18,7 @@ Halideiser makes this separation automatic.
### Machine-Readable Metadata: `.machine_readable/` ONLY
-These 6 a2ml files MUST exist in `.machine_readable/6a2/` directory ONLY:
+These 6 a2ml files MUST exist in `.machine_readable/descriptiles/` directory ONLY:
1. **STATE.a2ml** - Project state, progress, blockers
2. **META.a2ml** - Architecture decisions, governance
3. **ECOSYSTEM.a2ml** - Position in -iser ecosystem, relationships
@@ -88,7 +88,7 @@ halideiser/
├── container/ # Stapeln container ecosystem
├── verification/ # Formal verification artifacts
└── .machine_readable/ # ALL machine-readable metadata
- ├── 6a2/ # STATE, META, ECOSYSTEM, AGENTIC, NEUROSYM, PLAYBOOK
+ ├── descriptiles/ # STATE, META, ECOSYSTEM, AGENTIC, NEUROSYM, PLAYBOOK
├── anchors/ # ANCHOR.a2ml
├── policies/ # Maintenance policies
├── bot_directives/ # Bot instructions
@@ -109,7 +109,7 @@ halideiser/
Read THIS file (0-AI-MANIFEST.a2ml) first.
Understand canonical location: `.machine_readable/`.
-Read `.machine_readable/6a2/STATE.a2ml` for current status and next actions.
+Read `.machine_readable/descriptiles/STATE.a2ml` for current status and next actions.
## ATTESTATION PROOF
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 0e3cba1..8a6a068 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -59,20 +59,40 @@ pub fn generate_all(manifest: &Manifest, output_dir: &str) -> Result<()> {
/// Build generated artifacts by invoking CMake + make.
pub fn build(manifest: &Manifest, release: bool) -> Result<()> {
+ crate::manifest::validate(manifest)?;
let build_type = if release { "Release" } else { "Debug" };
println!(
"Building {} ({} mode) — target: {}",
manifest.project.name, build_type, manifest.target.arch
);
- println!(
- " Run: cd generated/halideiser && cmake -B build -DCMAKE_BUILD_TYPE={} && cmake --build build",
- build_type
+ let source_dir = Path::new("generated/halideiser");
+ let build_dir = source_dir.join("build");
+ let configure = std::process::Command::new("cmake")
+ .arg("-S")
+ .arg(source_dir)
+ .arg("-B")
+ .arg(&build_dir)
+ .arg(format!("-DCMAKE_BUILD_TYPE={build_type}"))
+ .status()
+ .context("Failed to start CMake configuration")?;
+ anyhow::ensure!(
+ configure.success(),
+ "CMake configuration failed: {configure}"
);
+ let compile = std::process::Command::new("cmake")
+ .arg("--build")
+ .arg(&build_dir)
+ .arg("--config")
+ .arg(build_type)
+ .status()
+ .context("Failed to start CMake build")?;
+ anyhow::ensure!(compile.success(), "CMake build failed: {compile}");
Ok(())
}
/// Run the generated pipeline binary.
pub fn run(manifest: &Manifest, args: &[String]) -> Result<()> {
+ crate::manifest::validate(manifest)?;
println!(
"Running {} pipeline ({} stages)",
manifest.project.name,
@@ -81,9 +101,20 @@ pub fn run(manifest: &Manifest, args: &[String]) -> Result<()> {
if !args.is_empty() {
println!(" Extra args: {}", args.join(" "));
}
- println!(
- " Run: ./generated/halideiser/build/{}_runner