snapkitty-open-source / docs /WORKFLOW.md
SNAPKITTYWEST's picture
Add docs/WORKFLOW.md
0e9e120 verified
|
Raw
History Blame Contribute Delete
11.5 kB

SnapKitty Workflow

Complete specification-to-execution trace. Every step names an actual file.


The Actual Workflow

HyperKittyConstraintDSL.xml   (specification)
           β”‚
           β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
           ↓                                                   ↓
   xslt/constraint-dsl-to-rust.xsl               hyperkitty_dsl/parser.py
   (XSLT transform)                               (Python parser)
           β”‚                                                   β”‚
           ↓                                                   ↓
   Rust source code                           HKGraph { nodes, edges,
   - Agent struct                               constraints, entropy_bound }
   - UniverseLedger.step()                                     β”‚
   - validity_predicate(                                       ↓
       entropy_nats <= 0.20                    constraint_graph_svg.py
       proof_valid)                            - Kahn's topological sort
           β”‚                                  - pipeline dict (execution order)
           ↓                                  - SVG visualization
   cargo build                                                  β”‚
           β”‚                                                   β”‚
           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  ↓
                    SovereignEntropyEngine
                    (entropy vector per token)
                                  β”‚
                                  ↓
                    ConstraintPass.validate(entropy)
                    (entropy <= 0.20 gate)
                                  β”‚
                          pass? ───── fail? β†’ HALT
                                  ↓
                    MachineCodeSelector.select(entropy, result)
                    (maps entropy to x86-64 op)
                                  β”‚
                                  ↓
                    SovereignVM.run(program)
                                  β”‚
                                  ↓
                    WORM seal (SHA-256 append-only)
                                  β”‚
                                  ↓
                          Result + receipt

Phase-by-Phase Trace

Phase 1: Specification

Input: XML file in one of three schemas:

  • ConstraintGraph (nodes, edges, DAG structure)
  • HyperKittyConstraintDSL (full pipeline spec with agents, glyphs, entropy bounds)
  • SymbolicLedgerAlgebra / QLGFamily (algebraic type specifications)

Files produced: XML file on disk

Deterministic: Yes (manually authored)

Validated: Not yet β€” validation happens at next stage


Phase 2: Meta-Program Execution

Input: XML specification file

Transformation A (XSLT):

xslt/constraint-dsl-to-rust.xsl + HyperKittyConstraintDSL.xml
       β†’ [xsltproc or Saxon]
       β†’ UniverseLedger.rs  (Rust source, AUTO-GENERATED comment)

The generated validity_predicate:

pub fn validity_predicate(entry: &JournalEntry) -> bool {
    entry.delta_a + entry.delta_e == entry.delta_l + entry.delta_r   // balance
    && entry.entropy_nats <= 0.20                                     // entropy bound
    && entry.proof_valid                                               // proof gate
}

The 0.20 comes from <EntropyBound> in the XML. Changing the XML changes the generated code.

Transformation B (Python):

hyperkitty_dsl/parser.py + HyperKittyConstraintDSL.xml
       β†’ HKGraph { nodes, edges, constraints, entropy_bound=0.20 }

Transformation C (XSLT β†’ C header):

generated/generate-native-config.xsl + QUANTUM-KITTY XML
       β†’ native/include/hyperkitty/generated_config.h
         /* GENERATED FILE β€” do not edit by hand */

Validated: Yes (XSLT structural validation, entropy bound preservation baked in)

Deterministic: Yes (pure XSLT transforms)


Phase 3: DAG Construction

Input: XML graph β†’ Python parser output

Program: sovereign-xml-compiler/constraint_graph_svg.py

Transformation:

nodes, edges = _parse_graph_xml(xml_source)
pipeline = _topological_sort(nodes, edges)   # Kahn's algorithm
# Raises ValueError if cycle detected
svg = _render_svg(nodes, edges, pipeline)

Output:

  1. pipeline = ["input", "memory", "retrieval", "transform", "constraint", "proof", "output"]
    (the execution order β€” this IS the executable artifact)
  2. SVG visualization file

Validated: Cycle detection (raises if not a DAG)

Deterministic: Yes


Phase 4: Entropy-Based Compilation

Input: String tokens (agent operations, kernel names)

Program: sovereign-shadow-compiler/engine/entropy_engine.py

engine = SovereignEntropyEngine(kernel_map)
entropy_vector = engine.calculate_entropy_vector(tokens)
# entropy_vector: List[complex] β€” one value per token

The entropy vector encodes the input as complex activations over a sparse shadow tree seeded with phase angles exp(2Ο€i Β· idx/n).

Validated:

constraint = ConstraintPass()
result = constraint.validate(entropy)  # checks each |e| <= threshold

Deterministic: Yes (same input, same phase angles, same output)


Phase 5: Machine Code Selection

Input: Entropy vector + constraint result

Program: sovereign-shadow-compiler/codegen/selector.py

op = selector.select(entropy, result)
# maps abs(entropy.real) % len(KERNEL_MAP) β†’ x86-64 opcode name
kernel_bytes = selector.emit(op)
# returns raw bytes for the selected operation

KERNEL_MAP: operations like MOV, LOOP, HALT

Output: x86-64 byte sequence + operation name


Phase 6: VM Execution

Input: Machine program [{"op": "MOV", "reg": "RDI", "imm": n}, {"op": "LOOP", ...}, {"op": "HALT"}]

Program: sovereign-shadow-compiler/vm/sovereign_vm.py

Output: vm_result dict


Phase 7: WORM Sealing

Program: bob-orchestrator/core/bob.mjs worm.seal()

const raw = JSON.stringify({ label, payload, meta, ts, prev })
const seal = createHash('sha256').update(raw).digest('hex')
// prev = SHA-256 of previous event (or quantum seed hash for genesis)

Six distinct WORM ledgers exist:

Ledger Path Records
Quantum swarm bob-orchestrator/data/quantum-swarm-worm.jsonl ANU seed + swarm collapse events
Tool API bob-orchestrator/data/tool-api-worm.jsonl Tool invocations
BOB FSM DEVFLOW-FINANCE/packages/sovereign-router/.bob-worm.jsonl Phase-by-phase execution + output hashes
Execution backend/.worm/execution-ledger.jsonl Every bash command + allowlist verdict
AVR kernel sov-kernel-monster/avr_cold_boot_ledger.jsonl QATAAUM cycle invariants
Agda proofs sov-kernel-monster/PHASE_3_WORM_ATTESTATION.jsonl Proof discharge events

BOB sovereignStep: Complete Trace

This is the most complete single-pipeline trace in the codebase.

Input:

{
  "agentId": "...",
  "task": "verify_claim",
  "input": "...",
  "lean4Theorem": "...",
  "adaContractText": "..."
}

Step 0: ANU QRNG batch β†’ _quantumSeed buffer (32 bytes)

Step 1: METATRON gate (metatron.mjs) β†’ permitted: true/false
If false: immediate return, no WORM entry written

Step 2: SHA-256(lean4Theorem) β†’ proof_hash
Theorem < 10 chars β†’ freeze

Step 3: SHA-256(adaContractText) β†’ contract_hash
ORACLE class β†’ read-only (gateAdvance returns false)

Step 4: worm.seal('BOB_STEP:{task}', step) β†’ step seal

Step 5: SSM injection vector construction (Float32Array[2048]):

dims   0–255:   proof_hash bytes β†’ [-1,1]
dims 256–511:   contract_hash bytes β†’ [-1,1]
dims 512–767:   step WORM seal bytes β†’ [-1,1]
dims 768–2047:  ANU quantum seed bytes, 50/50 blended with METATRON cage

Step 6: Ada gate check (ada.gateAdvance(class, injectionValid))

Step 7: SSM state update:

h(t) = 0.9Β·h(t-1) + 0.1Β·x_input + inject_normΒ·0.01

Step 8: LLM call (Ollama, optional β€” continues if offline)

Step 9: worm.seal('BOB_STEP_COMPLETE:{task}', result) β†’ final seal

Return:

{
  "proof_hash": "...",
  "contract_hash": "...",
  "ssm_state": [...],
  "worm_seal": "...",
  "injection_vector": [...],
  "llm_reply": "..."
}

Where Does the DAG Enter?

The DAG enters at three points:

  1. Specification: ConstraintGraph.xml defines the DAG structure (which node types, which edges)
  2. Compilation: constraint_graph_svg.py applies Kahn's algorithm to the XML β†’ produces the execution order
  3. Governance: ICP-DAG.m enforces that no execution happens without an authorized decision in the governance DAG

The compilation output (pipeline list) becomes the execution order for the Python constraint evaluator.


Where Does SUBLEQ Enter?

Currently: independently. The SUBLEQ attention mechanism (j-matrix-twin/subleq_attention.ijs, DEVFLOW-FINANCE/snapkitty-wasm/src/subleq_vm.rs) is not yet wired into the main BOB workflow or the XSLT code generation pipeline. It exists as a separate experimental track.

The missing integration point: The SUBLEQ VM could replace the LLM call at Step 8 β€” activation vectors β†’ SUBLEQ routing β†’ context selection, feeding into the SSM state. This is the proposed architectural connection, not yet implemented.


Reproducibility

Component Reproducible? What's needed
SSM computation βœ“ proof_hash, contract_hash, worm_seal, quantum_seed (logged)
XSLT code generation βœ“ XML spec file + Saxon/xsltproc
Constraint validation βœ“ entropy vector (deterministic from input)
BOB FSM phases βœ“ (hashes only) master_hex + input β€” output hashes logged, not raw output
WORM chain βœ“ All inputs logged; chain is deterministic
LLM replies βœ— Temperature and PRNG seed not logged
ANU QRNG seed βœ“ master_hex recorded in quantum-swarm-worm.jsonl
Quantum swarm temps partial master_hex logged; HKDF derivation deterministic from it

To reproduce a BOB step: provide master_hex + input + lean4Theorem + adaContractText + prior agent state. The LLM reply will differ.


Specification β†’ Program Separation

SnapKitty does separate what from how, but the boundary is:

Layer What Where
XML spec Declares DAG structure, entropy bound, constraint expressions ConstraintGraph.xml, HyperKittyConstraintDSL.xml
XSLT Transforms declaration β†’ implementation xslt/*.xsl
Python parser Turns declaration into runtime objects hyperkitty_dsl/parser.py
Rust implementation Compiled from generated source cargo build
VM execution Runs the selected machine code sovereign_vm.py

The separation is real but incomplete: the XSLT and Python parser both consume the same XML, but they produce independent outputs (Rust source vs. Python objects) that are not yet connected at runtime.