VIEW THIS AS

Auto mode follows the Route Engine until you choose a viewpoint.

YOU ARE HERE

ROUTE CHECK

CONNECTED TO

WHAT NEXT

Use the canonical route for this room, or HELP if you are unsure.

CivOS Closed-Loop Run Protocol v1.0

CivOS Closed-Loop Run Protocol v1.0

(Almost-Code Canonical Spec — “run → score → update” harness)

0) Definition Lock Box

Closed Loop (CivOS): a system is “closed loop” when every run produces a standard state output, triggers a standard action, and then produces a verification log that updates thresholds / routing rules (version forward).

Run: one evaluation of a situation over a time window Δt.

State Output (required):
{Phase, Zoom, Lane, TTC, Buffer, Drift, RateDominance, NIT?, TVIS?, Action, Roles, Confidence}

FenceOS: boundary/actuation primitive that prevents irreversible threshold crossings using TTC/buffer/rate-dominance; triggers truncation & stitching.

Truncation: early cut-off of accelerating failure regime.
Stitching: regeneration catching up post-truncation to rejoin safe trajectory.


1) Scope

This protocol is the universal harness that all domain OSes plug into:

  • City OS (e.g., NYC OS)
  • Conflict/War OS (CONFLICT.OS / WAR.OS)
  • Education OS, Governance OS, Family OS, etc.

It runs at any Zoom (Z0–Z6) and returns the same output contract.


2) Output Contract (Copy-Paste Spec)

2.1 State Record (single run output)

CivOS.RunState.v1:
RunID: <string stable id>
Place: <PlaceID or null>
Window:
t0: <iso8601>
t1: <iso8601>
Δt_days: <number>
Coordinates:
Phase: <P0|P1|P2|P3>
Zoom: <Z0|Z1|Z2|Z3|Z4|Z5|Z6>
Lane: <LaneID or LaneName>
RoleFocus: <Operator|Oracle|Visionary|Mixed>
Sensors:
TTC_days: <number or null>
Buffer:
thickness: <0..1>
trend: <down|flat|up>
Drift:
velocity: <number> # semantic/coordination drift rate
acceleration: <number> # drift curvature
RateDominance:
R: <number> # R = DamageRate / RepairRate
regime: <safe|warning|breach>
NIT:
value: <0..1 or null> # narrative irreversibility threshold proxy
regime: <reversible|soft_lock|hard_lock|null>
TVIS:
Hope: <0..1 or null>
Grind: <0..1 or null>
Wisdom: <0..1 or null>
imbalance: <0..1 or null>
Coupling:
cross_lane_weight: <0..1>
contagion_risk: <0..1>
Decision:
PrimaryAction: <Monitor|Fence|Truncate|Stitch|Reroute|Escalate>
SecondaryActions: [<...>]
TargetPhase: <P1|P2|P3>
TargetZoom: <Z0..Z6>
ExecutionRoles:
Operator: [<task ids>]
Oracle: [<task ids>]
Visionary:[<task ids>]
Confidence:
CoordConfidence: <0..1>
ActionConfidence: <0..1>
Notes: <string>

2.2 Verification Record (required for closure)

CivOS.VerifyLog.v1:
RunID: <same as above>
ObservedOutcome:
happened: <string>
outcome_class: <correct|miss|false_alarm|late|wrong_lane|wrong_zoom|wrong_phase>
Scores:
CoordScore: <0..100>
ActionScore: <0..100>
TimingScore: <0..100>
TotalScore: <0..100>
FailureTag: <FT.* id>
ThresholdUpdate:
changed: <yes|no>
what_changed: [<sensor threshold ids>]
why: <string>
VersionBump:
from: <vX.Y>
to: <vX.Y+>

3) Inputs (what the harness accepts)

3.1 Minimum Inputs

CivOS.Input.v1:
Place: <optional>
EventStream:
- timestamp: <iso8601>
text: <what happened / what was said>
source: <news|internal|conversation|ops log>
Context:
domain: <conflict|city|education|governance|etc>
known_constraints: [<strings>]

3.2 Optional Inputs (improves HD)

  • Time series of indicators (counts, prices, incidents, sentiment)
  • Role map (who can act)
  • Lane map (which lanes exist + coupling priors)
  • Historical analogs (case studies)

4) Sensors (HD signals)

You already have the pieces. This section makes them executable.

4.1 TTC (Time-to-Crossing) Sensor

Goal: estimate time until an irreversible threshold is crossed.

Sensor.TTC.v1:
Inputs: Drift.velocity, Drift.acceleration, Buffer.thickness, Coupling.contagion_risk
Output: TTC_days
Rule: TTC decreases as drift increases and buffer decreases; coupling amplifies.

4.2 Buffer Thickness

Sensor.Buffer.v1:
thickness in [0..1]
trend in {down, flat, up}

4.3 Rate Dominance (core collapse law)

Let:

  • Ḋ = damage / decay rate (capability loss, coordination loss, fracture propagation)
  • Ġ = repair / regeneration rate (restoration throughput, containment throughput)

Then:

  • R = Ḋ / Ġ
Sensor.RateDominance.v1:
R:
safe: R < 0.8
warning: 0.8 <= R < 1.0
breach: R >= 1.0

4.4 NIT (Narrative Irreversibility Threshold) proxy

This is the “lock-in” sensor: when a story becomes self-reinforcing and hard to unwind.

Sensor.NIT.v1:
value in [0..1]
regimes:
reversible: value < 0.4
soft_lock: 0.4 <= value < 0.7
hard_lock: value >= 0.7
Inputs examples:
- repetition under load
- shrinking vocabulary / narrowing frames
- punishment of dissent
- policy/identity binding ("we cannot ever...")

4.5 TVIS (Time-Vector Imbalance Sensor: Hope/Grind/Wisdom)

Sensor.TVIS.v1:
Hope = future-weight allocation
Grind = present-execution allocation
Wisdom = past-model allocation
imbalance = distance from "balanced envelope"
rule-of-thumb:
- too much Hope, low Grind -> promises without throughput (paper phase)
- too much Grind, low Wisdom -> repeated mistakes (overheat loop)
- too much Wisdom, low Hope -> paralysis / no upgrade path (stagnation loop)

4.6 Cross-Lane Coupling

Sensor.Coupling.v1:
cross_lane_weight in [0..1]
contagion_risk in [0..1]
note: coupling raises drift propagation speed and lowers effective TTC

5) Classification (Phase × Zoom × Lane)

5.1 Phase assignment (minimal executable rules)

Classifier.Phase.v1:
P3 (stable): Buffer.thickness high AND R safe AND Drift low/stable
P2 (managed): R safe/warning AND TTC not critical AND Fence actions working
P1 (unstable): R warning/breach OR TTC short OR Drift accelerating OR NIT soft_lock
P0 (fracture): R breach with cascading symptoms OR NIT hard_lock OR TTC critical (near-zero)

5.2 Zoom assignment

Rule: pick the zoom where actions are controllable and causal.

  • If symptoms are local but causes are institutional → zoom up.
  • If policy is abstract but failure is operational → zoom down.
Classifier.Zoom.v1:
choose Zk such that:
- you can name actors/resources at Zk
- you can measure sensors at Zk
- actuation at Zk changes TTC or R within Δt

5.3 Lane assignment

Lane is not “topic.” Lane is the load path where failure propagates.

Classifier.Lane.v1:
choose lane with:
highest contribution to Drift + highest coupling + lowest buffer

5.4 Confidence

Confidence.v1:
CoordConfidence increases when sensors agree (TTC, R, Buffer, NIT, TVIS)
CoordConfidence decreases when signals conflict or data sparse

6) Decision + Actuation (FenceOS integration)

6.1 Primary Action chooser

Decision.PrimaryAction.v1:
if R breach OR TTC_days <= TTC_critical: PrimaryAction = Truncate
else if NIT soft_lock and rising: PrimaryAction = Fence
else if post-truncation and buffers rising: PrimaryAction = Stitch
else if wrong lane/zoom detected: PrimaryAction = Reroute
else: PrimaryAction = Monitor

6.2 Role routing (Operator / Oracle / Visionary)

Roles.v1:
Operator: executes containment, restores throughput, reduces Ḋ, increases Ġ
Oracle: measures sensors, updates models, detects hidden coupling + drift
Visionary: changes structure (ΔAd+), creates new lanes/buffers, prevents recurrence

6.3 Minimal task templates (copy/paste)

Task.Operator.v1:
- contain: "reduce damage rate Ḋ in lane X"
- restore: "increase repair rate Ġ via throughput pipeline"
- verify: "measure TTC, Buffer after actuation"
Task.Oracle.v1:
- instrument: "produce RunState with confidence and missing data list"
- diagnose: "identify hidden coupling + NIT regime"
- calibrate: "propose threshold update"
Task.Visionary.v1:
- redesign: "ΔAd+ structural change to thicken buffer or add redundancy"
- decouple: "reduce coupling or add slack"
- institutionalize: "turn repair into default pipeline"

7) Verification Harness (the thing that makes it “100%”)

7.1 The scoring rubric (single standard)

Scores are computed from three parts:

Score.v1:
CoordScore (0..100):
- Phase correct? (40)
- Zoom correct? (30)
- Lane correct? (30)
ActionScore (0..100):
- was PrimaryAction appropriate for regime? (50)
- did actions reduce R or increase TTC? (50)
TimingScore (0..100):
- early enough to matter (TTC margin)? (100)
TotalScore = 0.4*CoordScore + 0.4*ActionScore + 0.2*TimingScore

7.2 Failure taxonomy (for auto-diagnostics)

FailureTags.v1:
FT.MISS # did not detect drift/approach to threshold
FT.FALSE_ALARM # detected but no crossing / no meaningful regime
FT.LATE # correct but too late (TTC already critical)
FT.WRONG_PHASE
FT.WRONG_ZOOM
FT.WRONG_LANE
FT.WRONG_ACTION
FT.HIDDEN_COUPLING
FT.NIT_MISREAD
FT.TVIS_MISREAD

7.3 The update rule (version forward)

This is the closure link: every meaningful miss creates a rule change.

UpdateRule.v1:
if TotalScore < 70:
must:
- assign FailureTag
- change at least one of:
(a) a threshold
(b) a coupling prior
(c) a lane routing rule
(d) a zoom selection rule
- bump version forward (never rename ids; only v+)

8) Failure Mode Trace (required schematic)

A closed-loop spec must include the unemotive chain:

Example Trace:
Z0 signal change → Drift.velocity up → Buffer down → R crosses warning → TTC shrinks
→ Fence not triggered → NIT enters soft_lock → coupling spreads to adjacent lane
→ R breach → P1→P0 fracture
Repair Trace:
Oracle detects (TTC,R,NIT) → Fence triggers → Truncate damage spike → Stitch buffers
→ R returns safe → phase recovers to P2/P3

9) Minimal End-to-End Run Example (generic, deployable)

9.1 RunState (example)

CivOS.RunState.v1:
RunID: "RUN-2026-02-16-0001"
Place: null
Window: {t0: "2026-02-10", t1: "2026-02-16", Δt_days: 6}
Coordinates:
Phase: P1
Zoom: Z3
Lane: "LANE.conflict-coordination"
RoleFocus: Mixed
Sensors:
TTC_days: 14
Buffer: {thickness: 0.35, trend: down}
Drift: {velocity: 0.62, acceleration: 0.20}
RateDominance: {R: 1.05, regime: breach}
NIT: {value: 0.58, regime: soft_lock}
TVIS: {Hope: 0.70, Grind: 0.25, Wisdom: 0.30, imbalance: 0.55}
Coupling: {cross_lane_weight: 0.65, contagion_risk: 0.70}
Decision:
PrimaryAction: Truncate
SecondaryActions: [Fence, Reroute]
TargetPhase: P2
TargetZoom: Z3
ExecutionRoles:
Operator: ["OP.contain-damage", "OP.restore-throughput"]
Oracle: ["OR.instrument", "OR.hidden-coupling-check"]
Visionary:["VI.decouple", "VI.buffer-thicken"]
Confidence:
CoordConfidence: 0.72
ActionConfidence: 0.68
Notes: "R breach + buffer falling; NIT soft_lock emerging; TVIS shows hope-heavy/low-grind"

9.2 VerifyLog (later)

CivOS.VerifyLog.v1:
RunID: "RUN-2026-02-16-0001"
ObservedOutcome:
happened: "conflict escalated; coordination failed; cross-lane spillover occurred"
outcome_class: correct
Scores: {CoordScore: 85, ActionScore: 78, TimingScore: 70, TotalScore: 79}
FailureTag: "FT.NONE"
ThresholdUpdate:
changed: no
what_changed: []
why: "acceptable prediction + action"
VersionBump: {from: "v1.0", to: "v1.0"}

10) “100% Completion” Checklist (binary)

You can now call it “100% closed-loop” when every run produces:

  • ✅ RunState record in the v1 schema
  • ✅ PrimaryAction + role task list
  • ✅ VerifyLog with scores + failure tag
  • ✅ If score < 70 → threshold/routing change + version bump

If you skip VerifyLog + UpdateRule, it’s not closed-loop (it’s analysis).


What we learn (compressed)

  1. You now have a universal harness that makes every OS deployable (NYC, conflict, education, etc.).
  2. Backtests become calibration instruments (not content).
  3. Your bottleneck shifts to repeatable scoring + versioning (Gate 1 compression).
  4. Sensors (TVIS/NIT/R/TTC/Buffer/Coupling) become your “HD spine” — the OS becomes measurable, not vibe-based.

Start Here:

Start here if you want the full sequence:

Vocabulary OS Series Index:
https://edukatesg.com/vocabulary-os-series-index/

Fence English Learning System: 

eduKateSG Learning Systems: 

Recommended Internal Links (Spine)

Start Here for Lattice Infrastructure Connectors