Living Map v0.1

NSW Sexual Violence Service System

living map · v0.1 inception illustrative data
Viewing as
Mockup.Every figure, service and area on this page is invented to show the shape of the tool. No real service, place or person is depicted. One record set sits behind every view; the audience switch above changes what is shown, by rule on each record's tier, never by editing the record. The Reasoning tab shows real output from the Spindle engine run over an illustrative theory.

Rows follow the continuum named in the Statement of Requirements, early intervention through to recovery and healing. Primary prevention sits outside the map by scope; its crossings into early intervention are recorded in Pathways.

Adjacent systems (health, justice, housing, child protection, education) are mapped as far as the adjacent service and named beyond that. Click an arrow to read the crossing record.

How a finding earns its place

The record does not just store findings. It derives them. Sources make claims with a trust weight; the published method is a set of rules; the engine works out what follows, which claims defeat which, and how much each conclusion can be trusted. Every output below is real: the Spindle defeasible-reasoning engine (version 0.6.0) run over an 86-line illustrative theory of one area, one service and three findings. The same four questions can be asked of every entry on the map: why, why not, what would change it, and how far do we trust it.

ConclusionTrustRests onReading
(gap cell-10-11 recovery)0.95ABS ASGS · methodFinding stands. Clears both thresholds.
(gap cell-14-03 recovery)not provablepipelineBlocked: area not yet collected. Unknown, not none.
(not (service svc-0171))0.85co-design round 1 · methodDesk listing defeated: the service closed.
(finding-f07 svc-0142)0.14agency return · methodStands, but diminished by the agency's response. Below the finding threshold, so it cannot enter the report unchallenged.
(may (release svc-0142 sector))0.85agency return · co-design · methodPermitted: a response is on file. Before that, forbidden.
(dead-end hsb-regional)0.85co-design round 1 · methodNo onward destination recorded. Finding.

Trust is the weakest link in each derivation chain. Marks on each bar: the finding threshold (0.70) and the report threshold (0.80), both set with DCJ at inception.

Absence is a finding, unless shown otherwise. And unknown is not none.

Two areas with no recovery service in the record. One has been collected, one has not. The method presumes a gap wherever coverage cannot be shown, and a separate rule blocks that presumption, without asserting coverage, where nothing has been collected yet.

$ spindle explain '(gap cell-10-11 recovery)'
Explanation for +d (gap cell-10-11 recovery)
This was proven using defeasible rules and was not
defeated by any conflicting rule.

Derivation:
  1. "(gap cell-10-11 recovery)" was derived defeasibly
     Using defeasible rule: presume-gap
     Prerequisites:
       1. "(area cell-10-11)" was established as a fact
          Using fact: f19
$ spindle why-not '(gap cell-14-03 recovery)'
(gap cell-14-03 recovery) is not provable:
  Would be derived by rule: presume-gap
  Blocked by:
    - Rule presume-gap: defeated
      (Defeated by rule unknown-is-not-none)
What a DCJ reader seesCell 10-11 is red on the map with finding F-02 attached. Cell 14-03 is hatched, with no finding, and a line in the sources page saying which door its return comes through.

A later, better source defeats an earlier one, and the earlier one is kept.

A web directory listed a recovery service in cell 10-11. The first co-design round learned it closed. The desk claim is not deleted. It is outranked, and the gap finding survives because the only thing that could have covered the area is no longer a service.

$ spindle why-not '(in-reach cell-10-11 recovery)'
(in-reach cell-10-11 recovery) is not provable:
  Would be derived by rule: reach-catchment
  Blocked by:
    - Rule reach-catchment: missing premise
      (Missing premises: (service svc-0171))
$ spindle explain '(not (service svc-0171))'
Explanation for +d (not (service svc-0171))

Derivation:
  1. "(not (service svc-0171))" was derived defeasibly
     Using defeasible rule: closed-wins
     Prerequisites:
       1. "(closed svc-0171)" was established as a fact
          Using fact: f13
What a DCJ reader seesThe record for svc-0171 shows status closed, the desk listing it came from at trust 0.40, and the co-design record that superseded it at 0.85. Both hashed, both kept.

A finding with a right of response attached is kept, and its trust falls.

Wait-list 38 against 3.2 funded FTE triggers finding F-07. The agency's response (a vacancy has been filled) is a defeater that is outranked by the finding rule, so the finding stands, but the engine records the challenge as a diminishment: trust falls from 0.90 to 0.14, below the finding threshold. The report cannot carry it without the response beside it.

$ spindle reason --trust  (excerpt)
(finding-f07 svc-0142) (trust: 0.14)
    [source:agency-return-westvale, source:method]
(response svc-0142 vacancy-filled) (trust: 0.85)
    [source:codesign-round-1]
$ spindle reason --json --trust  (excerpt)
"trust_details": {
  "above_threshold": { "finding": false, "report": false },
  "diminished_by": [{
    "defeater_label": "agency-response",
    "defeater_degree": 0.85,
    "target_degree": 0.9,
    "diminishment": 0.765,
    "full_defeat": false,
    "resulting_degree": 0.135 }] }
What a DCJ reader seesF-07 on the record page with the agency's words directly under it, a trust bar below the finding mark, and a note that the finding is contested. Nothing is softened, nothing is dropped.

Release is a permission the rules grant, not an edit someone makes.

A political-tier finding is forbidden from the sector tier until a response is on file. The modal rules say so, and the permission is derived the moment the response claim arrives. For any finding, the engine can also say what single fact would close it.

$ spindle explain '(may (release svc-0142 sector))'
Explanation for +d (may (release svc-0142 sector))

Derivation:
  1. "(may (release svc-0142 sector))" was derived defeasibly
     Using defeasible rule: release-with-response
     Prerequisites:
       1. "(finding-f07 svc-0142)" was derived defeasibly
          Using defeasible rule: f07
          Prerequisites:
            1. "(waitlist svc-0142 38)"  fact f9
            1. "(capacity-fte svc-0142 3.2)"  fact f8
       1. "(response svc-0142 vacancy-filled)" was established as a fact
          Using fact: f14
$ spindle what-if '(gap cell-10-11 recovery)' \
    --given '(in-reach cell-10-11 recovery)'
Not provable: (gap cell-10-11 recovery)
New conclusions: (in-reach cell-10-11 recovery),
                 (not (gap cell-10-11 recovery))

$ spindle requires '(not (gap cell-10-11 recovery))'
Verified requirements for (not (gap cell-10-11 recovery)):
  1. Add facts: {(in-reach cell-10-11 recovery)}
What a DCJ reader seesThe audience switch at the top of this page is these rules. And an agency correcting its own entry is told exactly which fact would close the finding against it.

Rules carry the sector's judgement, in the open.

Fortnightly outreach counts as counselling in reach but not as crisis response. That is a sector judgement written as one rule, published under CC BY, and arguable in a co-design round. If the sector disagrees, the rule changes and every area re-derives.

$ spindle why-not '(in-reach cell-10-11 crisis-response)'
(in-reach cell-10-11 crisis-response) is not provable:
  Would be derived by rule: reach-outreach
  Blocked by:
    - Rule reach-outreach: defeated
      (Defeated by rule outreach-too-thin)
; the rule, as published
(normally reach-outreach
  (and (service ?s) (outreach ?s ?a ?f) (stage ?s ?st))
  (in-reach ?a ?st))

; Fortnightly outreach does not count as crisis
; response in reach.
(except outreach-too-thin
  (outreach ?s ?a fortnightly)
  (not (in-reach ?a crisis-response)))
The whole theory, as run (living-map.spl, 86 lines)
; Living map: one area, one service, three findings. Illustrative theory.
; Sources carry trust. Conclusions carry the weakest link in their chain.

(trusts source:dcj-funded-list 0.80)
(trusts source:agency-return-westvale 0.90)
(trusts source:desk-note 0.40)
(trusts source:codesign-round-1 0.85)
(trusts source:abs-asgs 0.95)
(trusts source:pipeline 0.95)
(trusts source:method 1.00)
(threshold finding 0.70)
(threshold report 0.80)

; --- What the sources say ------------------------------------------------

(claims source:dcj-funded-list :at "2026-10-30T00:00:00Z" :note "DCJ extract, sha256 4b1e…9a07"
  (given (service svc-0142))
  (given (position svc-0142 core))
  (given (stage svc-0142 crisis-response))
  (given (stage svc-0142 counselling))
  (given (catchment svc-0142 cell-09-11))
  (given (catchment svc-0142 cell-09-12)))

(claims source:agency-return-westvale :at "2026-11-14T00:00:00Z" :note "Agency return, sha256 9f3a…c21e"
  (given (outreach svc-0142 cell-10-11 fortnightly))
  (given (capacity-fte svc-0142 3.2))
  (given (waitlist svc-0142 38)))

(claims source:desk-note :at "2026-11-02T00:00:00Z" :note "Web directory listing, undated"
  (given (listed svc-0171))
  (given (stage svc-0171 recovery))
  (given (catchment svc-0171 cell-10-11)))

(claims source:codesign-round-1 :at "2026-12-02T00:00:00Z" :note "Round 1 record, sha256 c77d…10bf"
  (given (closed svc-0171))
  (given (response svc-0142 vacancy-filled))
  (given (program hsb-metro))
  (given (onward hsb-metro recovery-cyp-metro))
  (given (program hsb-regional)))

(claims source:abs-asgs :at "2021-07-01T00:00:00Z" :note "ABS ASGS 2021, CC BY"
  (given (area cell-09-11))
  (given (area cell-10-11))
  (given (area cell-14-03)))

(claims source:pipeline :at "2026-11-20T00:00:00Z" :note "Derived: no return on file for this area"
  (given (not-collected cell-14-03)))

; --- Rules ------------------------------------------------------------------
(claims source:method :note "Published method, CC BY. Rules are the method; facts come from sources."

; A listed service is normally a service, unless a later source says it closed.
  (normally desk-listing (listed ?s) (service ?s))
  (normally closed-wins (closed ?s) (not (service ?s)))

; Reach: a service covers its catchment, and normally its outreach areas too.
  (normally reach-catchment (and (service ?s) (catchment ?s ?a) (stage ?s ?st)) (in-reach ?a ?st))
  (normally reach-outreach  (and (service ?s) (outreach ?s ?a ?f) (stage ?s ?st)) (in-reach ?a ?st))
; Fortnightly outreach does not count as crisis response in reach.
  (except outreach-too-thin (outreach ?s ?a fortnightly) (not (in-reach ?a crisis-response)))

; Gap: absence is presumed a finding, unless coverage is shown.
; An uncollected area blocks the finding without asserting coverage: unknown is not none.
  (normally presume-gap (area ?a) (gap ?a recovery))
  (normally covered (in-reach ?a recovery) (not (gap ?a recovery)))
  (except unknown-is-not-none (not-collected ?a) (not (gap ?a recovery)))

; F-07: wait-list more than eight times funded FTE is a demand finding.
  (normally f07 (and (waitlist ?s ?w) (capacity-fte ?s ?c) (bind ?ratio (/ ?w ?c)) (> ?ratio 8)) (finding-f07 ?s))
; The agency's response challenges it. The finding stands, with its trust reduced.
  (except agency-response (response ?s vacancy-filled) (not (finding-f07 ?s)))

; Political tier: a finding may not go to the sector tier until a response is on file.
  (normally hold-finding (finding-f07 ?s) (forbidden (release ?s sector)))
  (normally release-with-response (and (finding-f07 ?s) (response ?s _)) (may (release ?s sector)))

; Pathways: a program is presumed a dead-end until an onward destination is recorded.
  (normally presume-dead-end (program ?p) (dead-end ?p))
  (normally has-onward (onward ?p ?q) (not (dead-end ?p))))

; Preferences are global
(prefer closed-wins desk-listing)
(prefer covered presume-gap)
(prefer f07 agency-response)
(prefer release-with-response hold-finding)
(prefer has-onward presume-dead-end)

Change log

WhenWhat changedOn whose authorityOn what evidence

Every entry is a commit against the record. Nothing is deleted; a revised finding keeps its history. The final report is a dated view over this log and says so on its cover.

Sources page

Every external layer carries its licence, vintage and limitation, read from the publisher's metadata by the pipeline where it has an API. Absences are listed too, with the door the data comes through instead.

SourcePublisherLicenceVintageUsed forLimitation
ResolutionService by service, place by place, cohort by cohort. Unknown kept distinct from none. Map, Matrix.
Versioned, not publishedEvery change recorded: what, when, whose authority, what evidence. History.
SourcedEvery entry links to its evidence; originals retained and hashed. Record, Sources.
Responded toAgencies see and correct their own entries; right of response travels with each finding. Record, Reasoning, audience switch.