Skip to content

fix SchemaAST.isJson rejecting DAGs as cycles, closes #2021#2047

Merged
gcanti merged 1 commit intomainfrom
fix-2021
Apr 17, 2026
Merged

fix SchemaAST.isJson rejecting DAGs as cycles, closes #2021#2047
gcanti merged 1 commit intomainfrom
fix-2021

Conversation

@gcanti
Copy link
Copy Markdown
Contributor

@gcanti gcanti commented Apr 17, 2026

The previous implementation marked every visited object in a single seen set and never removed it, so any value that referenced the same object through two different paths (a DAG, e.g. { x: shared, y: shared }) was treated as a cycle and returned false. Cycle detection now tracks only the current recursion path (popping on exit) and memoizes fully validated subtrees, so DAGs are accepted while true cycles are still rejected.

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Apr 17, 2026

🦋 Changeset detected

Latest commit: 58ed623

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 26 packages
Name Type
effect Patch
@effect/opentelemetry Patch
@effect/platform-browser Patch
@effect/platform-bun Patch
@effect/platform-node-shared Patch
@effect/platform-node Patch
@effect/vitest Patch
@effect/ai-anthropic Patch
@effect/ai-openai-compat Patch
@effect/ai-openai Patch
@effect/ai-openrouter Patch
@effect/atom-react Patch
@effect/atom-solid Patch
@effect/atom-vue Patch
@effect/sql-clickhouse Patch
@effect/sql-d1 Patch
@effect/sql-libsql Patch
@effect/sql-mssql Patch
@effect/sql-mysql2 Patch
@effect/sql-pg Patch
@effect/sql-sqlite-bun Patch
@effect/sql-sqlite-do Patch
@effect/sql-sqlite-node Patch
@effect/sql-sqlite-react-native Patch
@effect/sql-sqlite-wasm Patch
@effect/openapi-generator Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions
Copy link
Copy Markdown
Contributor

Bundle Size Analysis

File Name Current Size Previous Size Difference
basic.ts 6.73 KB 6.73 KB 0.00 KB (0.00%)
batching.ts 8.90 KB 8.90 KB 0.00 KB (0.00%)
brand.ts 6.37 KB 6.37 KB 0.00 KB (0.00%)
cache.ts 9.98 KB 9.98 KB 0.00 KB (0.00%)
config.ts 17.12 KB 17.12 KB 0.00 KB (0.00%)
differ.ts 15.58 KB 15.56 KB +0.02 KB (+0.15%)
http-client.ts 19.82 KB 19.82 KB 0.00 KB (0.00%)
logger.ts 9.20 KB 9.20 KB 0.00 KB (0.00%)
metric.ts 8.57 KB 8.57 KB 0.00 KB (0.00%)
optic.ts 7.61 KB 7.61 KB 0.00 KB (0.00%)
pubsub.ts 13.80 KB 13.80 KB 0.00 KB (0.00%)
queue.ts 11.08 KB 11.08 KB 0.00 KB (0.00%)
schedule.ts 10.29 KB 10.29 KB 0.00 KB (0.00%)
schema-representation-roundtrip.ts 24.95 KB 24.93 KB +0.02 KB (+0.09%)
schema-string-transformation.ts 12.03 KB 12.03 KB 0.00 KB (0.00%)
schema-string.ts 10.35 KB 10.35 KB 0.00 KB (0.00%)
schema-template-literal.ts 12.95 KB 12.95 KB 0.00 KB (0.00%)
schema-toArbitraryLazy.ts 17.25 KB 17.25 KB 0.00 KB (0.00%)
schema-toCodeDocument.ts 19.95 KB 19.95 KB 0.00 KB (0.00%)
schema-toCodecJson.ts 16.45 KB 16.42 KB +0.02 KB (+0.15%)
schema-toEquivalence.ts 16.41 KB 16.41 KB 0.00 KB (0.00%)
schema-toFormatter.ts 16.25 KB 16.25 KB 0.00 KB (0.00%)
schema-toJsonSchemaDocument.ts 18.78 KB 18.78 KB 0.00 KB (0.00%)
schema-toRepresentation.ts 16.84 KB 16.84 KB 0.00 KB (0.00%)
schema.ts 15.83 KB 15.83 KB 0.00 KB (0.00%)
stm.ts 11.93 KB 11.93 KB 0.00 KB (0.00%)
stream.ts 9.26 KB 9.26 KB 0.00 KB (0.00%)

@github-actions
Copy link
Copy Markdown
Contributor

📊 JSDoc Documentation Analysis

📈 Current Analysis Results
Analyzing 135 TypeScript files in packages/effect/src/ (including schema and config subdirectories)...

============================================================
         EFFECT JSDOC ANALYSIS REPORT
============================================================

📊 SUMMARY STATISTICS
------------------------------
Total files analyzed: 135
Total exported members: 4310
Missing @example: 2177 (50.5%)
Missing @category: 396 (9.2%)

🎯 TOP FILES NEEDING ATTENTION
----------------------------------------
1. Schema.ts
   📝 515 missing examples, 🏷️  202 missing categories
   📦 515 total exports
2. Array.ts
   📝 135 missing examples, 🏷️  2 missing categories
   📦 140 total exports
3. SchemaRepresentation.ts
   📝 96 missing examples, 🏷️  12 missing categories
   📦 96 total exports
4. SchemaAST.ts
   📝 77 missing examples, 🏷️  21 missing categories
   📦 77 total exports
5. Cause.ts
   📝 79 missing examples, 🏷️  2 missing categories
   📦 79 total exports
6. Channel.ts
   📝 81 missing examples, 🏷️  0 missing categories
   📦 152 total exports
7. SchemaTransformation.ts
   📝 42 missing examples, 🏷️  30 missing categories
   📦 42 total exports
8. Option.ts
   📝 66 missing examples, 🏷️  3 missing categories
   📦 66 total exports
9. Sink.ts
   📝 64 missing examples, 🏷️  2 missing categories
   📦 81 total exports
10. Predicate.ts
   📝 57 missing examples, 🏷️  0 missing categories
   📦 57 total exports
11. SchemaGetter.ts
   📝 51 missing examples, 🏷️  0 missing categories
   📦 51 total exports
12. Result.ts
   📝 46 missing examples, 🏷️  0 missing categories
   📦 46 total exports
13. Config.ts
   📝 35 missing examples, 🏷️  6 missing categories
   📦 35 total exports
14. Types.ts
   📝 39 missing examples, 🏷️  0 missing categories
   📦 39 total exports
15. Effect.ts
   📝 31 missing examples, 🏷️  2 missing categories
   📦 253 total exports

✅ PERFECTLY DOCUMENTED FILES
-----------------------------------
   Chunk.ts (86 exports)
   Clock.ts (5 exports)
   FiberHandle.ts (15 exports)
   FiberMap.ts (19 exports)
   FiberSet.ts (14 exports)
   HKT.ts (4 exports)
   HashMap.ts (44 exports)
   HashSet.ts (21 exports)
   Match.ts (57 exports)
   MutableRef.ts (17 exports)
   NonEmptyIterable.ts (3 exports)
   Random.ts (9 exports)
   Redacted.ts (9 exports)
   RegExp.ts (3 exports)
   Symbol.ts (1 exports)
   Trie.ts (29 exports)
   TxChunk.ts (22 exports)
   TxDeferred.ts (7 exports)
   TxHashMap.ts (41 exports)
   TxHashSet.ts (24 exports)
   TxPriorityQueue.ts (19 exports)
   TxReentrantLock.ts (17 exports)
   TxRef.ts (7 exports)
   TxSemaphore.ts (14 exports)
   TxSubscriptionRef.ts (12 exports)
   Unify.ts (8 exports)
   index.ts (0 exports)

🔍 SAMPLE MISSING ITEMS FROM Schema.ts
-----------------------------------
   Optionality (type, line 151): missing example, category
   Mutability (type, line 160): missing example, category
   ConstructorDefault (type, line 170): missing example, category
   MakeOptions (interface, line 184): missing example, category
   Bottom (interface, line 212): missing example, category
   declareConstructor (interface, line 270): missing example
   declareConstructor (function, line 334): missing example
   declare (interface, line 361): missing example
   declare (function, line 394): missing example
   revealBottom (function, line 434): missing example, category

📋 BREAKDOWN BY EXPORT TYPE
-----------------------------------
const: 1123 missing examples, 114 missing categories
interface: 344 missing examples, 90 missing categories
type: 251 missing examples, 79 missing categories
function: 353 missing examples, 93 missing categories
namespace: 48 missing examples, 20 missing categories
class: 58 missing examples, 0 missing categories

📈 DOCUMENTATION PROGRESS
------------------------------
Examples: 2133/4310 (49.5% complete)
Categories: 3914/4310 (90.8% complete)

============================================================
Analysis complete! 2573 items need attention.
============================================================

📄 Detailed results saved to: jsdoc-analysis-results.json

This comment is automatically updated on each push. View the analysis script for details.

@gcanti gcanti merged commit 454f8ad into main Apr 17, 2026
15 checks passed
@gcanti gcanti deleted the fix-2021 branch April 17, 2026 15:50
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.

1 participant