betterwithage commited on
Commit
2fad21a
·
1 Parent(s): b458173

Add 48-surface evidence passports and safe accessible navigation (#2)

Browse files

- Add 48-surface evidence passports and safe accessible navigation (470b8fc6ef1c51df993f2f7167f7ff17aa3f6551)

Dockerfile CHANGED
@@ -112,7 +112,7 @@ COPY cathedral.html knowledge.json operator_shell_v4.py serve.py szl_evidence_re
112
  # falls back and /spaces + /api/<ns>/v1/spaces/health 404. Byte-identical a11oy+killinchu.
113
  COPY szl_spaces_proxy.py szl_spaces_surface.py ./
114
  COPY szl_live_wires.py live_wires.html live_wires_3d.js szl_rosie_companion.py killinchu_szl_pqc_sign.py szl_rekor.py killinchu_osint.py szl_be_hardening.py szl_unay.py szl_khipu_lmdb.py szl_khipu_replicate.py szl_unay_routes.py szl_warhacker_aliases.py killinchu_genius.py killinchu_warhacker_demos.py killinchu_v3.py szl_brain.py szl_rag.py szl_formulas.py szl_understudy.py ./
115
- COPY szl_killinchu_cookbook.py szl_uds_hardening.py killinchu_fusion.py szl_v4_fleet.py szl_ken.py killinchu_frontier_patch.py killinchu_drone_routes.py killinchu_parity.py killinchu_cannonico.py killinchu_elite_console.py _vendor_blobs.py killinchu_fleet_vessels.py killinchu_maritime_risk.py killinchu_maritime_intel.py killinchu_maritime_view.py killinchu_live_feeds.py killinchu_feeds_realdata.py killinchu_asw.py killinchu_anatomy.py killinchu_health_twin.py fleet_vessels_data.json killinchu_beyond.py szl_khipu_consensus.py killinchu_mesh.py killinchu_mesh_view.py killinchu_formula_endpoints.py killinchu_edge_formulas.py killinchu_active_flux.py killinchu_platform_dynamics.py ./
116
  COPY killinchu_edge_console.py szl_agentic_loop.py szl_anatomy_routes.py szl_formula_wiring.py a11oy_code_engine.py killinchu_ops_control.py szl_llm_registry.py szl_alloy_models.py a11oy_agent_loop.py a11oy_org_rag.py a11oy_mcp_client.py killinchu_mined_ops.py killinchu_resweep_ops.py killinchu_wave910.py killinchu_posture_topology.py szl_connectors_serve.py szl_connector_mcp.py szl_scaling.py szl_allodial.py szl_entanglement.py szl_neuroplasticity.py szl_chain_of_title.py ./
117
  # Wave 15 frontier organs (Dynamic Linear Attention, Context-Ready Transformer, OPERA perplexity-reward).
118
  COPY szl_dla.py szl_ctxready.py szl_opera.py ./
@@ -702,4 +702,3 @@ CMD ["python", "serve.py"]
702
  # Build cache-bust 2026-06-07T05:00Z (MINED ops squad): COPY killinchu_mined_ops.py
703
  # into /app so serve.py can import+register the 4 mined operational/efficiency surfaces.
704
 
705
-
 
112
  # falls back and /spaces + /api/<ns>/v1/spaces/health 404. Byte-identical a11oy+killinchu.
113
  COPY szl_spaces_proxy.py szl_spaces_surface.py ./
114
  COPY szl_live_wires.py live_wires.html live_wires_3d.js szl_rosie_companion.py killinchu_szl_pqc_sign.py szl_rekor.py killinchu_osint.py szl_be_hardening.py szl_unay.py szl_khipu_lmdb.py szl_khipu_replicate.py szl_unay_routes.py szl_warhacker_aliases.py killinchu_genius.py killinchu_warhacker_demos.py killinchu_v3.py szl_brain.py szl_rag.py szl_formulas.py szl_understudy.py ./
115
+ COPY szl_killinchu_cookbook.py szl_uds_hardening.py killinchu_fusion.py szl_v4_fleet.py szl_ken.py killinchu_frontier_patch.py killinchu_drone_routes.py killinchu_parity.py killinchu_cannonico.py killinchu_elite_console.py killinchu_experience.py _vendor_blobs.py killinchu_fleet_vessels.py killinchu_maritime_risk.py killinchu_maritime_intel.py killinchu_maritime_view.py killinchu_live_feeds.py killinchu_feeds_realdata.py killinchu_asw.py killinchu_anatomy.py killinchu_health_twin.py fleet_vessels_data.json killinchu_beyond.py szl_khipu_consensus.py killinchu_mesh.py killinchu_mesh_view.py killinchu_formula_endpoints.py killinchu_edge_formulas.py killinchu_active_flux.py killinchu_platform_dynamics.py ./
116
  COPY killinchu_edge_console.py szl_agentic_loop.py szl_anatomy_routes.py szl_formula_wiring.py a11oy_code_engine.py killinchu_ops_control.py szl_llm_registry.py szl_alloy_models.py a11oy_agent_loop.py a11oy_org_rag.py a11oy_mcp_client.py killinchu_mined_ops.py killinchu_resweep_ops.py killinchu_wave910.py killinchu_posture_topology.py szl_connectors_serve.py szl_connector_mcp.py szl_scaling.py szl_allodial.py szl_entanglement.py szl_neuroplasticity.py szl_chain_of_title.py ./
117
  # Wave 15 frontier organs (Dynamic Linear Attention, Context-Ready Transformer, OPERA perplexity-reward).
118
  COPY szl_dla.py szl_ctxready.py szl_opera.py ./
 
702
  # Build cache-bust 2026-06-07T05:00Z (MINED ops squad): COPY killinchu_mined_ops.py
703
  # into /app so serve.py can import+register the 4 mined operational/efficiency surfaces.
704
 
 
killinchu_elite_console.py CHANGED
@@ -319,6 +319,27 @@ def register(
319
  if "__SZL_CEO_OVERLAY__" not in html:
320
  html = html.replace("</body>", _CEO_OVERLAY_HTML + "\n</body>", 1)
321
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
322
  async def _serve_console() -> HTMLResponse:
323
  return HTMLResponse(html)
324
 
 
319
  if "__SZL_CEO_OVERLAY__" not in html:
320
  html = html.replace("</body>", _CEO_OVERLAY_HTML + "\n</body>", 1)
321
 
322
+ # Add the shared data/evidence passport after the investor overlay. The
323
+ # layer is deliberately read-only: it probes allow-listed GET routes only,
324
+ # never triggers the POST-only decoder/mission/receipt surfaces, and makes
325
+ # runtime-injected nav items keyboard accessible.
326
+ try:
327
+ from killinchu_experience import EXPERIENCE_LAYER_HTML
328
+
329
+ if "__KILLINCHU_EXPERIENCE_LAYER_V1__" not in html:
330
+ html = html.replace(
331
+ "</body>",
332
+ EXPERIENCE_LAYER_HTML.replace("__NS__", ns) + "\n</body>",
333
+ 1,
334
+ )
335
+ except Exception as _experience_layer_error: # pragma: no cover - fail soft
336
+ import sys as _sys
337
+
338
+ print(
339
+ f"[killinchu] experience layer skipped: {_experience_layer_error!r}",
340
+ file=_sys.stderr,
341
+ )
342
+
343
  async def _serve_console() -> HTMLResponse:
344
  return HTMLResponse(html)
345
 
killinchu_experience.py ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ """Killinchu experience manifest and operator-facing evidence passport.
3
+
4
+ This module does not execute missions, emit receipts, mutate policies, or call
5
+ external services. It publishes the declared contract for every discoverable
6
+ surface and supplies a small, accessible UI layer for ``/elite``. The browser
7
+ layer probes only explicitly allow-listed GET endpoints; POST-only capabilities
8
+ stay labelled ON_DEMAND and are never auto-run.
9
+ """
10
+ from __future__ import annotations
11
+
12
+ from collections import Counter
13
+ from datetime import datetime, timezone
14
+ from typing import TYPE_CHECKING, Any
15
+
16
+ if TYPE_CHECKING: # keep the manifest importable in lightweight audit tooling
17
+ from fastapi import FastAPI
18
+
19
+
20
+ def _surface(
21
+ key: str,
22
+ label: str,
23
+ purpose: str,
24
+ endpoint: str,
25
+ data_state: str,
26
+ evidence_state: str,
27
+ boundary: str,
28
+ investor_value: str,
29
+ *,
30
+ visibility: str = "primary",
31
+ kind: str = "view",
32
+ method: str = "GET",
33
+ safe_probe: bool = True,
34
+ ) -> dict[str, Any]:
35
+ route = endpoint if kind == "route" else f"/elite#{key}"
36
+ return {
37
+ "id": key,
38
+ "label": label,
39
+ "route": route,
40
+ "kind": kind,
41
+ "visibility": visibility,
42
+ "purpose": purpose,
43
+ "source": {
44
+ "endpoint": endpoint,
45
+ "method": method,
46
+ "safe_probe": bool(safe_probe and method == "GET" and endpoint.startswith("/api/")),
47
+ },
48
+ "data_state": data_state,
49
+ "evidence_state": evidence_state,
50
+ "operational_boundary": boundary,
51
+ "investor_value": investor_value,
52
+ }
53
+
54
+
55
+ EXPERIENCE_SURFACES: tuple[dict[str, Any], ...] = (
56
+ # Primary operator views present in the server-rendered /elite navigation.
57
+ _surface("hero_interdiction", "Provable Interdiction", "Trace a governed recommendation from ROE policy through a receipt to its proof references.", "/api/killinchu/v1/roe/policy", "MIXED", "formal_plus_runtime", "Recommendation only; no autonomous or kinetic actuation. Receipt signing may be unavailable and must remain explicit.", "Turns autonomy assurance into inspectable evidence rather than a trust claim."),
58
+ _surface("tracks", "Live Track Board", "Present the current air and maritime watch picture with provenance.", "/api/killinchu/v1/threats/active", "LIVE_OR_SAMPLE", "public_source", "Passive situational awareness; tracks are leads, not targeting truth.", "A legible operational wedge grounded in real public telemetry."),
59
+ _surface("u_warhacker", "Demo Suite", "Index governed counter-UAS and maritime demonstrations with proof and tamper modes.", "/api/killinchu/v1/warhacker/index", "LIVE_COMPUTE", "runtime", "Catalog lookup only; launches are POST-only demonstrations and are never auto-run.", "A repeatable buyer-facing proof suite instead of a scripted video."),
60
+ _surface("dataset_control", "Data Sources / Overlays", "Show which feeds and bounded reference datasets are wired and selectable.", "/api/killinchu/v1/feeds/status", "LIVE_OR_SNAPSHOT", "public_source", "Source selection is advisory and must never relabel a sample as live.", "Makes data lineage and deployment gaps visible to diligence teams.", visibility="retired_from_nav"),
61
+ _surface("fleet_c2", "Fleet Health & Governed C2", "Combine aircraft and vessel telemetry with inferred subsystem health.", "/api/killinchu/v1/twin/platforms", "MIXED", "mixed", "Health is inferred from telemetry; command output is a simulated demonstration.", "Shows a governed common operating picture without pretending to control assets."),
62
+ _surface("decoders", "Protocol Decoders", "Decode captured Remote ID, ADS-B, and MAVLink frames into claimed identities.", "/api/killinchu/v1/remote-id/decode", "ON_DEMAND", "runtime", "POST-only and never auto-run; broadcast identities are unauthenticated claims.", "Demonstrates protocol fluency while preserving evidence boundaries.", method="POST", safe_probe=False),
63
+ _surface("u_assurance", "Assurance", "Expose tamper evidence, deterministic replay measurement, readiness, and UDS posture.", "/api/killinchu/uds/v1/healthz", "LIVE_RUNTIME", "mixed", "Readiness and package mappings are evidence, not certifications or authorizations.", "Packages the trust story for technical diligence and regulated buyers."),
64
+ _surface("u_maritime", "Maritime Picture", "Fuse public AIS with sanctions, dark-vessel, and risk overlays.", "/api/killinchu/v1/ais/live", "LIVE_OR_SAMPLE", "public_source", "AIS and screening results are advisory public-source claims.", "Extends the same governed substrate from air to sea."),
65
+ _surface("u_space", "Constellations & GEOINT", "Display screening-grade public orbital data and collection-planning estimates.", "/api/killinchu/v1/sda/propagate?group=stations", "LIVE_OR_SNAPSHOT", "public_source", "Screening-grade only; not a calibrated catalog, conjunction service, or tasking authority.", "Shows cross-domain expansion without overstating orbital precision."),
66
+ _surface("u_swarm", "Swarm Integrity", "Render topology, intent heuristics, and resilience of grouped tracks.", "/api/killinchu/v1/swarm/topology", "MIXED", "modeled", "Intent is heuristic; topology does not authorize effects.", "Makes multi-agent integrity and graceful degradation tangible."),
67
+ _surface("u_engage", "Engage & ROE", "Inspect the governed recommendation loop and rules of engagement.", "/api/killinchu/v1/roe/policy", "LIVE_RUNTIME", "runtime", "Human-in-the-loop; kinetic and active RF effects are outside this surface.", "Shows policy-controlled autonomy with an explicit authority boundary."),
68
+ _surface("u_fusion", "Sensor-Fusion", "Expose multi-sensor state fusion and its uncertainty math.", "/api/killinchu/v1/sensor-fusion/status", "LIVE_OR_SAMPLE", "formal_plus_runtime", "Fusion reduces uncertainty but does not turn public telemetry into attested truth.", "Connects operational data to inspectable mathematical guarantees."),
69
+ _surface("u_minedops", "Mined Ops", "Estimate field compute, telemetry memory, sampling, and routing tradeoffs.", "/api/killinchu/v1/mined/index", "MODELED", "modeled", "Engineering estimates only; no hardware or network settings are changed.", "Frames edge efficiency as an auditable deployment advantage.", visibility="retired_from_nav"),
70
+ _surface("lambda", "Trust Score Monitor", "Inspect the 13-axis advisory trust score and its inputs.", "/api/killinchu/v1/honest", "CONJECTURE", "declared", "Lambda is Conjecture 1 and must never be treated as a theorem or pass/fail oracle.", "A differentiated trust vocabulary with the maturity caveat visible."),
71
+ _surface("u_consensus", "Mesh Resilience", "Show quorum, connectivity, and conditional agreement evidence.", "/api/killinchu/uds/v1/healthz", "CONDITIONAL", "formal_plus_runtime", "Unconditional Byzantine safety remains open; no autonomous authority is conferred.", "Demonstrates resilient coordination with honest proof scope."),
72
+ _surface("u_posture", "Posture, Topology & Zero-Trust", "Measure drift, graph health, exposure, and declared mesh policy.", "/api/killinchu/v1/topology/health", "LIVE_OR_SNAPSHOT", "mixed", "Posture findings are advisory; absent telemetry must remain unknown.", "Creates a continuous-assurance view for deployment owners."),
73
+ _surface("u_receipts", "Receipts & Provenance", "Browse the runtime receipt ledger and verify provenance state.", "/api/killinchu/v1/receipt/ledger", "LIVE_RUNTIME", "runtime", "Unsigned or placeholder state must remain explicit; a signature attests content, not truth.", "Provides the evidence plane that links every product claim."),
74
+ _surface("u_proofs", "Knowledge & Runtime Proofs", "Connect formulas, theorem cards, and runtime gates.", "/api/killinchu/v1/formulas/index", "PROVEN_PLUS_OPEN", "formal_plus_runtime", "Locked, experimental, conditional, and conjectural results must remain distinct.", "Makes the research moat inspectable by technical investors."),
75
+ _surface("u_melt", "Observability (MELT)", "Expose metrics, events, logs, traces, and receipt linkage.", "/api/killinchu/v1/melt/summary", "LIVE_RUNTIME", "runtime", "Telemetry freshness and missing spans must be shown, not inferred.", "Gives operators and buyers one accountability plane.", visibility="retired_from_nav"),
76
+ _surface("u_about", "About & Claims", "State deployment posture, research lineage, and legal boundaries.", "/api/killinchu/v1/honest", "DOCUMENTED", "declared", "Claims are not certifications; roadmap items must remain roadmap.", "A diligence-ready narrative with falsifiable claims.", visibility="retired_from_nav"),
77
+ _surface("u_intel", "OSINT / Threat Intel", "Normalize public cyber, maritime, procurement, geopolitical, and counter-UAS reporting.", "/api/killinchu/v1/feeds/status", "LIVE_OR_CACHED", "public_source", "Third-party claims and heuristic tags are advisory, not attested intelligence.", "Turns fragmented public signals into a governed, provenance-aware watchlist."),
78
+ _surface("u_operator", "Operator OSINT", "Rank, route, correlate, and graph the OSINT corpus.", "/api/killinchu/v1/operator/digest", "LIVE_OR_CACHED", "modeled", "Ranking and entity extraction are heuristic; operator review remains required.", "Shows the product loop from data intake to explainable decision support."),
79
+ _surface("cuas_lab", "Counter-UAS C2 Lab", "Explore intercept, spoof, triage, fusion, and provenance experiments.", "/api/killinchu/v1/cuas/summary", "MODELED", "modeled", "Experimental and simulated; effectors never actuate.", "A controlled frontier lab without confusing prototypes for field authority.", visibility="retired_from_nav"),
80
+ _surface("scaling", "Metabolic Scaling", "Explore cited allometric and compute-scaling analogies.", "/api/killinchu/v1/scaling/summary", "MODELED", "modeled", "Engineering analogies and proposed gates are not the formal Lambda theorem.", "Connects efficiency research to the sovereign-compute thesis.", visibility="retired_from_nav"),
81
+
82
+ # Runtime-injected views.
83
+ _surface("mosaic", "Nawi / Domain-Superiority", "Fuse the common operating picture with an anomaly overlay and receipt verifier.", "/api/killinchu/v1/mosaic/health", "MIXED", "mixed", "Space conjunction is roadmap; anomaly and risk outputs are advisory.", "An original cross-domain command picture with evidence built in.", visibility="runtime"),
84
+ _surface("conjecturefactory", "Conjecture Factory", "Display signed disclosures of open conjectures and bounded-solver grades.", "/api/killinchu/v1/conjecture-factory", "OPEN", "declared", "A signature attests timestamp and content, never mathematical truth.", "Demonstrates a disciplined research pipeline that preserves uncertainty.", visibility="hidden_r_and_d"),
85
+ _surface("sovereignty", "Sovereignty (Allodial)", "Explain operator ownership and control through cited governance models.", "/api/killinchu/v1/allodial/summary", "PROPOSED", "modeled", "A governance metaphor, not a claim to be above lawful authority.", "Clarifies the commercial sovereignty thesis for buyers and investors.", visibility="hidden_r_and_d"),
86
+ _surface("neuro", "Neuroplasticity", "Visualize cited learning-rule and loss-of-plasticity diagnostics.", "/api/killinchu/v1/neuro/summary", "MODELED", "modeled", "Biological analogies and proposed lenses are not Lambda proofs.", "Links continual-learning research to agent reliability.", visibility="hidden_r_and_d"),
87
+ _surface("l6chain", "Chain of Title", "Bind software, science, and math references into an inspectable artifact record.", "/api/killinchu/v1/chain/summary", "PROPOSED", "mixed", "Signing and DOI minting remain founder-gated; structural verification is not cryptographic verification.", "A compelling long-horizon provenance product thesis.", visibility="hidden_r_and_d"),
88
+ _surface("entangle", "Entanglement", "Explore cited quantum-information bounds and engineering analogies.", "/api/killinchu/v1/entangle/summary", "MIXED", "formal_plus_runtime", "Rigorously cited pieces, structural analogies, and speculative claims stay separately tiered.", "Shows research breadth while preserving proof boundaries.", visibility="hidden_r_and_d"),
89
+ _surface("atlas", "Formula Atlas", "Index the five engineering formula modules and their honest tiers.", "/api/killinchu/v1/unified/summary", "DOCUMENTED", "mixed", "An index does not promote experimental results into the locked set.", "Creates a single diligence entry point for the research estate.", visibility="hidden_r_and_d"),
90
+
91
+ # Wave-K runtime surfaces; each endpoint is GET-only and safe to inspect.
92
+ _surface("kc_trackfusion", "Track-Fusion (JPDA/MHT)", "Associate multiple targets and report swarm-intent and ROE advice.", "/api/killinchu/v1/trackfusion/associate", "SIMULATED", "modeled", "Simulated sensors; recommendation only; human-on-loop.", "Frontier multi-target reasoning with a clear simulation label.", visibility="runtime"),
93
+ _surface("kc_onebit", "1-bit / Ternary Energy", "Estimate low-precision inference energy tradeoffs.", "/api/killinchu/v1/onebit/estimate", "MODELED", "modeled", "Measured context and modeled estimates must remain separate.", "Connects edge economics to model architecture choices.", visibility="runtime"),
94
+ _surface("kc_ccattest", "Confidential-Compute Attest", "Compare a measurement chain against a golden reference.", "/api/killinchu/v1/cc-attest/verify", "MODELED", "modeled", "Seeded model; not a live hardware attestation unless explicitly reported.", "Shows how sovereign workloads can inherit hardware-rooted evidence.", visibility="runtime"),
95
+ _surface("kc_sement", "Semantic-Entropy Gate", "Estimate semantic uncertainty as an advisory trust input.", "/api/killinchu/v1/sement/estimate", "MODELED", "modeled", "Advisory only; not a proof and never a green authorization.", "Adds uncertainty awareness to the governed inference story.", visibility="runtime"),
96
+ _surface("kc_ttc", "Test-Time-Compute Allocator", "Allocate reasoning budget against expected gain and joules.", "/api/killinchu/v1/testtime/scaling", "MODELED", "modeled", "Budget recommendation only; does not change compute allocation.", "Makes reasoning cost a governed product variable.", visibility="runtime"),
97
+ _surface("kc_specdec", "Speculative-Decode Receipt", "Model accepted-token speedup and energy receipts.", "/api/killinchu/v1/specdecode/simulate", "MODELED", "modeled", "Simulation only; losslessness is scoped to the modelled acceptance path.", "Pairs inference acceleration with auditability.", visibility="runtime"),
98
+ _surface("kc_worldmodel", "Governed World-Model", "Run a bounded latent rollout with consistency diagnostics.", "/api/killinchu/v1/worldmodel/predict", "MODELED", "modeled", "Advisory prediction; not a physical-world authority.", "Introduces governed predictive planning as a future product layer.", visibility="runtime"),
99
+ _surface("kc_episodic", "Episodic Memory Recall", "Score recall over a deterministic seeded memory graph.", "/api/killinchu/v1/episodic/recall", "MODELED", "modeled", "Seeded graph; not a live user-memory store.", "Makes agent memory inspectable and replayable.", visibility="runtime"),
100
+ _surface("kc_qec", "Topological QEC / Surface-Code", "Model below-threshold suppression and receipt survival.", "/api/killinchu/v1/qec/surface-code", "MODELED", "modeled", "Classical simulation and analogy; not a live quantum processor.", "Connects resilience research to the evidence ledger." , visibility="runtime"),
101
+ _surface("kc_energy", "Sovereign-Compute Energy", "Report local GPU energy when reachable and degrade honestly otherwise.", "/api/killinchu/v1/energy/sovereign", "LIVE_OR_ROADMAP", "mixed", "No live claim unless the sovereign metrics probe answers.", "Turns sovereign-compute economics into a measurable operating metric.", visibility="runtime"),
102
+
103
+ # Server-injected navigation links. They are real pages, not /elite view keys.
104
+ _surface("route_restraint", "Restraint", "Open the governed-frugality surface on the sibling application.", "https://szlholdings-a11oy.hf.space/restraint", "ROUTE", "route", "External sibling route; availability is not auto-probed by Killinchu.", "Connects mission value to governed resource use.", kind="route", safe_probe=False),
105
+ _surface("route_mbse", "MBSE Water-Tank Co-Sim", "Open the governed water-tank co-simulation.", "/mbse", "ROUTE", "route", "Model-based engineering surface; no physical system is controlled.", "Shows requirements-to-simulation traceability.", kind="route", safe_probe=False),
106
+ _surface("route_mbse_6dof", "MBSE 6DOF FMU Twin", "Open the modeled six-degree-of-freedom digital twin.", "/mbse-6dof", "ROUTE", "route", "Modeled twin, not live flight control.", "Demonstrates a path from software assurance to physical-system models.", kind="route", safe_probe=False),
107
+ _surface("route_mbse_pipeline", "Requirement to Lean to FMU to Receipt", "Open the end-to-end engineering evidence pipeline.", "/mbse-pipeline", "ROUTE", "route", "Pipeline evidence does not constitute certification.", "A concise diligence path from requirement to verifiable artifact.", kind="route", safe_probe=False),
108
+ _surface("route_waqay", "WAQAY Vector Index", "Open the governed vector-index surface.", "/waqay", "ROUTE", "route", "Retrieval remains evidence-scoped; signatures do not attest semantic truth.", "Connects governed retrieval to the broader estate.", kind="route", safe_probe=False),
109
+ _surface("route_yupay", "YUPAY Multi-Model Audit", "Open the governed multi-model audit surface.", "/yupay", "ROUTE", "route", "Model agreement is evidence, not ground truth.", "Shows cross-model accountability and auditability.", kind="route", safe_probe=False),
110
+ _surface("route_spaces", "Spaces", "Open the estate Space directory.", "/spaces", "ROUTE", "route", "Directory only; each linked surface retains its own evidence state.", "Provides a coherent ecosystem entry point.", kind="route", safe_probe=False),
111
+ )
112
+
113
+
114
+ def build_manifest(ns: str = "killinchu") -> dict[str, Any]:
115
+ surfaces = []
116
+ for item in EXPERIENCE_SURFACES:
117
+ row = dict(item)
118
+ row["source"] = dict(item["source"])
119
+ row["source"]["endpoint"] = row["source"]["endpoint"].replace("{ns}", ns)
120
+ row["route"] = row["route"].replace("{ns}", ns)
121
+ surfaces.append(row)
122
+ visibility = Counter(row["visibility"] for row in surfaces)
123
+ states = Counter(row["data_state"] for row in surfaces)
124
+ return {
125
+ "schema": "szl.experience-manifest/v1",
126
+ "space": ns,
127
+ "generated_at": datetime.now(timezone.utc).isoformat(),
128
+ "surface_count": len(surfaces),
129
+ "summary": {
130
+ "by_visibility": dict(sorted(visibility.items())),
131
+ "by_data_state": dict(sorted(states.items())),
132
+ "safe_get_probes": sum(1 for row in surfaces if row["source"]["safe_probe"]),
133
+ },
134
+ "honesty": "Declared states are contracts, not reachability claims. The UI probes only allow-listed GET endpoints and reports HTTP/freshness separately.",
135
+ "surfaces": surfaces,
136
+ }
137
+
138
+
139
+ def register(app: "FastAPI", ns: str = "killinchu") -> dict[str, Any]:
140
+ path = f"/api/{ns}/v1/experience/manifest"
141
+ if any(getattr(route, "path", None) == path for route in app.routes):
142
+ return {"module": __name__, "registered": [], "surface_count": len(EXPERIENCE_SURFACES)}
143
+
144
+ @app.get(path, include_in_schema=False)
145
+ async def experience_manifest():
146
+ from fastapi.responses import JSONResponse
147
+
148
+ return JSONResponse(build_manifest(ns))
149
+
150
+ return {"module": __name__, "registered": [f"GET {path}"], "surface_count": len(EXPERIENCE_SURFACES)}
151
+
152
+
153
+ EXPERIENCE_LAYER_HTML = r"""<!-- __KILLINCHU_EXPERIENCE_LAYER_V1__ -->
154
+ <style>
155
+ #szl-data-passport{display:grid;grid-template-columns:minmax(0,1.35fr) repeat(3,minmax(125px,1fr));gap:1px;margin:.65rem 0 .9rem;border:1px solid rgba(201,183,135,.28);border-radius:10px;overflow:hidden;background:#24282f}
156
+ .szl-passport-cell{min-width:0;background:#101318;padding:.62rem .72rem}.szl-passport-k{display:block;color:#8f9aa8;font:600 9px/1.2 var(--mono,monospace);letter-spacing:.11em;text-transform:uppercase;margin-bottom:.3rem}.szl-passport-v{display:block;color:#d9dee5;font:500 11px/1.45 var(--mono,monospace);overflow-wrap:anywhere}.szl-passport-v strong{color:#7fd6c7}.szl-passport-boundary{grid-column:1/-1;border-top:1px solid #24282f}.szl-passport-boundary .szl-passport-v{font-family:var(--sans,system-ui,sans-serif);font-size:12px;color:#b8c0ca}.szl-passport-live{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:6px;background:#c9a05f;vertical-align:1px}.szl-passport-live[data-ok="true"]{background:#5fb3a3}.szl-passport-live[data-ok="false"]{background:#b06a5a}
157
+ @media(max-width:880px){#szl-data-passport{grid-template-columns:1fr 1fr}.szl-passport-boundary{grid-column:1/-1}}
158
+ @media(max-width:520px){#szl-data-passport{grid-template-columns:1fr}.szl-passport-boundary{grid-column:auto}}
159
+ @media(prefers-reduced-motion:reduce){#szl-data-passport *{scroll-behavior:auto!important;transition:none!important}}
160
+ </style>
161
+ <script>
162
+ (function(){
163
+ 'use strict';
164
+ if(window.__KC_EXPERIENCE_LAYER__) return; window.__KC_EXPERIENCE_LAYER__=1;
165
+ var NS='__NS__', manifest=null, manifestPromise=null, probeToken=0;
166
+ function esc(s){return String(s==null?'':s).replace(/[&<>\"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c];});}
167
+ function loadManifest(){
168
+ if(manifest) return Promise.resolve(manifest);
169
+ if(!manifestPromise) manifestPromise=fetch('/api/'+NS+'/v1/experience/manifest',{headers:{accept:'application/json'},cache:'no-store'}).then(function(r){if(!r.ok)throw new Error('HTTP '+r.status);return r.json();}).then(function(d){manifest=d;return d;});
170
+ return manifestPromise;
171
+ }
172
+ function rowFor(key){var xs=(manifest&&manifest.surfaces)||[];for(var i=0;i<xs.length;i++)if(xs[i].id===key)return xs[i];return null;}
173
+ function stamp(d){return d&&(d.observed_at||d.fetched_at||d.as_of||d.ts||d.timestamp||d.generated_at)||null;}
174
+ function sourceLabel(d){return d&&(d.data_label||d.status_label||d.mode||d.label||d.status)||null;}
175
+ function cell(k,v,cls){return '<div class="szl-passport-cell '+(cls||'')+'"><span class="szl-passport-k">'+esc(k)+'</span><span class="szl-passport-v">'+v+'</span></div>';}
176
+ function mount(key){
177
+ var token=++probeToken;
178
+ loadManifest().then(function(){
179
+ if(token!==probeToken)return; var row=rowFor(key); if(!row)return;
180
+ var old=document.getElementById('szl-data-passport'); if(old)old.remove();
181
+ var head=document.querySelector('#content .view-head'); if(!head)return;
182
+ var box=document.createElement('section'); box.id='szl-data-passport'; box.setAttribute('aria-label','Data and evidence passport'); box.setAttribute('role','region');
183
+ box.innerHTML=cell('Source',esc(row.source.method+' '+row.source.endpoint))+cell('Declared data',esc(row.data_state))+cell('Evidence',esc(row.evidence_state))+cell('Reachability','<span class="szl-passport-live"></span><span id="szl-passport-reach">not probed</span>')+cell('Safety boundary',esc(row.operational_boundary)+' <strong>Why it matters:</strong> '+esc(row.investor_value),'szl-passport-boundary');
184
+ head.insertAdjacentElement('afterend',box);
185
+ if(!row.source.safe_probe){document.getElementById('szl-passport-reach').textContent='on demand / no automatic action';return;}
186
+ var ctrl=new AbortController(), timer=setTimeout(function(){ctrl.abort();},4500);
187
+ fetch(row.source.endpoint,{headers:{accept:'application/json'},cache:'no-store',signal:ctrl.signal}).then(function(r){
188
+ var ct=r.headers.get('content-type')||''; if(!r.ok||ct.indexOf('json')<0)throw new Error('HTTP '+r.status);
189
+ return r.json().then(function(d){return {status:r.status,data:d};});
190
+ }).then(function(res){
191
+ clearTimeout(timer); if(token!==probeToken)return; var target=document.getElementById('szl-passport-reach'); if(!target)return;
192
+ var dot=target.previousElementSibling;if(dot)dot.setAttribute('data-ok','true'); var label=sourceLabel(res.data), seen=stamp(res.data);
193
+ target.textContent='HTTP '+res.status+(label?' · '+label:'')+(seen?' · as of '+seen:' · freshness not supplied');
194
+ }).catch(function(err){
195
+ clearTimeout(timer); if(token!==probeToken)return; var target=document.getElementById('szl-passport-reach'); if(!target)return;
196
+ var dot=target.previousElementSibling;if(dot)dot.setAttribute('data-ok','false');target.textContent=(err&&err.name==='AbortError')?'timeout / honest unknown':'unavailable / '+String(err&&err.message||err);
197
+ });
198
+ }).catch(function(){});
199
+ }
200
+ function activateNav(){
201
+ document.querySelectorAll('.nav-item').forEach(function(node){
202
+ // Preserve native anchors (including cross-surface links) as links. Only
203
+ // div-based in-console items need the button keyboard contract.
204
+ var nativeLink=node.tagName && node.tagName.toLowerCase()==='a';
205
+ if(!nativeLink){
206
+ if(!node.hasAttribute('role'))node.setAttribute('role','button');
207
+ if(!node.hasAttribute('tabindex'))node.setAttribute('tabindex','0');
208
+ if(!node.dataset.kcKeyboard){node.dataset.kcKeyboard='1';node.addEventListener('keydown',function(e){if(e.key==='Enter'||e.key===' '){e.preventDefault();node.click();}});}
209
+ }
210
+ if(node.classList.contains('active'))node.setAttribute('aria-current','page');else node.removeAttribute('aria-current');
211
+ });
212
+ }
213
+ function wrapGo(){
214
+ if(typeof window.go!=='function'||window.go.__kcExperience)return false;
215
+ var original=window.go; window.go=function(view){var out=original.apply(this,arguments);activateNav();mount(view);return out;}; window.go.__kcExperience=true; return true;
216
+ }
217
+ function boot(){
218
+ activateNav(); wrapGo(); loadManifest().then(function(){mount((location.hash||'#tracks').slice(1));}).catch(function(){});
219
+ var attempts=0, iv=setInterval(function(){activateNav();if(wrapGo()||++attempts>40)clearInterval(iv);},100);
220
+ try{new MutationObserver(function(){activateNav();}).observe(document.querySelector('.side')||document.body,{childList:true,subtree:true});}catch(e){}
221
+ }
222
+ if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',boot);else boot();
223
+ })();
224
+ </script>"""
225
+
226
+
227
+ __all__ = ["EXPERIENCE_SURFACES", "EXPERIENCE_LAYER_HTML", "build_manifest", "register"]
serve.py CHANGED
@@ -3379,6 +3379,17 @@ except Exception as _mosaic_e:
3379
  # Doctrine v11 LOCKED 749/14/163 @ c7c0ba17 · Λ = Conjecture 1 · SLSA L1 honest.
3380
  # Signed-off-by: Stephen P. Lutar Jr. <stephenlutar2@gmail.com>
3381
  # ===========================================================================
 
 
 
 
 
 
 
 
 
 
 
3382
  try:
3383
  import killinchu_elite_console as _elite
3384
  _elite_status = _elite.register(app, ns="killinchu", emit_receipt=_emit_receipt)
 
3379
  # Doctrine v11 LOCKED 749/14/163 @ c7c0ba17 · Λ = Conjecture 1 · SLSA L1 honest.
3380
  # Signed-off-by: Stephen P. Lutar Jr. <stephenlutar2@gmail.com>
3381
  # ===========================================================================
3382
+ try:
3383
+ import killinchu_experience as _experience
3384
+ _experience_status = _experience.register(app, ns="killinchu")
3385
+ print(
3386
+ f"[killinchu] Experience manifest registered: "
3387
+ f"{_experience_status['surface_count']} discoverable surfaces",
3388
+ file=sys.stderr,
3389
+ )
3390
+ except Exception as _experience_e:
3391
+ print(f"[killinchu] Experience manifest NOT registered: {_experience_e!r}", file=sys.stderr)
3392
+
3393
  try:
3394
  import killinchu_elite_console as _elite
3395
  _elite_status = _elite.register(app, ns="killinchu", emit_receipt=_emit_receipt)
tests/test_killinchu_experience_contract.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import unittest
2
+
3
+ import killinchu_experience as experience
4
+
5
+
6
+ class ExperienceManifestTests(unittest.TestCase):
7
+ def setUp(self):
8
+ self.manifest = experience.build_manifest("killinchu")
9
+ self.surfaces = self.manifest["surfaces"]
10
+
11
+ def test_manifest_has_all_discoverable_surfaces(self):
12
+ self.assertEqual(48, self.manifest["surface_count"])
13
+ self.assertEqual(48, len(self.surfaces))
14
+ ids = [row["id"] for row in self.surfaces]
15
+ self.assertEqual(len(ids), len(set(ids)))
16
+ self.assertTrue({"hero_interdiction", "mosaic", "kc_energy", "route_spaces"} <= set(ids))
17
+
18
+ def test_every_surface_has_an_honest_contract(self):
19
+ required = {
20
+ "id",
21
+ "label",
22
+ "route",
23
+ "kind",
24
+ "visibility",
25
+ "purpose",
26
+ "source",
27
+ "data_state",
28
+ "evidence_state",
29
+ "operational_boundary",
30
+ "investor_value",
31
+ }
32
+ for row in self.surfaces:
33
+ self.assertFalse(required - row.keys(), row["id"])
34
+ self.assertTrue(row["operational_boundary"].strip(), row["id"])
35
+ self.assertTrue(row["investor_value"].strip(), row["id"])
36
+
37
+ def test_automatic_probes_are_get_only_api_reads(self):
38
+ for row in self.surfaces:
39
+ source = row["source"]
40
+ if source["safe_probe"]:
41
+ self.assertEqual("GET", source["method"], row["id"])
42
+ self.assertTrue(source["endpoint"].startswith("/api/"), row["id"])
43
+ decoder = next(row for row in self.surfaces if row["id"] == "decoders")
44
+ self.assertEqual("POST", decoder["source"]["method"])
45
+ self.assertFalse(decoder["source"]["safe_probe"])
46
+
47
+ def test_visibility_counts_match_the_audit(self):
48
+ counts = self.manifest["summary"]["by_visibility"]
49
+ self.assertEqual(6, counts["hidden_r_and_d"])
50
+ self.assertEqual(6, counts["retired_from_nav"])
51
+ self.assertEqual(11, counts["runtime"])
52
+ self.assertEqual(25, counts["primary"])
53
+
54
+ def test_ui_layer_is_accessible_and_read_only(self):
55
+ html = experience.EXPERIENCE_LAYER_HTML
56
+ self.assertIn("__KILLINCHU_EXPERIENCE_LAYER_V1__", html)
57
+ self.assertIn("aria-label','Data and evidence passport", html)
58
+ self.assertIn("setAttribute('role','button')", html)
59
+ self.assertIn("var nativeLink=node.tagName", html)
60
+ self.assertIn("if(!nativeLink)", html)
61
+ self.assertIn("e.key==='Enter'||e.key===' '", html)
62
+ self.assertIn("aria-current", html)
63
+ self.assertNotIn("method:'POST'", html)
64
+ self.assertIn("row.source.safe_probe", html)
65
+
66
+
67
+ if __name__ == "__main__":
68
+ unittest.main()