Typed layer only. No HTTP.
- Cargo workspace, edition 2024, MSRV 1.85:
s1,s1-derive,s1-test #[derive(Choice)],#[derive(Score)],#[derive(Questions)]- Wire JSON matches TypeSafe Choice / Score / Noul
ChoiceAnswer/ScoreAnswer/NoulAnswerwithvalue/prob/distribution/confidence/expected/nearest/p()- Unknown Choice label →
DecodeError::UnknownLabel(no panic) Policy/Verdict::{Act, Review, Escalate}andNoulPolicyS1<C: DecisionBackend>::asks1-test::FakeClient- Golden tests + trybuild UI tests
- Examples:
triage,moderation(FakeClient, no network) - Dual license MIT OR Apache-2.0
backend-typesafe-rs—impl DecisionBackend for typesafe_rs::Client(crates.iotypesafe-rs0.1). Defaultcargo test --workspacestays FakeClient-only.
ask_many/ pipeline — bounded concurrency over many states (PRD G6). Prefer delegating rate limits to typesafe-rs tower layers.s1-cli—s1 ask/s1 map/s1 gate/s1 replay(PRD G8, SPEC §10).backend-typesafe-ai— optional adapter for Joey'stypesafe-aicrate.- Cassettes —
Cassette::record/replayagainst a real backend, sanitized. - Observability —
tracingspans ons1.ask, optionalmetricshistograms (PRD G7). #[s1(flatten)]and richer structuredinstructions_json/desc_jsoncoverage.
backend-typesafe-ai and live Jev cassettes are explicitly out of this MVP.