Skip to content

spec: close memory driver's persistence sub-shapes against unknown keys (#4001 batch B) - #7985

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-4001-batch-b-driver-memory-strict
Aug 12, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-4001-batch-b-driver-memory-strict

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Part of #4001

What

Converts the 5 remaining non-strict z.object sites in
packages/spec/src/data/driver/memory.zod.ts to the campaign's strictObject
posture — PersistenceAdapterSchema, FilePersistenceConfigSchema,
LocalStoragePersistenceConfigSchema, CustomPersistenceConfigSchema,
AutoPersistenceConfigSchema. These are the persistence-adapter union nested
under datasource.config.persistence.

.strict() does not recurse: MemoryConfigSchema (the top-level config
slot) was already closed as of #4410, but the five variant shapes nested
inside its persistence field stayed open, so a typo written inside
persistence (e.g. { type: 'file', filepath: '/data.json' }) parsed clean
and the driver silently came up on its defaults.

Premise check

Verified against origin/main @ 8d80e12e74 before starting: git show origin/main:packages/spec/src/data/driver/memory.zod.ts still has exactly 5
bare z.object( sites (the other 2 z.object( matches were in an unrelated
JSDoc-adjacent context and don't count), and the ledger
(docs/audits/2026-07-unknown-key-strictness-ledger.md:1185) still classed
the file authorable, "persistence-adapter union under datasource.config".
Premise held — proceeded.

Changes

  • 5 sites converted to strictObject, each with its own surface name
    (.strict() doesn't recurse, so each nested variant needed its own gate).
    No aliases added — I don't have real-payload evidence for any specific
    typo, and the helper's own docblock says curation is an upgrade, not a
    precondition.
  • New unrecognised-key rejection tests for all 5 sites in memory.test.ts.
    Reverse-verified: reverting memory.zod.ts to the origin/main
    version turns exactly these 5 new cases red (expected true to be false
    the unknown key was silently accepted), restoring the fix turns them green
    again. Done via git checkout origin/main -- <path> + a saved patch, not
    git stash.
  • Caught and avoided a docs-drift trap before it shipped: my first draft put
    the new shared PERSISTENCE_HISTORY doc comment before the file's real
    module header. findModuleDocBlock (两张公开参考页的正文被 #4001 的内部注释顶替(#3746 陷阱 1 已实际发生两次) #5059) takes the first top-level doc
    comment as the page description and returns null for the whole file
    if it's immediately followed by a declaration — no fallback search — so
    that ordering would have silently dropped memory.zod.ts's published docs
    description. Moved the new comment after the real header; confirmed with
    findModuleDocBlock directly that the correct block is now selected.
  • Regenerated docs/audits/2026-07-unknown-key-strictness-ledger.counts.md
    (gen:strictness-ledger — never hand-edited) and updated the ledger's
    prose/table to drop driver/memory.zod.ts's now-empty remaining-strip row
    (check:strictness-ledger was red until this was fixed).
  • Removed memory.test.ts's graduated entry from
    packages/spec/test-typecheck-debt.json via
    gen:test-typecheck-debt (not hand-edited) — the file now compiles clean
    under tsconfig.test.json.
  • Changeset: @objectstack/spec minor.

Tests

  • pnpm --filter @objectstack/spec test -- --maxWorkers=2381 files /
    10037 tests, all passing
    (full package suite; ran clean both before and
    after the ledger-doc fix).
  • pnpm --filter @objectstack/spec typecheck — clean (tsc --noEmit,
    check:scripts-typecheck, check:test-typecheck all green).
  • pnpm --filter @objectstack/spec check:generated — all 13 generated
    artifacts up to date (api-surface, strictness-ledger counts,
    authorable-surface, docs, etc.).
  • pnpm --filter @objectstack/spec check:authorable-surface — green;
    authorable-surface.base.json anchor untouched (the "trails the baseline"
    note is the expected informational line, not an error).
  • Root-level named gates: check:merge-driver, check:nul-bytes,
    check:spec-parsed-alias, check:adr-anchors — all green.
  • Consumer sweep (downstream, ...@objectstack/driver-memory — wait, this
    package has no in-repo consumers upstream of it other than
    @objectstack/driver-memory itself, which is the one that parses these
    configs): built its dependency closure first
    (pnpm --workspace-concurrency=2 --filter '@objectstack/driver-memory^...' build),
    then pnpm --filter @objectstack/driver-memory typecheck (clean) and
    pnpm --filter @objectstack/driver-memory test -- --maxWorkers=224
    files / 732 tests, all passing
    .

Out of scope

Nothing found outside this card's 5 sites while working the file.


Generated by Claude Code

…own keys (#4001 batch B)

Convert the 5 remaining non-strict `z.object` sites in
`data/driver/memory.zod.ts` to `strictObject` — `PersistenceAdapterSchema`,
`FilePersistenceConfigSchema`, `LocalStoragePersistenceConfigSchema`,
`CustomPersistenceConfigSchema`, `AutoPersistenceConfigSchema` — the
persistence-adapter union nested under `datasource.config.persistence`.
`.strict()` does not recurse, so these stayed open after #4410 closed the
top-level `MemoryConfigSchema`.

- Added unrecognised-key rejection tests for all 5 sites (reverse-verified:
  reverting the schema change turns them red).
- Regenerated the strictness-ledger counts file and updated its prose to
  drop `driver/memory.zod.ts`'s now-empty remaining-strip row.
- Removed `memory.test.ts`'s graduated entry from test-typecheck-debt.json
  (regenerated via `gen:test-typecheck-debt`, not hand-edited).

Part of #4001.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ECjShwqVRAhLy15mgatGjV
@vercel

vercel Bot commented Aug 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 12, 2026 9:29am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/permissions/system-context.mdx (via packages/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

7 release-owned page(s) also reference the affected code. These are read-only:

  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:data tests tooling labels Aug 12, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 12, 2026 12:42
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 12, 2026
Merged via the queue into main with commit 606d577 Aug 12, 2026
39 of 41 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4001-batch-b-driver-memory-strict branch August 12, 2026 12:56
os-zhuang pushed a commit that referenced this pull request Aug 12, 2026
…ged with batch B

Second turn of the os-regen relay. `#7985` (batch B — the memory driver's five
persistence sub-shapes) and `#7972` landed while this branch was in the queue, so
the shared counts artifact met two batches that each decremented it correctly and
independently.

That is the exact arithmetic #5107 built this artifact to prevent: the rows do
not overlap, git merges them without complaint, and the SUBTOTAL — which overlaps
nothing — merges clean and wrong. The artifact carries `merge=os-regen` so the
merge defers rather than splices, and the only correct resolution is to recompute
from the merged tree. Regenerated, never hand-edited:

    still-open (strip)          149 → 144   (batch B's five)
    files carrying at least one  26 → 25
    authorable — forced scope      9 → 4
    data/ strip                 107 → 102,  data/ strict 57 → 62
    total strict                283 → 288

Neither batch's own numbers moved; the combined ones did. `check:strictness-ledger`
agrees with the merged tree in both directions (25 open files / 144 strip sites,
no closed file still carrying a worklist row — batch B's `driver/memory.zod.ts`
row left with their side of the prose).

Merged tree verified: spec 382 files / 10109 tests, lint 71 / 1932,
check:generated 13/13.

Part of #4001

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NLJ8PWLdwLSyi84LHzrAx
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 17, 2026
…keys (objectstack-ai#4001 batch A) (objectstack-ai#8008)

* feat(spec): close the 31 SDUI component-props shapes against unknown keys (objectstack-ai#4001 batch A)

`ComponentPropsMap` — the declared shape of every `page:*`, `record:*`,
`element:*`, `nav:*` and `ai:*` node a page can carry — stripped unknown keys
in silence. All 31 object sites in `ui/component.zod.ts` are `strictObject` now,
including the two union arms (`RecordHighlightsField`'s object arm and
`record:related_list`'s sort entry) and every nested block, since strictness
does not recurse.

objectstack-ai#5068 already REPORTED these keys, by walking a strip-mode object and
reconstructing what the parse would have dropped. Now the parse rejects the key
itself — same rule id, same warning tier, and three things the reconstruction
could not give: curated per-surface prescriptions, a rejection that holds for
every caller rather than only inside the gate, and coverage of union arms.

Five renderer-honoured props are DECLARED rather than rejected, on the rule this
file has applied three times before (objectstack-ai#5611/objectstack-ai#5775/objectstack-ai#6276 — the delivered,
authorized shape is the contract): `page:header` `maxVisible`/`mobileMaxVisible`,
`page:tabs.alwaysShowStrip`, `record:details` `inlineEdit`/`showHeader`. Each is
read by objectui through `schema?.X ?? schema?.properties?.X` with its own
comment inviting authors. All optional with no schema default — the defaults are
the renderer's, and declaring them would turn an unset key into an authored one.

Curated tables, each backed by a producer measured in the wild rather than
guessed: a tab item's `key` → `value` (objectui's Studio designer publishes
`key`; the renderer reads `it.value`), a header's `description` → `subtitle`
(the rename its own ADR-0087 conversion performs — the one path that had no
diagnostic at all), a container's `body` → `children`, and a wrong-layer family
for keys that belong on the component NODE.

`@objectstack/lint` gains one piece of wiring: zod 4 collapses union-arm
failures into a single `invalid_union`, so a lone arm's `unrecognized_keys` is
unpacked back onto the unknown-key rule id — and deliberately is not when two
arms could both have been meant.

Deliberately unchanged: the carrier is still `z.record(z.string(), z.unknown())`
(direction B stays declined, unregistered `record:*` types are still skipped),
the storage path still parses no props (objectstack-ai#4463), and the gate is still warning
level.

Verified with direct build-artifact `.parse()` probes over the example corpus —
`objectstack validate` never parses through `PageSchema` (objectstack-ai#5000), so "the
examples validate clean" would have been no evidence. 244 registered props bags
across the three example apps' build artifacts, the same three from source, and
the three published platform pages: zero undeclared keys, zero new refusals. The
probe's negative control moved from 0/244 injections caught to 244/244.

Filed out of scope: objectstack-ai#7973 (objectui's Studio designer publishes three page
component inputs no renderer reads).

Part of objectstack-ai#4001

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NLJ8PWLdwLSyi84LHzrAx

* docs(ui): stop teaching `record:highlights.actions` — nothing has ever rendered it

Found by the objectstack-ai#3746-style corpus scan this batch owes: every `content/docs/**`
and `skills/**` code block carrying a registered component type was parsed and
its props judged against the now-closed `ComponentPropsMap`. One hit, in the
"Complete Example" of the pages guide — an `os:check` block, so it is an example
the docs gate compiles and an AI author copies.

`RecordHighlightsProps` has never declared `actions`, and objectui's
`record-highlights.tsx` reads `schema.fields` and nothing else. Under strip the
key was dropped in silence, which is precisely why a doc could teach it for this
long: the example parsed clean and rendered without the actions, and no layer
disagreed. With the shape closed it is a rejection, so the doc had to be right
before the batch could land.

The actions move to `record:quick_actions`, which is the component that renders
them (`actionNames`, per objectui's own designer config) and which the same page
already lists two sections up.

Scan after the fix: 392 mdx + 2299 markdown files, 8 registered-type props bags,
0 teaching a key these schemas reject. `check:skill-examples` — 209 prose
examples type-check.

Part of objectstack-ai#4001

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NLJ8PWLdwLSyi84LHzrAx

* chore(spec): regenerate authorable-surface after merging main — the os-regen driver's second half

`authorable-surface/ui.json` carries `merge=os-regen`, so a merge resolves it by
taking a side and leaving it REGEN-PENDING rather than by textually splicing two
generated files. That is the driver working as designed; the half that must
follow is the regeneration, and it is not optional here — measured on the merged
tree before pushing, `check:authorable-surface` fails:

    ❌ authorable-surface/ is out of date (1 key(s) not recorded).
         + ui/GlobalFilter:object

The missing key is main's own, from objectstack-ai#7892 (`GlobalFilterSchema` gains an optional
`object` for i18n label resolution). Nothing of this branch's is involved: the
regenerated diff is exactly that one line, and batch A's five declared keys were
already recorded.

Worth stating because the failure mode is quiet: `pnpm build` REWRITES this
artifact, so a `check:generated` run that happens to follow a build reports all
13 green against the file the build just fixed. Only `check:authorable-surface`
on its own, against the merged bytes, shows the drift — which is how this was
caught before the merge queue caught it.

Merged tree verified: spec 381 files / 10091 tests, lint 71 / 1932,
check:generated 13/13, check:strictness-ledger current (438 sites / 149 strip /
9 authorable — unmoved by the merge). The ledger counts and liveness counts were
regenerated too and came back byte-identical.

Part of objectstack-ai#4001

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NLJ8PWLdwLSyi84LHzrAx

* chore(spec): recompute the strictness ledger counts from the tree merged with batch B

Second turn of the os-regen relay. `objectstack-ai#7985` (batch B — the memory driver's five
persistence sub-shapes) and `objectstack-ai#7972` landed while this branch was in the queue, so
the shared counts artifact met two batches that each decremented it correctly and
independently.

That is the exact arithmetic objectstack-ai#5107 built this artifact to prevent: the rows do
not overlap, git merges them without complaint, and the SUBTOTAL — which overlaps
nothing — merges clean and wrong. The artifact carries `merge=os-regen` so the
merge defers rather than splices, and the only correct resolution is to recompute
from the merged tree. Regenerated, never hand-edited:

    still-open (strip)          149 → 144   (batch B's five)
    files carrying at least one  26 → 25
    authorable — forced scope      9 → 4
    data/ strip                 107 → 102,  data/ strict 57 → 62
    total strict                283 → 288

Neither batch's own numbers moved; the combined ones did. `check:strictness-ledger`
agrees with the merged tree in both directions (25 open files / 144 strip sites,
no closed file still carrying a worklist row — batch B's `driver/memory.zod.ts`
row left with their side of the prose).

Merged tree verified: spec 382 files / 10109 tests, lint 71 / 1932,
check:generated 13/13.

Part of objectstack-ai#4001

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NLJ8PWLdwLSyi84LHzrAx

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants