Arbitrary.schema: no generation override for a struct's cross-field filter, and lookahead patterns are skipped quietly
I maintainer di solito rispondono entro 1 giorno
@effect-bot ci sta già lavorando.
Dal 9/11/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Version: effect 4.1.1 (effect/Arbitrary; @effect/vitest 4.1.1 it.prop calls Arbitrary.schema on Schema inputs, so it fails the same way).
Two gaps in Arbitrary.schema. Both end in SampleError after 2001 discards.
1. A cross-field filter on a struct has no generation override
import {Arbitrary, Effect, Schema} from "effect";
const Dead = Schema.Struct({
tries: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
errors: Schema.Array(Schema.String).check(Schema.isMaxLength(32)),
}).check(Schema.makeFilter((v) => v.errors.length === v.tries || "one error per try"));
await Effect.runPromise(Arbitrary.sampleEffect(Arbitrary.schema(Dead), {count: 200, seed: 119120}));
// SampleError {generated: 29, discards: 2001}
arbitraryConstraint cannot say "these two fields agree", and toCodecArbitrary is read only on declarations. In v3, an arbitrary annotation on any schema could replace generation. Could a filter, or any node, take a generation override (an Arbitrary, or a toCodecArbitrary-style link)? Today the workaround is to keep a hand-built Arbitrary next to the schema and pass that to it.prop, so the schema and its generator can drift apart.
2. isPattern with a lookahead is skipped quietly
const TraceId = Schema.String.check(Schema.isPattern(/^(?!0{32})[0-9a-f]{32}$/));
await Effect.runPromise(Arbitrary.sampleEffect(Arbitrary.schema(TraceId), {count: 200, seed: 119120}));
// SampleError {generated: 0, discards: 2001}
The pattern is not compiled for generation, so the generator falls back to random strings and the filter discards all of them. Two asks, either helps: support lookahead (or at least a leading negative lookahead), or throw at derivation with an error that names the pattern it could not compile, instead of the discard error at sample time.
Workaround in use: the same set without a lookahead, isPattern(/^[0-9a-f]{32}$/) plus a filter t !== "0".repeat(32), generates 500 of 500 valid values.
- Lingua principale
- TypeScript
- Stelle
- 16.7k
- Fork
- 808
- Merge medio
- 17h 9m
- PR unite (30g)
- 825
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Effect-TS/effect
-
Tuple.map: accept ordinary callbacks while preserving tuple lengthForse già presa @effect-bot l’ha presa 1 giorno fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
`Cookies` drops same-name cookies set for a different domain or pathForse già presa @effect-bot l’ha presa 2 giorni fa. Aperta
Effect-TS/effect#10469 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Schema: a public way to derive a canonical codec, as `toCodecJson` and `toCodecStringTree` doForse già presa @effect-bot l’ha presa 3 giorni fa. ApertaNeeds Proposal schema
Effect-TS/effect#10457 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
McpServer.layerHttp: optional legacy GET SSE for idle list-change notificationsForse già presa @effect-bot l’ha presa 4 giorni fa. Aperta
Effect-TS/effect#10436 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
McpServer.layerStdio: native EOF cancellation policy for active tool handlersForse già presa @effect-bot l’ha presa 5 giorni fa. Aperta
Effect-TS/effect#10412 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Effect-TS/effect
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
home-assistant/frontend#55841 ·
I maintainer di solito rispondono entro 1 giorno
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 76/100
lingdojo/kana-dojo#33905 · 1 commento · 5 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
bug(semester-planning): the edit application dialog cannot save with an empty «Annet fra bedriften»Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
blocklist removal
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
MetaMask/eth-phishing-detect#311215 ·
I maintainer di solito rispondono entro 1 giorno
-
Explore filter: multi-select value list with allowNewOptions stops accepting values and drops earlier onesForse già presa @isaac-jaynes-imperva l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
apache/superset#46146 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni