diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c46a4e0..c650acd 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -29,7 +29,7 @@ Copyright (c) Jonathan D.A. Jewell ### As Applicable -- [ ] `.machine_readable/6a2/STATE.a2ml` updated (if project state changed) +- [ ] `docs/status/JOURNAL.adoc` updated (if the phase, blockers or next action changed) - [ ] `.machine_readable/6a2/ECOSYSTEM.a2ml` updated (if integrations changed) - [ ] `.machine_readable/6a2/META.a2ml` updated (if architectural decisions changed) - [ ] Documentation updated for user-facing changes diff --git a/.github/workflows/openssf-compliance.yml b/.github/workflows/openssf-compliance.yml index 8049a68..e2e31aa 100644 --- a/.github/workflows/openssf-compliance.yml +++ b/.github/workflows/openssf-compliance.yml @@ -63,18 +63,18 @@ jobs: exit 1 fi echo "README: OK" - - name: Check .machine_readable directory and STATE.a2ml + - name: Check .machine_readable directory and the thin journal run: | if [ ! -d ".machine_readable" ]; then echo "::error::.machine_readable/ directory is required" exit 1 fi - if [ ! -f ".machine_readable/6a2/STATE.a2ml" ]; then - echo "::error::.machine_readable/6a2/STATE.a2ml is required" + if [ ! -f "docs/status/JOURNAL.adoc" ]; then + echo "::error::docs/status/JOURNAL.adoc is required (the STATE v2 thin journal)" exit 1 fi - echo ".machine_readable/6a2/STATE.a2ml: OK" + echo "docs/status/JOURNAL.adoc: OK" - name: Check CHANGELOG exists run: | if [ ! -f "CHANGELOG.md" ] && [ ! -f "CHANGELOG.adoc" ] && [ ! -f "CHANGES.md" ]; then @@ -90,7 +90,7 @@ jobs: # Collect all required files that exist for f in SECURITY.md SECURITY.adoc .github/SECURITY.md LICENSE LICENSE.txt \ CONTRIBUTING.md CONTRIBUTING.adoc README.md README.adoc \ - .machine_readable/6a2/STATE.a2ml .machine_readable/6a2/META.a2ml \ + docs/status/JOURNAL.adoc .machine_readable/6a2/META.a2ml \ .machine_readable/6a2/ECOSYSTEM.a2ml CHANGELOG.md CHANGELOG.adoc; do [ -f "$f" ] && REQUIRED_FILES="$REQUIRED_FILES $f" done diff --git a/.machine_readable/0.1-AI-MANIFEST.a2ml b/.machine_readable/0.1-AI-MANIFEST.a2ml index 7d8ce9e..ac241d9 100644 --- a/.machine_readable/0.1-AI-MANIFEST.a2ml +++ b/.machine_readable/0.1-AI-MANIFEST.a2ml @@ -12,7 +12,7 @@ description: | automation scripts. canonical_locations: - state: "6a2/STATE.a2ml" + state: "../docs/status/JOURNAL.adoc" meta: "6a2/META.a2ml" ecosystem: "6a2/ECOSYSTEM.a2ml" agentic: "6a2/AGENTIC.a2ml" diff --git a/.machine_readable/6a2/0-AI-MANIFEST.a2ml b/.machine_readable/6a2/0-AI-MANIFEST.a2ml index a542ab6..666fac3 100644 --- a/.machine_readable/6a2/0-AI-MANIFEST.a2ml +++ b/.machine_readable/6a2/0-AI-MANIFEST.a2ml @@ -6,14 +6,13 @@ This manifest declares the AI-assistant context for the 6a2 machine-readable met ## Canonical Locations -The 7 core A2ML files MUST exist in this directory: +The 6 core A2ML files MUST exist in this directory (STATE.a2ml was archived on 2026-11-10 to ../archive/state-v1.a2ml; its live successor is docs/status/JOURNAL.adoc): 1. AGENTIC.a2ml 2. CLADE.a2ml 3. ECOSYSTEM.a2ml 4. META.a2ml 5. NEUROSYM.a2ml 6. PLAYBOOK.a2ml -7. STATE.a2ml ## Invariants diff --git a/.machine_readable/6a2/README.adoc b/.machine_readable/6a2/README.adoc index 916a702..e3aa9f7 100644 --- a/.machine_readable/6a2/README.adoc +++ b/.machine_readable/6a2/README.adoc @@ -11,7 +11,7 @@ This directory contains the 6 core A2ML machine-readable metadata files for this - `META.a2ml` - Architecture decisions (ADRs), development practices, design rationale - `NEUROSYM.a2ml` - Symbolic semantics, composition algebra - `PLAYBOOK.a2ml` - Executable plans, operational runbooks -- `STATE.a2ml` - Project state, phase, milestones, session history +- `STATE.a2ml` - archived 2026-11-10 to ../archive/state-v1.a2ml; the live successor is docs/status/JOURNAL.adoc ## Standards Compliance diff --git a/.machine_readable/ai/.clinerules b/.machine_readable/ai/.clinerules index 4818351..cca25bf 100644 --- a/.machine_readable/ai/.clinerules +++ b/.machine_readable/ai/.clinerules @@ -2,7 +2,7 @@ # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # Authoritative source: docs/AI-CONVENTIONS.md -# STARTUP: Read 0-AI-MANIFEST.a2ml first, then .machine_readable/6a2/STATE.a2ml. +# STARTUP: Read 0-AI-MANIFEST.a2ml first, then docs/status/JOURNAL.adoc. # LICENSE # All original code: MPL-2.0. diff --git a/.machine_readable/ai/.windsurfrules b/.machine_readable/ai/.windsurfrules index 4818351..cca25bf 100644 --- a/.machine_readable/ai/.windsurfrules +++ b/.machine_readable/ai/.windsurfrules @@ -2,7 +2,7 @@ # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # Authoritative source: docs/AI-CONVENTIONS.md -# STARTUP: Read 0-AI-MANIFEST.a2ml first, then .machine_readable/6a2/STATE.a2ml. +# STARTUP: Read 0-AI-MANIFEST.a2ml first, then docs/status/JOURNAL.adoc. # LICENSE # All original code: MPL-2.0. diff --git a/.machine_readable/ai/AI.a2ml b/.machine_readable/ai/AI.a2ml index 3754aca..d1dce13 100644 --- a/.machine_readable/ai/AI.a2ml +++ b/.machine_readable/ai/AI.a2ml @@ -7,9 +7,9 @@ - Prefer to keep generated files out of source control, and regenerate them with the documented commands before committing. ## Workflow -1. Inspect `.machine_readable/6a2/STATE.a2ml` for blockers and next actions. +1. Inspect `docs/status/JOURNAL.adoc` for the phase, blockers and next action. 2. Respect any constraints listed inside `.machine_readable/6a2/AGENTIC.a2ml` when tooling changes are requested. -3. After finishing edits, update STATE with your outcomes and commit with a concise, imperative message. +3. After finishing edits, update the thin journal (docs/status/JOURNAL.adoc) with your outcomes and commit with a concise, imperative message. ## Delivery Promises - Mention in summaries whether STATE, `.machine_readable/contractiles/`, or `.machine_readable/bot_directives/` changed. diff --git a/.machine_readable/ai/README.adoc b/.machine_readable/ai/README.adoc index 29d3c06..7d1f62e 100644 --- a/.machine_readable/ai/README.adoc +++ b/.machine_readable/ai/README.adoc @@ -20,5 +20,5 @@ Recommended machine read order: * `.machine_readable/policies/MAINTENANCE-AXES.a2ml` * `.machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml` * `.machine_readable/policies/SOFTWARE-DEVELOPMENT-APPROACH.a2ml` -* `.machine_readable/6a2/STATE.a2ml` +* `docs/status/JOURNAL.adoc` * `.machine_readable/6a2/META.a2ml` diff --git a/.machine_readable/6a2/STATE.a2ml b/.machine_readable/archive/state-v1.a2ml similarity index 83% rename from .machine_readable/6a2/STATE.a2ml rename to .machine_readable/archive/state-v1.a2ml index 408e5cc..7d1a9e5 100644 --- a/.machine_readable/6a2/STATE.a2ml +++ b/.machine_readable/archive/state-v1.a2ml @@ -1,6 +1,16 @@ # SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) # +# TOMBSTONE — STATE v1, archived 2026-11-10 (renamed from +# .machine_readable/6a2/STATE.a2ml). +# Retired by the owner's ruling on state-v1-decision.adoc, option B (2026-11-10). +# Do not edit this file, and do not read it for current status. The live homes: +# lifecycle and maturity anytype_chora.deed, the (status) and (maturity) clauses +# phase, blockers, next docs/status/JOURNAL.adoc +# milestones docs/status/ROADMAP.adoc +# Dropped as derivable: completion-percentage and [maintenance-status]. +# Everything below is kept verbatim, so no milestone row or blocker is lost. +# # STATE.a2ml — Project state checkpoint for anytype (the Equality Theory kernel). [metadata] diff --git a/.machine_readable/arrival-pack/arrival-pack.ncl b/.machine_readable/arrival-pack/arrival-pack.ncl index 4a85a8e..a1ad713 100644 --- a/.machine_readable/arrival-pack/arrival-pack.ncl +++ b/.machine_readable/arrival-pack/arrival-pack.ncl @@ -22,7 +22,7 @@ let data = import "claude-md-data.json" in let manifesto_pin = "DRAFT-unratified" in let provenance = - "CLADE@%{data.h_clade} ECOSYSTEM@%{data.h_eco} AGENTIC@%{data.h_agentic} STATE@%{data.h_state} ANCHOR@%{data.h_anchor}" + "CLADE@%{data.h_clade} ECOSYSTEM@%{data.h_eco} AGENTIC@%{data.h_agentic} DEED@%{data.h_deed} ANCHOR@%{data.h_anchor}" in m%" @@ -48,7 +48,7 @@ If you are unsure what something is, **read the canon; do not guess** (guessing 13. **Equivalence as identity** — the estate's intellectual through-line. ## The machine-readable substrate (read in this order on arrival) -**CLADE** → **ANCHOR** → **AGENTIC** → **ECOSYSTEM** → **STATE** +**CLADE** → **ANCHOR** → **AGENTIC** → **ECOSYSTEM** → **JOURNAL** The descriptive family (working name *descriptiles*) describes what-is; the **contractiles** are the normative set-point. @@ -61,7 +61,7 @@ The descriptive family (working name *descriptiles*) describes what-is; the **co | `ECOSYSTEM.a2ml` | *Where it sits* — estate + external relations, and `what-this-is-not`. | | `NEUROSYM.a2ml` | *Meaning* of operations — proof obligations. | | `PLAYBOOK.a2ml` | *How* permitted actions run. | -| `STATE.a2ml` | *Where things are now* — progress, blockers, next-actions. | +| `docs/status/JOURNAL.adoc` | *Where things are now* — phase, blockers, next action (the STATE v2 thin journal). | | contractiles | Normative doctrine: **Intend** (north-star) · **Must** (invariants) · **Trust** (security) · **Adjust** (accessibility / inclusive design) — the integral core that holds strong; plus **Dust** (exnovation drift) · **Bust** (failure / breakage, not drift). | | k9 | *Validation*. Kennel (data) / Yard (pure eval) / Hunt (guarded exec). | @@ -82,7 +82,7 @@ Deny: **Nix, TypeScript, Python, Go, AGPL**. JS runtimes in preference order **B - **Where it sits** — pipeline position **%{data.pipeline_pos}**; chain `%{data.chain}`; coordination = `%{data.coordination}`. - **Constraints here** (AGENTIC) — fail-closed; evidence-per-step; no-silent-skip; rerun-after-fix; release-claim-requires-hard-pass. Never: banned langs (above), secrets, state files in repo root, AGPL. Details: `.machine_readable/bot_directives/{methodology,coverage,debt}.a2ml`. - **Golden path** (ANCHOR) — `%{data.golden_smoke}` → %{data.golden_crit}. -- **State** — phase %{data.phase}; maturity %{data.maturity}; %{data.completion}% complete; status %{data.status}. +- **State** — lifecycle %{data.lifecycle}; maturity %{data.maturity}. Phase, blockers and next action: `docs/status/JOURNAL.adoc`. "% diff --git a/.machine_readable/arrival-pack/claude-md.k9.ncl b/.machine_readable/arrival-pack/claude-md.k9.ncl index bd9a8da..8fa81f8 100644 --- a/.machine_readable/arrival-pack/claude-md.k9.ncl +++ b/.machine_readable/arrival-pack/claude-md.k9.ncl @@ -36,7 +36,7 @@ ".machine_readable/6a2/CLADE.a2ml", ".machine_readable/6a2/ECOSYSTEM.a2ml", ".machine_readable/6a2/AGENTIC.a2ml", - ".machine_readable/6a2/STATE.a2ml", + "anytype_chora.deed", # lifecycle + maturity (state-v1-decision option B) ".machine_readable/6a2/anchors/ANCHOR.a2ml", ], estate_common = "hyperpolymath/manifesto@", # DRAFT-unratified today diff --git a/.machine_readable/arrival-pack/extract.sh b/.machine_readable/arrival-pack/extract.sh index b77a8d5..54db602 100755 --- a/.machine_readable/arrival-pack/extract.sh +++ b/.machine_readable/arrival-pack/extract.sh @@ -5,8 +5,10 @@ # extract.sh — the thin a2ml *reader* for the arrival-pack compiler. # # Projects the scalar/array fields the CLAUDE.md arrival pack needs out of this -# repo's descriptive a2ml (the "descriptiles" family: CLADE/ECOSYSTEM/AGENTIC/STATE + -# anchors/ANCHOR) into a single deterministic JSON document on stdout. +# repo's descriptive a2ml (the "descriptiles" family: CLADE/ECOSYSTEM/AGENTIC + +# anchors/ANCHOR), and out of the repo deed (the lifecycle and maturity that STATE +# v1 used to carry; state-v1-decision option B), into a single deterministic JSON +# document on stdout. # # This is a READER only — it authors nothing. The a2ml files remain the single # source of truth; arrival-pack.ncl renders this JSON into the CLAUDE.md region. @@ -17,10 +19,9 @@ DIR6A2="${1:-.machine_readable/6a2}" CLADE="$DIR6A2/CLADE.a2ml" ECO="$DIR6A2/ECOSYSTEM.a2ml" AGENTIC="$DIR6A2/AGENTIC.a2ml" -STATE="$DIR6A2/STATE.a2ml" ANCHOR="$DIR6A2/anchors/ANCHOR.a2ml" -for f in "$CLADE" "$ECO" "$AGENTIC" "$STATE" "$ANCHOR"; do +for f in "$CLADE" "$ECO" "$AGENTIC" "$ANCHOR"; do [ -f "$f" ] || { echo "extract.sh: missing required a2ml: $f" >&2; exit 2; } done @@ -34,6 +35,17 @@ scalar() { printf '%s' "$v" } +# The repo deed, _chora.deed at the repo root (two levels above the +# descriptiles directory), carries the lifecycle (status) and maturity clauses. +DEED="$DIR6A2/../../$(scalar 'canonical-name' "$CLADE")_chora.deed" +[[ -f "$DEED" ]] || { echo "extract.sh: missing required deed: $DEED" >&2; exit 2; } + +# deed_sym CLAUSE KEYWORD -> the symbol after `(CLAUSE ... :KEYWORD ` on the clause's opening line +deed_sym() { + local clause="$1" keyword="$2" + grep -oP "^\s*\($clause\s+:$keyword\s+\K[A-Za-z0-9_-]+" "$DEED" | head -1 || true +} + # arr KEY FILE SEP -> join all quoted strings in the `KEY = [ ... ]` block # (inline `k = ["a","b"]` or multiline). SEP is a literal multi-char string. arr() { @@ -75,15 +87,13 @@ jq -n \ --arg pipeline_pos "$(scalar 'position' "$ECO")" \ --arg chain "$(scalar 'chain' "$ECO")" \ --arg coordination "$(scalar 'coordination' "$ECO")" \ - --arg phase "$(scalar 'phase' "$STATE")" \ - --arg maturity "$(scalar 'maturity' "$STATE")" \ - --arg completion "$(scalar 'completion-percentage' "$STATE")" \ - --arg status "$(scalar 'status' "$STATE")" \ + --arg lifecycle "$(deed_sym status phase)" \ + --arg maturity "$(deed_sym maturity level)" \ --arg golden_smoke "$golden_smoke" \ --arg golden_crit "$golden_crit" \ --arg h_clade "$(sh "$CLADE")" \ --arg h_eco "$(sh "$ECO")" \ --arg h_agentic "$(sh "$AGENTIC")" \ - --arg h_state "$(sh "$STATE")" \ + --arg h_deed "$(sh "$DEED")" \ --arg h_anchor "$(sh "$ANCHOR")" \ '$ARGS.named' diff --git a/.machine_readable/coaptation/coapt.k9.ncl b/.machine_readable/coaptation/coapt.k9.ncl index 7006844..6c00e95 100644 --- a/.machine_readable/coaptation/coapt.k9.ncl +++ b/.machine_readable/coaptation/coapt.k9.ncl @@ -43,7 +43,8 @@ ], descriptiles = [ ".machine_readable/6a2/CLADE.a2ml", - ".machine_readable/6a2/STATE.a2ml", + "anytype_chora.deed", # lifecycle + maturity + "docs/status/JOURNAL.adoc", # phase ".machine_readable/6a2/ECOSYSTEM.a2ml", ".machine_readable/6a2/AGENTIC.a2ml", ".machine_readable/6a2/anchors/ANCHOR.a2ml", diff --git a/.machine_readable/coaptation/coapt.ncl b/.machine_readable/coaptation/coapt.ncl index daf7468..5d4db7d 100644 --- a/.machine_readable/coaptation/coapt.ncl +++ b/.machine_readable/coaptation/coapt.ncl @@ -111,7 +111,7 @@ let clause_lines = std.string.join "\n" (std.array.map (fun e => e.id ++ " = " + let cp = clauses_doc.provenance in let fp = facts_doc.provenance in let contractile_prov = "intend@%{cp.intend} must@%{cp.must} trust@%{cp.trust} adjust@%{cp.adjust} dust@%{cp.dust} bust@%{cp.bust}" in -let descriptile_prov = "clade@%{fp.clade} state@%{fp.state} ecosystem@%{fp.ecosystem} agentic@%{fp.agentic} anchor@%{fp.anchor}" in +let descriptile_prov = "clade@%{fp.clade} deed@%{fp.deed} ecosystem@%{fp.ecosystem} agentic@%{fp.agentic} anchor@%{fp.anchor}" in let s = std.to_string in m%" diff --git a/.machine_readable/coaptation/extract-facts.sh b/.machine_readable/coaptation/extract-facts.sh index b7d00c1..c43d9e2 100755 --- a/.machine_readable/coaptation/extract-facts.sh +++ b/.machine_readable/coaptation/extract-facts.sh @@ -18,12 +18,11 @@ set -euo pipefail DIR6A2="${1:-.machine_readable/6a2}" CLADE="$DIR6A2/CLADE.a2ml" -STATE="$DIR6A2/STATE.a2ml" ECO="$DIR6A2/ECOSYSTEM.a2ml" AGENTIC="$DIR6A2/AGENTIC.a2ml" ANCHOR="$DIR6A2/anchors/ANCHOR.a2ml" -for f in "$CLADE" "$STATE" "$ECO" "$AGENTIC" "$ANCHOR"; do +for f in "$CLADE" "$ECO" "$AGENTIC" "$ANCHOR"; do [ -f "$f" ] || { echo "extract-facts.sh: missing required a2ml: $f" >&2; exit 2; } done @@ -37,6 +36,25 @@ scalar() { printf '%s' "$v" } +# STATE v1 is archived (state-v1-decision, option B). Its live successors: the repo deed +# carries the lifecycle (status) and maturity clauses; the thin journal carries the phase. +DEED="$DIR6A2/../../$(scalar 'canonical-name' "$CLADE")_chora.deed" +JOURNAL="$DIR6A2/../../docs/status/JOURNAL.adoc" +for f in "$DEED" "$JOURNAL"; do + [[ -f "$f" ]] || { echo "extract-facts.sh: missing required file: $f" >&2; exit 2; } +done + +# deed_sym CLAUSE KEYWORD -> the symbol after `(CLAUSE ... :KEYWORD ` on the clause's opening line +deed_sym() { + local clause="$1" keyword="$2" + grep -oP "^\s*\($clause\s+:$keyword\s+\K[A-Za-z0-9_-]+" "$DEED" | head -1 || true +} + +# journal_phase -> the first word of the journal's `phase::` value (the phase label) +journal_phase() { + awk '/^phase::$/{getline; split($0,a,/[ .:]/); print a[1]; exit}' "$JOURNAL" +} + # arr KEY FILE SEP -> join all quoted strings in the `KEY = [ ... ]` block arr() { local key="$1" file="$2" sep="${3:-, }" out="" i @@ -68,14 +86,17 @@ rows="$( emit 'clade.primary' "$(scalar 'primary' "$CLADE")" emit 'clade.born' "$(scalar 'born' "$CLADE")" emit 'clade.forge-github' "$(scalar 'github' "$CLADE")" - # --- STATE: where things are now --- - emit 'state.status' "$(scalar 'status' "$STATE")" - emit 'state.phase' "$(scalar 'phase' "$STATE")" - emit 'state.maturity' "$(scalar 'maturity' "$STATE")" - emit 'state.completion-percentage' "$(scalar 'completion-percentage' "$STATE")" - emit 'state.open-warnings' "$(scalar 'open-warnings' "$STATE")" - emit 'state.open-failures' "$(scalar 'open-failures' "$STATE")" - emit 'state.last-result' "$(scalar 'last-result' "$STATE")" + # --- STATE: where things are now (deed + journal; STATE v1 is archived) --- + emit 'state.status' "$(deed_sym status phase)" + emit 'state.phase' "$(journal_phase)" + emit 'state.maturity' "$(deed_sym maturity level)" + # No source exists for these since STATE v1 was archived: completion is derivable, + # and the other three mirrored a maintenance report that never ran. They are emitted + # EMPTY so they register as ABSENT (present:false), never as a recorded zero. + emit 'state.completion-percentage' "" + emit 'state.open-warnings' "" + emit 'state.open-failures' "" + emit 'state.last-result' "" # --- ECOSYSTEM: where it sits + IS-NOT boundary --- emit 'ecosystem.type' "$(scalar 'type' "$ECO")" emit 'ecosystem.position' "$(scalar 'position' "$ECO")" @@ -99,7 +120,7 @@ rows="$( printf '%s\n' "$rows" | jq -R -s \ --arg clade "$(sh "$CLADE")" \ - --arg state "$(sh "$STATE")" \ + --arg deed "$(sh "$DEED")" \ --arg ecosystem "$(sh "$ECO")" \ --arg agentic "$(sh "$AGENTIC")" \ --arg anchor "$(sh "$ANCHOR")" \ @@ -115,7 +136,7 @@ printf '%s\n' "$rows" | jq -R -s \ }) ), provenance: { - clade: $clade, state: $state, ecosystem: $ecosystem, + clade: $clade, deed: $deed, ecosystem: $ecosystem, agentic: $agentic, anchor: $anchor } } diff --git a/.machine_readable/coaptation/witness-map.ncl b/.machine_readable/coaptation/witness-map.ncl index 9e7e489..7f200d5 100644 --- a/.machine_readable/coaptation/witness-map.ncl +++ b/.machine_readable/coaptation/witness-map.ncl @@ -34,7 +34,7 @@ { fact = "state.phase", op = 'present }, { fact = "ecosystem.type", op = 'present }, ], - note = "STATE.a2ml + ECOSYSTEM.a2ml were read from .machine_readable/6a2/", + note = "the thin journal (docs/status/JOURNAL.adoc) + ECOSYSTEM.a2ml were read", }, "must.anchors-directory" = { kind = "descriptile", @@ -73,12 +73,12 @@ "bust.template-substitution-failure" = { kind = "descriptile", witnesses = [ { fact = "state.open-failures", op = 'nonzero } ], - note = "alarm iff STATE records open failures; else latent (declared, not active)", + note = "alarm iff a maintenance record shows open failures; none is recorded since STATE v1 was archived, so latent", }, "bust.sync-drift-between-repos" = { kind = "descriptile", witnesses = [ { fact = "state.open-failures", op = 'nonzero } ], - note = "alarm iff STATE records open failures; else latent", + note = "alarm iff a maintenance record shows open failures; none is recorded since STATE v1 was archived, so latent", }, "bust.contractile-parse-error" = { kind = "descriptile", diff --git a/.machine_readable/contractiles/Justfile b/.machine_readable/contractiles/Justfile index 5eef44b..0505a0f 100644 --- a/.machine_readable/contractiles/Justfile +++ b/.machine_readable/contractiles/Justfile @@ -52,7 +52,7 @@ info: @echo "Version: {{version}}" @echo "RSR Tier: {{tier}}" @echo "Recipes: $(just --summary | wc -w)" - @[ -f ".machine_readable/6a2/STATE.a2ml" ] && grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/6a2/STATE.a2ml | head -1 | xargs -I{} echo "Phase: {}" || true + @[ -f "docs/status/JOURNAL.adoc" ] && awk '/^phase::$/{getline; split($0,a,/[ .:]/); print "Phase: " a[1]; exit}' docs/status/JOURNAL.adoc || true # Run Invariant Path overlay tools for this repository invariant-path *ARGS: @@ -413,16 +413,17 @@ import? "build/just/validate.just" # STATE MANAGEMENT # ═══════════════════════════════════════════════════════════════════════════════ -# Update STATE.a2ml timestamp +# Update the thin journal's date (the STATE v2 `updated` field) state-touch: - @if [ -f ".machine_readable/6a2/STATE.a2ml" ]; then \ - sed -i 's/last-updated = "[^"]*"/last-updated = "'"$(date +%Y-%m-%d)"'"/' .machine_readable/6a2/STATE.a2ml && \ - echo "STATE.a2ml timestamp updated"; \ + @if [ -f "docs/status/JOURNAL.adoc" ]; then \ + d="$(date +%Y-%m-%d)"; \ + sed -i -e "s/^:updated: .*/:updated: $d/" -e '/^updated::$/{n;s/.*/'"$d"'/}' docs/status/JOURNAL.adoc && \ + echo "JOURNAL.adoc date updated"; \ fi -# Show current phase from STATE.a2ml +# Show the current phase label from the thin journal state-phase: - @grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/6a2/STATE.a2ml 2>/dev/null | head -1 || echo "unknown" + @awk '/^phase::$/{getline; split($0,a,/[ .:]/); print a[1]; exit}' docs/status/JOURNAL.adoc 2>/dev/null || echo "unknown" # ═══════════════════════════════════════════════════════════════════════════════ # GUIX & GUIX diff --git a/.machine_readable/contractiles/must/Mustfile.a2ml b/.machine_readable/contractiles/must/Mustfile.a2ml index 55f8ab4..60413e3 100644 --- a/.machine_readable/contractiles/must/Mustfile.a2ml +++ b/.machine_readable/contractiles/must/Mustfile.a2ml @@ -62,8 +62,8 @@ hooks fail if any check fails. - severity: critical ### six-directory-present -- description: 6a2 directory exists with required files -- run: test -d .machine_readable/6a2 && test -f .machine_readable/6a2/META.a2ml && test -f .machine_readable/6a2/ECOSYSTEM.a2ml && test -f .machine_readable/6a2/STATE.a2ml && test -f .machine_readable/6a2/PLAYBOOK.a2ml && test -f .machine_readable/6a2/AGENTIC.a2ml && test -f .machine_readable/6a2/NEUROSYM.a2ml +- description: 6a2 directory exists with required files, and the thin journal exists +- run: test -d .machine_readable/6a2 && test -f .machine_readable/6a2/META.a2ml && test -f .machine_readable/6a2/ECOSYSTEM.a2ml && test -f docs/status/JOURNAL.adoc && test -f .machine_readable/6a2/PLAYBOOK.a2ml && test -f .machine_readable/6a2/AGENTIC.a2ml && test -f .machine_readable/6a2/NEUROSYM.a2ml - severity: critical ### anchors-directory diff --git a/.machine_readable/self-validating/methodology-guard.k9.ncl b/.machine_readable/self-validating/methodology-guard.k9.ncl index 4c43325..c0b21c6 100644 --- a/.machine_readable/self-validating/methodology-guard.k9.ncl +++ b/.machine_readable/self-validating/methodology-guard.k9.ncl @@ -41,9 +41,9 @@ let methodology_guard = { }, state_not_template = { - description = "STATE.a2ml must not contain template placeholders", + description = "The thin journal must not contain template placeholders", severity = "warning", - file = ".machine_readable/6a2/STATE.a2ml", + file = "docs/status/JOURNAL.adoc", # NOTE: the PROJECT token below is written as a Nickel concat # ("{{" ++ "PROJECT}}") ON PURPOSE. `just init` runs a sed substitution for # the brace-PROJECT-brace token over EVERY text file, which would otherwise diff --git a/CLAUDE.md b/CLAUDE.md index e7fdd1f..0d695b0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell - + # You are in the hyperpolymath estate — orient before acting @@ -28,7 +28,7 @@ If you are unsure what something is, **read the canon; do not guess** (guessing 13. **Equivalence as identity** — the estate's intellectual through-line. ## The machine-readable substrate (read in this order on arrival) -**CLADE** → **ANCHOR** → **AGENTIC** → **ECOSYSTEM** → **STATE** +**CLADE** → **ANCHOR** → **AGENTIC** → **ECOSYSTEM** → **JOURNAL** The descriptive family (working name *descriptiles*) describes what-is; the **contractiles** are the normative set-point. @@ -41,7 +41,7 @@ The descriptive family (working name *descriptiles*) describes what-is; the **co | `ECOSYSTEM.a2ml` | *Where it sits* — estate + external relations, and `what-this-is-not`. | | `NEUROSYM.a2ml` | *Meaning* of operations — proof obligations. | | `PLAYBOOK.a2ml` | *How* permitted actions run. | -| `STATE.a2ml` | *Where things are now* — progress, blockers, next-actions. | +| `docs/status/JOURNAL.adoc` | *Where things are now* — phase, blockers, next action (the STATE v2 thin journal). | | contractiles | Normative doctrine: **Intend** (north-star) · **Must** (invariants) · **Trust** (security) · **Adjust** (accessibility / inclusive design) — the integral core that holds strong; plus **Dust** (exnovation drift) · **Bust** (failure / breakage, not drift). | | k9 | *Validation*. Kennel (data) / Yard (pure eval) / Hunt (guarded exec). | @@ -62,6 +62,6 @@ Deny: **Nix, TypeScript, Python, Go, AGPL**. JS runtimes in preference order **B - **Where it sits** — pipeline position **kernel**; chain `systemet (theory) → anytype (kernel) → AffineScript (profile)`; coordination = `standards`. - **Constraints here** (AGENTIC) — fail-closed; evidence-per-step; no-silent-skip; rerun-after-fix; release-claim-requires-hard-pass. Never: banned langs (above), secrets, state files in repo root, AGPL. Details: `.machine_readable/bot_directives/{methodology,coverage,debt}.a2ml`. - **Golden path** (ANCHOR) — `just test && just quality` → Core tests pass; Quality gates pass; No unresolved critical security findings. -- **State** — phase implementation; maturity experimental; 40% complete; status active. +- **State** — lifecycle active; maturity experimental. Phase, blockers and next action: `docs/status/JOURNAL.adoc`. - + diff --git a/Justfile b/Justfile index 74eb2c3..d30b139 100644 --- a/Justfile +++ b/Justfile @@ -52,7 +52,7 @@ info: @echo "Version: {{version}}" @echo "RSR Tier: {{tier}}" @echo "Recipes: $(just --summary | wc -w)" - @[ -f ".machine_readable/6a2/STATE.a2ml" ] && grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/6a2/STATE.a2ml | head -1 | xargs -I{} echo "Phase: {}" || true + @[ -f "docs/status/JOURNAL.adoc" ] && awk '/^phase::$/{getline; split($0,a,/[ .:]/); print "Phase: " a[1]; exit}' docs/status/JOURNAL.adoc || true # Run Invariant Path overlay tools for this repository invariant-path *ARGS: @@ -432,16 +432,17 @@ import? "build/just/validate.just" # STATE MANAGEMENT # ═══════════════════════════════════════════════════════════════════════════════ -# Update STATE.a2ml timestamp +# Update the thin journal's date (the STATE v2 `updated` field) state-touch: - @if [ -f ".machine_readable/6a2/STATE.a2ml" ]; then \ - sed -i 's/last-updated = "[^"]*"/last-updated = "'"$(date +%Y-%m-%d)"'"/' .machine_readable/6a2/STATE.a2ml && \ - echo "STATE.a2ml timestamp updated"; \ + @if [ -f "docs/status/JOURNAL.adoc" ]; then \ + d="$(date +%Y-%m-%d)"; \ + sed -i -e "s/^:updated: .*/:updated: $d/" -e '/^updated::$/{n;s/.*/'"$d"'/}' docs/status/JOURNAL.adoc && \ + echo "JOURNAL.adoc date updated"; \ fi -# Show current phase from STATE.a2ml +# Show the current phase label from the thin journal state-phase: - @grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/6a2/STATE.a2ml 2>/dev/null | head -1 || echo "unknown" + @awk '/^phase::$/{getline; split($0,a,/[ .:]/); print a[1]; exit}' docs/status/JOURNAL.adoc 2>/dev/null || echo "unknown" # ═══════════════════════════════════════════════════════════════════════════════ # GUIX diff --git a/anytype_chora.deed b/anytype_chora.deed index 45e1b62..4956c18 100644 --- a/anytype_chora.deed +++ b/anytype_chora.deed @@ -1,8 +1,9 @@ ;; SPDX-License-Identifier: MPL-2.0 ;; SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) ;; -;; DRAFT (Slice-2 prep) — not yet wired; the .machine_readable/6a2/ a2ml files -;; stay live and authoritative until the estate wave + kyX (D313) land. Clauses +;; DRAFT — read only for (status) and (maturity), by the arrival-pack generator and the +;; coaptation extractor; every other clause is inert. The .machine_readable/6a2/ a2ml +;; files stay live and authoritative until the estate wave + kyX (D313) land. Clauses ;; are translated field-for-field from those descriptiles under the RULED mapping ;; specs in standards 1-formats/deed/mappings/ (the only authority a family ;; translation may cite): @@ -19,6 +20,8 @@ ;; the free-text [position] phase "implementation" go to the thin ;; journal, docs/status/JOURNAL.adoc; [maintenance-status] and ;; completion-percentage are derivable and dropped. +;; STATE.a2ml is ARCHIVED (2026-11-10, tombstoned, content verbatim): +;; .machine_readable/archive/state-v1.a2ml. ;; 0-AI-MANIFEST.a2ml (root) -> (manifest)(agent)(policy)(work) ;; per ai-manifest-decision.adoc, OPTION A [RULED 2026-11-10, owner] ;; Agent seen-set: open, flag-any-unknown (the spec's default; the @@ -27,10 +30,10 @@ ;; NOT translated here, pending a ruling (kept live in 6a2/): ;; META.a2ml + ECOSYSTEM.a2ml — family 2, meta-ecosystem-to-repo-deed.adoc ;; (PROPOSAL, not yet owner-ruled) -;; The STATE.a2ml and 0-AI-MANIFEST.a2ml SOURCES stay live: gates still require -;; them (openssf-compliance, the Must invariant, validate-template.sh, the -;; arrival-pack generator). They are archived with a tombstone only once those -;; consumers are rewired, so this deed adds no double-tracked state of its own. +;; The gates (openssf-compliance, the Must invariant, validate-template.sh, the e2e +;; test), the arrival-pack generator and the coaptation extractor now read this deed +;; (status, maturity) and docs/status/JOURNAL.adoc (phase). The 0-AI-MANIFEST.a2ml +;; SOURCE stays live: its consumers are not rewired (family 7 is generator-first). (repo-deed :schema-version "1.0.0" :canonical-name "anytype" diff --git a/docs/practice/AI-CONVENTIONS.adoc b/docs/practice/AI-CONVENTIONS.adoc index 404b2bc..2a7c0fb 100644 --- a/docs/practice/AI-CONVENTIONS.adoc +++ b/docs/practice/AI-CONVENTIONS.adoc @@ -12,7 +12,7 @@ Per-tool config files (.cursorrules, .clinerules, etc.) reference this document. ## Session Startup 1. Read `0-AI-MANIFEST.a2ml` FIRST (mandatory gatekeeper). -2. Read `docs/status/JOURNAL.adoc` for the current phase, blockers and next action. It governs over the journal sections of `.machine_readable/6a2/STATE.a2ml`, which stays only until its consumers are rewired. +2. Read `docs/status/JOURNAL.adoc` for the current phase, blockers and next action. STATE v1 is archived at `.machine_readable/archive/state-v1.a2ml`; do not read it for current status. 3. Read `.machine_readable/6a2/anchors/ANCHOR.a2ml` for canonical authority boundaries. 4. Read `.machine_readable/policies/MAINTENANCE-AXES.a2ml` for maintenance/audit sequencing. 5. Read `.machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml` for baseline controls. @@ -81,7 +81,7 @@ Use `just` (Justfile) for all build, test, lint, and format tasks. - `0-AI-MANIFEST.a2ml` -- universal AI entry point - `.machine_readable/6a2/AGENTIC.a2ml` -- agent permissions and constraints - `docs/status/JOURNAL.adoc` -- thin session journal: phase, blockers, last and next action -- `.machine_readable/6a2/STATE.a2ml` -- legacy project state (kept until its consumers are rewired) +- `.machine_readable/archive/state-v1.a2ml` -- archived STATE v1 (tombstoned; not current) - `.machine_readable/6a2/anchors/ANCHOR.a2ml` -- canonical authority and policy boundary - `.machine_readable/policies/MAINTENANCE-AXES.a2ml` -- canonical axis sequencing and audit requirements - `.machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml` -- baseline maintenance checklist policy diff --git a/docs/status/JOURNAL.adoc b/docs/status/JOURNAL.adoc index f305771..5932fa7 100644 --- a/docs/status/JOURNAL.adoc +++ b/docs/status/JOURNAL.adoc @@ -8,10 +8,10 @@ derived. This is the STATE v2 thin journal (`1-formats/templates/STATE.a2ml.v2.spec.adoc` in `standards`: phase, blockers, last action, next action), written as AsciiDoc because A2ML is retired. -Where this file and the journal sections of `.machine_readable/6a2/STATE.a2ml` -disagree, **this file governs** (`state-v1-decision`, option B, ruled -2026-11-10). `STATE.a2ml` stays only until the checks and scripts that still -require it are rewired. +STATE v1 is archived at `.machine_readable/archive/state-v1.a2ml` (2026-11-10, +`state-v1-decision`, option B), and nothing in it is current. This file replaces +its journal sections. The lifecycle and maturity it carried are in the repo deed, +`anytype_chora.deed`. Kept elsewhere, on purpose: milestones in `ROADMAP.adoc`, history in the git log, evidence in `PROOF-STATUS.adoc`, task lists in the GitHub issues. @@ -49,13 +49,6 @@ updated:: TEA-erasure result (ET-14). Not a code blocker yet. | systemet ET-14, OPEN | 2026-07-21 (first recorded in STATE v1) - -| `state-archive-rewire` -| `STATE.a2ml` cannot be archived yet. `openssf-compliance.yml`, the Must - invariant, `scripts/validate-template.sh`, the e2e template test and the - arrival-pack generator still require it. -| rewiring those consumers (several are derived from the estate canon) -| 2026-11-10 |=== == Provenance diff --git a/docs/status/PROOF-STATUS.adoc b/docs/status/PROOF-STATUS.adoc index f66866d..9069855 100644 --- a/docs/status/PROOF-STATUS.adoc +++ b/docs/status/PROOF-STATUS.adoc @@ -49,7 +49,7 @@ one erased-field projection). They are quarantined in the MANIFEST with per-module reasons: the gate requires them to KEEP failing, and flags them for promotion if one starts passing. `ABI/Foreign.idr` is the one template module that compiles and is gated. Their fate (fix or delete) is tracked in -`STATE.a2ml` critical-next-actions. +`docs/status/ROADMAP.adoc` (Next: quarantined template proofs). == Not proven (open obligations) diff --git a/docs/status/ROADMAP.adoc b/docs/status/ROADMAP.adoc index fe37b46..cb9094a 100644 --- a/docs/status/ROADMAP.adoc +++ b/docs/status/ROADMAP.adoc @@ -2,8 +2,10 @@ // Copyright (c) Jonathan D.A. Jewell = anytype Roadmap -Mirrors `[route-to-mvp]` in `.machine_readable/6a2/STATE.a2ml` (which is the -machine-readable source of truth). +This file is the home of the milestones (`state-v1-decision`, option B). The +`[route-to-mvp]` rows of the archived STATE v1 are kept verbatim, with their +percentages, in `.machine_readable/archive/state-v1.a2ml`. The current phase, +blockers and next action are in `JOURNAL.adoc`. == Done diff --git a/scripts/validate-template.sh b/scripts/validate-template.sh index a9df19a..7d43d0a 100755 --- a/scripts/validate-template.sh +++ b/scripts/validate-template.sh @@ -139,7 +139,7 @@ echo "" log_info "Phase 2: Machine-readable metadata (.machine_readable/)" echo "" -check_file_exists ".machine_readable/6a2/STATE.a2ml" "Project state" +check_file_exists "docs/status/JOURNAL.adoc" "Project journal" check_file_exists ".machine_readable/6a2/META.a2ml" "Architecture decisions" check_file_exists ".machine_readable/6a2/ECOSYSTEM.a2ml" "Ecosystem position" check_file_exists ".machine_readable/6a2/anchors/ANCHOR.a2ml" "Semantic boundary anchor" @@ -235,7 +235,7 @@ if [ "$(basename "$REPO_ROOT")" = "rsr-template-repo" ]; then log_pass "Skipping placeholder check for template repo" else # Check that key files don't have unresolved placeholders - for file in "$REPO_ROOT/README.adoc" "$REPO_ROOT/Justfile" "$REPO_ROOT/.machine_readable/6a2/STATE.a2ml"; do + for file in "$REPO_ROOT/README.adoc" "$REPO_ROOT/Justfile" "$REPO_ROOT/docs/status/JOURNAL.adoc"; do if [ -f "$file" ]; then if has_placeholder "$file"; then log_warning "File contains unresolved placeholders: $(basename "$file")" diff --git a/tests/e2e/template_instantiation_test.sh b/tests/e2e/template_instantiation_test.sh index d866441..3db39c1 100755 --- a/tests/e2e/template_instantiation_test.sh +++ b/tests/e2e/template_instantiation_test.sh @@ -234,7 +234,7 @@ done log_step "Verifying machine-readable metadata" METADATA_FILES=( - ".machine_readable/6a2/STATE.a2ml" + "docs/status/JOURNAL.adoc" ".machine_readable/6a2/META.a2ml" )