Skip to content

Source Kit 0.1.2 - #73

Merged
noah-pi merged 5 commits into
mainfrom
claude/source-kit-open-source-launch-w4030i
Sep 13, 2026
Merged

noah-pi merged 5 commits into
mainfrom
claude/source-kit-open-source-launch-w4030i

Conversation

@noah-pi

@noah-pi noah-pi commented Aug 28, 2026 •

Copy link
Copy Markdown
Owner

What this brings

The open tree matches the 0.26 app, minus the pieces that stay closed.

Code

  • The two detail screens read every file through one grammar: five questions, one answer each, one word naming who vouches (src/components/detail/). A file another signer sealed is read the same way (src/reader/foreign.ts), with its chain checked against a pinned list of public signers (src/lib/signerTrustList.ts).
  • Identity is two rows on one screen: a website, or a certificate from an authority or an organization (app/identity/certificate.tsx). The old organization and verified screens are removed.
  • Each capture carries a fresh App Attest assertion over its own digest, checked against either of the build's two app ids. AppAttestModule.generateAssertion takes the key id from the caller.
  • Newsroom rosters are not installed on the device: rosterStore.ts, seal.ts, the desk handoff in the export sheet, and the dead ladder card are gone, with the custom TSA, OTS calendar, and beacon endpoint fields that had no screen.
  • Settings: Face ID on every seal is back under Device key; the soak check lives under Diagnostics; Save to Photos says what it does.
  • Inspect: the verdict card above the picture is gone, and the FAQ answers follow the label's rules.
  • The exhibit page's weather row waits for a tap. The picture-in-picture inset sits at the top stack's edge.
  • Version 0.26.0.

Lab

  • tests/test-verification.mts gains the foreign-manifest, capture-assertion, and label blocks. The label grammar and the foreign reader are staged as shipped, with a type-only shim for the screen state shapes.
  • The Shamir checks move to tests/test-shamir.mts; the desk-seal suite goes with the module it tested.
  • 33 suites pass, the staged strict typecheck and the app typecheck are clean, knip finds no unused files, and the dependency budget holds.

Docs

  • SETTINGS.md rewritten from the screen, in screen order.
  • NETWORK.md lists all eleven calls, with the website file, the organization file, and the IPTC anchor list, and says attestation runs locally.
  • THREAT-MODEL.md places the signature for five designs, retires the roster scenarios, and restates malleability, timestamp authorities, replay, and what a de-identified copy carries.
  • INTEGRITY.md documents the parallax measurement and the dual-camera depth map as shipped.
  • IDENTITY.md, ARCHITECTURE.md, PROVENANCE.md, BUILDING.md, and SECURITY.md follow the code.
  • LABEL.md is new.

README and site

  • The September 13 note on Apple's Reference Mode, in the site header.
  • The pipeline figure places the iPhone 18 Pro at the sensor, Leica in camera firmware, and the Pixel 10 with Source Kit after the hand-off, with the caption and the photons paragraph to match.
  • The identity words, the six optional calls, the Apple network sentence, the fork sentence, the Limits bullets, and one entry proposed under Things I have not built yet.
  • The Face check row leaves the signals table.

Not in this PR

  • Screenshots are not retaken, so the Inspect and label slide alts and captions still describe the old shots.
  • No Pixel, Leica, or Photoshop fixtures were added to the foreign corpus. The label suite covers those shapes synthetically, and PROVENANCE.md says so.

🤖 Generated with Claude Code

https://claude.ai/code/session_01P3RisvkEsx2cgseTRMmUdB

claude added 4 commits August 28, 2026 15:02
Signer Information becomes three peer credentials, and the typed byline is
gone. A name a user simply typed is not something a verifier can check, so
there is nowhere left to type one.

Website (new, sourcekit-site/1): publish one file at
/.well-known/sourcekit-site.json listing the phones allowed to sign as you.
No certificate authority, no account, and no DNS record — the file rests on
the certificate already on the website. It is a separate type from
OrgCredential rather than a flag on it, so the weaker claim cannot be
mistaken for the stronger one at any call site.

Verified Identity (new): the app builds a PKCS#10 certification request and
signs it with the Enclave key, which is how the request proves it controls
the key it names. Trust is evaluated against anchor lists the device holds
and reported as trusted or self-asserted, never assumed. The pinned list
ships empty and is filled from the published list at runtime; no fingerprint
is written by hand.

Organization Credential moves to its own screen with the key-sharing half
it always needed.

The x5chain now follows the identity mode. Anonymous signs with the bare
device certificate: shipping the org chain named an organization the capture
had promised to leave out.

Settings keeps three rows and one line. Everything a row used to explain
lives behind the tap.

Tests: the certification request is verified by OpenSSL, issued against by a
test CA, and the issued certificate is walked back through the install path,
including the key-mismatch and missing-purpose refusals. The site document
round-trips and every way it can disagree with itself is rejected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P3RisvkEsx2cgseTRMmUdB
The record named the raw LPCM master, the sensor log and the ring buffer
by path. A path says where a file was and nothing about what it held, so a
swapped master or a rewritten sensor log left every signature valid. The
evidence a desk reaches for first was the evidence nothing bound.

Each sink now carries a digest taken before the record is signed:

  file sink       SHA-256 over the bytes.
  directory sink  SHA-256 over the listing — each frame's own digest beside
                  its name, sorted by name, hashed together. The sort is
                  what makes it reproducible; readDirectoryAsync promises
                  no order.

The three states survive. A sink that reports 'never-recorded' has no
digest by construction, a sink whose file cannot be read yields null, and
a reader that finds no digest says the sidecar is uncommitted rather than
assuming a match. Records sealed before this change carry none, so the
fields are optional and their absence is reported as absence.

The raw audio card recomputes the file hash it already reads and states
one of the three outcomes against the sealed value.

Also removes a doc comment in the store describing a weather opt-in
setting that does not exist: the archive lookup is gated by the tap on
"Check the archive" and by nothing else.

Lab: 32/32 suites, including a new evidence-digest suite that checks the
file digest against node crypto, the directory digest for order
independence and content sensitivity, and every absence path.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P3RisvkEsx2cgseTRMmUdB
Anonymous, personal and organization, what credential each one rests on,
and who vouches for it: a certificate authority, a domain over TLS, or an
organization's own CA. States the recognition rule under the CAWG interim
trust model, and why an unrecognized issuer reads as self-asserted rather
than as a failure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P3RisvkEsx2cgseTRMmUdB
The credentials section named only the organization route and claimed it
was the only thing that can attach a name to a key. A personal certificate
and a website credential both do, on different evidence: an authority that
checked a person, and a domain that published a key over TLS. Each is now
described with what it rests on and what it does not carry.

The raw audio paragraph promised the master's hash was signed into the
record, in a clause that ran on from the resampling sentence. That is now
true of all three sidecars, and the sentence says which and how, including
what a reader does when it finds no hash.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P3RisvkEsx2cgseTRMmUdB
@noah-pi noah-pi changed the title Signer identity, and the evidence sidecars bound by hash Source Kit 0.26: the label, foreign manifests, and the docs that describe it Sep 13, 2026
@noah-pi
noah-pi force-pushed the claude/source-kit-open-source-launch-w4030i branch 2 times, most recently from c6f6cf1 to 8f52314 Compare September 13, 2026 17:00
The two detail screens read every file through one grammar: five questions,
one answer each, one word naming who vouches. A file another signer sealed
is read the same way, with its chain checked against a pinned list of
public signers. Identity is two rows on one screen, a website or a
certificate, and the words a reader sees are Domain verified, Certified,
Verified, Certificate, Not provided, and Redacted. Each capture carries a
fresh App Attest assertion over its own digest, checked against either of
the build's two app ids.

Newsroom rosters are not installed on the device, so the roster store, the
desk seal, and the two identity screens they served are gone, with the
custom endpoint fields that had no screen. The Face ID signing switch is
back under Device key. The soak check lives under Diagnostics.

The lab stages the label grammar and the foreign reader and checks them:
the foreign, capture-assertion, and label blocks join the verification
suite, and the Shamir checks keep their own suite. 33 suites, both
typechecks, knip, and the dependency budget pass.

The docs describe this app. SETTINGS.md is rewritten from the screen.
NETWORK.md lists all eleven calls. THREAT-MODEL.md places the signature for
five designs, retires the roster scenarios, and states what a de-identified
copy carries. INTEGRITY.md documents the parallax measurement and the
dual-camera depth map as shipped. IDENTITY.md, ARCHITECTURE.md, and
PROVENANCE.md follow the code. LABEL.md is new.

The README and the site carry the September 13 note on Apple's Reference
Mode, place the iPhone 18 Pro at the sensor in the pipeline figure, and
name the six optional calls.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P3RisvkEsx2cgseTRMmUdB
@noah-pi
noah-pi force-pushed the claude/source-kit-open-source-launch-w4030i branch from 8f52314 to 8cb5f89 Compare September 13, 2026 17:04
@noah-pi noah-pi changed the title Source Kit 0.26: the label, foreign manifests, and the docs that describe it Source Kit 0.1.2: the label, foreign manifests, and the docs that describe it Sep 13, 2026
@noah-pi noah-pi changed the title Source Kit 0.1.2: the label, foreign manifests, and the docs that describe it Source Kit 0.1.2 Sep 13, 2026
@noah-pi
noah-pi merged commit 3f79afb into main Sep 13, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants