Skip to content

Commit 5474b0a

Browse files
claudehyperpolymath
authored andcommitted
chore(machine-readable): add .machine_readable/contractiles 6-verb set + anchor
Fills the gap left by #114 (which delivered 6a2/bot_directives/svc but not the .machine_readable/ contractile migration or an anchor). Purely additive — does not touch #114's 6a2, bot_directives, or svc/self-validating work. Adds under .machine_readable/contractiles/: - INDEX.a2ml (6-verb registry: must/trust/bust/adjust/dust/intend + k9 exception) - _base.ncl (shared Nickel base for verb runners) - must/trust/bust/adjust/dust/intend: {Verb}file.a2ml + {verb}.ncl runner - adjust + intend: full trident (.k9.ncl trust-tier binding + .manifest.a2ml) Adds .machine_readable/anchors/ANCHOR.a2ml (canonical authority/recalibration). Estate-consistency adaptations for verisimdb: - k9 import paths point at .machine_readable/svc/self-validating/ (verisimdb's k9 home after #114's svc/k9 -> svc/self-validating rename), via ../../svc/self-validating/template-hunt.k9.ncl in the verb .k9.ncl bindings and ../svc/self-validating/ in INDEX.a2ml. - Dustfile: dropped two now-stale rsr-template-residue entries (6a2 was de-templatized by #114; ECOSYSTEM.a2ml + META.a2ml verified clean). Validation (real, not eyeballed): - nickel 1.16.0 typecheck PASS on all 7 pure .ncl (must/trust/bust/adjust/ dust/intend runners + _base.ncl). - The 2 verb .k9.ncl are plain Nickel importing the K9!-sigil template; nickel resolves the import path correctly (errors only on the template's K9! sigil, which is the k9 CLI's domain) — consistent with the merged sibling repos. - All .a2ml carry SPDX headers; content verified verisimdb-scoped (no wrong-project leakage); language-policy probes match Rust/Elixir/ReScript. The old root-level contractiles/{must,trust,dust} (extensionless, 3-verb) are left in place per the Dustfile owner-review note; the .machine_readable set is the evolving canonical map. https://claude.ai/code/session_01PhqGcxCqkMdJtR6NWq56Hx
1 parent aa595c9 commit 5474b0a

19 files changed

Lines changed: 1891 additions & 0 deletions
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# ⚓ ANCHOR: verisimdb
3+
# This is the canonical authority for the VeriSimDB repository.
4+
#
5+
# Modelled on the hyperpolymath standards ANCHOR shape (cf. ephapax). Declares
6+
# identity, clade, SSG posture, and ecosystem relationships. Authoritative:
7+
# code conforms to this, not the reverse. Last refreshed during the 2026-06-05
8+
# machine-readable currency pass.
9+
10+
id: "org.hyperpolymath.verisimdb"
11+
version: "0.0.1"
12+
clade: "database"
13+
status: "active"
14+
15+
# ─── Identity ─────────────────────────────────────────────────────────────────
16+
identity:
17+
project: "VeriSimDB"
18+
full-name: "Veridical Simulacrum Database"
19+
kind: "database"
20+
one-sentence: >
21+
A cross-system entity consistency engine: one entity held simultaneously
22+
across eight modalities (the octad — Graph, Vector, Tensor, Semantic,
23+
Document, Temporal, Provenance, Spatial) with drift detection,
24+
self-normalisation, and proof-bearing VQL queries.
25+
domain: "cross-modal databases / data consistency / formal verification"
26+
27+
# ─── SSG Configuration ──────────────────────────────────────────────────────
28+
# Unlike SSG-publishing repos (e.g. ephapax → casket/boj-server), VeriSimDB
29+
# does not currently publish a static site. Source hosting prefers GitLab
30+
# (user preference); no GitHub Pages / casket build is wired. boj_trigger is
31+
# false until/unless a docs site is stood up.
32+
ssg:
33+
engine: "none"
34+
output_dir: null
35+
boj_trigger: false
36+
cartridge: null
37+
notes: "No SSG publish target configured. Docs live as .adoc under docs/ + repo root."
38+
39+
# ─── Semantic Authority ─────────────────────────────────────────────────────
40+
semantic-authority:
41+
policy: "canonical"
42+
owns:
43+
- "Octad entity model and cross-modal consistency semantics"
44+
- "Drift-detection thresholds and self-normalisation behaviour"
45+
- "VQL (VeriSim Query Language) syntax, type system, and proof obligations"
46+
- "Contractile invariant definitions (.machine_readable/contractiles/)"
47+
authoritative-files:
48+
formal-proofs: "formal/ (Coq: Drift.v, Normalizer.v, Provenance.v, Transaction.v, WAL.v, Planner.v, VCL.v)"
49+
abi: "src/abi/ (Idris2: Types.idr, Layout.idr, Foreign.idr; 0 believe_me)"
50+
known-issues: "KNOWN-ISSUES.adoc"
51+
state: ".machine_readable/6a2/STATE.a2ml"
52+
53+
# ─── Implementation Policy ──────────────────────────────────────────────────
54+
implementation-policy:
55+
allowed: ["Rust", "Elixir", "ReScript", "VQL", "Idris2", "Zig", "Coq", "Just", "AsciiDoc"]
56+
forbidden: ["Python", "Go", "Node.js"]
57+
notes: >
58+
Rust core (modality stores), Elixir/OTP orchestration, ReScript VQL parser.
59+
A single JS bridge file exists (vql-bridge/vql_parser_port.js) as parser
60+
glue. Python is banned (Rust/Julia replace it).
61+
62+
# ─── Golden Path ────────────────────────────────────────────────────────────
63+
golden-path:
64+
smoke-test-command:
65+
- "just build"
66+
- "just test"
67+
- "just test-elixir"
68+
success-criteria:
69+
- "Rust core builds (cargo build --release)"
70+
- "Rust + Elixir test suites pass"
71+
- "No AGPL-3.0 headers (just license-check)"
72+
- "No unresolved critical security findings"
73+
74+
# ─── Relationships ──────────────────────────────────────────────────────────
75+
parents:
76+
- id: "org.hyperpolymath.standards"
77+
relationship: "anchor-template-source"
78+
79+
siblings:
80+
- id: "org.hyperpolymath.verisimdb-data"
81+
relationship: "git-backed-flatfile-store"
82+
note: "Data repo holding panic-attack scans, drift snapshots, dispatch manifests; queried without a running server."
83+
- id: "org.hyperpolymath.hypatia"
84+
relationship: "integration-consumer"
85+
note: "ScanIngester/PatternQuery/DispatchBridge feed the Hypatia neurosymbolic review pipeline."
86+
- id: "org.hyperpolymath.panic-attacker"
87+
relationship: "upstream-scanner"
88+
note: "panic-attack assail produces the JSON ingested as octad entities."
89+
- id: "org.hyperpolymath.gitbot-fleet"
90+
relationship: "downstream-dispatch"
91+
note: "DispatchBridge logs JSONL manifests destined for fleet auto-merge bots."
92+
93+
# ─── Satellite Policy ───────────────────────────────────────────────────────
94+
satellite-policy:
95+
must-pin-upstream: true
96+
must-declare-authority: true
97+
must-have-anchor: true
98+
must-have-golden-path: true
99+
100+
# ─── History ────────────────────────────────────────────────────────────────
101+
realignment-history:
102+
- date: "2026-06-05"
103+
event: "anchor-born"
104+
session-type: "machine-readable-currency-pass"
105+
summary: >
106+
ANCHOR.a2ml first written during the estate-wide currency checkpoint.
107+
Added alongside the .machine_readable/contractiles/ Verbfile.a2ml set
108+
(must/trust/bust/adjust/dust/intend) and the 6a2 refresh. No source code
109+
changes. Models the standards/ephapax ANCHOR shape, accurate to VeriSimDB
110+
(clade=database, no SSG publish target).
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# INDEX.a2ml — Contractile Registry
3+
# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
#
5+
# Machine-readable catalogue of all contractile verbs in this template set.
6+
# Consumers (CI scripts, the contractile CLI, Hypatia rules) SHOULD read this
7+
# file to discover available verbs rather than hard-coding the list.
8+
#
9+
# See: docs/CONTRACTILE-SPEC.adoc §Registry
10+
11+
---
12+
id = "contractiles-registry"
13+
version = "2.0.0" # 2.0.0 (2026-04-18): all 6 verbs on trident shape; verb set complete.
14+
spec = "docs/CONTRACTILE-SPEC.adoc"
15+
last_updated = "2026-04-18"
16+
base_schema = ".machine_readable/contractiles/_base.ncl"
17+
meta_schema_status = "pending — see CONTRACTILE-SPEC §validator-meta-schema"
18+
19+
## Verbs
20+
21+
[[verbs]]
22+
name = "adjust"
23+
semantics = "drift tolerances + corrective actions"
24+
trident = [
25+
"adjust/Adjustfile.a2ml",
26+
"adjust/adjust.ncl",
27+
"adjust/adjust.k9.ncl",
28+
]
29+
manifest = "adjust/adjust.manifest.a2ml"
30+
status = "active"
31+
tier = "Yard"
32+
authority = "advisory"
33+
gating = "advisory (continue-with-warnings)"
34+
cardinality = "one per repo"
35+
notes = "Fifth trident instance (2026-04-18). First (Yard, advisory) authority pattern. Specialises in cumulative-drift catchment — tolerance bands + trend tracking across sessions. auto_fix_when_available applies deterministic patches; advisory otherwise."
36+
37+
[[verbs]]
38+
name = "bust"
39+
semantics = "hard-stop / expiry / must-not-run declarations"
40+
trident = [
41+
"bust/Bustfile.a2ml",
42+
"bust/bust.ncl",
43+
"bust/bust.k9.ncl",
44+
]
45+
manifest = "bust/bust.manifest.a2ml"
46+
status = "active"
47+
tier = "Hunt-read-only"
48+
authority = "blocking"
49+
gating = "hard (exit-nonzero)"
50+
cardinality = "one per repo"
51+
notes = "Fourth trident instance (2026-04-18). Completes the blocking-authority triple (must + trust + bust). Specialises in deprecated-path-reintroduction catchment. Injects failures via declared probes and verifies recovery paths."
52+
53+
[[verbs]]
54+
name = "dust"
55+
semantics = "rollback / recovery / deprecation / audit-trail preservation"
56+
trident = [
57+
"dust/Dustfile.a2ml",
58+
"dust/dust.ncl",
59+
"dust/dust.k9.ncl",
60+
]
61+
manifest = "dust/dust.manifest.a2ml"
62+
status = "active"
63+
tier = "Yard"
64+
authority = "advisory"
65+
gating = "advisory (continue-with-warnings)"
66+
cardinality = "one per repo"
67+
notes = "Sixth and FINAL trident instance (2026-04-18) — completes the full verb set. Specialises in audit-trail preservation + rollback-path verification. Destructive actions gated behind --apply flag + per-item approval; dry-run default."
68+
69+
[[verbs]]
70+
name = "intend"
71+
semantics = "north-star (commitments + aspirations)"
72+
trident = [
73+
"intend/Intentfile.a2ml",
74+
"intend/intend.ncl",
75+
"intend/intend.k9.ncl",
76+
]
77+
manifest = "intend/intend.manifest.a2ml"
78+
status = "active"
79+
tier = "Hunt"
80+
authority = "reporting"
81+
gating = "non-gating (continue)"
82+
cardinality = "one per repo"
83+
notes = "First trident instance in the estate (2026-04-18). Reports progress toward committed next-actions AND lists horizon aspirations. Absorbed the deprecated `lust` verb 2026-04-18. Never blocks. Remaining 5 verbs still on file_pair shape until tridents are built."
84+
85+
[[verbs]]
86+
name = "k9"
87+
semantics = "trust-tier templates (EXCEPTION to one-verbfile rule)"
88+
file_pair = [
89+
"../svc/self-validating/template-hunt.k9.ncl",
90+
"../svc/self-validating/template-kennel.k9.ncl",
91+
"../svc/self-validating/template-yard.k9.ncl",
92+
]
93+
status = "exception"
94+
gating = "not applicable"
95+
notes = "k9 is service-automation meta-infrastructure, not a verb contractile. Three trust-tier templates (Kennel/Yard/Hunt). Does not have a Verbfile.a2ml. Templates live under .machine_readable/svc/self-validating/ (the single k9 home, per PR #114's svc/k9 -> svc/self-validating rename); the verb tridents (intend/adjust .k9.ncl) import them via ../../svc/self-validating/. See CONTRACTILE-SPEC §k9-exception."
96+
97+
# [[verbs]] lust REMOVED 2026-04-18 — name had unwanted associations;
98+
# the horizon/aspiration semantics were always meant to live inside `intend`
99+
# (the north-star verb). The [[wishes]] schema was absorbed into
100+
# intend/Intentfile.a2ml. Any `lust/` dir found in an estate repo is drift
101+
# and should be deleted.
102+
103+
[[verbs]]
104+
name = "must"
105+
semantics = "invariant assertion — release-blocking"
106+
trident = [
107+
"must/Mustfile.a2ml",
108+
"must/must.ncl",
109+
"must/must.k9.ncl",
110+
]
111+
manifest = "must/must.manifest.a2ml"
112+
status = "active"
113+
tier = "Hunt-read-only"
114+
authority = "blocking"
115+
gating = "hard (exit-nonzero)"
116+
cardinality = "one per repo"
117+
notes = "Third trident instance (2026-04-18). Completes the blocking-authority pair with trust: must = concrete + persistent invariants; trust = concrete + ephemeral transactions. Specialises in subtle invariant-erosion (tracking per-session trend; flagging silent regression). Single failure blocks merge. Simplest and most commonly populated verb."
118+
119+
[[verbs]]
120+
name = "trust"
121+
semantics = "security + provenance + safe-hacking"
122+
trident = [
123+
"trust/Trustfile.a2ml",
124+
"trust/trust.ncl",
125+
"trust/trust.k9.ncl",
126+
]
127+
manifest = "trust/trust.manifest.a2ml"
128+
status = "active"
129+
tier = "Hunt"
130+
authority = "blocking"
131+
gating = "hard (exit-nonzero)"
132+
cardinality = "one per repo"
133+
notes = "Second trident instance (2026-04-18). First (Hunt, blocking) verb — hard gate. Primary defense against threat-model misclassification (B1) and 'turn off the firewall' capability-collapse (C2). Inherits on_open negotiation+accountability+translation from intend.k9.ncl v2.0.0; adds threat_model_foregrounding + block_session_close_on_critical_drift."
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# (MPL-2.0 is automatic legal fallback until PMPL is formally recognised)
3+
#
4+
# _base.ncl — Shared contractile base
5+
#
6+
# Provides four named schema fragments imported by every verb runner:
7+
#
8+
# pedigree_schema — canonical pedigree block shape
9+
# status_core_doc — documentation of the shared status trio (String list)
10+
# probe_schema — target structured probe form (spec only; verb files
11+
# still use probe | String with TODO comments)
12+
# run_defaults — default runner behaviour
13+
#
14+
# Usage in a verb runner:
15+
#
16+
# let base = import "../_base.ncl" in
17+
# {
18+
# pedigree = base.pedigree_schema & {
19+
# contractile_verb = "must",
20+
# semantics = "invariant",
21+
# security = {
22+
# leash = 'Kennel,
23+
# trust_level = "read-only verification",
24+
# allow_network = false,
25+
# allow_filesystem_write = false,
26+
# allow_subprocess = true,
27+
# },
28+
# metadata = {
29+
# name = "must-runner",
30+
# version = "1.0.0",
31+
# description = "...",
32+
# paired_xfile = "Mustfile.a2ml",
33+
# author = "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>",
34+
# },
35+
# },
36+
# schema = { ... },
37+
# run = base.run_defaults & { on_any_fail = "exit-nonzero" },
38+
# }
39+
#
40+
# See: docs/CONTRACTILE-SPEC.adoc §Shared Base
41+
42+
{
43+
# -------------------------------------------------------------------------
44+
# pedigree_schema
45+
#
46+
# The canonical shape of the `pedigree` block required in every verb runner.
47+
# Verb runners merge this with their verb-specific values using Nickel's `&`
48+
# (right-priority merge). Override contractile_verb, semantics, security.*,
49+
# and metadata.* in each verb.
50+
# -------------------------------------------------------------------------
51+
pedigree_schema = {
52+
schema_version | String | default = "1.0.0",
53+
contractile_verb | String | default = "UNSET", # MUST override in verb
54+
semantics | String | default = "UNSET", # MUST override in verb
55+
security = {
56+
leash | [| 'Kennel, 'Yard, 'Hunt |] | default = 'Kennel,
57+
trust_level | String | default = "UNSET", # MUST override in verb
58+
allow_network | Bool | default = false,
59+
allow_filesystem_write | Bool | default = false,
60+
allow_subprocess | Bool | default = true,
61+
# verb-specific additional security fields go in the verb's merge override:
62+
# e.g. authorised_probes_only (trust), injection_scope (bust),
63+
# destructive_mode_requires_flag (dust)
64+
},
65+
metadata = {
66+
name | String | default = "UNSET", # MUST override in verb
67+
version | String | default = "1.0.0",
68+
description | String | default = "UNSET", # MUST override in verb
69+
paired_xfile | String | default = "UNSET", # MUST override in verb
70+
author | String | default = "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>",
71+
},
72+
},
73+
74+
# -------------------------------------------------------------------------
75+
# status_core_doc
76+
#
77+
# Documents the minimum shared status values present in every verb's status
78+
# enum: declared, verified, failing.
79+
#
80+
# Nickel does not support structural enum extension, so verb files reproduce
81+
# their full enum verbatim in `schema`. This field serves as documentation
82+
# and for tooling that introspects the base.
83+
#
84+
# Verbs that extend status_core (i.e. all except must + trust):
85+
# adjust: + 'partial
86+
# bust: + 'drilled
87+
# dust: 'declared, 'proposed, 'approved, 'removed (non-standard)
88+
# intend: intents: 'declared, 'in_progress, 'done, 'deferred, 'retired
89+
# wishes: 'declared, 'in_progress, 'achieved, 'abandoned
90+
# (the wishes schema was absorbed from the deprecated `lust`
91+
# verb 2026-04-18; lust/ dir removed estate-wide)
92+
#
93+
# See: docs/CONTRACTILE-SPEC.adoc §Per-Verb Extension
94+
# -------------------------------------------------------------------------
95+
status_core_doc = "status_core values: declared | verified | failing — extended per verb",
96+
97+
# -------------------------------------------------------------------------
98+
# probe_schema
99+
#
100+
# The TARGET structured probe form. See: docs/CONTRACTILE-SPEC.adoc §Probe
101+
#
102+
# IMPORTANT: This is a spec-only definition. Existing verb runner files still
103+
# use `probe | String` with a `# TODO: migrate to probe_schema` comment.
104+
# This is a breaking change; migration happens when the CLI supports both
105+
# forms.
106+
#
107+
# Adopters writing new xfiles should prefer the structured form:
108+
# probe = {
109+
# command = "test -f my-file",
110+
# timeout_seconds = 60,
111+
# allowed_exit_codes = [0],
112+
# permission_class = 'read_only,
113+
# }
114+
# -------------------------------------------------------------------------
115+
probe_schema = {
116+
command | String,
117+
timeout_seconds | Number | default = 300,
118+
allowed_exit_codes | Array Number | default = [0],
119+
permission_class
120+
| [| 'read_only, 'filesystem_write, 'subprocess, 'network |]
121+
| default = 'read_only,
122+
},
123+
124+
# -------------------------------------------------------------------------
125+
# run_defaults
126+
#
127+
# Default runner behaviour. Verb runners merge this with verb-specific
128+
# overrides using Nickel's `&` (right-priority merge).
129+
#
130+
# Most verbs override on_any_fail:
131+
# "exit-nonzero" : hard gate (must, trust, bust, adjust-gating)
132+
# "continue-with-warnings": advisory (dust, adjust)
133+
# "continue" : never gate (intend — covers both intents and wishes)
134+
# -------------------------------------------------------------------------
135+
run_defaults = {
136+
on_pass = "continue",
137+
on_any_fail = "exit-nonzero",
138+
report_format = "a2ml",
139+
emit_summary = true,
140+
},
141+
}

0 commit comments

Comments
 (0)