sgit newsroom v0.1.29 · snapshot 2026-09-24

Reading room · ungovr.providers.sgit.ai

On this page

Reading room / ungovr.providers.sgit.ai · raw text · live ↗

From ungovr.providers.sgit.ai, the page as fetched on 2026-09-25 · open the live page ↗Everything on this sheet is the source site's own text; the newsroom's chrome is outside it.

03 — The Worked Example: One County, One Law, One Acceptance

version v0.33.67 date 8 September 2026 status Specified, not built. Every value marked pending retrieval is a slot, not a claim.

← 02 The Model↗ · Pack hub↗ · Next → 04 The Vault↗


This Is The Deliverable

Everything else in this pack exists to make this one path defensible. If you read one file, read this one.

The path runs from a real government entity, resolved from a slug somebody else publishes, to a named person who accepted a residual risk — and at every step you can see the bytes it came from and the date they were retrieved.


The Choice, And Why

SlotChoiceWhy this one
CountySanta Barbara County, CaliforniaIt is the city behind their own published measurement: 40.7 per cent of addresses written "Santa Barbara, CA" fall outside the city limits. The example lands on ground they have already done fieldwork on, which makes it a compliment rather than a probe
InstrumentThe California Public Records ActIt is the records law their open_records.law edge points at for Californian bodies, so the join is against a reference they actually publish rather than one we chose
AcceptanceOne, named, with an interval and a revocation pathBecause an acceptance without an owner is a note

And a secondary reason for California that matters for step 1. Their own depth claim is that Californian special districts outnumber cities by more than ten to one, and that layer below city hall is what nobody else maps. The overlapping-jurisdiction stack for a Santa Barbara address is therefore the richest available demonstration of the one thing only they can do.

Refuse to widen it. Not all 58 counties. Not all 398 records laws. Not the transparency corpus as well. One.


The Seven Steps

   1  ENTITY        a real UnGovr slug, fetched live, with its boundary
                    and its published law reference
                          |
   2  INSTRUMENT    that records law, rendered as addressable provisions:
                    two-hash addressing, source bytes hashed,
                    retrieval source and timestamp recorded
                          |
   3  PROVISION     one clause. The one that creates a duty
                          |
   4  OBLIGATION    what it requires, of whom, within what interval
                          |
   5  CONTROL       what would satisfy it
                          |
   6  EVIDENCE      at a stated tier, with unevidenced as the default
                          |
   7  ACCEPTANCE    a named owner, an interval, a revocation path,
                    carried in the vault and versioned

Steps 1 and 2 are the join that does not exist today. Steps 3 to 7 are the chain this estate already has.


Step 1 — Entity

Produces: one ung:Entity, one ung:Boundary, one ung:LawReference, one sg:Retrieval.

SourceGET /v1/entities/us/ca.json, then GET /v1/entities/detail/{slug}.json
SlugPending retrieval. Do not guess it. Resolve it from their index and transcribe it verbatim
BoundaryGET /v1/entities/boundaries/{slug}.geojson, stored unmodified
Law referenceopen_records.law, transcribed as the exact string they publish
Rate limit100/day per IP on entity data. The whole of step 1 is three calls

The discipline here is the whole vault in miniature. The slug is not normalised. The GeoJSON is not simplified. The law string is not matched to anything yet. Three files land in the vault with their retrieval metadata and nothing else happens to them.

Acceptance test 1 is satisfied when the named entity resolves from its published slug and its boundary renders.


Step 2 — Instrument

Produces: one akn:Instrument, N akn:Provision nodes, one sg:Retrieval, and one sg:Inference for the resolution edge.

This is the join. It has two halves and they must not be confused with each other.

Half one, the resolution. ung:LawReference → akn:Instrument, via sg:resolvesTo. This edge is inferred, not asserted, and it carries the transformation that produced it — a documented, rerunnable match from their published string to an Akoma Ntoso work URI. UnGovr did not make this claim and the graph must not draw it as if they did.

Half two, the rendering. The instrument's text is decomposed into addressable provisions by the method already used twice, for GDPR and for the EU AI Act. Section, block, sentence. Two hashes per provision. SHA-256 of the source bytes. Retrieval source, timestamp and method on each.

RequirementFrom
Two-hash addressingstandards.sgit.ai, unchanged
SHA-256 of source bytesstandards.sgit.ai, unchanged
The markdown rebuilds from the graph byte for bytegraphs.sgit.ai. This is acceptance test 3 and it is not optional
Quotes verified byte by byte on buildgraphs.sgit.ai

One open item to settle before building, and settling it is cheap: whether the CPRA has an Akoma Ntoso rendering, or a published XML source of comparable quality. The EU AI Act had Formex, which is why that vault was tractable. If Californian statute is only available as HTML, the decomposition is harder and the byte-hash claim is weaker, and that must be said in the vault rather than discovered by a reader. Record the answer in 06__verification.md before writing any parser.


Step 3 — Provision

Produces: one akn:Provision promoted to the spine of the example.

One clause. The one that creates a duty. The candidate is the CPRA's response-interval provision — the ten-day determination requirement, at Gov. Code § 7922.535 in the 2023 recodification, formerly § 6253(c).

Pending retrieval. That citation is written here from prior knowledge and is therefore unevidenced under this vault's own rule. It is a candidate to verify, not a fact to publish. The provision that ships is whichever one the retrieved bytes actually carry, and if the section number differs the pack is wrong and the bytes are right.

Why an interval clause is the right choice. It creates a duty with a measurable trigger and a measurable deadline, which means step 6 can distinguish evidence tiers meaningfully instead of collapsing into "there is a policy document".


Step 4 — Obligation

Produces: one sg:Obligation. The first node that is entirely our judgement, and the graph must say so.

FieldContent
RequiresA determination on whether the request seeks disclosable records
Of whomThe agency named at step 1
WithinThe interval the provision states
Triggered byReceipt of a request
Derived fromThe akn:Provision at step 3, by sg:creates

The honest label lives on this node, not in a footnote at the bottom of a page. Everything from here down is our model applied to their data. That is acceptance test 5, and it is the thing a partner checks first.


Step 5 — Control

Produces: one sg:Control.

What would satisfy the obligation: a logged intake with a timestamp, a determination recorded against it, and a clock that can be measured. Descriptive, not prescriptive. The vault says what would satisfy the duty; it does not tell a county what to buy.


Step 6 — Evidence

Produces: one sg:Evidence node, whose state is unevidenced unless something was actually observed.

TierWhat it would mean here
unevidencedThe default, and the honest state for this example unless a real observation exists
assertedThe agency says it responds in time
documentedThere is a published policy
manually-checkedSomeone read a sample of responses
programmatic-out-of-bandA system that is not in the path measured the interval
programmatic-inlineSomething in the request path measured it

Two disciplines apply and both are load-bearing.

The first: this estate can evidence any rung and can never be the inline control that makes the last rung true. An out-of-band party establishes whether an enforcer exists, at what tier, and with what left unobserved. It is not the enforcer.

The second: the grand jury corpus is an evidence source already structured for this. Findings and recommendations arrive as objects with a number, the text and a page number — provenance to the page, which is stronger than most compliance tooling manages. A Santa Barbara County grand jury finding about records handling would attach here at documented or manually-checked, under the evidence-pack rule of 9 August: a pack attaches, adds nodes and edges, and never alters what it attaches to.

Note the constraint. /cgj/reports/{id}.json is key-gated at 50/day. The county index is open and unlimited. See 06__verification.md↗ for the access status, which is currently unresolved.


Step 7 — Acceptance

Produces: one sg:Acceptance, carried in the vault and versioned.

FieldWhy it is mandatory
A named ownerAn acceptance without a name is a note
An intervalAn acceptance without an expiry is a permanent decision taken casually
A revocation pathAn acceptance nobody can withdraw is not a decision
The residual it acceptsStated as the gap between the control and the obligation
The commit it was made atBecause the acceptance is only meaningful against a stated version of the facts

This is the node that only a vault can carry properly, and it is the reason the demonstration is a vault rather than a slide. It is versioned, it is addressable by release, and the state of the world it was made against is pinned to a commit rather than remembered.


The Two Properties That Must Hold Visibly

They are the argument. They are not decoration.

One — every node traces to bytes somebody else published, with the retrieval date. Not "sourced from UnGovr". A URL, a timestamp, a method, a byte range, a hash.

Two — the whole path is deterministic. Given the entity slug and the instrument, the same nodes come back, because the addressing is by content hash rather than by position in a list that may be reordered. That is acceptance test 7, and it is the reason to build any of this.

And the determinism claim has a stated limit, which belongs in the vault rather than in a defence of it: it holds only while both address schemes are stable. Theirs is a slug they maintain; ours is a hash of bytes. If they re-slug, the join breaks loudly, which is the correct failure mode.


What Ships At The End Of This

ArtefactForm
The seven nodes above, with their edgesA graph the viewer opens
Three retrieved JSON files, unmodified, with hashesThe bytes, checkable
The instrument's provisions, addressableReusable beyond this example
A page stating the path in prose, with every number beside its queryBecause a number without its query is an assertion
A release pinning the whole thing to a dateSo it can be cited

One county. One law. One acceptance. And a refusal to widen it.


This document is released under the Creative Commons Attribution 4.0 International licence (CC BY 4.0).