| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| semiotic-3.8.7.provenance.json | 2026-07-28 | 1.6 kB | |
| semiotic-3.8.7.sbom.cdx.json | 2026-07-28 | 90.8 kB | |
| semiotic-3.8.7.tgz | 2026-07-28 | 5.0 MB | |
| semiotic-3.8.7.tgz.sha512 | 2026-07-28 | 149 Bytes | |
| README.md | 2026-07-28 | 22.5 kB | |
| Semiotic v3.8.7 source code.tar.gz | 2026-07-28 | 58.1 MB | |
| Semiotic v3.8.7 source code.zip | 2026-07-28 | 60.0 MB | |
| Totals: 7 Items | 123.2 MB | 1 | |
Changed
- A high-touch evaluation example makes the prove track inspectable.
/examples/the-benchmark-is-a-chart-tooturns the completed 516-request GPT-5.6 compatibility baseline and its 603-request repeated follow-up into an evidence-first reading room. It separates answerable questions from correct abstentions, preserves the first-attempt failure matrix and cost/latency context, documents the scorer audit, and shows where the revised grounding payload and generation contracts held across repeated trials. Targeted result scoring now reports only submitted fixtures while retaining the available corpus size and distinguishes missing submissions from pending or otherwise unscored rows. - The HRA/WPP typology pilot now runs on the real kidney ASCT+B v1.6
digital object. A pinned generator produces a checked-in, workshop-ready
artifact for the observed direct children of kidney, with ontology IDs kept
as semantic keys, provisional cell-type review signals kept separate from
measured counts, and a public
/interoperability/hra-wppwalkthrough. The actual data exposed the pilot's first failure case: distinct ontology concepts share labels, while mixing parent and descendant rows turns hierarchy into a misleading rank. A focused regression test pins both corrections. A public workshop bundle now adds the exact kidney fixture, a 30-minute review protocol, response schema/template, explicit extension-vs-context decision rubric, and written co-sign template. - MCP
3.8.6distribution is verified end to end. The officialio.github.nteract/semioticRegistry entry marks3.8.6latest, and stable Cloud Run revisionsemiotic-mcp-server-00071-2rwnow serves the exact release with commit/build identity. The production smoke passes health, initialize, public tools, resources/build-info, render evidence, and schema retrieval. Its initialize assertion is now channel-aware: stable requiressemioticplus the exact package version, while nightly retains the commit-qualifiedsemiotic-nightlycontract. - MCP Registry publication now follows every release instead of one pinned version. The reusable publisher derives the exact version from the checked-out package manifest, runs only after npm publication, and remains manually dispatchable for backfills. The local Registry gate now rejects a reintroduced literal version or a release workflow that stops calling the publisher. A source-controlled distribution inventory records canonical paths, stale secondary cards, and the distinction between Registry publication and assistant-vendor acceptance; the broken Smithery link and stale Glama badge are no longer promoted in the README.
- SSR/RSC and accessibility positioning now matches the shipped surface. README, SSR, and migration guidance consistently show non-streaming chart HOCs imported directly by a Next.js Server Component through Semiotic's client boundary; an app-owned wrapper is reserved for hooks, callbacks, browser state, or push-driven streaming. Accessibility language now states the EAA date and the infrastructure Semiotic supplies without claiming that a chart library certifies application-level legal compliance.
- Physics charts now consume and produce linked hover. The eight standard
physics HOCs already resolved named selection stores over
body.datum; theirStreamPhysicsFrame.onBodyHoverpath now publishes the source datum through the shared hover store and clears it on leave. Authored wrapper bodies such as Gauntlet cores are unwrapped throughsourceDatum, and frame-level hover callbacks still compose with the shared producer. Those eight charts now advertisesupportsLinkedHover: true;ChainReactionChart, whoseselectedTaskIDsis chart-specific, remains false. The capability gate recognizes the physics selection bridge so metadata cannot outrun behavior. - Accessibility audits now report the shipped texture surface accurately.
perceivable.color-aloneandflexible.textures-adjustablerecognize serializableHatchFilldescriptors authored throughstyleRules, without treating one rule as proof every category has a redundant cue. The remaining warning is precise: texture assignment is not yet automatic, theme-aware, or exposed as a reader-controlled toggle. PhysicsPileChart→UnitPileChart,PhysicalFlowChart→PacketFlowChart. Both leaked the substrate into the user-facing name — nothing else in Semiotic isSVGLineChart— and "Physical" told a reader nothing about the reading protocol. The new names carry it: values unitize into countable bodies, and discrete packets travel authored routes.PacketFlowChartalso gives the four flow names a rule: Packet = discrete items on routes, Process = stages with capacity,FlowMap= geographic,SankeyDiagram= static proportional. The old names stay exported indefinitely as deprecated aliases (same shape as the existingGuantletChartalias), and the pre-3.9.0 docs routes/charts/physics-pile-chartand/charts/physical-flow-chartstill resolve. Registries (schema, validation, capabilities, MCP, server configs) carry only the canonical name, sosuggestChartscan't recommend one chart under two names.PhysicsChartNames.test.tspins all of this.
Two names I did not change, correcting my own earlier claim:
ProcessFlowChart — "Process" names the domain being visualized, not the
substrate, exactly like FunnelChart; and PhysicsCustomChart — the four
custom-layout escape hatches are named by frame family (XY / Ordinal / Network
/ Geo / Physics), which is the correct axis.
Fixed
- Static SVG output now preserves chart-level primitive styling. Server
configs apply
stroke,strokeWidth, andopacitywith the same precedence as their browser chart HOCs across hierarchy, network, ordinal, XY, and value charts instead of silently falling back to built-in outlines. Heatmap cell borders and heat-cell opacity now reach SVG output as well. Focused SSR-to-browser fixtures cover treemap and chord primitives, Likert styling, and heatmap borders across Chromium, Firefox, and WebKit. - Horizontal legends no longer overlap axis ticks or titles. Browser and
static renderers now reserve a shared axis-chrome gutter before placing top
or bottom categorical and gradient legends, including XY, ordinal, heatmap,
minimap, and realtime histogram paths.
legendLayout.axisGutterexposes an exact override; setting it to0preserves plot-edge placement when that is intentional. - Value components no longer appear to inherit chart-HOC props in agent
guidance. The common-prop section now states its boundary before the chart
catalog, and the generated BigNumber behavior contract tells agents to
validate against the value-component schema and remove
title,accessibleTable, and other inherited chart-HOC props. The first-try fixture revision records this guidance change without rewriting the published 7/9gauge-staticfollow-up result. - Targeted evaluation summaries no longer label every unscored row as a
missing submission. Reports now expose
unscoredseparately frommissingSubmissions, so a queued or pending response remains visible without implying that its model output was omitted. - Runtime reduced-motion changes no longer fast-forward physics simulations. Entering the settled path clears the animation clock in both synchronous and worker modes; a preference change that arrives during worker work is replayed afterward. Returning to animation therefore starts with a zero delta instead of applying all wall-clock time elapsed while reduced motion was active.
ChainReactionCharttask tiles no longer overlap. Tasks sharing a lane and a dependency depth were nudged apart bymin(18, taskHeight * 0.3)while staying full height, so a 58px tile shifted 17px overlapped its neighbour by 41px — unreadable in any real plan, where several lanes carry 2–3 tasks at the same depth. The stack is now sized from the tile height: tiles shrink to fit their level band (floor 22px) and step by that height plus a gap, so they never collide and never drift into the neighbouring depth.ChainReactionChartlane labels no longer collide with the chart title. They were pinned aty=23, the same band the frame draws the title in. They now derive from the topmost task, so they sit just above the first row of tiles regardless of size.- Physics:
prefers-reduced-motionnow reaches the settled end state. A settle only admitted the spawns already due att=0and never advanced simulated time, so a reduced-motion reader of a paced physics chart saw one body while the projection overlay reported the full count (measured:GaltonBoardChartwith 60 rows rendered 1 ball), and elapsed-time event tapes —GauntletChart's gates,ChainReactionChart's dependencies — never fired at all, leaving the settled projection reporting the authored start rather than the outcome.PhysicsPipelineStoresettles now advanceelapsedSecondsper step and re-check due spawns inside the loop, soinitialSpawnPacing, per-datumspawnAt, and time-driven event tapes all complete. Both settle entry points share one loop (physicsPipelineSettle.ts) so they cannot drift apart again.StreamPhysicsFrameadditionally re-settles while the store reports pending work (bounded), because reduced motion never schedules a second frame and event-tape charts spawn bodies fromonTick. - Physics chrome and projections now track the theme. Ten physics modules
(plus
MobileChartContainer,SentenceFilter,IntentMark) referenced CSS variables the library never emits —--semiotic-accent,-negative,-positive,-background,-text-primary,-text-muted,-muted,-highlight,-fg— a shadow vocabulary for real roles (primary,danger,success,bg,text,text-secondary,selection-color). Their fallback hex always won, so the settled projection — the layer the docs designate as the chart — was the one layer that ignoredThemeProviderand dark mode. All now point at real roles, keeping their previous hex as the fallback so untouched (unthemed) rendering is unchanged. A new vocabulary test diffs every referenced--semiotic-*name against whatthemeToCSSemits, with an allowlist for genuinely consumer-set knobs, so the class can't return. The last holdout,--semiotic-on-primaryinMobileStandardControls, now reads--semiotic-bg— the contrasting surface for text on a primary-filled pill, which inverts correctly in dark themes instead of pinning white against a light primary. No phantom tokens remain.
Added
- One-surface Stage C conference demo. The local
/intelligence/conference-demoroute now composes the October talk's full “question to a chart you can defend” path: ranked suggestions, deterministic refusal, declared production scale, governed audience, captured-model variant, the KStreams custom-chart escape, pinned server-render evidence, live reader grounding, and JSX handoff. Interactions record a fresh typed conversation arc that can be downloaded for rehearsal review. The committed recovery is now a normalized 13-event Playwright rehearsal arc rather than a hand-authored substitute. The talk-demo browser contract preloads the custom-chart chunk under throttling, takes the browser fully offline, and then exercises every beat with external requests and sockets blocked. - Conference recovery recording package. A reproducible Playwright capture produces an MP4, candidate/variant/handoff keyframes, the live typed arc, and a manifest with byte counts and SHA-256 digests. The conference page exposes the checked-in fallback, and a focused asset test authenticates all four files plus the required refusal, audience, evidence, grounding, and export events.
- Prove-track evaluation substrate.
evals/first-trynow carries 22 generation prompts across static and push modes plus three guard cases, with first-attempt and post-repair scoring against validation, diagnostics, andrenderChartWithEvidence.evals/groundingcarries 10 rendered charts, 50 answerable/unanswerable questions, PNG andbuildReaderGroundingartifacts, and a three-condition 150-trial expansion. Both suites have provider-result schemas, pinned run metadata, raw/summary output, and local regeneration and integrity checks. A spend-capped, resumable OpenAI Responses runner now reads credentials from the environment or macOS Keychain, disables provider storage, records hashes instead of raw outputs, estimates locked-rate cost, and backs off across TPM/HTTP retry signals. The first complete live run issued 516 requests acrossgpt-5.6-sol,gpt-5.6-terra, andgpt-5.6-lunafor $2.2792. First-try scores were 21/22, 17/22, and 17/22. Grounding's combined PNG-plus-payload condition beat PNG alone for Sol (45/50 versus 43/50) and tied it for Terra (45/50) and Luna (44/50), but did not improve answerable-question accuracy. A paired manual audit hardened the provider-neutral scorer before publication: explicit passive abstentions are recognized, answerable abstentions cannot pass by repeating an expected label, numeric matches use token boundaries, and reports carry a scoring revision. The published evidence therefore supports an abstention benefit for Sol, not the stronger expected claim that the payload closes an answerable chart-reading gap. - Offline conference-demo hardening packet.
docs/strategy/talk-demos.mdnow inventories the selected Stage C path, fused reader-grounding beat, and Stage B fallback with inputs, interactions, dependency class, timing, and a recovery cue for every beat. Four committed fixtures drive the trust-loop proposals, BoxPlot → RidgelinePlot bimodal discovery, deterministic stale-note stream, and a hand-authored Stage C recovery replay. The recovery artifact replaces the unrelated synthetic revenue arc and includes suggestion, refusal, repair, audience, scale, variant, render evidence, grounding, and export; it remains explicitly distinct from an arc recorded from the future composed stage app. A browser contract prevents external network access, locally neutralizes the optional font stylesheet, and exercises the newly hardened fixture-backed beats; the stale-note stream can also advance one committed tick at a time throughfresh → aging → stale → expired. - Typed refusal and render-proof conversation events.
proposal-refusedrecords the deterministic gate, reason codes, and repair alternatives;render-evidencerecords mark count, emptiness, and render warning codes separately from the weaker fact that a render was attempted. The event vocabulary moved into a focused type module while the existing store, sinks, replay, and import path remain backward compatible. The Variant Discovery docs now install and clean up a real hand-writtenregisterVariantDiscoveryproposer over committed bimodal data, explicitly distinguishingsource: "model"provenance from a live model call. - Experimental VACP 0.1.0 interoperability bridge.
unstable_createSemioticVACPBridgeat the neutralsemiotic/experimental/vacpsubpath exposes Semiotic chart grounding as a dependency-free, structurally typed VACP capability/state/action surface: stable graph references, scoped full-or-delta state, complete column discovery with bounded summaries, validated point/interval selection, unambiguous navigation, and explicitly registered custom actions.unstable_SemioticVACPBridgebinds that facade to liveLinkedChartsselection and observation stores without rendering UI. The React binding installs only after a client commit; the explicit installer refuses a server process global and any foreign page global, then removes only the bridge it installed. - Adopter-ready IDID v0.1 portability kit. The three library-neutral JSON
Schemas and six canonical worked fixtures ship at documented
semiotic/spec/v0.1/*resource paths, with Draft 2020-12 and dependency-free validation coverage. The spec guide now documents the paper/runtime annotation union, exact stretch-pick admission rule, npm CJS/ESM imports, and a core-vs-extension typology crosswalk. The standalone Vega-Lite binding preserves capability/audience metadata and annotation provenance through its strict attach/read round trip while ordinary Vega-Lite renderers safely ignore the namespacedusermeta.ididblock. - Safe activation of transported capability policy.
unstable_bindPortableCapabilityvalidates a carried descriptor, resolves it against an explicitly supplied host capability, and overlays its rubric, intent scores, variants, caveats, and mobile contract while retaining the host's executablefits,buildProps, numeric, scale, and quality gates. Structured refusal diagnostics cover invalid, unresolved, and mismatched descriptors. The Vega-Lite portability demo now routes both carried capability policy and audience metadata throughsuggestCharts. ChainReactionChartis now a registered chart. It shipped exported fromsemiotic/physicswith zero registry presence — no chart spec, capability descriptor,semiotic/aiexport, MCP registry entry, docs page, nav entry, or CLAUDE.md mention — so it silently skipped schema validation,suggestCharts, MCP, and the docs-coverage gate. All of those now exist, plus an SSR test asserting the HOC path derives the settled task state (a blocked prerequisite leaves its dependents unarmed) with no simulation. ItsserverChartConfigsexclusion is documented: the settled reading is an authored overlay over zero bodies, so a body-counting config would report an empty scene./examples/chain-reaction— "The Release Machine". The page existed but was routed nowhere, so it never shipped. It now does: two coordinate systems over one authored dependency graph — anintervalLanesLayoutswimlane answering when and who, thenChainReactionChartre-plotting the same rows by dependency depth so a blocker's downstream reach becomes the reading. Its centerpiece swimlane was ~20 lines of hand-rolled SVG (hardcoded palette, 7px labels, a magic/17day scale,index % 3fake sub-track packing); that is now the shipped recipe, so bars are real hit-tested marks with keyboard nav, tooltips, a data table, and correct interval packing. Landed through all five example registries plus the nav.- Registry-independent chart-registration gate.
check:surface-paritynow walks entry-point chart exports from the filesystem and requires each to be inCHART_SPECSor explicitly allowlisted. Every other check in that script derives its expectations from the registry, so a chart absent from the registry was invisible to all of them. This is the check that would have caughtChainReactionCharton day one. - Terminal-state contract for event-tape physics charts. A tape-driven chart's
end state must be computable from authored inputs with no simulation, because
that pure result is what reduced motion, SSR, snapshot export, and
describeChartreceive.CrucibleChartandChainReactionChartalready satisfied it;GauntletChartdid not. NewresolveGauntletTerminalStates/resolveGauntletTerminalState(semiotic/physics) fold the authored tape, mirroring the live tick's effect order — with a regression test asserting the pure result equals a real simulated run. That test also surfaced and now documents a real property of the metaphor: withcrashDetectionarmed (the default), physics is a second outcome source no pure fold can predict, so the pure result is "what the plan earns on paper". PasscrashDetection={false}for a fully authored reading. - Physics stage-geography kit (
semiotic/physics+semiotic/recipes).physicsStageGeographynames the charge → apparatus → destinations structure every physics chart had been re-inventing locally (GauntletstartX/socketX/graveyardX, Cruciblechamber/mouth/outlets; Galton bins and Pile tubes independently wrote the same lane formula). Companions:physicsStageColliders,physicsChargePoint,physicsDestination,describePhysicsStageGeography. Authoring vocabulary for new charts andPhysicsCustomChartlayouts — shipped charts keep their layouts, and tests pin the builder to their exact lane math so anything built on it lands in the same visual family. - Physics family contracts filled in.
seedonGauntletChart(the only physics HOC missing it);rerunMSonEventDropChart,PhysicsPileChart,ProcessFlowChart, andPhysicalFlowChart(it was on 4 of 8); plus standardselectioninputs across all eight registered physics HOCs.selectionaccepts either a{ name }store config or a resolved{ isActive, predicate }body predicate; the store's datum predicate is lifted overbody.datum, so chrome bodies (walls, pegs, tubes) never match a data selection. ThelinkedHoverprop is retained as groundwork, but the capability remains false until body hover is wired to its producer callback.GaltonBoardChartandPhysicsPileChartalso declare capabilityvariants(observed vs mechanical; projected vs units-only) — no physics chart had any. - Settled ledger (
semiotic/experimental).buildPhysicsSettledEvidencenow reportsqueuedCount,sedimentedCount, and awarningsarray, plus an optionalledgerwhen the caller declares itscharge(the total bodies the chart claims entered). Every physics chart shares one deep structure — a charge enters, an apparatus routes it, destinations hold it at rest — so they all owe the same invariant: every charged body is accounted for in exactly one place.PHYSICS_QUEUE_UNDRAINEDandPHYSICS_LEDGER_MISMATCHsurface a violation, and the SSR renderer declaresinitialSpawns.lengthas its charge sorenderChartWithEvidencereports both warnings for physics charts.