Skip to content

Commit fda5f0b

Browse files
hyperpolymathclaude
andcommitted
feat(contractiles): first trident lands — intend gets intend.k9.ncl + manifest
First instance in the estate of the Trident enforcement shape for a contractile verb. Intent is the pilot (per user design session 2026-04-18); other 5 verbs (must/trust/bust/adjust/dust) and 14 template-copy dirs follow this template. Files: - intend/intend.k9.ncl — K9 trust-tier component, Hunt/reporting - intend/intend.manifest.a2ml — trident coherence manifest + cross-refs Design commitments baked in (full memory trail under ~/.claude/projects/-var-mnt-eclipse-repos/memory/ 2026-04-18): * α two-axis declaration (tier × authority). intend = (Hunt, reporting). Capability and authority are orthogonal so "Hunt-tier = overrides" is structurally impossible; each verb declares both fields explicitly. * Variance schema first-class (P-shape, structural not magic-marker comments). Expired variance auto-surfaces as re-imposition. * Sessional drift detection via on_close hook — the "picked up sessionally" requirement. on_open is the ratification hook. * Agent-neutral: ratification rendered in plain language (metaphor-capture defense), identical determination for any agent. * Evidence sinks: VeriSimDB (queryable) + 6a2/DRIFT.a2ml (repo-local, append-only). Both written every execution. * Failure-mode defenses cross-referenced to the catalog — structural link not narrative claim. * Cardinality: ONE intend trident per repo. ANCHOR.a2ml is the sole multi-instance contractile exception (not built yet). INDEX.a2ml updated: `file_pair` → `trident` + `manifest` for intend; tier + authority fields added; cardinality field added. Remaining 5 verbs stay on file_pair until their tridents are built. Other 5 verbs and the 14 template-copy dirs follow this shape in subsequent commits. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent b7e3dfd commit fda5f0b

3 files changed

Lines changed: 242 additions & 3 deletions

File tree

.machine_readable/contractiles/INDEX.a2ml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
---
1212
id = "contractiles-registry"
13-
version = "1.1.0"
13+
version = "1.2.0"
1414
spec = "docs/CONTRACTILE-SPEC.adoc"
1515
last_updated = "2026-04-18"
1616
base_schema = ".machine_readable/contractiles/_base.ncl"
@@ -54,13 +54,18 @@ notes = "destructive mode gated behind --apply flag + explicit item approval"
5454
[[verbs]]
5555
name = "intend"
5656
semantics = "north-star (commitments + aspirations)"
57-
file_pair = [
57+
trident = [
5858
"intend/Intentfile.a2ml",
5959
"intend/intend.ncl",
60+
"intend/intend.k9.ncl",
6061
]
62+
manifest = "intend/intend.manifest.a2ml"
6163
status = "active"
64+
tier = "Hunt"
65+
authority = "reporting"
6266
gating = "non-gating (continue)"
63-
notes = "reports progress toward committed next-actions AND lists horizon aspirations. Absorbed the deprecated `lust` verb 2026-04-18. Never blocks."
67+
cardinality = "one per repo"
68+
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."
6469

6570
[[verbs]]
6671
name = "k9"
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# intend.k9.ncl — K9 trust-tier component of the intend trident
3+
# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
#
5+
# Pairs with: Intentfile.a2ml (declaration) + intend.ncl (runner).
6+
# Trident completeness is a hard precondition — a repo shipping
7+
# Intentfile without this file AND its runner is an invalid trident;
8+
# the contractile CLI's verify gate refuses partial publication.
9+
#
10+
# Verb: intend (north star — commitments + aspirations)
11+
# Tier: Hunt (capability: subprocess probes may shell out)
12+
# Authority: reporting (never blocks; drift-log only)
13+
#
14+
# Cardinality: ONE intend trident per repo (see feedback_contractile_
15+
# layout_rules.md). ANCHOR.a2ml is the sole multi-instance exception —
16+
# it is NOT a verb contractile.
17+
#
18+
# Design commitments baked in (see memory trail 2026-04-18 for full
19+
# context; key files referenced by name in annotations below):
20+
# * α two-axis (tier × authority) — structurally separate capability
21+
# from authority so "Hunt tier = can override" is impossible.
22+
# * Variance schema first-class, not comment markers
23+
# (feedback_audit_tool_suppression_design.md — structural > markers).
24+
# * Sessional drift detection hooks (on_close, on_open).
25+
# * Ratification at session open; drift log at session close.
26+
# * Evidence sinks: VeriSimDB (queryable) + 6a2/DRIFT.a2ml (repo-local).
27+
# * Failure-mode defenses cross-referenced to the AI failure catalog.
28+
29+
let base_k9 = import "../k9/template-hunt.k9.ncl" in
30+
let base = import "../_base.ncl" in
31+
32+
{
33+
pedigree = base_k9.pedigree_schema & {
34+
contractile_verb = "intend",
35+
paired_xfile = "../intend/Intentfile.a2ml",
36+
paired_runner = "../intend/intend.ncl",
37+
38+
# α two-axis declaration — capability × authority.
39+
# intend is Hunt-capable (probes shell out) but reporting-authority
40+
# (never blocks). must/trust/bust will declare (Hunt, blocking);
41+
# adjust/dust will declare (Yard, advisory). Splitting the axes
42+
# means "I'm Hunt-tier so I can override everything" is structurally
43+
# impossible — authority is a separate field.
44+
tier = 'Hunt,
45+
authority = 'reporting,
46+
47+
metadata = {
48+
name = "intend-k9",
49+
version = "1.0.0",
50+
description = "Executes Intentfile probes + emits drift log. Non-gating; reporting authority only.",
51+
paired_xfile = "Intentfile.a2ml",
52+
paired_runner = "intend.ncl",
53+
author = "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>",
54+
},
55+
56+
security = {
57+
leash = 'Hunt,
58+
trust_level = "subprocess + filesystem-read",
59+
allow_network = false,
60+
allow_filesystem_write = false, # evidence sinks are indirected
61+
allow_subprocess = true,
62+
},
63+
},
64+
65+
# -------------------------------------------------------------------
66+
# Variance schema — P-shape scoped exceptions per entry.
67+
# A variance suppresses a specific intent's or wish's obligation for a
68+
# reason, with approver + expiry. Expired variance = effective
69+
# re-imposition of the obligation. Unmet intent without a variance =
70+
# drift, logged to the drift log.
71+
# Per user 2026-04-18: variances are structural, not magic-comment
72+
# markers — markers are gameable.
73+
# -------------------------------------------------------------------
74+
variance_schema = {
75+
entry_id | String, # which intent/wish id the variance applies to
76+
reason | String,
77+
approved_by | String,
78+
scope | String, # path glob | session-id | "until-<date>"
79+
expires | String, # absolute date or condition
80+
review_notes | String | optional,
81+
},
82+
83+
# -------------------------------------------------------------------
84+
# Execution policy
85+
# -------------------------------------------------------------------
86+
execution = {
87+
# When the component runs.
88+
# session_close is mandatory (the "picked up sessionally" check).
89+
triggers = [ 'session_close, 'on_demand, 'pre_push ],
90+
91+
# Per-intent execution.
92+
per_intent = {
93+
run_probe = true,
94+
record_outcome = true,
95+
respect_variance = true, # active variance suppresses failure
96+
on_unmet = 'log_drift, # never 'fail — authority = reporting
97+
},
98+
99+
# Per-wish execution (wishes are non-probeable; horizon-group only).
100+
per_wish = {
101+
run_probe = false,
102+
emit_horizon_summary = true,
103+
# Vertical alignment soft-check per user_6a2_is_contractile_ought.md:
104+
# highest-level alignment is meta ↔ north-star (soft), not hard gate.
105+
check_alignment_with_META = true,
106+
},
107+
108+
# Evidence sinks — BOTH written, every execution.
109+
# VeriSimDB = queryable machine record (feedback_verisimdb_policy.md).
110+
# 6a2/DRIFT.a2ml = repo-local append-only drift log (feedback_sessional_
111+
# drift_detection.md + user_6a2_is_contractile_ought.md descriptive role).
112+
evidence_sinks = [
113+
{
114+
kind = 'verisimdb,
115+
table = "contractile_executions",
116+
schema = "contractile_execution_v1",
117+
},
118+
{
119+
kind = 'drift_log,
120+
path = ".machine_readable/6a2/DRIFT.a2ml",
121+
append_only = true,
122+
},
123+
],
124+
125+
# Session-close hook — the "picked up sessionally" requirement.
126+
# Re-execute, diff against the last ratification, surface expired
127+
# variances, emit drift entries for new failures.
128+
on_close = {
129+
re_execute_all_intents = true,
130+
diff_against_last_ratification = true,
131+
emit_drift_entries_for_new_failures = true,
132+
surface_expired_variances = true,
133+
},
134+
135+
# Session-open hook — ratification protocol
136+
# (user_contractiles_agreed_at_session_start.md).
137+
# Summary must be plain language (metaphor-capture defense —
138+
# user_metaphor_capture_break_frame_at_operational_boundaries.md).
139+
on_open = {
140+
render_summary = 'plain_language,
141+
require_user_agreement = true,
142+
include_drift_log_from_last_close = true,
143+
include_active_variances = true,
144+
# Recent ANCHORs (user_anchor_a2ml_recalibration_record.md) may
145+
# have shifted the contract since last session — surface them.
146+
include_recent_anchors = true,
147+
anchor_lookback_weeks = 8,
148+
},
149+
},
150+
151+
# -------------------------------------------------------------------
152+
# Failure-mode defenses — explicit cross-reference to the catalog
153+
# (feedback_ai_failure_mode_catalog.md). New catalog entries that
154+
# shift this verb's defenses must update this list, not narrative.
155+
# -------------------------------------------------------------------
156+
failure_mode_defenses = [
157+
'A1_enthusiasm_capture, # scope breach → drift log
158+
'A2_metaphor_capture, # render_summary = 'plain_language
159+
'A3_allegory_drift, # intents cite concrete obligations
160+
'C1_scope_creep, # feature-adjacent change needs intent_id
161+
'C3_helpfulness_inflation, # changes without intent_id flagged
162+
'C4_modernization_drift, # upgrade cannot cite intent → drift
163+
'D5_sycophancy, # ratification compares user framing vs contract
164+
'F1_across_session_forgetting, # on_open reads last-ratification record
165+
],
166+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# intend.manifest.a2ml — Trident coherence manifest for the intend verb.
3+
# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
#
5+
# Asserts: exactly three files constitute the intend trident; their
6+
# content-hashes are pinned here; cross-references round-trip; no
7+
# partial publication is permitted.
8+
#
9+
# The contractile CLI's `verify <verb>` subcommand MUST:
10+
# 1. Confirm all three listed files exist at the declared paths.
11+
# 2. Compute each file's sha256 and match against the pinned value.
12+
# 3. Follow each cross-reference and confirm the target file's
13+
# reciprocal field points back.
14+
# 4. Refuse the dir (exit non-zero) if any of 1–3 fails.
15+
#
16+
# This forecloses the failure mode where an agent publishes an A2ML
17+
# declaration with no paired runner or K9 component — the trident is
18+
# atomically complete or it is invalid.
19+
20+
---
21+
trident_version = "1.0.0"
22+
verb = "intend"
23+
semantics = "north-star (commitments + aspirations)"
24+
cardinality = "one per repo"
25+
26+
## Files (three; exactly)
27+
28+
[[files]]
29+
role = "declaration"
30+
path = "Intentfile.a2ml"
31+
sha256 = "pending-first-verify" # populated on first `contractile verify intend`
32+
size_bytes = "pending-first-verify"
33+
34+
[[files]]
35+
role = "runner"
36+
path = "intend.ncl"
37+
sha256 = "pending-first-verify"
38+
size_bytes = "pending-first-verify"
39+
40+
[[files]]
41+
role = "k9_component"
42+
path = "intend.k9.ncl"
43+
sha256 = "pending-first-verify"
44+
size_bytes = "pending-first-verify"
45+
46+
## Cross-references (must round-trip)
47+
48+
[cross_refs]
49+
# Each runner/K9 component names its paired files; the CLI follows the
50+
# links and asserts reciprocity. Any dangling or mismatched reference
51+
# fails the verify gate.
52+
runner_paired_xfile = "Intentfile.a2ml"
53+
k9_paired_xfile = "../intend/Intentfile.a2ml"
54+
k9_paired_runner = "../intend/intend.ncl"
55+
56+
## Trident signing
57+
58+
[signed_by]
59+
user = "Jonathan D.A. Jewell"
60+
date = "2026-04-18"
61+
context = "intend trident pilot — first Trident instance in the estate; template for the remaining 5 verbs (must/trust/bust/adjust/dust) and for the 14 template-copy dirs."
62+
63+
## Change log
64+
65+
[[history]]
66+
date = "2026-04-18"
67+
event = "trident-born"
68+
note = "intend/Intentfile.a2ml pre-existed (f380b62, lust absorption). This manifest + intend.k9.ncl complete the trident for the first time."

0 commit comments

Comments
 (0)