⚠ Not built. SG/Sentinel is a published design from May 2026 — “this is how I would build it” — not a product. No plans to build it unless somebody funds it. Read the note →
sg-sentinel.sgit.ai / research

Designed on paper, broken on paper, then prototyped

SG/Sentinel's design is day 68 of an iterative brief series: 19 design briefs dated 18 May 2026, followed by the two implementation briefs on 23 May — each one a voice memo turned into a decision record. Before any code, the design was pressure-tested with tabletop simulations — requests traced through the paper architecture — which surfaced 25 gaps, seven of them major. The gaps were resolved in a consolidated addendum, and only then did the prototype exercise start. The method is part of the system — and the design, not the prototype, is what this site publishes: SG/Sentinel itself has not been built.

The shape of the series

StageDocumentsWhat it settled
Principlesprinciples, execution model, MVP scopeWhy build it (Firehose cost, WAF rent, the visibility blind spot); the layered-responder model; no-invalid-request; "not everything has to be online"
The enginerules engine, rule architectureRules are everything; tiny core; the fractal graph; metadata; the deterministic-to-opinion spectrum
Development modelinteractivity & phases, codebase extension, delegation & choke-pointsLocal-everywhere; dev/main/prod; dangerous dev-only rules; Sentinel as the app's trust boundary; deploy parity as a P1 invariant
Strategytime as a dimension, evidence graph, standards research, compliance graphDetect-before-damage; make good users faster; the evidence graph; ATT&CK/CRS/STIX compatibility; compliance computed from what is deployed
The specrules of the game, TUI mockupsThe behavioural answer key the simulations run against; the operator surfaces as acceptance criteria
The testtabletop 1, tabletop 2, addendum, planning25 gaps found and resolved; prior art positioned; the MVP boundary drawn: "we have enough to build"
Implementationv0.27.59 architecture, v0.27.60 dev briefThe signal spine, the three targets, six build phases, the parity matrix as the definition of done

The tabletop: 25 gaps before a line of code

Eleven simulated requests — happy paths, cache hits, probes, brute force, a fast-tracked user turning malicious, an in-profile exploit — were traced layer by layer against the behavioural spec, and every place the paper behaviour was unclear, contradictory or wrong was flagged as a numbered GAP with a proposed resolution. Part 1 (generic flows and logging) found 11; part 2 (blocking) found 14, seven major. Three of the stories are worth telling in full:

Fast-track had to be redesigned as zero-trust acceleration

The original design fast-tracked known-good fingerprints past the checks. Simulation 9 played a fast-tracked user whose session turns malicious — requesting an admin endpoint, then someone else's vault — and the naive spec fast-tracked the attack, because the user was on the allowlist. The resolution rewrote what fast-track means: it is never authorisation-skipping. Identity-verified users skip only the expensive identity-establishment cost, carried in a signed token L1 can validate without a lookup; authorisation is always enforced, per user; and trust is continuously re-verified. Fast-track became zero-trust acceleration — a BeyondCorp idea arrived at by breaking the design on paper.

Honeytokens became the intent signal

The follow-on gap: even a correctly-authorised, identity-verified session can be compromised — IAM verifies identity, it cannot confirm intent. The resolution came from deception technology: place decoy endpoints no legitimate flow ever touches. A fast-tracked fingerprint touching a honeytoken is a near-zero-false-positive compromise signal, and revokes fast-track instantly, at machine speed. The design's existing "wild goose chase" instinct turned out to be an established discipline with a mechanism that closed a real hole.

Per-IP keying died against residential proxies

Simulation 8 brute-forced a login endpoint — valid endpoint, valid request shapes, so no-invalid-request never fires. Per-IP rate limiting looked like the answer until the research brief's finding landed: roughly 4 in 10 attacking IPs are now residential or compromised home connections, so 50 attempts from 50 IPs never trips a per-source limit. The resolution: rate-limit per target (the account receiving the attempts) as well as per source, and key evidence multi-dimensionally — source, target, behavioural signature. IP reputation was demoted permanently to context, never verdict. The same simulation also surfaced a coupling requirement: Sentinel cannot see whether a login succeeded, so the application must report auth outcomes back to it — app-coupling working in reverse.

And one confirmation

Simulation 10 — a slow, patient probe from rotating IPs, one unusual request every ten minutes — is the case rate-based detection cannot catch. The allowlist doesn't care: every out-of-profile request is blocked individually, regardless of rate or rotation. The attacker can probe forever and map nothing. The tabletop's one "positive finding": no-invalid-request beats slow distributed probing by construction.

The honest limit, documented. The tabletop also established what Sentinel does not solve: a structurally-valid request with a malicious payload (an in-profile exploit) passes structural validation. The layered answer — CRS-pattern content rules, async LLM interpretation, and an application that must itself be secure — is designed, and the conclusion is stated plainly in the spec: Sentinel is defence in depth, not a sole defence.

Prior art: positioned, not reinvented

A fresh research pass after the tabletop found that the design had independently converged on several established disciplines — reassuring, and useful, because each had lessons to take:

Prior artWhat it confirmsWhat was taken
OPA / RegoTiny core + rules-as-substance; structured decisions beyond allow/denyThe PDP/PEP split, named explicitly: the rule engine decides, the layers enforce. Rego itself declined (separate language vs. same-code-everywhere)
Detection-as-Code / SigmaRules in git, PR-reviewed, tested against labelled dataRule retirement as a discipline the series had missed; the compile-to-backend model as the concrete path to multi-CDN
OWASP CRS / CorazaThe reference rule library and the modern library-first engineAnomaly scoring for combining opinion rules; paranoia levels as progressive lock-down; CRS ingestion as a baseline layer under the app-coupled rules
Deception technology"Don't play ball with attackers" is a mature fieldHoneytokens as the intent signal; touch-revokes-trust; deflection as a deliberate deception layer
Zero-trust / BeyondCorpContinuous verification over perimeter trustThe corrected meaning of fast-track: skip identity-establishment cost, never authorisation

One boundary was drawn deliberately: no malware or file-hash scanning at the Sentinel layers — the zero-knowledge architecture means Sentinel never has file contents, so it does traffic, IP and behavioural intelligence only. Not a limitation to apologise for; a consequence of a core platform value.

Five cross-cutting observations

Why publish the method

The gaps were found on paper, not in production — that is the entire value of the exercise, and the reason the intermediate documents are published rather than summarised away. Every claim on this site traces to a brief in the documents section, captured verbatim with the raw markdown as the source of truth.