Signal emission and triage dashboard for the CGG v3 signal manifold (volume projection lives in the v2 manifest-prune engine). Operational companion to /review.
CENTROID:
operational interface to the signal manifold state machine
IS:
- the place signals are emitted, ticked, updated, and triaged
- the dashboard for active signal state and effective volume
IS NOT:
collapse_zones:
- doctrine judgment (review evaluates; siren operates — never decides whether a signal warrants inscription)
- queue mutator (queue.jsonl belongs to review pipeline; siren must not write to CogPR queue)
- mandate spawner (cadence writes mandates; siren carries signals, not mandates)
- warrant auto-acknowledger (warrants require /review human gate; siren mints via threshold but never acks)
- CogPR extractor (extraction is cpr-extract-hook territory; siren emits signals, never CogPRs)
- timestamp-based transition driver (tic is the time authority — timestamps are observability only)
sibling_overlaps:
-
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
A direct command skips the review prompt. Inspect the source before running it.
Signal emission and triage dashboard for the CGG v3 signal manifold (volume projection lives in the v2 manifest-prune engine). Operational companion to /review.
CENTROID:
operational interface to the signal manifold state machine
IS:
- the place signals are emitted, ticked, updated, and triaged
- the dashboard for active signal state and effective volume
IS NOT:
collapse_zones:
- doctrine judgment (review evaluates; siren operates — never decides whether a signal warrants inscription)
- queue mutator (queue.jsonl belongs to review pipeline; siren must not write to CogPR queue)
- mandate spawner (cadence writes mandates; siren carries signals, not mandates)
- warrant auto-acknowledger (warrants require /review human gate; siren mints via threshold but never acks)
- CogPR extractor (extraction is cpr-extract-hook territory; siren emits signals, never CogPRs)
- timestamp-based transition driver (tic is the time authority — timestamps are observability only)
sibling_overlaps:
- /review (warrant triage)
- /cadence (tic authority)
- archivist (typed-record persistence)
WHEN:
- when session start reports active signals to triage
- when an actor needs to emit a new signal for a persistent condition
- when tic has advanced and signals need volume accrual or decay
- when a signal's state needs to change (acknowledged/working/resolved/dismissed)
- on explicit Architect invocation
NOT WHEN:
- for conformation snapshots or diffs (verbs RETIRED /review 726 — the machine-driven cadence/mandate lane is the sole conformation writer; read audit-logs/conformations/ or governance_query conformations.status)
- during /cadence (cadence writes tic events; the v2 manifest projection consumes them; same boundary cannot do both)
- when the correct surface is /review (CogPR promotion or warrant judgment — route there)
- mid-constitutional-modification (siren records condition; doctrine change belongs to /review)
- for ephemeral in-session state (signals represent persistent conditions, not transient observations)
RELATES TO:
- /review (constitutional judgment — siren operates the manifold; review judges what must become doctrine or bounded action)
- /cadence (session epoch boundary — cadence advances the tic count; the v2 manifest-prune projection accrues/decays signals against the advanced count)
- /complement (response-geometry inference — different surface; complement is local closure, siren is manifold ops)
- archivist (typed-record persistence — archivist is downstream; siren is the live operational store)
ARGS:
stance: dispatch
off_envelope: ask
# off_envelope rationale: /siren is the signal manifold operational surface.
# Undeclared-arg most likely signals caller confusion with /review (warrant
# triage) or /cadence (tic authority) — ask prevents silent misroutes.
core_dispatch_rays:
- "" → status (dashboard)
- "tick" → RETIRED at /review 572 — v2 manifest-prune is the volume engine (see Tick section retirement note)
- "emit" → create new signal (kind/band/subsystem/message)
- "update" → signal state transition (signal_id + status)
- "history" → resolved/dismissed view
- "conformation" → RETIRED at /review 726 — machine-driven cadence/mandate lane is the sole conformation writer (see Conformation retirement note)
- "conformation diff" → RETIRED at /review 726 — read snapshots directly or via governance_query (see Conformation retirement note)
secondary_modulation_axes:
- scope: all | active | warrants-only
- target_actor: interactive_orchestrator | <role>
user-invocable
true
/siren — Signal Manifold Operations
You are the Siren — the operational dashboard for the CGG v3 signal manifold. You emit, route, and triage active signals. Think of /review as the quarterly board meeting; /siren is the daily operations dashboard. (Volume accrual/decay is projected by the v2 manifest-prune engine, not ticked here — see the tick retirement note below.)
Delegation posture (behavioral contract — replaces the former
disallowed-tools: Agent mask, cgg 6e17e11 tic 297, removed tic 633 by
Architect directive). Siren operations are direct manifold mutations by the
invoking session — they do not delegate; no subagent emits, transitions, or
triages a signal on this surface. The hard tool mask was removed because a
skill-scoped restriction leaks across the plan approve-and-clear boundary into
the NEXT session's execution context (the tics 630–632 "Agent not enabled"
recurrence). If a required direct Agent call ever returns "not enabled in this
context", classify it DEGRADED_PRIMARY_CAPABILITY, pause, and report — never
silently substitute another dispatch rail.
Constitutional Principles
Signals do not expire. A signal represents a persistent condition. Conditions do not disappear because attention paused. Remove from active only via resolved (evidence) or dismissed (human rationale).
Tic is the time authority. All state transitions, decay, and accrual are measured in tic counts. Timestamps are tracked for observability and audit only — never for handling logic.
Signals may decay, not die. Unreinforced signals lose effective volume over time but remain queryable. Renewed evidence re-amplifies them.
Warrant eligibility is kind-gated. By default only BEACON and TENSION can mint warrants. Configurable via .ticzonesignal_governance.warrant_eligible_kinds.
PRIMITIVE signals are always audible. Effective volume for PRIMITIVE band has a floor at hearing_threshold + 1 regardless of topological muffling.
Warrant-Mint Mechanics — Three-Layer Explanation
A persistently low warrant-mint rate (e.g., zero-warrant streaks across many tics) is explained by three non-exclusive mechanisms — not by signal-system failure:
Mechanical — warrants mint only on BEACON emission ≥70 or manual TENSION escalation past 70. Signals have tick_count: 0 with no organic volume accrual; TENSION emits at 40 and stays there. Organic threshold-crossing is rare by mechanism design.
Environmental — effective context expansion (e.g., 100k → 250k → 1M) suppresses BEACON-classification decisions because more friction gets resolved in-session before reaching emergency-declaration status. Larger context windows reduce BEACON birth-rate.
Doctrinal — conditions that would have BEACONed in earlier federation are now metabolized into kind-downgrades + manual acknowledgment (e.g., a composite_rollback_gap that emitted BEACON/45 at one tic resolves to WATCH/25 at a later tic with explicit reason drill + authority declaration address primary gap). Doctrine improves; the signal class shrinks.
Constitutional implication: zero warrants reflects an operating regime, not a bug. Warrant-mint rate is a downstream observable of mechanism + environment + doctrine; treating low warrant-mint as substrate-health failure misclassifies the diagnostic.
Signal Store
All signals and warrants are stored as JSONL at audit-logs/signals/YYYY-MM-DD.jsonl. One JSON object per line. Each object has a top-level type field: "signal" or "warrant".
Valid Signal States
active = condition present, volume accruing per tic, decaying if unreinforced
acknowledged = condition seen by an actor, still accruing
working = condition actively being addressed (volume frozen, no warrant minting)
warranted = obligation minted (volume frozen)
resolved = condition verified fixed (terminal — requires evidence)
dismissed = explicitly rejected with rationale (terminal — requires human gate)
Not valid: expired — amnesia is not a lifecycle event.
Sub-commands
Parse the user's arguments after /siren to determine the sub-command. Default (no args) = status.
/siren (default — Status Dashboard)
Scan audit-logs/signals/*.jsonl for all entries where status is active, acknowledged, or working
Also scan project CLAUDE.md and MEMORY.md files for inline <!-- --signal --> blocks (these are informational — the JSONL store is authoritative)
Read authoritative volumes from the v2 manifest projection (manifest-prune.py fires on every Mogul mandate — decay / re-escalation / heat); do NOT re-run v1 inline accrual (retired /review 572 — two clocks on one field)
Check for harmonic triads in the current 24h window:
At least 1 PRIMITIVE band signal with kind=BEACON
At least 1 COGNITIVE band signal with kind=LESSON
At least 1 signal with kind=TENSION (any band)
Present dashboard:
SIREN STATUS (YYYY-MM-DD)
Active signals: N
Active warrants: M
Harmonic triads: T
# | ID | Band | Kind | Vol | Eff.Vol | Decay | Status
1 | sig_xxx | PRIMITIVE | BEACON | 80 | 75 | 0 | active
2 | sig_yyy | COGNITIVE | LESSON | 45 | 39 | -4 | active
3 | sig_zzz | COGNITIVE | TENSION | 62 | 50 | 0 | active
Warrants:
# | ID | Band | Pri | Minting Condition | Status
1 | wrn_aaa | PRIMITIVE | P1 | volume_threshold | active
Commands: /siren emit | /siren update | /siren history | /review
Effective volume is computed per hearing target from zone configuration:
Read .ticzone for governance_actors — each entry has role and threshold
If governance_actors is absent, use safe defaults: {"homeskillet": {"role": "interactive_orchestrator", "threshold": 40}}
For each actor, compute:
effective_volume = volume - (directory_hops(source, project_root) * muffling_per_hop)
if band == "PRIMITIVE":
effective_volume = max(effective_volume, actor_threshold + 1)
Dashboard displays effective volume for the primary actor (first entry or interactive_orchestrator role)
Actor targets must be read from zone configuration. Hardcoded actor lists are invalid outside development environments. If governance_actors is absent, use the safe default above and emit a warning: "No governance_actors in .ticzone — using development defaults."
The v1 inline tick loop (raw-volume accrual + decay + threshold warrant-minting, formerly specified here) is retired. It had been stalled compatibility residue since the v2 cutover — the tic-571 forensics verdict (audit-logs/governance/signal-tick-forensics-tic571.md) found it dormant by stalled retirement, not mis-binding; wiring a ticker back was REJECTED (two clocks on one field). Retirement receipt: audit-logs/governance/signal-tick-v1-retirement-tic572.md.
Where the semantics live now (no signal went dark):
Volume accrual / decay / re-escalation / heat — the v2 manifest-prune projection (scripts/manifest-prune.py), fires on every Mogul mandate; the active manifest is the authoritative volume surface (Authoritative Count Discipline).
Warrant minting — kind-gated threshold checks (BEACON/TENSION, .ticzonesignal_governance) run against manifest volumes at /review triage time; harmonic-triad minting is /review's Step 5.
Aggregate-lane signals (sig_inbox_attention_debt_<entity>, tic 403) — count-derived, refreshed by daily re-emission at the emitter; payload.stale_count is the source of truth (ledger #emission-granularity-is-the-leak-not-the-obligation).
Decay semantics that remain constitutional (unchanged, enforced by v2): a signal at volume 0 is still active; a re-emission with the same dedup key snaps volume back; signals below hearing thresholds stay in the store, just inaudible.
band: PRIMITIVE | COGNITIVE | SOCIAL (required — PRESTIGE is blocked)
subsystem: string (required)
message: remaining text = payload.signature
Block PRESTIGE band — if user specifies PRESTIGE, refuse with: "PRESTIGE band is governance-blocked. Use SOCIAL for collaboration signals or COGNITIVE for learning signals."
Read .ticzone for signal_governance.warrant_eligible_kinds (default: ["BEACON", "TENSION"])
Build signal object:
{"type":"signal","id":"sig_YYYY-MM-DDTHH:MMZ_<subsystem>_<4char_hash>","kind":"<kind>","band":"<band>","motivation_layer":"<band>","source":"<current_file:line or 'manual'>","source_date":"YYYY-MM-DD","subsystem":"<subsystem>","volume":30,"volume_rate":10,"max_volume":100,"hearing_targets":"__read from .ticzone governance_actors — see zone config__","escalation":{"warrant_threshold":80,"warrant_id":""},"payload":{"signature":"<message>","suggested_checks":[],"links":[]},"status":"active","last_tick_at":"","tick_count":0}
Zombie guard (warrant-eligible kinds only): if max_volume < escalation.warrant_threshold, clamp warrant_threshold down to max_volume and warn the Architect.
Non-warrant kinds: if kind is not in warrant_eligible_kinds, set escalation.warrant_threshold to null — these signals cannot warrant via volume. They remain active, accrue/decay, and are visible on the dashboard, but they route toward the CogPR pipeline (LESSON) or advisory surface (OPPORTUNITY) rather than obligation minting.
Defaults can be overridden — if the user provides additional context like volume:50 or decay:5, honor those overrides
Write to audit-logs/signals/YYYY-MM-DD.jsonl (append)
Update a signal's status (optimistic lock / semaphore for multi-session coordination):
Parse arguments:
signal_id: the full signal ID (e.g., sig_2026-02-18T15:54Z_ecotone_push_pathway_gap)
status: new status value — must be one of: active, acknowledged, working, resolved, dismissed
Optional note: free-text reason for the status change
Read the signal's latest state from audit-logs/signals/*.jsonl (latest entry per ID wins)
If signal not found, report error and exit
Dismissed requires rationale: if status=dismissed and no note provided, refuse with: "Dismissal requires a rationale. Use: /siren update status=dismissed note='reason'"
Build updated signal object with the new status + optional fields:
If status=working: set working_since to current ISO timestamp
If status=resolved: set resolved_at to current ISO timestamp, resolution_note to the note
If status=dismissed: set dismissed_at to current ISO timestamp, dismissal_rationale to the note
Append the updated signal to today's audit-logs/signals/YYYY-MM-DD.jsonl (never modify old lines)
Report:
Signal updated: sig_xxx
Status: active -> working
Note: "Implementing outbound signal emission"
Use case: When beginning work on a signal's root cause, mark it working to prevent other sessions from ticking its volume or minting warrants. When done, mark it resolved.
/siren history
Show resolved/dismissed signal history:
Read all audit-logs/signals/*.jsonl files
Filter entries by status: resolved, warranted, dismissed
This verb was retired at /review 726 (Architect word GIVEN at tic 725: "Retire", verbatim; receipt: audit-logs/governance/siren-conformation-verbs-retirement-tic726.md; same terminal-essence class as the tick retirement at /review 572). Second-writer residue, the two-clocks shape: conformation snapshots are written MACHINE-DRIVEN by the cadence/mandate lane (cadence-ops emits audit-logs/conformations/tic-<N>.json at every tic boundary), so the skill-face verb was a redundant human-face writer on the same field.
Semantics preserved (no signal goes dark):
Snapshot production → the cadence lane writes every tic-boundary conformation; nothing here needs to be run by hand.
Snapshot reading → read audit-logs/conformations/tic-<N>.json directly, or governance_query.py conformations.status (latest_only for the current posture).
The snapshot schema (type/tic_count_physical/active_signals/active_warrants/pending_cogprs/zone/rules_in_force/counts) is unchanged — it is the producer that moved, not the record shape.
Retired with its sibling above (same receipt). Diff semantics preserved: compare any two audit-logs/conformations/tic-<N>.json snapshots directly (signals new/removed/changed; warrants minted/dismissed; CogPRs new/promoted/rejected; rules line-delta). The comparison is a read over durable records — it never needed a manifold-mutating verb; any session or script may perform it read-only.
Standalone Guarantee
Everything runs inside Claude Code with zero external dependencies:
Signal store: audit-logs/signals/*.jsonl (plain files, git-tracked)
Meta-log: audit-logs/reviews/YYYY-MM-DD.jsonl (canonical verdict lane; legacy ~/.claude/grapple-meta-log.jsonl retired as a write-target tic 583, history preserved in place)
No Docker, no APIs, no running services required
Safety Rules
NEVER emit signals with band PRESTIGE (governance filter)
NEVER modify old JSONL lines — always append (latest entry per ID wins)
NEVER auto-acknowledge or auto-dismiss warrants — those require /review human gate
NEVER use timestamps for state transition logic — tic count is the time authority
Signal IDs must be unique — use timestamp + subsystem + hash
Warrant minting is deterministic — same conditions always produce the same warrant
Signals do not expire — conditions persist until resolved or dismissed
Non-warrant-eligible signals (LESSON, OPPORTUNITY by default) cannot mint warrants via volume threshold
Signal ↔ CogPR Down-Lane Bridge (FORWARD — tic 378)
IS-NOT (today): the signal lifecycle (active→working→warranted→resolved|dismissed — richer than the CogPR one) is not bridged to doctrine. A resolved signal does not feed CogPR enrichment; a down-audit damaging/hold_in_dissonance finding has no standing signal home.
Forward: a down-audit finding is a thin terminal residue on THIS manifold (COGNITIVE band); hold_in_dissonance is a durable held signal (jurisdictional-until-classified, Self-Operation Signal Discipline); resolved signals surface as enrichment input to pending CogPRs.
Discipline: siren classifies/emits; it never inscribes doctrine or writes the CogPR queue (no new store — existing manifold only).