Stabilize-canon sweep: MVP Phase 0 status, ADR Suite v2.0, spec-gate, ObjectGraph spike, intake digestion - #36
Conversation
Update dependencies: lodash-es, bytes, and lodash versions
Map Hughes' Attach/Enter/Replicate/Defend/Transmit cycle onto FLOSSI0ULLK's actual cross-system propagation behavior. Truth status: Specified — pattern identified, not yet implemented. Includes safety constraints (no self-modification until substrate validated, memetic autoimmunity risk, non-modifiable ULLK constraint). HARVEST Protocol: Formalize existing periodic consolidation practice as the minimal self-observation loop (OBSERVE→EVALUATE→PROPOSE→ VALIDATE→COMMIT). Manual-first, automatable later via OpenClaw. Retroactive HARVEST Cycle 0 logged covering all work to date. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Transmission test: new AI systems productive in minutes via kernel + ADRs. Composition test: 118+ conversations across 5 systems composed. Persistence test: CLAUDE.md, ADRs, Serena, Claude memory all persist. Coherence test: human collaborator confirmed across sessions. This has been true since late 2025 but kept getting lost across sessions. Updated implementation phases to reflect actual completion state. Fixed stale /mnt/project/ paths to current repo structure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ADR-0 (both copies): Add blank lines after Phase heading lines (MD022). ADR-5: Add Problem Statement, Implementation Strategy, Validation Criteria, and Related Documents sections to match project ADR schema. Remove duplicate Evidence Gate section (now covered by Validation Criteria). Split References into Related Documents + External References. harvest-protocol.spec.md: Verified — all headings already had correct spacing. Finding was invalid, no changes needed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Introduce a .serena directory with Serena configuration and project memories to onboard the assistant and document the codebase. Adds project.yml (project settings, language-server config, tool lists and defaults), several memory files (project_overview, codebase_structure, style_and_conventions, suggested_commands, task_completion_checklist) for developer guidance, and a .serena/.gitignore to ignore cache and project.local.yml.
New specs: - phase0-substrate-bridge.spec.md: Formal SDD feature spec for the narrowest end-to-end validation test (publish, provenance, verify, query, fork-visible, no privilege). 6 testable criteria, 2-agent Tryorama implementation. New research: - Orchestration landscape v2.0.0 (summary + full report + Perplexity source). Supersedes v1.0.0 with empirical data: Silo-Bench k=50 scalability wall, MAS-ProVe process verification failure, token economics collapse, IPFS availability decline. - Cross-AI synthesis working doc moved from root to docs/research/. Updated: - MVP_PLAN.md: Added Architectural Constraints section with hard data (k<=5 agents, output verification > process, non-token economics, IPFS multi-pinning). Updated evidence sources and date. Immediate next action now points to substrate bridge spec. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements docs/specs/phase0-substrate-bridge.spec.md as a 2-agent Tryorama test suite: 1. PUBLISH — assert_triple returns ActionHash 2. PROVENANCE — get_triple_record returns author pubkey + timestamp 3. VERIFY — Agent B retrieves Agent A's entry, confirms content + provenance 4. QUERY — Agent B discovers entry via query_triples without knowing hash 5. FORK-VISIBLE — Conflicting triples from two agents both persist 6. NO PRIVILEGE — Both agents use identical calls, can read each other Also adds get_triple_record extern to coordinator (thin wrapper around get() that exposes the full Record with signed_action for provenance verification from the test side). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Code changes (ternary confidence): - Rust integrity: confidence validation [0,1] -> [-1,1] for KnowledgeTriple and KnowledgeEdge. Negative = away from truth, 0 = neutral, + = toward truth. - JSON schemas: knowledge-triple.schema.json and knowledge-edge.schema.json updated to minimum: -1.0. - Tests: 2 new cases (negative confidence valid, below -1.0 rejected). - TERNARY_COMPATIBILITY.md: maps what can/cannot use signed gradients. Flagged: impact (magnitude), budget (quantity), embeddings (external models), Holochain Timestamp (external SDK type). - Already ternary: connotation [-1,0,+1], cosine_similarity [-1,1]. FLOSSI U Founding Kit v1.6 (containing scope): - FLOSSI U is the vision/curriculum layer; FLOSS repo is the nested implementation substrate. Separate ADR namespaces (U: 001-019, repo: 0-N). - 19 curriculum ADRs, seed packet, art effects, reference docs. - ADR-019 cross-references docs/specs/TERNARY_COMPATIBILITY.md for external interface constraints that prevent ternary adoption. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Comparative analysis of Meta Harness, omo (oh-my-openagent), OMX/OMC, and FLOSSI0ULLK MetaCoordinator. Proposes 5 integration seams (consensus- gate hook, git worktree, LiteLLM optimization, KAIROS memory, OMX gateway events), 18 patterns to ADOPT, 12 patterns to CONTRIBUTE, with implementation priority table (Seam 1 first). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ADR-6 formalizes the four-system integration strategy across Meta Harness,
omo, OMX, and FLOSSI0ULLK. Seam 1 (consensus-gate hook) is implemented
first because it establishes the MCP channel that Seams 2-5 depend on.
Adds:
- docs/adr/ADR-6-four-system-integration.md (Proposed)
- docs/specs/consensus-gate.spec.md — Claim/Vote/Decision contract
- docs/specs/consensus-gate.schema.json — JSON Schema
- packages/orchestrator/claim_schema.py — dataclasses + invariants
- packages/orchestrator/consensus_gate.py — tally/decide/override + ADR writer
- packages/orchestrator/test_consensus_gate.py — 16 tests, all 6 spec vectors pass
Ternary consensus: {-1, 0, +1} votes => {APPROVED, DEFERRED, REJECTED,
OVERRIDDEN}. Single -1 vetoes. Substrate blast radius requires unanimous
+1 with no override path. Human override only on DEFERRED decisions for
non-substrate blast radii.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- resonance_mechanism_v2.md: Technical foundation v2.0 formalizing Holochain validation lifecycle as resonance (5-property irreducible kernel, formal definitions, irreducibility proof) - flossi0ullk-landscape-recursive-analysis_3-24-26_perplexity_computer_used.md: Four-layer recursive landscape research report with epistemic tier taxonomy ([TESTED]/[VENDOR-CLAIMED]/[COMMUNITY-REPORTED]/[RESEARCH-ONLY]/ [SPECULATIVE]) and red-team-of-red-team verification Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
substrate_bridge.test.ts (Critical + 2 Majors): - Wrap fileURLToPath with path.dirname() so hAppPath resolves correctly (#28) - Add @msgpack/msgpack import + decode record.entry to verify Alice's subject/predicate/object/confidence in Criterion 3 instead of only asserting entry exists (#30) - Add Criterion 3b negative test: get_triple_record returns null for XOR-mutated non-existent hash, then sanity-checks real hash still resolves (#29) ADR-0 (recognition protocol, both copies): - Align participant count: "~7 AI systems" -> "6 AI systems" (#5) - Add Evidence pointers (kernel, ADR index, HARVEST_LOG, etc.) to each PASSED Validation Criterion (#6) - Reclassify harvest-protocol.spec as spec, not ADR-5 itself (#7) - MD022 blank lines after Positive/Negative/Neutral headings (#1/#2) ADR-5 (cognitive-virology-pattern): - Terminal punctuation on Problem Statement bullets (#8) - HARVEST_LOG.md added to Related Documents (#9) .serena/memories: - codebase_structure.md: 5 externs -> 9 with full names, add Infinity Bridge connector path (#10) - project_overview.md: align extern count + current state to 2026-04, PR #25 (#11) - task_completion_checklist.md: expand ADR item with required sections (#14) - style_and_conventions.md, suggested_commands.md: MD022 blank lines around headings + gh CLI now available (#12/#13) .serena/project.yml: - Add markdown + yaml to languages (#15) - Populate initial_prompt with SDD/ADR review checklist (#16) docs/research: - "4MB" -> "4 MB" unit spacing (#18) - Add Query criterion (query_triples without hash) to Phase 0 Gate summary so it matches the 6-criterion spec (#19) - KERI/hREA integration status: Aspirational -> Specified (bridge zomes + entry types exist in identity_integrity/hrea_*) (#21) - cross-ai-orchestration-synthesis: add metadata header marking it as working notes (#22) - Perplexity-Source-Agent-Orchestration: fix 132 mojibake chars (em dash, en dash, superscript 2, not-equal) (#24) - Add truth-status labels to Key New Patterns (AMRO-S, CodeCRDT, AgentNet++, DecentLLMs): External Specified / FLOSSI0ULLK Unverified (#17) docs/specs/phase0-substrate-bridge.spec.md: - Add typescript language specifier to pseudocode fenced blocks (#25) - Resolve provenance design: adopt option (b) - extend TripleResult with author + created_at fields mapped from KnowledgeTriple (#26) - Add provenance-retrieval prerequisite to Definition of Done so the 6-test DoD isn't circular (#27) Deferred: #20 (comparison-table citation sources) and #23 (extract gap matrix as separate artifact) - substantial restructuring work that doesn't block this PR. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CodeRabbit pre-check reported 45% coverage (threshold: 80%). Added docstrings to 36 previously-undocumented nodes across the 4 Python files modified in this PR: - packages/orchestrator/claim_schema.py (+8): enums (ProposalType, BlastRadius, TruthStatus, Outcome), EvidenceRef, and to_dict methods on Claim/Vote/Decision. - packages/orchestrator/consensus_gate.py (+1): inner _write closure in default_adr_writer. - packages/orchestrator/test_consensus_gate.py (+5): mock_voter inner _v, sample_claim, spy_voter + its inner _v, _run_all CLI runner. - FLOSSI_U_Founding_Kit_v1.6/conversation_memory.py (+22): full ConversationMemory surface (__init__, transmit variants, triple extract/validate, recall, save/load, import/export/compose, adr history, encode/search helpers) and HolochainClient (init, call_zome), plus Understanding.to_dict/hash. All docstrings reference spec sections where applicable. Interrogate now reports 100% coverage across these 4 files. Consensus gate tests (16/16) still pass. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fixes all Critical, Major, Minor, and Trivial items on PR-touched files from CodeRabbit's review of bd70859 (PR #25). ## Critical (3 fixes + 8 new tests) - claim_schema.py: Replace uuid4 with RFC 9562 UUIDv7 generator (stdlib uuid.uuid7 when available, §5.7 fallback otherwise) and harden Claim.validate() to enforce UUIDv7 version, ProposalType and BlastRadius enum membership, and ISO 8601 submitted_at - consensus_gate.py: Add per-claim voter deduplication to decide() (E_VOTE_DUPLICATE) plus TODO for identity_integrity zome integration - consensus_gate.py: Guard override() against prior_decision.claim_id mismatch (E_OVERRIDE_CLAIM_MISMATCH) and duplicate human_voter (E_OVERRIDE_DUPLICATE) to prevent cross-claim vote attachment - test_consensus_gate.py: Add 8 tests covering the new guards (now 24/24 passing) ## Major (5 fixes) - consensus-gate.schema.json: Add minItems:1 on Decision.votes and UUIDv7 regex pattern on Claim.id + Decision.claim_id - consensus-gate.spec.md: Rewrite INV-006, §4.1 TALLY, INV-010, §4.2 Override Path, and §6.3 test vectors to align with blast-radius-derived quorum and superseding-transition override semantics (no more 3-vote floor, no more duplicate-decision paradox) - ADR-6: Update validation criterion schema ref to docs/specs/consensus-gate.schema.json (was claim-schema.json) - ADR-0 (both mirrors): Replace non-reproducible ~/.claude/.../MEMORY.md evidence path with repo-tracked artifacts - style_and_conventions.md: Require both SHA-256 and BLAKE3 digests per FLOSS provenance requirements ## Minor / Trivial markdownlint + text on PR-touched files - harvest-protocol.spec.md: Add text language to line 17 fence - ADR-6: Add text language to stack diagram fence; remove stale "(to be created)" marker from consensus-gate.spec.md reference - INDEX.md: Fix FLOSSIOULLK -> FLOSSI0ULLK and stale date - project_overview.md: Fix FLOSSIOULLK -> FLOSSI0ULLK - project.yml: Set line_ending: "lf" for cross-platform consistency - resonance_mechanism_v2.md: Add text language to compatibility fence - 4-4-26-...-Analysis.md: Add text language to 3 fences - landscape-recursive-analysis.md: Add text language to architecture fence - ADR-5-cognitive-virology-pattern.md: "Self Belief" -> "Self-Belief" ## Deferred to follow-up PR (user selection: Tier 1 only) - 17 Major completions on historical ADR-001..019 files in FLOSSI_U_Founding_Kit_v1.6/ (predate this PR) - Tryorama negative-range integration test for assert_triple - Encoding cleanup on Perplexity-Source research doc - Gap matrix extraction from cross-ai-orchestration-synthesis Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ships the FLOSSIØULLK local agent node as a file-based precursor to the Holochain substrate: CellDirectory source chain writer, Orchestrator with analog [-0.999, +0.999] vote model and per-blast-radius tally thresholds, and a stdio MCP server exposing six passive-router tools (submit_claim, cast_vote, run_consensus_round, get_decision, list_pending, get_chain_ context). LiteLLM voter adapters drive a default roster of Cerebras + Groq models; the PostToolUse hook fires the loop end-to-end on every substantive packages/ edit. ADR-MCP-ORCHESTRATOR amended Proposed → Accepted with five divergences documented, including the analog vote model that replaced the ternary placeholder. ADR-017 (Self-Transcendence Operator) expanded to forward-couple with get_chain_context, LICENSE normalized to SPDX AGPL-3.0-or-later with Carrier Equivalence addendum scoped in LEGAL_DEFINITIONS.md, and .gitignore hardened against secret leakage. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- metacoordinator-mcp/DESIGN.md: 9-section design doc with AIngram/Agorai integration paths - CLAUDE.md: archived stale v2.0 (2025-11-16) to archive/, rewrote as short current orientation - Research notes: AIngram deep-dive (60-migration AGPL-3.0 production system), paper harvest - ADR-MCP-ORCHESTRATOR.md: already existed from prior commit Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…tor_mcp, remove tmp cache
Step 3 of the Integration Action Plan previously recommended running Agorai as a standalone bridge service "to avoid AGPL propagation" — which contradicts ADR-7's explicit embrace of the AGPL cascade. Reframe the same recommendation as a *pragmatic* starting point for wiring validation rather than a license requirement. Note that Paths B (Python porting) and C (Rust zome ports) are now unblocked by ADR-7. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9737ddf9a3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…claims; drop unused test var - tools.submit_claim: only call _validate_provenance_evidence (which imports the provenance extras blake3/jcs/nacl) when evidence is actually supplied. Lean gateway installs without those deps no longer raise ModuleNotFoundError on ordinary Local/CodeChange claims; governed System/Substrate claims with no evidence are still rejected (has_packet/has_consent stay False). Proven via a simulated missing-deps run; 52/52 gateway tests pass. - substrate_bridge.test.ts: drop the unused 'hash' binding in the Criterion 4 query test (it discovers by query, not by hash) — clears the CodeQL warning. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…cile chained MultiEdit verification - consent_integrity.validate: ConsentPayload/ConsentDecision are append-only governance records. Previously CreateEntry and UpdateEntry shared one arm, so a well-formed update silently superseded a recorded consent on the DHT without a new decision. Now UpdateEntry (StoreEntry + RegisterUpdate) and RegisterDelete are explicitly Invalid for this zome's entries. cargo check -p consent_integrity --target wasm32-unknown-unknown passes. - hashline._verify_multiedit: chained sub-edits (foo->bar then bar->baz) no longer false-MISMATCH the first sub-edit — when an intermediate new snippet is consumed as a later sub-edit's old snippet, that's expected sequential behavior, not a failed write. A genuinely missing sub-edit still MISMATCHes. +2 tests (54/54). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5875be0f07
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…nance, chain-head lock, tier threshold Four valid codex findings: - mcp_server.deliberate (P1): synthesize() returns an EnsembleSynthesis dataclass, not a dict. Replaced .get(...) calls with attribute access (tier/fraction live under .tier_classification; field is staging_path, voter_count = len(voter_responses)). Ensemble mode was returning the generic error for every call. - activity_log.__init__ (P2): stop eagerly importing provenance (blake3/jcs/nacl). Lazy-load it via PEP 562 __getattr__ using importlib.import_module (a plain there infinite-loops via the import machinery's hasattr re-entry when deps are missing). Lean routing/activity-only consumers import cleanly; verified under simulated-missing deps. - provenance.create_packet (P2): hold .sequence.lock across reserve -> sign -> write -> commit-head so concurrent writers can't reserve against a stale head and fork the per-agent chain. Verified: 16 concurrent writes -> linear chain (seqs 0..15, one genesis, unique parents, no fork). - synthesizer.classify_tier (P2): an even split with a genuine plurality (4 voters 2/1/1, fraction exactly 0.5) is now Tier-2; compares cluster counts vs ceil(N/2) with a unique-largest guard so a 2/2 tie stays Tier-4. Verified across 6 splits. 139/139 package tests pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2255ed133b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: eed286e953
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 36abde82b7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…hline guard, tryorama paths, pre-write hook Seven valid codex findings (all P2): - provenance.validate_packet: enforce same-agent + directly-preceding-sequence continuity on the prior link (E_PROVENANCE_PRIOR_AGENT_MISMATCH / E_PROVENANCE_SEQUENCE_DISCONTINUOUS); a signed packet can no longer point at another agent or skip/fork its sequence. - provenance root requirement is across the evidence DAG: a packet that delegates its root to a valid child packet is now accepted; only a DAG with no non-packet root anywhere is rejected. - tools.submit_claim: gate provenance validation on presence of a provenance_packet ref (not any evidence) so Local claims with only test/spec/ commit refs do not import the provenance extras on lean installs. - hook_post_write: defer the provenance import into the best-effort packet block so lean installs still submit the Local claim with empty evidence. - hashline multiedit reconciliation: only treat an earlier MISMATCH as a consumed intermediate when its old snippet is absent AND a later verified sub-edit consumed it; a partial edit with the old snippet still present stays MISMATCH. - tryorama: point 5 tests at ../../workdir/rose_forest.happ (the real pack location, matching consent_gate.test.ts) instead of ../../../workdir. - .claude/settings.json: register the PreToolUse hook_pre_write so the exact post-image / stale-write verification actually runs. Verified at runtime + 4 new regression tests; 144/144 package tests pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…imilarity-bias loop) The synthesizer only put the tier in the global Action.outputs, but the Router reads .agent-surface/reasoning/activity.jsonl for a top-level tier_classification == tier4 plus prompt_embedding (its own row seeds that field None). So a real Tier-4 divergence never biased adjacent-prompt routing. The synthesizer now also appends a top-level reasoning-activity row with the tier, and for Tier-4 the prompt embedding (best-effort). Verified round-trip: synthesizer row -> router check_tier4_similarity_bias fires on a similar adjacent prompt. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 52f4264c3b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ch-local DAG cycle, router timeouts, wiring test Five valid codex findings (all P2): - consent_integrity enums: add serde rename_all = snake_case to PatternType, ConsentScope, RefusalMode, Outcome so the zome wire format matches the schema (adr/read_only/bounded_accept/...). BlastRadius stays PascalCase (the schema uses Local/Module/System/Substrate). Updated consent_gate.test.ts payloads to snake_case to match. cargo check -p consent_integrity -p consent passes. - consent-payload.schema.json: ConsentDecision now requires payload_action_hash (the ActionHash the coordinator actually binds on) and treats payload_id as an optional cross-reference, matching create_consent_decision. - provenance.validate_packet: use a branch-local copy of the traversal path set so shared evidence (same child cited twice, or a child that is both the prior and an evidence ref) is no longer mis-flagged E_PROVENANCE_CYCLE_DETECTED; genuine on-path cycles still rejected. Runtime-verified. - router: include TimeoutError in the embedding and invocation fallbacks so a stalled Ollama degrades gracefully instead of raising (socket.timeout aliases TimeoutError, which is not a URLError). - test_consent_gate_wiring: read zome["path"] (or bundled) since the checked-in dna.yaml uses path:, not bundled: — the test no longer KeyErrors with PyYAML. 148/148 package tests pass. Tryorama not runnable locally (no conductor); enum payloads aligned mechanically to the schema source of truth. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 40f6b1738a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…a/router edge cases - provenance.validate_packet (P1 security): validate each a[] entry against the v1.4 payload contract (claim_type, truth_status, source_systems, created_at, risks, benefits, next_action). Previously only emptiness of a was checked, so a governed System/Substrate claim could pass the hard block with a packet whose entry omitted required fields while still carrying consent_ref + a non-packet evidence root. + regression test; 145/145 package tests pass. - consent-payload.schema.json: parent_consent_id is an ActionHash string, not a UUID — matching the coordinator input and Option<ActionHash> entry type, so a schema-valid hierarchical payload no longer fails the Holochain call. - router: coerce confidence in the guarded path (default 0.5 on non-float like "high"/null, clamp to [0,1]) so one malformed field from Ollama yields the documented single_strong fallback instead of raising. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 877589d568
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| .into() | ||
| )) | ||
| })?; | ||
| ensure_scope_subset(&input.scope_granted, &payload.consent_scope)?; |
There was a problem hiding this comment.
Enforce outcome-specific consent scopes
When a payload requests bind, this subset-only check lets a decision submit outcome=TouristObserve with scope_granted=[Bind] because the grant is still within the requested scope. The consent spec describes tourist_observe as read-only while bind remains blocked, and the planned action-time gate keys off outcome != rejected plus matching scope_granted, so this inconsistent on-chain decision can become a bind authorization despite a tourist-observe refusal; validate the scope semantics per outcome before creating the decision.
Useful? React with 👍 / 👎.
| pub fn get_triple_record(hash: ActionHash) -> ExternResult<Option<Record>> { | ||
| get(hash, GetOptions::default()) |
There was a problem hiding this comment.
Filter get_triple_record to triple entries
When a caller passes the ActionHash of any non-KnowledgeTriple entry, such as a RoseNode from add_knowledge, this returns that raw Record because it delegates directly to get() without checking the entry type. The substrate bridge API is documented as a triple provenance verifier, so consumers that decode the returned entry as a triple can fail or treat unrelated records as verified triples; return None or a guest error unless the fetched entry deserializes as KnowledgeTriple.
Useful? React with 👍 / 👎.
| _ENTRY_REQUIRED_STR_FIELDS = ("claim_type", "truth_status", "created_at", "next_action") | ||
| _ENTRY_REQUIRED_LIST_FIELDS = ("source_systems", "risks", "benefits") |
There was a problem hiding this comment.
Require all provenance payload fields
Fresh evidence after the attempted payload-entry fix: this required-field list still omits v1.4-required fields such as human_collision_node, artifact_refs, and evidence_refs item validation from docs/specs/provenance-packet.schema.json. A signed governed packet can include consent_ref and one non-packet evidence root while omitting human_collision_node and artifact_refs entirely, and validate_packet().ok still succeeds, so GatewayTools can accept malformed provenance at the System/Substrate hard block; include every schema-required field and validate artifact/evidence ref shape here.
Useful? React with 👍 / 👎.
Closes PR #36 review thread 3407820580. The committed .mcp.json hard-coded machine-specific absolute paths (C:/~shit/.mcp/lenses/..., interpreter paths) that break on any other checkout. Per the maintainer decision (option 1), the file is now gitignored and untracked; the working copy stays in place locally so the JanuScope-wrapped MCP setup is unaffected — it is simply no longer shipped. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…round-10 follow-ups) Authorization hole (codex 3416999771): a ConsentDecision could declare a refusal outcome yet grant a write/bind scope, since only a subset check ran. - consent_integrity.validate_consent_decision: outcome=TouristObserve may grant ONLY ReadOnly (E_TOURIST_SCOPE_EXCEEDED) — enforced in the integrity zome where it cannot be bypassed. (Rejected=>empty was already enforced.) - consent_coordinator.create_consent_decision: outcome=BoundedAccept must NARROW the requested scope (E_BOUNDED_NOT_NARROWED) — cross-entry check where the payload scope is resolved. + Tryorama case asserting tourist_observe+[bind] is rejected. Sibling P2s same review round: - coordinator.get_triple_record (3416999773): return None unless the fetched Record deserializes as KnowledgeTriple, so this triple provenance verifier no longer returns unrelated entries (e.g. a RoseNode). - provenance._payload_entry_errors (3416999778): complete the v1.4 entry contract — require human_collision_node + artifact_refs + evidence_refs and validate artifact/evidence ref shape (path+64hex sha256; evidence type-enum + ref) per provenance-packet.schema.json. + regression test. cargo check -p consent_integrity -p consent -p rose_forest passes; 146/146 package tests pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
What this lands (122 commits, 2026-05-25 → 2026-06-12)
Public-facing correction (NLnet-visible): README now states MVP Phase 0 substrate viability is complete (DNA→WASM, Tryorama green, ontology integrity tests passing) — the prior 'Phase 0 is next' was stale.
Canon stabilization (2026-05-25 sweep): ADR-Suite v2.0 (consolidated, hand-verified), CFIS v0.3, ADR-12 Consent Gate stub, provenance-packet spine v1.4, Meta-Coordination Kernel v4.0, operator surfaces (OPERATOR_PRIMER, RUNTIME_SURFACES), heartbeat runtime-budget spec + tests.
2026-06-12 alignment landing:
spec_gate.py --check+ post-write hook advisory; 79-entry registry; intake/continuation surfaces deliberately ungatedreview_queue.py --triage), manual-poll default flipped to the provider-diverse roster, orient skill v0.2.0 + probe (4/4 tests)Merge of remote main (CodeQL workflow, #33) is included — fast-forward-clean.
🤖 Generated with Claude Code