Skip to content

Commit f51b27e

Browse files
CI/CD gate fixes + estate-standardization reconciliation (#77)
Root-cause CI fixes (3 Rust tests -> 173/0, valid wokelang.opam, dogfood-gate YAML startup-failure, ReScript removal) reconciled with main's estate-standardization. cargo test green; no banned .res*; no PMPL SPDX headers.
2 parents 7d44fee + 19359e0 commit f51b27e

57 files changed

Lines changed: 1407 additions & 1394 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/CLAUDE.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,19 @@ Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
44
-->
55
## Machine-Readable Artefacts
66

7-
The following files in `.machine_readable/` contain structured project metadata:
8-
9-
- `STATE.scm` - Current project state and progress
10-
- `META.scm` - Architecture decisions and development practices
11-
- `ECOSYSTEM.scm` - Position in the ecosystem and related projects
12-
- `AGENTIC.scm` - AI agent interaction patterns
13-
- `NEUROSYM.scm` - Neurosymbolic integration config
14-
- `PLAYBOOK.scm` - Operational runbook
7+
The following files in `.machine_readable/6a2/` contain structured project metadata
8+
(a2ml form; converted from the original `.scm` sources):
9+
10+
- `6a2/STATE.a2ml` - Current project state and progress
11+
- `6a2/META.a2ml` - Architecture decisions and development practices
12+
- `6a2/ECOSYSTEM.a2ml` - Position in the ecosystem and related projects
13+
- `6a2/AGENTIC.a2ml` - AI agent interaction patterns
14+
- `6a2/NEUROSYM.a2ml` - Neurosymbolic integration config
15+
- `6a2/PLAYBOOK.a2ml` - Operational runbook
16+
17+
Also: `anchors/ANCHOR.a2ml` (canonical identity), `contractiles/{must,trust,dust,bust}/`
18+
(contract files), `svc/k9/` (self-validation), `bot_directives/` (fleet/hypatia hooks),
19+
and `0-AI-MANIFEST.a2ml` at repo root (AI entry point — read first).
1520

1621
---
1722

.clusterfuzzlite/Containerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0
1+
# SPDX-License-Identifier: MPL-2.0
22
FROM gcr.io/oss-fuzz-base/base-builder-rust@sha256:73c1d5648db54100639339d411a5d192cbc8bf413ee91e843a07cf6f0e319dc7
33

44
COPY . $SRC/wokelang

.clusterfuzzlite/build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash -eu
2-
# SPDX-License-Identifier: PMPL-1.0
2+
# SPDX-License-Identifier: MPL-2.0
33
cd $SRC/wokelang
44
cargo +nightly fuzz build
55
for target in $(cargo +nightly fuzz list); do

.github/workflows/dogfood-gate.yml

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
4040
- name: Validate A2ML manifests
4141
if: steps.detect.outputs.count > 0
42-
uses: hyperpolymath/a2ml-validate-action@6bff6ec134fc977e86d25166a5c522ddea5c1e78 # main
42+
uses: hyperpolymath/a2ml-validate-action@d95da62b50b26e7fef64aaba44e28ef92a56b476 # main (repinned 2026-06-12: 6bff6ec startup-failed the gate)
4343
with:
4444
path: '.'
4545
strict: 'false'
@@ -88,7 +88,7 @@ jobs:
8888
8989
- name: Validate K9 contracts
9090
if: steps.detect.outputs.k9_count > 0
91-
uses: hyperpolymath/k9-validate-action@2d96f43c538964b097d159ed3a56ba5b5ceca227 # main
91+
uses: hyperpolymath/k9-validate-action@0cd8a79e579a3b5d93d4d5fe114d8f099d5549c9 # main (repinned 2026-06-12 to live HEAD)
9292
with:
9393
path: '.'
9494
strict: 'false'
@@ -261,28 +261,30 @@ jobs:
261261
262262
echo "has_manifest=true" >> "$GITHUB_OUTPUT"
263263
264-
# Validate TOML structure using Python 3.11+ tomllib
264+
# Validate TOML structure using Python 3.11+ tomllib.
265+
# NOTE: the -c body MUST stay indented inside this `run: |` block scalar.
266+
# A prior flush-left version was invalid YAML and startup-failed the gate.
265267
python3 -c "
266-
import tomllib, sys
267-
with open('eclexiaiser.toml', 'rb') as f:
268-
data = tomllib.load(f)
269-
project = data.get('project', {})
270-
if not project.get('name', '').strip():
271-
print('ERROR: project.name is required', file=sys.stderr)
272-
sys.exit(1)
273-
functions = data.get('functions', [])
274-
if not functions:
275-
print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)
276-
sys.exit(1)
277-
for fn in functions:
278-
if not fn.get('name', '').strip():
279-
print('ERROR: function name cannot be empty', file=sys.stderr)
280-
sys.exit(1)
281-
if not fn.get('source', '').strip():
282-
print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)
283-
sys.exit(1)
284-
print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')
285-
" || {
268+
import tomllib, sys
269+
with open('eclexiaiser.toml', 'rb') as f:
270+
data = tomllib.load(f)
271+
project = data.get('project', {})
272+
if not project.get('name', '').strip():
273+
print('ERROR: project.name is required', file=sys.stderr)
274+
sys.exit(1)
275+
functions = data.get('functions', [])
276+
if not functions:
277+
print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)
278+
sys.exit(1)
279+
for fn in functions:
280+
if not fn.get('name', '').strip():
281+
print('ERROR: function name cannot be empty', file=sys.stderr)
282+
sys.exit(1)
283+
if not fn.get('source', '').strip():
284+
print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)
285+
sys.exit(1)
286+
print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')
287+
" || {
286288
echo "::error file=eclexiaiser.toml::Invalid eclexiaiser.toml — see step output for details"
287289
exit 1
288290
}

.github/workflows/scorecard.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0
1+
# SPDX-License-Identifier: MPL-2.0
22
name: Scorecards supply-chain security
33
on:
44
branch_protection_rule:

.github/workflows/secret-scanner.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0
1+
# SPDX-License-Identifier: MPL-2.0
22
name: Secret Scanner
33
on:
44
pull_request:
Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,43 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# ECOSYSTEM.a2ml — Ecosystem position
3-
# Converted from ECOSYSTEM.scm on 2026-03-15
3+
# Converted from ECOSYSTEM.scm on 2026-03-15; enriched 2026-06-12.
4+
# Relationships, dependencies, integration points.
45

56
[metadata]
67
project = "wokelang"
78
ecosystem = "hyperpolymath"
9+
version = "0.1.0"
10+
last-updated = "2026-06-12"
11+
12+
[project]
13+
name = "wokelang"
14+
purpose = "A human-centered, consent-driven programming language whose type system discharges consent / affine-use safety automatically"
15+
role = "language" # e.g. language, ffi-infrastructure, cli-tool, library, service
816

917
[position]
1018
type = "component"
19+
20+
[position-in-ecosystem]
21+
tier = "1" # 1 | 2 | infrastructure
22+
notes = "wokelang is a standalone language in the hyperpolymath estate, distinct from the estate-primary AffineScript / my-lang. It consumes echo-types as its formal substrate."
23+
24+
[related-projects]
25+
projects = [
26+
{ name = "echo-types", relationship = "upstream-dependency", notes = "Constructive Agda formalization of fiber-based structured loss ('echo types'). The source of truth wokelang consumes for consent / affine-loss reasoning; integrated into the typechecker on the frontier workstream." },
27+
{ name = "nextgen-languages", relationship = "sibling-estate", notes = "Home of AffineScript / my-lang, the estate-primary language. Coordination monorepo for the language family." },
28+
{ name = "nextgen-typing", relationship = "sibling-estate", notes = "Coordination monorepo for the hyperpolymath type-theory pipeline; the MAXIMAL reference for these machine-readable governance artefacts." },
29+
{ name = "panll", relationship = "estate-peer", notes = "Three-pane cognitive-relief HTI in the estate; a consumer-facing surface for estate capabilities." },
30+
{ name = "verisimdb", relationship = "estate-peer", notes = "Identity-state capture with filesystem fallback (VeriSim family)." },
31+
{ name = "groove", relationship = "integration-protocol", notes = "HTTP-based service-discovery protocol; lets estate capabilities announce themselves for automatic detection. Part of wokelang's dogfooding gate." },
32+
{ name = "hypatia", relationship = "security-tooling", notes = "Neurosymbolic security scanner; runs as the hypatia-scan CI gate." },
33+
{ name = "gitbot-fleet", relationship = "automation", notes = "Estate gitbot / agent fleet that operates across repositories." },
34+
{ name = "standards", relationship = "governance-upstream", notes = "hyperpolymath/standards supplies the thin-wrapper reusable workflows and the Hyperpolymath Standard language policy wokelang follows." },
35+
]
36+
37+
[integration-points]
38+
integrations = [
39+
{ system = "echo-types", direction = "inbound", protocol = "formalization-consume", notes = "wokelang's typechecker integrates echo-types' fiber-based structured-loss formalization; an Isabelle proof narrative backs the consent-safety guarantees." },
40+
{ system = "groove", direction = "bidirectional", protocol = "service-discovery", notes = "Groove discovery is exercised by the dogfooding gate so wokelang capabilities are announceable to the estate." },
41+
{ system = "hypatia", direction = "inbound", protocol = "security-scan", notes = "hypatia-scan analyses the repository as part of CI (neurosymbolic / symbolic-rule scanning)." },
42+
{ system = "standards", direction = "inbound", protocol = "reusable-workflow", notes = "CI gates are thin wrappers over hyperpolymath/standards reusable workflows." },
43+
]

.machine_readable/6a2/META.a2ml

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,78 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# META.a2ml — Project meta-information
3-
# Converted from META.scm on 2026-03-15
3+
# Converted from META.scm on 2026-03-15; enriched 2026-06-12.
4+
# Architecture decisions, design rationale, governance.
45

56
[metadata]
67
project = "wokelang"
78
author = "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>"
89
license = "MPL-2.0"
910
standard = "RSR 2026"
11+
version = "0.1.0"
12+
last-updated = "2026-06-12"
13+
14+
[project-info]
15+
type = "monorepo" # library | binary | monorepo | service | website
16+
tagline = "A human-centered, consent-driven programming language"
17+
languages = ["rust", "ocaml"]
18+
primary-language = "rust"
19+
20+
[implementation]
21+
primary = "Rust toolchain in src/"
22+
rust-components = "lexer, parser, typechecker, bytecode VM (compiler + machine), tree-walking interpreter, LSP (woke-lsp), DAP (woke-dap), formatter, linter, REPL, stdlib, codegen, ABI/FFI, security"
23+
rust-lib-tests = "173 passing"
24+
binaries = "woke, woke-lsp, woke-dap"
25+
ocaml-core = "core/ reference implementation: ocamllex lexer + menhir parser + evaluator (dune)"
26+
27+
[architecture-decisions]
28+
adrs = [
29+
{ id = "ADR-001", title = "Rust is the primary toolchain; OCaml core is the reference", status = "accepted", date = "2026-03-15",
30+
rationale = "The production toolchain (lexer, parser, typechecker, VM, interpreter, LSP, DAP, tooling) is implemented in Rust under src/. A smaller OCaml implementation in core/ (ocamllex + menhir + evaluator) serves as an independent reference for the language semantics and an end-to-end cross-check. Both are first-class; the OCaml core grounds the e2e CI gate." },
31+
{ id = "ADR-002", title = "Consent / affine safety is the defining language feature", status = "accepted", date = "2026-03-15",
32+
rationale = "wokelang is human-centered and consent-driven: the type system discharges consent and affine-use obligations so users never reason about them manually. This is the architectural invariant the whole toolchain serves." },
33+
{ id = "ADR-003", title = "Echo types are the formal substrate for consent / affine safety", status = "accepted", date = "2026-06-12",
34+
rationale = "wokelang consumes hyperpolymath/echo-types (constructive Agda formalization of fiber-based structured loss) as the source of truth for the loss / consent reasoning. The frontier workstream integrates echo types into the typechecker, with an end-to-end, near-first-principles machine-checked proof narrative (Isabelle preferred) backing it." },
35+
{ id = "ADR-004", title = "Hyperpolymath Standard governance via thin-wrapper reusables", status = "accepted", date = "2026-06-12",
36+
rationale = "CI is 20 GitHub Actions workflows built on thin-wrapper reusable workflows from hyperpolymath/standards, plus a dogfooding gate (a2ml / k9 / empty-lint / groove / eclexiaiser), clusterfuzzlite fuzzing, and a hypatia security scan. Machine state lives only under .machine_readable/ (never the repo root)." },
37+
]
38+
39+
[development-practices]
40+
build-tool = "just" # Justfile at repo root; contractile.just for contracts
41+
rust-build = "cargo"
42+
ocaml-build = "dune"
43+
container-runtime = "podman" # Containerfile present
44+
ci-platform = "github-actions"
45+
package-manager = "guix" # guix.scm primary; flake.nix fallback
46+
47+
[maintenance-axes]
48+
scoping-first = true
49+
execution-order = "axis-1 > axis-2 > axis-3"
50+
axis-1 = "must > intend > like"
51+
axis-2 = "corrective > adaptive > perfective"
52+
axis-3 = "systems > compliance > effects"
53+
54+
[scoping]
55+
sources = "README, ROADMAP, status docs, maintenance checklist, CI/security docs"
56+
marker-scan = "TODO/FIXME/XXX/HACK/STUB/PARTIAL"
57+
proof-escape-scan = "believe_me/assert_total/sorry/Admitted/unsafeCoerce/Obj.magic"
58+
59+
[axis-2-maintenance-rules]
60+
corrective-first = true
61+
adaptive-second = true
62+
adaptive-focus = "scope-change reconciliation, stale-reference removal, obsolete-work culling"
63+
perfective-third = true
64+
perfective-source = "axis-1 honest state after corrective/adaptive updates"
65+
66+
[axis-3-audit-rules]
67+
audit-focus = "systems in place, documentation explains actual state, consent/affine-safety and security accounted for, observed effects reviewed"
68+
compliance-focus = "seams/compromises/exception register, bounded exceptions, anti-drift checks"
69+
drift-risk-example = "a single banned-language exception (e.g. ReScript/TypeScript) broadening into a policy violation"
70+
effects-evidence = "test-suite execution/results (Rust + OCaml e2e) and maintainer status dialogue/review"
71+
72+
[design-rationale]
73+
summary = [
74+
"wokelang is a human-centered, consent-driven language: the type system does the hard consent/affine-safety reasoning so users never have to.",
75+
"Rust under src/ is the production toolchain; the OCaml core/ is the independent reference implementation and e2e cross-check.",
76+
"Echo types (hyperpolymath/echo-types) are the formal substrate; the frontier is integrating them into the typechecker with a machine-checked Isabelle proof narrative.",
77+
"Governance follows the Hyperpolymath Standard: MPL-2.0, allowed/banned language policy, dogfooding gate, and machine state confined to .machine_readable/.",
78+
]

.machine_readable/6a2/STATE.a2ml

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,38 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# STATE.a2ml — Project state checkpoint
3-
# Converted from STATE.scm on 2026-03-15
3+
# Converted from STATE.scm on 2026-03-15; refreshed 2026-06-12.
44

55
[metadata]
66
project = "wokelang"
77
version = "0.1.0"
8-
last-updated = "2026-03-15"
8+
last-updated = "2026-06-12"
99
status = "active"
1010

1111
[project-context]
1212
name = "wokelang"
13-
completion-percentage = 5
14-
phase = "concept"
13+
completion-percentage = 35
14+
phase = "implementation"
15+
tagline = "A human-centered, consent-driven programming language"
16+
17+
[implementation]
18+
primary = "Rust toolchain in src/"
19+
rust-components = "lexer, parser, typechecker, bytecode VM (compiler + machine), tree-walking interpreter, LSP, DAP, formatter, linter, REPL, stdlib, codegen, ABI/FFI, security"
20+
rust-lib-tests = "173 passing (0 failing)"
21+
binaries = "woke, woke-lsp, woke-dap"
22+
ocaml-core = "core/ reference: ocamllex lexer + menhir parser + evaluator (dune)"
23+
24+
[frontier]
25+
focus = "integrate echo-types into the type checker + an end-to-end, near-first-principles machine-checked proof narrative"
26+
proof-assistant = "Isabelle (preferred)"
27+
echo-types-source = "hyperpolymath/echo-types (constructive Agda formalization of fiber-based structured loss)"
28+
goal = "the language sorts the hard consent/affine-safety reasoning so users never have to"
29+
typechecker-note = "TypeChecker::new seeds a ~64-binding builtin prelude (incl. Result/echo constructors)"
30+
31+
[ci]
32+
workflows = "20 GitHub Actions; thin-wrapper reusables from hyperpolymath/standards"
33+
gates = "rust-ci, dogfood-gate, e2e (Rust+OCaml), governance, security, codeql, scorecard, secret-scanner, hypatia-scan, clusterfuzzlite, mirror, instant-sync"
34+
last-shepherd = "2026-06-12 PR #77: fixed 3 Rust tests, empty wokelang.opam, removed banned ReScript VSCode client (governance); issue #78 tracks AffineScript reimpl"
35+
36+
[spec]
37+
location = "spec/ — grammar.ebnf, axiomatic-semantics.md, system-specs.md, SPEC.core.scm"
38+
paper = "arxiv-consent-aware-programming.tex (+ references.bib)"

.machine_readable/6a2/anchor/ANCHOR.a2ml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
id: "org.hyperpolymath.wokelang"
55
version: "1.0.0"
6-
clade: "unknown"
6+
clade: "nl" # nextgen-languages clade (per .machine_readable/CLADE.a2ml)
77
status: "active"
88

99
# SSG Configuration (Unified boj-server build)
@@ -15,4 +15,5 @@ ssg:
1515

1616
# Relationships
1717
parents:
18-
- "org.hyperpolymath.boj-server"
18+
- "org.hyperpolymath.boj-server" # SSG / publish parent (boj build trigger)
19+
- "org.hyperpolymath.nextgen-languages" # code lineage (monorepo-child, clade nl)

0 commit comments

Comments
 (0)