Skip to contentScreenplay.Company

Conformance, diagnostics and adoption gates

1. Capability levels

These are independent capabilities, not a hierarchy requiring every department to install everything.

CapabilityMinimum promise
Preservation readerRetain exact decoded content and unknown values; open unsupported content safely with diagnostics
SSL core reader/writerStructural syntax/identity/value/namespace rules; lossless semantic round-trip and partial coverage
Definition-aware readerPinned optional definitions, advisory checks, generic fallback and explicit refinement
SSL-Q 0.1Exact supported query operators/functions, typed unknown results, access filtering, reproducible snapshot computation
SSL-P 0.1Atomic admitted operations, exact authority/digest binding, conflicts, original receipt recovery and durable restart
Story/film profileScoped claims, ordered edition expansion, exact screenplay expression and draft/choice distinctions
Production values/profileComparable clocks, exact rates/units, lifecycle identities, profile-specific readiness
Format adapterNamed format/version, tested mappings, original payload preservation and explicit loss report

An implementation advertises exact capabilities and limits. It cannot claim SSL-P by storing arbitrary change envelopes without executing its guarantees. Support for an unknown record kind means preservation/query support, not understanding its meaning. No conformance level certifies story quality or industry adoption.

2. Diagnostic contract

A diagnostic has code, severity, message, optional record:ExactRef, path (field path), sourceRange and related:ExactRef[]. Severity: info, warning, error. An error concerns a named requested operation or invalid structural unit; it need not prevent opening the whole package. Diagnostics remain separate from authored text.

CodeExpected scope/effect
invalid-json / duplicate-key / invalid-unicode / invalid-numberRetain raw input; parsed core conformance unavailable until repaired
invalid-envelope / invalid-reference / duplicate-revisionStructural error; no authoritative import of affected package
missing-namespaceStructural term identity unresolved; preserve package, offer binding repair
unknown-kind / unknown-fieldOptional information only; storage and generic query allowed
unknown-tag / unsupported-capabilityPreserve; only dependent interpretation/effect unsupported
dangling-referenceComplete-scope finding; no fabricated target, unrelated content remains usable
unavailable-referencePartial/access-filtered state; reveal no private existence information
definition-mismatch / conflicting-definitionAdvisory unless explicitly selected operation depends on it
stale-evidence / ambiguous-anchorKeep exact old reference; do not retarget or rewrite automatically
conflict / operation-id-reusedReject entire proposed atomic write, preserve draft
unsupported-atomic-scopeCurrent owner cannot atomically apply the requested batch
incomplete-query / limit-exceeded / type-error / overflowExplicit incomplete/failed calculation; no complete claim
duplicate-occurrence / unresolved-draft / missing-assetProfile readiness finding; work remains readable
lossy-exportExact omissions/conversions reported; cannot claim complete round-trip

A consumer cannot collapse unknown, unsupported or conflict to false/empty/success. Strictness protects a specific promise: syntactic identity, precision, writer authority, transactional effects or delivery fidelity. Creative discovery remains permissive.

3. Normative behavioural vectors

Each row states an input situation and required observable result. These are the acceptance contract for implementations. The implementation map links them to executable suites; the verification record records actual results and remaining release qualification.

IDInputRequired result
C01Minimal work with one unclassified fragmentSave/read/query without mandatory story fields
C02Undeclared local.futureConcept kind with local namespace boundPreserve and generic render; no compilation block
C03New optional field unknown to older readerSurvives read/write including nested values
C04Existing record later bound to definition with missing recommended propertyBinding succeeds with advisory finding; no content coerced
C05Incompatible new definition revisionOld uses retain old pin; explicit migration/new term required
C06Duplicate JSON key / lone surrogate / unsafe integer / malformed known refStructural diagnostic; raw preservation; no silent repair
C07CRLF, Telugu, combining character, emoji, quote and backslash in expressionExact decoded scalar sequence preserved after JSON round-trip
C08Text anchor offsets match scalar length but wrong quoteAnchor finding; no evidence attestation
C09Two same-named characters; rename oneStable IDs; exact dialogue never auto-renamed
C10Accepted portrayal of a false character beliefChoice stays distinct from world truth; context/perspective retained
C11Unapproved draft suggests a character traitAttributed reading about that draft, no automatic canon
C12Flashback / repeated event / alternative endingEvent identity stable; presentation occurrences distinct; context explicit
C13Complete vs partial export missing sourceDangling vs unavailable; neither implies delete or false
C14Two differently filtered packages from one snapshotSame base snapshot allowed; different projection digests
C15Edition references beat with two occurrencesExpand in array order; direct duplicate occurrence produces finding
C16Export root exact ref with live children; children later changeFrozen export reproduces recorded exact closure, not later heads
C17Delete then alias then restoreOld refs stable; restore only same identity from prior non-tombstone
C18Unknown custom tag used only as opaque dataRetain; raw query works; dependent unsupported calculation reports it
Q01Query draft-scenes fixtureExact rows in accompanying expected file, complete under fixture scope
Q02Known false AND unknown; true OR unknownfalse; true respectively
Q03Missing/null/false/empty array/unknownDistinct inspectable values/states
Q04Unknown numeric cost within sumUnknown total, optional labelled known subtotal; no false complete amount
Q05Empty count/sum/min0 / integer 0 / missing respectively
Q06Filter depends on missing valueExcluded unresolved row and incomplete result
Q07Graph cycle and maxDepth boundaryTerminate; visited revisions once; depth exclusion marks truncated
Q08Private node referenced from visible materialFilter before resolve/count; no private title/existence leakage
Q09New scene added after cached countSnapshot/collection dependency invalidates cache
Q10Mixed currency/unit/unsupported functionExplicit error/unsupported, no implicit conversion
Q11Equal string values, different record orderDeterministic root/sort/tie semantics; bytes never locale-dependent
Q12Parameter text contains SQL/JS/tool instructionsLiteral data, no execution
P01Same operation ID + same body after lost responseOriginal durable result, no second effect
P02Same operation ID + different bodyoperation-id-reused
P03Two agents revise head 3One commit; other conflict, draft preserved
P04Two absence-based booking proposals create disjoint recordsrequireCurrentSnapshot makes second stale proposal conflict
P05Proposal approval then changed payload/baseReject mismatched attestation; no silent rebase
P06Batch includes invalid/unauthorised second changeNothing applied
P07JSON claims writer/approvedNo authority granted by the content
P08Unknown effect with known dataReject dependent operation; readable story retained
P09Offline account switch/restartQueue retains original work/account, no cross-account submission
P10Undo after intervening editCompensating proposal or explicit conflict; no erased newer work
P11Create definition + bind existing record in same batchStaged refs resolve; atomic receipt; original fields unchanged
P12Existing namespace rebound to different URIConflict; no reinterpretation of stored terms
L01Same person as character and performerSeparate identities linked by casting
L02Story location vs filming venue vs media clockSeparate entities; no silent equivalence
L03120 frames at 24000/1001Exactly 1001/200 seconds; no float drift
L04Different rates or clocksExplicit conversion/sync or unknown; no direct frame-number comparison
L05Missing media in valid editorial planMetadata read/query succeeds; final render readiness fails
L06Unknown VFX/effect extension through unsupported adapterPreserve sidecar/original and report loss; no claimed rendered fidelity
L07Proxy/transcode replaces originalSeparate asset identity/digest and lineage; source preserved
L08Call sheet generated but not sentNo distribution receipt claimed
L09Production rights status field says cleared without evidenceUnverified assertion; no legal/host permission inferred
L10Drop-frame label boundary / midnight / speed rampSupported exact conversion tested, day offset explicit, unknown ramp preserved
L1130000/1001 indexes 1799, 1800, 17982Labels 00:00:59;29, 00:01:00;02, 00:10:00;00; reject 00:01:00;00 and ;01
L1260000/1001 indexes 3600, 35964Labels 00:01:00;04 and 00:10:00;00

4. Supplied fixtures and checks

examples/minimal.story.json shows the smallest useful fragment. examples/lifecycle.story.json follows synthetic story material through a breakdown, shot, take, clip and delivery description, with an undefined custom kind and a pinned local definition. All media is deliberately unavailable. It is a representation fixture, not a rendered film or approved story.

examples/formalise.proposal.json shows defining a term and binding an existing record without rewriting it. examples/draft-scenes.query.json and its expected result specify a deterministic query example.

verify_examples.py is a limited specification-fixture checker, not an SSL implementation. It checks JSON lexical restrictions, core envelope/IDs/refs/heads, terms, known tags, dynamic-kind round-trip, exact expression preservation and selected negative structural vectors. It does not execute SSL-Q, SSL-P, profile readiness, authentication, receipt persistence or media conversions. A passing report must retain this distinction.

Run from repository root:

python3 docs/design/story-source-language/verify_examples.py
pnpm project:render
pnpm project:check

The independent review records specification issues and their disposition. Production verification begins with the gates below.

5. Implementation and migration gates

  1. Core: two independent reader/writer implementations exchange the corpus, including unknown extension values, malformed input recovery, Unicode and byte assets. Establish minimum limits and diagnostics.
  2. Queries: execute Q vectors and differential tests across implementations; measure large snapshots/joins/traversals, permission filtering, exact arithmetic and cache invalidation.
  3. Protocol: persistent transaction/receipt tests under process termination, delayed replies, retries, concurrent writes, partial permissions, account switching, no-save and Undo. Mock only external boundaries; use real persistence.
  4. Current Studio adapter: qualify the owning source mappings in migration.md; preserve exact text, decisions, alternatives, source anchors and separate revision clocks. Reconcile every mismatch before a per-work cutover.
  5. Reading/editing: visually inspect exact expressions and original positions through edits; verify keyboard, voice and installed restart journeys on the exact candidate when UI/runtime changes exist.
  6. Lifecycle exchange: one real planning→shoot→edit→delivery pilot, with originating tool owners checking semantic mapping and every lossy field. Verify rational time, offsets, audio sync, nested edits and actual media.
  7. Public 1.0: independent adoption evidence, stable namespace and licence governance, versioned registries, reproducible conformance suite, security review, documented limits and backwards compatibility policy.

No migration follows merely from this document passing a Markdown/fixture check. The reviewed design now has the runtime and desktop consumer described in implementation; installed qualification and live migration remain separate from source verification. Future failures refine the specification and its profiles without forcing abandonment of existing creative material.