From c6c794bb645a91adb3197d4a85c4f8aba052962f Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Fri, 28 Aug 2026 17:31:36 +0100 Subject: [PATCH 1/7] docs: define reconciliation scope and ForthWall proof boundary --- .machine_readable/6a2/STATE.a2ml | 11 +-- .machine_readable/6a2/anchors/ANCHOR.a2ml | 4 +- .../bot_directives/methodology.a2ml | 2 +- .../contractiles/Intentfile.a2ml | 21 +++--- 0-AI-MANIFEST.a2ml | 4 +- README.adoc | 73 +++++++++++++++++-- build/guix.scm | 9 ++- container/Containerfile | 2 +- container/manifest.toml | 2 +- docs/onboarding/QUICKSTART-MAINTAINER.adoc | 13 ++-- docs/status/TEST-NEEDS.adoc | 37 ++++++++-- 11 files changed, 136 insertions(+), 42 deletions(-) diff --git a/.machine_readable/6a2/STATE.a2ml b/.machine_readable/6a2/STATE.a2ml index a37a36d..8d5c0ca 100644 --- a/.machine_readable/6a2/STATE.a2ml +++ b/.machine_readable/6a2/STATE.a2ml @@ -6,12 +6,12 @@ [metadata] project = "recon-silly-ation" version = "0.1.0" -last-updated = "2026-07-27" +last-updated = "2026-08-28" status = "active" # active | paused | archived [project-context] name = "recon-silly-ation" -purpose = "WASM document reconciliation, built around the ReconForth VM. Registered in the reposystem tool ecosystem as an `interop`-role, `extracted` (gitlink submodule) tool with a single declared action: `reconcile`. Scaffolded from rsr-template-repo, so it ships with CI/CD, AI manifests, ABI/FFI standards, container ecosystem, and governance infrastructure inherited from there." +purpose = "Experimental cross-document consistency reconciliation for repository documentation, history, metadata, terminology, language policy, and attribution. ForthWall is a proposed bounded Forth rule engine beneath the reconciler, not the product identity and not an implemented capability. Registered in reposystem as an `interop`-role, `extracted` tool with a planned `reconcile` action." completion-percentage = 20 [position] @@ -22,19 +22,20 @@ maturity = "experimental" # experimental | alpha | beta | production | lts milestones = [ { name = "RSR scaffolding instantiated (CI/CD, AI manifests, governance, container packaging)", completion = 100 }, { name = "Typed ABI/FFI seam (Idris2 Abi/{Types,Layout,Foreign}.idr + Zig src/interface/ffi)", completion = 100 }, - { name = "ReconForth VM compiled to WebAssembly", completion = 0 }, + { name = "Bounded ForthWall VM compiled to WebAssembly", completion = 0 }, { name = "Document reconciliation logic (the actual `reconcile` action)", completion = 0 }, ] [blockers-and-issues] # No active blockers. The gap is scope, not obstruction: the RSR scaffolding -# and ABI/FFI seam are in place, but the ReconForth VM / WASM reconciliation +# and ABI/FFI seam are in place, but the ForthWall VM / WASM reconciliation # logic itself has not been implemented yet. [critical-next-actions] actions = [ - "Implement the ReconForth VM and compile it to WebAssembly.", + "Specify, implement, and prove the bounded ForthWall VM, then compile it to WebAssembly.", "Implement the `reconcile` action behind the ABI/FFI seam.", + "Gate every capability claim on planted positive/negative, confinement, idempotence, non-interference, attribution-scope, adversarial, and independently verified end-to-end tests.", "Populate src/core, src/definitions, src/aspects, src/errors, src/bridges beyond their current scaffolding.", ] diff --git a/.machine_readable/6a2/anchors/ANCHOR.a2ml b/.machine_readable/6a2/anchors/ANCHOR.a2ml index b74359c..9858628 100644 --- a/.machine_readable/6a2/anchors/ANCHOR.a2ml +++ b/.machine_readable/6a2/anchors/ANCHOR.a2ml @@ -5,7 +5,7 @@ [metadata] version = "1.0.0" -last-updated = "2026-07-27" +last-updated = "2026-08-28" [anchor] schema = "hyperpolymath.anchor/1" @@ -21,7 +21,7 @@ purpose = [ [identity] project = "recon-silly-ation" kind = "tool" # language | library | service | tool -one-sentence = "Reconciles documents via a WASM-hosted ReconForth virtual machine, as an interop component of the reposystem tool ecosystem." +one-sentence = "Finds and safely reconciles cross-document and repository inconsistencies; its proposed bounded ForthWall execution layer is not yet implemented or proved." domain = "document reconciliation" [semantic-authority] diff --git a/.machine_readable/bot_directives/methodology.a2ml b/.machine_readable/bot_directives/methodology.a2ml index 2aa1db7..dd96ba0 100644 --- a/.machine_readable/bot_directives/methodology.a2ml +++ b/.machine_readable/bot_directives/methodology.a2ml @@ -55,7 +55,7 @@ perfective = 10 # % for SPDX headers, doc updates, formatting, style # Customise this per project — the template default is generic. [methodology.unique-strength] -description = "Runs the ReconForth VM compiled to WebAssembly for portable, sandboxed document reconciliation." +description = "Reconciles evidenced cross-document inconsistencies; a bounded, capability-restricted ForthWall VM is proposed as an optional execution layer and is not yet implemented or proved." deepen-not-broaden = true # ============================================================================ diff --git a/.machine_readable/contractiles/Intentfile.a2ml b/.machine_readable/contractiles/Intentfile.a2ml index 945dc1d..e657da7 100644 --- a/.machine_readable/contractiles/Intentfile.a2ml +++ b/.machine_readable/contractiles/Intentfile.a2ml @@ -20,17 +20,18 @@ # contractile for hard gates. @abstract: -North-star contractile for recon-silly-ation, an RSR-compliant repository -instantiated from rsr-template-repo. It reconciles documents via a -WASM-hosted ReconForth VM, as an interop component of the reposystem tool -ecosystem. +North-star contractile for recon-silly-ation, an experimental cross-document +consistency reconciler. ForthWall is its proposed bounded Forth rule layer, not +its product identity and not yet an implemented or proved capability. @end ## Purpose -recon-silly-ation reconciles documents by running the ReconForth virtual -machine compiled to WebAssembly, registered in `reposystem` as an -`interop`-role tool exposing a `reconcile` action. +recon-silly-ation performs reconnaissance for small inconsistencies and +reconciles documentation, history, metadata, terminology, language policy, and +attribution without allowing a local correction to silently redefine unrelated +surfaces. It is registered in `reposystem` as an `interop`-role tool exposing a +planned `reconcile` action. ## Anti-Purpose @@ -38,6 +39,8 @@ This repository is NOT: - The RSR template itself (that is rsr-template-repo, upstream) - A general-purpose project scaffold (it is an instantiated consumer) - A runtime library that other repos should copy wholesale +- A licence to normalise ambiguous text or rewrite beyond evidenced scope +- An operational ForthWall VM until its implementation and proofs are present ## If In Doubt @@ -65,13 +68,13 @@ If you are unsure whether a change is in scope, ask. Sensitive areas: ### Near Horizon #### e2e-reconcile-roundtrip -- description: tests/e2e.sh exercises a real ReconForth reconcile round-trip via the WASM build +- description: tests/e2e.sh exercises a real ForthWall reconcile round-trip via the WASM build, including evidence preservation and independent verification - horizon: near - status: declared ### Mid Horizon #### formal-verification -- description: Idris2 proofs for all critical contractile invariants +- description: Idris2 proofs cover VM semantics, capability confinement, scope preservation, idempotence, non-interference, stale-input refusal, and attribution locality - horizon: mid - status: declared diff --git a/0-AI-MANIFEST.a2ml b/0-AI-MANIFEST.a2ml index 8b1848c..c0bb118 100644 --- a/0-AI-MANIFEST.a2ml +++ b/0-AI-MANIFEST.a2ml @@ -5,11 +5,11 @@ # [metadata] version = "0.1.0" -last-updated = "2026-07-27" +last-updated = "2026-08-28" [project] name = "recon-silly-ation" -purpose = "WASM document reconciliation (ReconForth VM); interop component of the reposystem tool ecosystem." +purpose = "Experimental cross-document consistency reconciliation for names, links, claims, attribution, terminology, language style, and repository metadata; the proposed bounded ForthWall engine is not yet implemented or proved." [ai-allocation] agents = [ diff --git a/README.adoc b/README.adoc index ae193b2..b0f3153 100644 --- a/README.adoc +++ b/README.adoc @@ -9,16 +9,75 @@ image:https://img.shields.io/badge/OpenSSF-Best_Practices-green?logo=opensources image:https://img.shields.io/badge/License-MPL_2.0-blue.svg[License: MPL-2.0,link="https://opensource.org/licenses/MPL-2.0"] image:https://api.thegreenwebfoundation.org/greencheckimage/github.com[Green Web,link="https://www.thegreenwebfoundation.org/green-web-check/?url=github.com"] -WASM document reconciliation, built around the ReconForth VM. It is an -`interop` component of the `reposystem` tool ecosystem (see -`reposystem/config/tools.ncl`), exposing a `reconcile` action. +An experimental cross-document consistency reconciler. It finds small-looking +contradictions that make a repository's documentation, history, metadata, and +attribution disagree. It is registered as an `interop` component of the +`reposystem` tool ecosystem, exposing a planned `reconcile` action. == What this is -recon-silly-ation reconciles documents by running the ReconForth virtual -machine compiled to WebAssembly. It is registered in `reposystem` as an -`interop`-role tool with `status = 'extracted` (a gitlink submodule of -`reposystem`), whose sole declared action is `reconcile`. +The name combines *reconnaissance for silly inconsistencies* with +*reconciliation*: inspect every relevant surface, retain evidence for each +disagreement, and propose the smallest coherent resolution. + +The intended scope includes: + +* project or file renames that were not propagated through READMEs, wikis, + examples, links, repository metadata, and the GitHub description; +* changelog or release claims that do not match the change, omit consequential + side effects, or continue foregrounding obsolete generations; +* contributor credit that is missing where it belongs or incorrectly expands + into repository-wide authorship; +* inconsistent language policy (including UK, US, and Oxford English), + terminology, capitalisation, analogies, and conceptual explanations; +* references to files, faults, features, versions, commands, or names that no + longer exist; and +* explanations that cannot all be true, even when a superficial text + normalisation would make them look alike. + +Ambiguous conflicts are findings for review, not permission to rewrite. Every +finding and proposed edit must retain its sources, evidence spans, and +provenance. + +== ForthWall + +*ForthWall* is the proposed name for an optional bounded Forth rule engine +beneath the reconciler. It is not the meaning of `recon` in the project name, +not the whole product, and not currently an implemented capability. + +The intended wall admits only declared inputs and approved document-level +words. It must not expose raw memory, arbitrary filesystem access, shell +execution, networking, or unrestricted writes. It must refuse automatic repair +when evidence is ambiguous, inputs are stale, parsers disagree, or coordinates +have drifted. + +== Proof and delivery status + +This repository currently contains project scaffolding and an ABI/FFI seam; it +does *not* contain a proven reconciliation engine or an operational ForthWall +VM. The machine-readable state records both the VM and actual `reconcile` +action as 0% complete. Design documents and deterministic execution alone are +not evidence that a proposed edit is semantically correct. + +A capability may be described as delivered only when the repository contains +independently reproducible evidence for it: + +* an executable specification for the VM and every document-level word; +* planted positive and negative fixtures for every inconsistency class; +* exact input hashes, evidence spans, proposed changes, and replayable traces; +* idempotence, non-interference, scope-confinement, and stale-input tests; +* attribution tests proving local credit cannot become global authorship; +* adversarial and cross-format end-to-end fixtures; and +* an independent verifier for every automatically applied edit. + +Until those gates exist and pass, results are proposals requiring review and +automatic mutation must remain disabled. See +link:docs/status/TEST-NEEDS.adoc[`TEST-NEEDS`] and +https://github.com/hyperpolymath/recon-silly-ation/issues/44[issue #44]. + +The repository remains registered in `reposystem` as an `interop`-role tool +with `status = 'extracted` (a gitlink submodule), whose sole declared action is +`reconcile`. The repository is scaffolded from the *Rhodium Standard Repository (RSR)* template, so it ships with CI/CD, machine-readable project metadata, an diff --git a/build/guix.scm b/build/guix.scm index 3fc6d78..24a4eed 100644 --- a/build/guix.scm +++ b/build/guix.scm @@ -47,10 +47,11 @@ (inputs (list)) (home-page "https://github.com/hyperpolymath/recon-silly-ation") - (synopsis "WASM document reconciliation (ReconForth VM)") - (description "recon-silly-ation reconciles documents by running the -ReconForth virtual machine compiled to WebAssembly. It is an interop -component of the reposystem tool ecosystem, exposing a reconcile action.") + (synopsis "Experimental cross-document consistency reconciler") + (description "recon-silly-ation is intended to find and safely reconcile +contradictions across documentation, history, metadata, terminology, language +policy, and attribution. Its proposed bounded ForthWall execution layer and +reconcile action are not yet implemented or proved.") (license (list ;; MPL-2.0 extends MPL-2.0 mpl2.0))) diff --git a/container/Containerfile b/container/Containerfile index 90ebcc6..f7afd83 100644 --- a/container/Containerfile +++ b/container/Containerfile @@ -70,7 +70,7 @@ FROM cgr.dev/chainguard/wolfi-base:latest # OCI image labels (compatible with cerro-torre .ctp bundle metadata) LABEL org.opencontainers.image.title="recon-silly-ation" \ - org.opencontainers.image.description="WASM document reconciliation (ReconForth VM)." \ + org.opencontainers.image.description="Experimental cross-document consistency reconciler; proposed ForthWall engine not yet implemented or proved." \ org.opencontainers.image.url="https://github.com/hyperpolymath/recon-silly-ation" \ org.opencontainers.image.source="https://github.com/hyperpolymath/recon-silly-ation" \ org.opencontainers.image.vendor="hyperpolymath" \ diff --git a/container/manifest.toml b/container/manifest.toml index 6be9af8..55d1926 100644 --- a/container/manifest.toml +++ b/container/manifest.toml @@ -9,7 +9,7 @@ name = "recon-silly-ation" version = "0.1.0" revision = 1 -summary = "WASM document reconciliation (ReconForth VM)." +summary = "Experimental cross-document consistency reconciler; proposed ForthWall engine not yet implemented or proved." description = """ recon-silly-ation — containerised service packaged as a verified cerro-torre .ctp bundle with Ed25519 signing and full provenance diff --git a/docs/onboarding/QUICKSTART-MAINTAINER.adoc b/docs/onboarding/QUICKSTART-MAINTAINER.adoc index cc808e0..964d80e 100644 --- a/docs/onboarding/QUICKSTART-MAINTAINER.adoc +++ b/docs/onboarding/QUICKSTART-MAINTAINER.adoc @@ -6,9 +6,11 @@ == Overview -This guide covers packaging, deploying, and maintaining recon-silly-ation -(WASM document reconciliation via the ReconForth VM) for distribution on -your platform. +This guide records the intended packaging and maintenance surface for +recon-silly-ation, an experimental cross-document consistency reconciler. The +actual reconciliation engine and its proposed bounded ForthWall VM are not yet +implemented or proved; the commands below exercise scaffolding and must not be +treated as evidence of a distributable reconciliation runtime. == Runtime Dependencies @@ -87,8 +89,9 @@ Fallback: `$HOME/.config/recon_silly_ation/config.toml` == Health Checks -recon-silly-ation is an FFI/WASM library (the ReconForth VM), not a -standalone executable, so there is no `just run`. Use: +recon-silly-ation currently has an FFI/WASM scaffold, not an operational +ForthWall library or standalone reconciliation executable, so there is no +`just run`. The following commands check only the present scaffold: [source,bash] ---- diff --git a/docs/status/TEST-NEEDS.adoc b/docs/status/TEST-NEEDS.adoc index 2151132..c6ae9a3 100644 --- a/docs/status/TEST-NEEDS.adoc +++ b/docs/status/TEST-NEEDS.adoc @@ -2,7 +2,7 @@ // Copyright (c) Jonathan D.A. Jewell = TEST-NEEDS: recon-silly-ation -== Current State (Updated 2026-07-27) +== Current State (Updated 2026-08-28) recon-silly-ation was instantiated from `rsr-template-repo`. This document previously described the *template's own* test suite for validating @@ -20,7 +20,7 @@ machinery has now been removed as no longer applicable: | *Source modules* | 6 | 3 Idris2 ABI (Foreign, Layout, Types), 2 Zig FFI (build, main), 1 Zig integration test | *Unit tests* | 0 | None in main source (inline tests in main.zig, if any) | *Integration tests* | 1 | `src/interface/ffi/test/integration_test.zig` — still template-shaped (see below) -| *E2E tests* | 1 | `tests/e2e.sh` — banner + mostly-commented example matrix, not yet wired to real ReconForth flows +| *E2E tests* | 1 | `tests/e2e.sh` — banner + mostly-commented example matrix, not yet wired to real reconciliation or ForthWall flows | *Aspect tests* | 1 | `tests/aspect_tests.sh` — cross-cutting invariant checks | *Workflow tests* | 1 | `tests/workflows/validate_workflows_test.sh` — validates GitHub Actions workflow structure |=== @@ -33,9 +33,36 @@ machinery has now been removed as no longer applicable: `recon_silly_ation_*` FFI functions in `src/interface/ffi/src/main.zig`. * [ ] `tests/e2e.sh` has a real banner and structure but its actual assertions are still example/commented-out matrix entries — it does not - yet exercise a real ReconForth reconciliation round-trip. + yet exercise a real reconciliation or ForthWall round-trip. * [ ] No fuzz harness is wired up yet (see `benches/` history above). +== Capability Evidence Required + +The project purpose is broader than its proposed Forth VM. Each capability +must have independently reproducible evidence before it may be marked complete +or operational: + +* [ ] planted positive and negative fixtures for project/file renames, stale + links and claims, changelog accuracy, language-style consistency, terminology, + conceptual analogies, and attribution scope; +* [ ] punctuation-sensitive semantic fixtures, including vocative boundaries + and other cases where punctuation changes grammatical roles or meaning; +* [ ] executable specifications for ForthWall's VM and every exposed + document-level word; +* [ ] exact input hashes, source/evidence spans, proposed changes, and + deterministic replay traces; +* [ ] idempotence, non-interference, capability confinement, stale-input + refusal, parser-disagreement refusal, and coordinate-drift refusal; +* [ ] attribution tests proving a local contributor credit cannot become + repository-wide authorship; +* [ ] adversarial, malformed-input, Unicode-confusable, cross-format, and + cross-surface end-to-end fixtures; and +* [ ] an independent verifier for every automatically applied edit. + +A repeatable edit is not necessarily a correct edit. Automatic mutation must +remain disabled until these gates exist and pass; ambiguous findings require +human review. + == CRG Notes * *License*: MPL-2.0 on all new files @@ -44,6 +71,6 @@ machinery has now been removed as no longer applicable: == Next Steps * [ ] Give `integration_test.zig` real test bodies against the FFI surface. -* [ ] Wire `tests/e2e.sh` to a real ReconForth reconcile round-trip via the - WASM build. +* [ ] Wire `tests/e2e.sh` to a real ForthWall reconcile round-trip via the WASM + build, with bounded capabilities and independent result verification. * [ ] Integrate `just test` / `just e2e` / `just aspect` into CI. From 71716bb2d57ee106d63fedce8738bf4815fb250e Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Sat, 29 Aug 2026 02:13:24 +0100 Subject: [PATCH 2/7] fix(ci): validate both K9 serialisations --- .githooks/validate-k9.sh | 15 ++++++++++----- .machine_readable/root-allow.txt | 3 +++ .../self-validating/methodology-guard.k9.ncl | 17 +++++++++++++++++ coordination.k9 | 16 ++++++++++++++++ session/custom-checks.k9 | 17 +++++++++++++++++ 5 files changed, 63 insertions(+), 5 deletions(-) diff --git a/.githooks/validate-k9.sh b/.githooks/validate-k9.sh index c83e290..34b0b00 100755 --- a/.githooks/validate-k9.sh +++ b/.githooks/validate-k9.sh @@ -95,7 +95,8 @@ report_issue() { normalise_level() { local raw="$1" # Remove surrounding quotes, tick prefix ('Kennel -> Kennel), whitespace - raw="${raw#*=}" # Remove everything before = + raw="${raw#*=}" # Remove everything before = (Nickel) + raw="${raw#*:}" # Remove everything before : (YAML) raw="${raw//\"/}" # Remove double quotes raw="${raw//\'/}" # Remove single quotes (Nickel tick) raw="${raw//,/}" # Remove trailing commas @@ -179,7 +180,11 @@ validate_k9() { # brace, depth started at 0, and the first nested block's close # prematurely terminated the validator's view of the pedigree — # making `pedigree.metadata.name` invisible. - if [[ "$line" =~ ^[[:space:]]*pedigree[[:space:]]*= ]]; then + # K9 has two serialisations in this estate: Nickel (.k9.ncl) uses + # `pedigree = {`, while the YAML-based .k9 coordination/session files + # use `pedigree:`. Validate both instead of treating valid YAML K9 as + # though it were malformed Nickel. + if [[ "$line" =~ ^[[:space:]]*pedigree[[:space:]]*(=|:) ]]; then has_pedigree=true in_pedigree=true pedigree_depth=0 @@ -209,19 +214,19 @@ validate_k9() { # was missed entirely because the pedigree block opened and # closed in one line, never reaching the ^[[:space:]]+ check on # a subsequent iteration.) - if [[ "$line" =~ ^[[:space:]]+name[[:space:]]*= ]] || \ + if [[ "$line" =~ ^[[:space:]]+name[[:space:]]*(=|:) ]] || \ [[ "$line" =~ [[:space:]]name[[:space:]]*= ]]; then has_pedigree_name=true fi # Check for version field - if [[ "$line" =~ ^[[:space:]]+(version|schema_version)[[:space:]]*= ]] || \ + if [[ "$line" =~ ^[[:space:]]+(version|schema_version)[[:space:]]*(=|:) ]] || \ [[ "$line" =~ [[:space:]](version|schema_version)[[:space:]]*= ]]; then has_pedigree_version=true fi # Check for security level (leash field) - if [[ "$line" =~ ^[[:space:]]+(leash|security_level)[[:space:]]*= ]]; then + if [[ "$line" =~ ^[[:space:]]+(leash|security_level)[[:space:]]*(=|:) ]]; then has_security_level=true security_level_value="$(normalise_level "$line")" security_level_line=$line_num diff --git a/.machine_readable/root-allow.txt b/.machine_readable/root-allow.txt index 995f2db..82e85da 100644 --- a/.machine_readable/root-allow.txt +++ b/.machine_readable/root-allow.txt @@ -21,9 +21,12 @@ GOVERNANCE.adoc # governance model (validator accepts root or docs/go MAINTAINERS.adoc # maintainer roster CONTRIBUTING.md # REQUIRED AT ROOT by scorecard-enforcer/openssf-compliance/quality CI (test -f, no .github fallback). The fuller copy in .github/ is GitHub's auto-discovery convention; dedupe is an owner decision (would need those CI checks updated to accept .github/). SECURITY.md # REQUIRED AT ROOT by scorecard-enforcer CI + the security-policy contractile (test -f SECURITY.md). See CONTRIBUTING.md note re: the .github/ copy. +CONTRIBUTING.adoc # This repository's tracked contributor guide uses its canonical AsciiDoc documentation format. +SECURITY.adoc # This repository's tracked security policy uses its canonical AsciiDoc documentation format. LICENSE LICENSES/ # REUSE licence texts (MPL-2.0.txt + CC-BY-SA-4.0.txt) for the dual-licence model (code MPL-2.0 / docs CC-BY-SA-4.0) CHANGELOG.md +CHANGELOG.adoc # This repository's tracked changelog uses its canonical AsciiDoc documentation format. # ─── Build entry points (must live at root for their tooling) ──────────────── Justfile # delegates phases to build/just/*.just diff --git a/.machine_readable/self-validating/methodology-guard.k9.ncl b/.machine_readable/self-validating/methodology-guard.k9.ncl index 17f1409..06e8570 100644 --- a/.machine_readable/self-validating/methodology-guard.k9.ncl +++ b/.machine_readable/self-validating/methodology-guard.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # @@ -8,6 +9,22 @@ # Usage: k9 validate methodology-guard let methodology_guard = { + pedigree = { + schema_version = "1.0.0", + security = { + leash = 'Kennel, + trust_level = "data-only", + allow_network = false, + allow_filesystem_write = false, + allow_subprocess = false, + }, + metadata = { + name = "methodology-guard", + version = "1.0.0", + description = "Declarative checks for repository methodology constraints", + }, + }, + name = "methodology-guard", version = "1.0.0", description = "Validates that agent work respects declared methodology constraints", diff --git a/coordination.k9 b/coordination.k9 index ba31125..f5d6ddd 100644 --- a/coordination.k9 +++ b/coordination.k9 @@ -1,5 +1,21 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Thin coordination bindings for central session-management standards +--- +pedigree: + schema_version: "1.0.0" + security: + leash: Kennel + trust_level: "data-only" + allow_network: false + allow_filesystem_write: false + allow_subprocess: false + metadata: + name: "recon-silly-ation-coordination" + version: "0.1.0" + description: "Repository bindings for the central session-management protocol" + session_management: source_of_truth: "standards/session-management-standards" canonical_commands: diff --git a/session/custom-checks.k9 b/session/custom-checks.k9 index bd932fa..31b698c 100644 --- a/session/custom-checks.k9 +++ b/session/custom-checks.k9 @@ -1,4 +1,21 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Local repository session checks (thin policy layer) + +--- +pedigree: + schema_version: "1.0.0" + security: + leash: Kennel + trust_level: "data-only" + allow_network: false + allow_filesystem_write: false + allow_subprocess: false + metadata: + name: "recon-silly-ation-session-checks" + version: "0.1.0" + description: "Declarative repository-specific session checks" + version: "0.1" checks: From 86035f818a5ce34efd905e0835415aedd506e7b0 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Sat, 29 Aug 2026 10:25:03 +0100 Subject: [PATCH 3/7] Update README.adoc Co-authored-by: codacy-production[bot] <61871480+codacy-production[bot]@users.noreply.github.com> Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com> --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index b0f3153..d238b21 100644 --- a/README.adoc +++ b/README.adoc @@ -76,7 +76,7 @@ link:docs/status/TEST-NEEDS.adoc[`TEST-NEEDS`] and https://github.com/hyperpolymath/recon-silly-ation/issues/44[issue #44]. The repository remains registered in `reposystem` as an `interop`-role tool -with `status = 'extracted` (a gitlink submodule), whose sole declared action is +with status = `extracted` (a gitlink submodule), whose sole declared action is `reconcile`. The repository is scaffolded from the *Rhodium Standard Repository (RSR)* From 38abc10a4d390b86ef6132eb43328ee4bb2c48c4 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Sat, 29 Aug 2026 10:25:59 +0100 Subject: [PATCH 4/7] Update docs/status/TEST-NEEDS.adoc Co-authored-by: codacy-production[bot] <61871480+codacy-production[bot]@users.noreply.github.com> Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com> --- docs/status/TEST-NEEDS.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/status/TEST-NEEDS.adoc b/docs/status/TEST-NEEDS.adoc index c6ae9a3..8fcea7f 100644 --- a/docs/status/TEST-NEEDS.adoc +++ b/docs/status/TEST-NEEDS.adoc @@ -20,7 +20,7 @@ machinery has now been removed as no longer applicable: | *Source modules* | 6 | 3 Idris2 ABI (Foreign, Layout, Types), 2 Zig FFI (build, main), 1 Zig integration test | *Unit tests* | 0 | None in main source (inline tests in main.zig, if any) | *Integration tests* | 1 | `src/interface/ffi/test/integration_test.zig` — still template-shaped (see below) -| *E2E tests* | 1 | `tests/e2e.sh` — banner + mostly-commented example matrix, not yet wired to real reconciliation or ForthWall flows +| *E2E tests* | 1 | tests/e2e.sh — banner + mostly-commented example matrix, not yet wired to real reconciliation or ForthWall flows | *Aspect tests* | 1 | `tests/aspect_tests.sh` — cross-cutting invariant checks | *Workflow tests* | 1 | `tests/workflows/validate_workflows_test.sh` — validates GitHub Actions workflow structure |=== From a8136eea12f73f7e3c8336f867332626798e1e6e Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Sat, 29 Aug 2026 09:35:40 +0000 Subject: [PATCH 5/7] Fix CodeRabbit issues in PR #45 --- .machine_readable/bot_directives/methodology.a2ml | 2 +- container/Containerfile | 2 +- container/manifest.toml | 2 +- docs/status/TEST-NEEDS.adoc | 5 +++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.machine_readable/bot_directives/methodology.a2ml b/.machine_readable/bot_directives/methodology.a2ml index dd96ba0..92f1662 100644 --- a/.machine_readable/bot_directives/methodology.a2ml +++ b/.machine_readable/bot_directives/methodology.a2ml @@ -9,7 +9,7 @@ [metadata] version = "1.0.0" -last-updated = "2026-07-27" +last-updated = "2026-08-28" spec = "https://github.com/hyperpolymath/standards/blob/main/agentic-a2ml/docs/ADR-002-methodology-layer.adoc" # ============================================================================ diff --git a/container/Containerfile b/container/Containerfile index f7afd83..2f68ec3 100644 --- a/container/Containerfile +++ b/container/Containerfile @@ -70,7 +70,7 @@ FROM cgr.dev/chainguard/wolfi-base:latest # OCI image labels (compatible with cerro-torre .ctp bundle metadata) LABEL org.opencontainers.image.title="recon-silly-ation" \ - org.opencontainers.image.description="Experimental cross-document consistency reconciler; proposed ForthWall engine not yet implemented or proved." \ + org.opencontainers.image.description="Experimental cross-document consistency reconciler; proposed bounded, capability-restricted ForthWall engine not yet implemented or proved." \ org.opencontainers.image.url="https://github.com/hyperpolymath/recon-silly-ation" \ org.opencontainers.image.source="https://github.com/hyperpolymath/recon-silly-ation" \ org.opencontainers.image.vendor="hyperpolymath" \ diff --git a/container/manifest.toml b/container/manifest.toml index 55d1926..90404d5 100644 --- a/container/manifest.toml +++ b/container/manifest.toml @@ -9,7 +9,7 @@ name = "recon-silly-ation" version = "0.1.0" revision = 1 -summary = "Experimental cross-document consistency reconciler; proposed ForthWall engine not yet implemented or proved." +summary = "Experimental cross-document consistency reconciler; proposed bounded, capability-restricted ForthWall engine not yet implemented or proved." description = """ recon-silly-ation — containerised service packaged as a verified cerro-torre .ctp bundle with Ed25519 signing and full provenance diff --git a/docs/status/TEST-NEEDS.adoc b/docs/status/TEST-NEEDS.adoc index 8fcea7f..c76817e 100644 --- a/docs/status/TEST-NEEDS.adoc +++ b/docs/status/TEST-NEEDS.adoc @@ -38,7 +38,7 @@ machinery has now been removed as no longer applicable: == Capability Evidence Required -The project purpose is broader than its proposed Forth VM. Each capability +The project purpose is broader than its proposed bounded ForthWall VM. Each capability must have independently reproducible evidence before it may be marked complete or operational: @@ -72,5 +72,6 @@ human review. * [ ] Give `integration_test.zig` real test bodies against the FFI surface. * [ ] Wire `tests/e2e.sh` to a real ForthWall reconcile round-trip via the WASM - build, with bounded capabilities and independent result verification. + build, with bounded capabilities and independent verification of every applied + edit and the final document state. * [ ] Integrate `just test` / `just e2e` / `just aspect` into CI. From bb75c500187e88040414bf9cd5820ea8cab6d1c2 Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Sat, 29 Aug 2026 09:40:40 +0000 Subject: [PATCH 6/7] Fix CodeRabbit issues in PR #45 --- .githooks/validate-k9.sh | 47 +++++++++++++++++++++++++++++++--------- .pre-commit-config.yaml | 6 +++-- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/.githooks/validate-k9.sh b/.githooks/validate-k9.sh index 34b0b00..7547186 100755 --- a/.githooks/validate-k9.sh +++ b/.githooks/validate-k9.sh @@ -100,7 +100,7 @@ normalise_level() { raw="${raw//\"/}" # Remove double quotes raw="${raw//\'/}" # Remove single quotes (Nickel tick) raw="${raw//,/}" # Remove trailing commas - raw="${raw## }" # Trim leading space + raw="${raw#"${raw%%[![:space:]]*}"}" # Trim leading whitespace raw="${raw%% }" # Trim trailing space raw="${raw%%#*}" # Remove inline comments raw="${raw## }" # Trim again @@ -164,7 +164,10 @@ validate_k9() { local security_level_line=0 local has_signature_field=false local in_pedigree=false + local pedigree_format="" local pedigree_depth=0 + local pedigree_indent=0 + local pedigree_start_line=0 line_num=0 while IFS= read -r line; do @@ -188,15 +191,38 @@ validate_k9() { has_pedigree=true in_pedigree=true pedigree_depth=0 + pedigree_start_line=$line_num + if [[ "$line" =~ ^[[:space:]]*pedigree[[:space:]]*= ]]; then + pedigree_format="nickel" + else + pedigree_format="yaml" + local pedigree_leading="${line%%[![:space:]]*}" + pedigree_indent=${#pedigree_leading} + fi # fall through fi + # YAML blocks end when a non-comment key returns to the pedigree + # key's indentation level (or above). Nickel blocks are delimited by + # braces and continue to use the depth tracking below. + if [[ "$in_pedigree" == "true" && "$pedigree_format" == "yaml" && \ + $line_num -gt $pedigree_start_line ]]; then + local yaml_content="${line#"${line%%[![:space:]]*}"}" + local yaml_leading="${line%%[![:space:]]*}" + if [[ -n "$yaml_content" && "$yaml_content" != \#* && \ + ${#yaml_leading} -le $pedigree_indent ]]; then + in_pedigree=false + fi + fi + if [[ "$in_pedigree" == "true" ]]; then - # Track brace depth to know when pedigree block ends - local opens closes - opens="${line//[^\{]/}" - closes="${line//[^\}]/}" - pedigree_depth=$(( pedigree_depth + ${#opens} - ${#closes} )) + if [[ "$pedigree_format" == "nickel" ]]; then + # Track brace depth to know when Nickel pedigree block ends + local opens closes + opens="${line//[^\{]/}" + closes="${line//[^\}]/}" + pedigree_depth=$(( pedigree_depth + ${#opens} - ${#closes} )) + fi if [[ $pedigree_depth -le 0 && "$has_pedigree" == "true" ]]; then # Check this final line too before leaving @@ -233,18 +259,19 @@ validate_k9() { fi # Check for signature fields - if [[ "$line" =~ ^[[:space:]]+(signature|signature_required)[[:space:]]*= ]]; then + if [[ "$line" =~ ^[[:space:]]+(signature|signature_required)[[:space:]]*(=|:) ]]; then has_signature_field=true fi - # End of pedigree block - if [[ $pedigree_depth -le 0 && "$has_pedigree" == "true" && "$line" == *"}"* ]]; then + # End of Nickel pedigree block + if [[ "$pedigree_format" == "nickel" && $pedigree_depth -le 0 && \ + "$has_pedigree" == "true" && "$line" == *"}"* ]]; then in_pedigree=false fi fi # Also check for signature fields outside pedigree (top-level) - if [[ "$line" =~ ^[[:space:]]*(signature)[[:space:]]*= ]]; then + if [[ "$line" =~ ^[[:space:]]*(signature)[[:space:]]*(=|:) ]]; then has_signature_field=true fi done < "$file" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b048d1c..4f921fa 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,11 +26,13 @@ repos: name: Validate A2ML manifests # --- K9 contract validation --- - - repo: https://github.com/hyperpolymath/k9-pre-commit - rev: main + - repo: local hooks: - id: validate-k9 name: Validate K9 contracts + entry: .githooks/validate-k9.sh + language: system + pass_filenames: false # --- Shell linting --- - repo: https://github.com/shellcheck-py/shellcheck-py From fdd6f9ed39a68a5ae1555a3861f180288df7e490 Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Sat, 29 Aug 2026 09:56:30 +0000 Subject: [PATCH 7/7] fix: apply CodeRabbit auto-fixes Fixed 5 file(s) based on 3 failed pre-merge checks. Co-authored-by: CodeRabbit --- .githooks/validate-k9.sh | 62 +++++-------------- .machine_readable/root-allow.txt | 3 - .../self-validating/methodology-guard.k9.ncl | 17 ----- coordination.k9 | 16 ----- session/custom-checks.k9 | 17 ----- 5 files changed, 15 insertions(+), 100 deletions(-) diff --git a/.githooks/validate-k9.sh b/.githooks/validate-k9.sh index 7547186..c83e290 100755 --- a/.githooks/validate-k9.sh +++ b/.githooks/validate-k9.sh @@ -95,12 +95,11 @@ report_issue() { normalise_level() { local raw="$1" # Remove surrounding quotes, tick prefix ('Kennel -> Kennel), whitespace - raw="${raw#*=}" # Remove everything before = (Nickel) - raw="${raw#*:}" # Remove everything before : (YAML) + raw="${raw#*=}" # Remove everything before = raw="${raw//\"/}" # Remove double quotes raw="${raw//\'/}" # Remove single quotes (Nickel tick) raw="${raw//,/}" # Remove trailing commas - raw="${raw#"${raw%%[![:space:]]*}"}" # Trim leading whitespace + raw="${raw## }" # Trim leading space raw="${raw%% }" # Trim trailing space raw="${raw%%#*}" # Remove inline comments raw="${raw## }" # Trim again @@ -164,10 +163,7 @@ validate_k9() { local security_level_line=0 local has_signature_field=false local in_pedigree=false - local pedigree_format="" local pedigree_depth=0 - local pedigree_indent=0 - local pedigree_start_line=0 line_num=0 while IFS= read -r line; do @@ -183,46 +179,19 @@ validate_k9() { # brace, depth started at 0, and the first nested block's close # prematurely terminated the validator's view of the pedigree — # making `pedigree.metadata.name` invisible. - # K9 has two serialisations in this estate: Nickel (.k9.ncl) uses - # `pedigree = {`, while the YAML-based .k9 coordination/session files - # use `pedigree:`. Validate both instead of treating valid YAML K9 as - # though it were malformed Nickel. - if [[ "$line" =~ ^[[:space:]]*pedigree[[:space:]]*(=|:) ]]; then + if [[ "$line" =~ ^[[:space:]]*pedigree[[:space:]]*= ]]; then has_pedigree=true in_pedigree=true pedigree_depth=0 - pedigree_start_line=$line_num - if [[ "$line" =~ ^[[:space:]]*pedigree[[:space:]]*= ]]; then - pedigree_format="nickel" - else - pedigree_format="yaml" - local pedigree_leading="${line%%[![:space:]]*}" - pedigree_indent=${#pedigree_leading} - fi # fall through fi - # YAML blocks end when a non-comment key returns to the pedigree - # key's indentation level (or above). Nickel blocks are delimited by - # braces and continue to use the depth tracking below. - if [[ "$in_pedigree" == "true" && "$pedigree_format" == "yaml" && \ - $line_num -gt $pedigree_start_line ]]; then - local yaml_content="${line#"${line%%[![:space:]]*}"}" - local yaml_leading="${line%%[![:space:]]*}" - if [[ -n "$yaml_content" && "$yaml_content" != \#* && \ - ${#yaml_leading} -le $pedigree_indent ]]; then - in_pedigree=false - fi - fi - if [[ "$in_pedigree" == "true" ]]; then - if [[ "$pedigree_format" == "nickel" ]]; then - # Track brace depth to know when Nickel pedigree block ends - local opens closes - opens="${line//[^\{]/}" - closes="${line//[^\}]/}" - pedigree_depth=$(( pedigree_depth + ${#opens} - ${#closes} )) - fi + # Track brace depth to know when pedigree block ends + local opens closes + opens="${line//[^\{]/}" + closes="${line//[^\}]/}" + pedigree_depth=$(( pedigree_depth + ${#opens} - ${#closes} )) if [[ $pedigree_depth -le 0 && "$has_pedigree" == "true" ]]; then # Check this final line too before leaving @@ -240,38 +209,37 @@ validate_k9() { # was missed entirely because the pedigree block opened and # closed in one line, never reaching the ^[[:space:]]+ check on # a subsequent iteration.) - if [[ "$line" =~ ^[[:space:]]+name[[:space:]]*(=|:) ]] || \ + if [[ "$line" =~ ^[[:space:]]+name[[:space:]]*= ]] || \ [[ "$line" =~ [[:space:]]name[[:space:]]*= ]]; then has_pedigree_name=true fi # Check for version field - if [[ "$line" =~ ^[[:space:]]+(version|schema_version)[[:space:]]*(=|:) ]] || \ + if [[ "$line" =~ ^[[:space:]]+(version|schema_version)[[:space:]]*= ]] || \ [[ "$line" =~ [[:space:]](version|schema_version)[[:space:]]*= ]]; then has_pedigree_version=true fi # Check for security level (leash field) - if [[ "$line" =~ ^[[:space:]]+(leash|security_level)[[:space:]]*(=|:) ]]; then + if [[ "$line" =~ ^[[:space:]]+(leash|security_level)[[:space:]]*= ]]; then has_security_level=true security_level_value="$(normalise_level "$line")" security_level_line=$line_num fi # Check for signature fields - if [[ "$line" =~ ^[[:space:]]+(signature|signature_required)[[:space:]]*(=|:) ]]; then + if [[ "$line" =~ ^[[:space:]]+(signature|signature_required)[[:space:]]*= ]]; then has_signature_field=true fi - # End of Nickel pedigree block - if [[ "$pedigree_format" == "nickel" && $pedigree_depth -le 0 && \ - "$has_pedigree" == "true" && "$line" == *"}"* ]]; then + # End of pedigree block + if [[ $pedigree_depth -le 0 && "$has_pedigree" == "true" && "$line" == *"}"* ]]; then in_pedigree=false fi fi # Also check for signature fields outside pedigree (top-level) - if [[ "$line" =~ ^[[:space:]]*(signature)[[:space:]]*(=|:) ]]; then + if [[ "$line" =~ ^[[:space:]]*(signature)[[:space:]]*= ]]; then has_signature_field=true fi done < "$file" diff --git a/.machine_readable/root-allow.txt b/.machine_readable/root-allow.txt index 82e85da..995f2db 100644 --- a/.machine_readable/root-allow.txt +++ b/.machine_readable/root-allow.txt @@ -21,12 +21,9 @@ GOVERNANCE.adoc # governance model (validator accepts root or docs/go MAINTAINERS.adoc # maintainer roster CONTRIBUTING.md # REQUIRED AT ROOT by scorecard-enforcer/openssf-compliance/quality CI (test -f, no .github fallback). The fuller copy in .github/ is GitHub's auto-discovery convention; dedupe is an owner decision (would need those CI checks updated to accept .github/). SECURITY.md # REQUIRED AT ROOT by scorecard-enforcer CI + the security-policy contractile (test -f SECURITY.md). See CONTRIBUTING.md note re: the .github/ copy. -CONTRIBUTING.adoc # This repository's tracked contributor guide uses its canonical AsciiDoc documentation format. -SECURITY.adoc # This repository's tracked security policy uses its canonical AsciiDoc documentation format. LICENSE LICENSES/ # REUSE licence texts (MPL-2.0.txt + CC-BY-SA-4.0.txt) for the dual-licence model (code MPL-2.0 / docs CC-BY-SA-4.0) CHANGELOG.md -CHANGELOG.adoc # This repository's tracked changelog uses its canonical AsciiDoc documentation format. # ─── Build entry points (must live at root for their tooling) ──────────────── Justfile # delegates phases to build/just/*.just diff --git a/.machine_readable/self-validating/methodology-guard.k9.ncl b/.machine_readable/self-validating/methodology-guard.k9.ncl index 06e8570..17f1409 100644 --- a/.machine_readable/self-validating/methodology-guard.k9.ncl +++ b/.machine_readable/self-validating/methodology-guard.k9.ncl @@ -1,4 +1,3 @@ -K9! # SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # @@ -9,22 +8,6 @@ K9! # Usage: k9 validate methodology-guard let methodology_guard = { - pedigree = { - schema_version = "1.0.0", - security = { - leash = 'Kennel, - trust_level = "data-only", - allow_network = false, - allow_filesystem_write = false, - allow_subprocess = false, - }, - metadata = { - name = "methodology-guard", - version = "1.0.0", - description = "Declarative checks for repository methodology constraints", - }, - }, - name = "methodology-guard", version = "1.0.0", description = "Validates that agent work respects declared methodology constraints", diff --git a/coordination.k9 b/coordination.k9 index f5d6ddd..ba31125 100644 --- a/coordination.k9 +++ b/coordination.k9 @@ -1,21 +1,5 @@ -K9! -# SPDX-License-Identifier: MPL-2.0 # Thin coordination bindings for central session-management standards ---- -pedigree: - schema_version: "1.0.0" - security: - leash: Kennel - trust_level: "data-only" - allow_network: false - allow_filesystem_write: false - allow_subprocess: false - metadata: - name: "recon-silly-ation-coordination" - version: "0.1.0" - description: "Repository bindings for the central session-management protocol" - session_management: source_of_truth: "standards/session-management-standards" canonical_commands: diff --git a/session/custom-checks.k9 b/session/custom-checks.k9 index 31b698c..bd932fa 100644 --- a/session/custom-checks.k9 +++ b/session/custom-checks.k9 @@ -1,21 +1,4 @@ -K9! -# SPDX-License-Identifier: MPL-2.0 # Local repository session checks (thin policy layer) - ---- -pedigree: - schema_version: "1.0.0" - security: - leash: Kennel - trust_level: "data-only" - allow_network: false - allow_filesystem_write: false - allow_subprocess: false - metadata: - name: "recon-silly-ation-session-checks" - version: "0.1.0" - description: "Declarative repository-specific session checks" - version: "0.1" checks: