Proof Portal

Projects

jsonparser

ProbeLabs23 findings · 123 requirements
Showing the current git stateNo audit has been synced for this project yet — verification results (proof status, coverage, solver signals) appear once an audit is published.proof-demod79405e
All requirements
RequirementSYS-REQ-002SystemApproved

When GetString addresses a JSON string value whose raw token is well formed, the parser shall return the corresponding decoded Go string value.

All automated checks pass and 3/3 obligations are satisfied. Reviewed last month.
PriorityshallTypeguaranteeCategoryfunctionalComponentparserAssuranceEFindingsnone open

Specification

The requirement exactly as authored — its complete prose text and, where present, the formal FRETish sentence it compiles to.

Description

When GetString addresses a JSON string value whose raw token is well formed, the parser shall return the corresponding decoded Go string value.

FRETish formula
the parser shall always satisfy !addressed_value_is_string | !raw_string_token_is_well_formed | returns_getstring_decoded_value
View full formal model

Rationale & tags

Why this requirement exists, and how it is categorised.

GetString is the documented safe string helper and is expected to handle escaped and Unicode content correctly.

Verification & provenance

How this requirement was checked: the review trail, edit history, and the machine-analysis status terms (each ⓘ explains what it means).

Assurance levelE
Formalizationvalid
Strategyfretish

Review

Status
approved
Reviewer
Buger · lead_engineer
Reviewed
Aug 20, 2026, 13:11 UTC
Spec-conformance reviewed (agent:claude:spec-conformance); approved on owner authorization.

History

Created
Apr 13, 2026, 17:10 UTC · Created via CLI
Modified
Aug 20, 2026, 13:11 UTC · Buger

Change history

Every recorded revision of this requirement's source file — newest first, each with its commit message and the diff for that change.

Review history

Human and AI-agent approvals of this requirement — the 'why was this approved' lineage, each with the reviewer's justification and the code it cites.

  1. Claude:spec Conformance · AI agentApprovedSpec conformanceAug 20, 2026 · last monthREVIEW-8

    The formula !addressed_value_is_string | !raw_string_token_is_well_formed | returns_getstring_decoded_value is met by GetString: it addresses the value via Get and rejects non-String types (returns NullValueError / 'Value is not a string' error, never a decoded value), grounding the !addressed_value_is_string guard. For a well-formed String token it returns the decoded value — raw bytes directly when no backslash is present (bytes.IndexByte(v,'\\')==-1) and otherwise ParseString(v), which Unescapes; a malformed escape makes ParseString return MalformedValueError, satisfying the !well_formed disjunct. TestGetString and the round-trip witness TestSetStringRoundTrip ('你好 🌍') confirm correct decoding.

    Cited code (4)

Obligations

What this requirement must witness to be considered satisfied — the required evidence, and the tests that discharge each one.

3 obligations · 3 discharged

Browse the catalogue
Discharged

Output identical regardless of collection ordering or runtime conditions.

If it were violatedMedium

GetString returns a different decoded string across calls on identical well-formed input, corrupting cache keys or byte-equality assumptions at the call site.

Discharging evidence1/1 required witnessed
  • nominalrequiredpresent
    Covered by 1 test
Discharged

Behavior for unusual but valid input combinations.

If it were violatedLow

GetString on a 1-char escaped body like an empty quoted string returns an out-of-range slice or wrong length, corrupting downstream string math at the caller.

Discharging evidence1/1 required witnessed
  • nominalrequiredpresent
    Covered by 1 test
Discharged

Behavior specified for encoding and decoding round-trips.

If it were violatedHigh

GetString on a body containing invalid UTF-8 (e.g. a lone surrogate like \uDDDD) returns a Go string with invalid runes; the caller re-serializes it as invalid JSON or panics in encoding-aware downstream.

Discharging evidence1/1 required witnessed
  • nominalrequiredpresent
    Covered by 1 test

Formula evidence

The formal formula behind this requirement, the variables it is written over, and the tests that exercise it (each term is explained inline).

FRETish formula

the parser shall always satisfy !addressed_value_is_string | !raw_string_token_is_well_formed | returns_getstring_decoded_value

Variables

NameTypeDirectionDescription
addressed_value_is_stringTrue when the addressed successful lookup value is a JSON string token.
raw_string_token_is_well_formedTrue when the addressed raw JSON string token is well formed and can be decoded.
returns_getstring_decoded_valueTrue when GetString returns the addressed value as a decoded Go string.

Witnesses· 4 scenarios total

  • TestMCDC_SYS_REQ_002_Row1_TriggerFalse
    exercises 1 condition scenario
  • TestGetString
    exercises 3 condition scenarios

MC/DC truth table· 4 rows

Each row assigns the formula's conditions (T/F) and shows the Result— the formula's value for that input row, not a test pass/fail. A row proves a condition when flipping only that condition flips the outcome. The test that covers each row is linked.

Covereda test exercises this rowExempteda reviewed mcdc:ignoreNo-actionfalse-result row satisfied by designUncoveredneeds a covering test
#addressed_value_is_stringraw_string_token_is_well_formedreturns_getstring_decoded_valueResultProvesCovering test
1FTFTaddressed_value_is_string
2TFFTraw_string_token_is_well_formed
3TTFFaddressed_value_is_string
4TTTTreturns_getstring_decoded_value

Its place

How this requirement connects — what proves it, what it affects, and what it rests on. Authored links only here; automatically derived links come from the audit index.

Loading graph…

Trace evidence

The concrete artifacts linked to this requirement — implementing code, verifying tests, documents, and the findings raised against it.

Impact

Blast radius — authored trace links only (automatically derived links come from the audit index and aren't shown here).

If you change this

Requirements
0
Files
2
Tests
7
At-risk contracts
0

Files to re-check (2)

  • fuzz.gofuzz.go
  • parser.goparser.go

Tests to re-run (7)

  • escape_test.goescape_test.go
  • fuzz_native_test.gofuzz_native_test.go
  • mcdc_spec_witnesses_test.gomcdc_spec_witnesses_test.go
  • mcdc_supplement_test.gomcdc_supplement_test.go
  • obligation_evidence_test.goobligation_evidence_test.go
  • parser_test.goparser_test.go
  • property_test.goproperty_test.go

What this rests on

Discussions

Discuss this with the proof team. Nothing changes in your audit automatically — you open a request and a staff member records any outcome inside the thread.

Sign in to discuss this with the proof team.Sign in