Repository navigation
fix(solid): read a document's agent names once for all its decks - #461
Merged
Merged
Conversation
ixuz
enabled auto-merge
November 1, 2026 02:53
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Nov 1, 2026
ixuz
enabled auto-merge
November 1, 2026 06:04
ixuz
force-pushed
the
fix/deck-agent-names-once
branch
from
November 1, 2026 06:09
af4b324 to
d73827e
Compare
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Nov 1, 2026
Mapping a deck copied the whole map of the document's agent names, only so that a deck from before format 3 could add the creators it names itself. A catalog or a deck file with many decks and many agents then took time that grows with their product, on every deck-list read of the catalog and on each import of the file. A deck now looks its creators up in a small map of its own names first and in the document's map after, which it no longer copies. Reading a deck file also refuses a file with more than one deck before it reads any of them, as it refused such a file only after mapping them all. Growth tests pin both reads to linear time. Refs: GHSA-hcrw-cr33-jg78
ixuz
force-pushed
the
fix/deck-agent-names-once
branch
from
November 1, 2026 06:49
d73827e to
4ecfb5f
Compare
ixuz
enabled auto-merge
November 1, 2026 06:50
12 of 15 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Mapping a deck copied the whole map of its document's agent names. The only reason was so that a deck from before format 3 could add the creators it names itself. A catalog or a deck file with many decks and many agents therefore took time that grows with the number of decks times the number of agents. That cost was paid on every deck-list read of the catalog and on each import of the file.
toDeckindeckMapper.ts). A deck's creators read the same as before.readDeckFileinsolidDeckArchive.ts). The error is the samenotADeckFileas before.toDecks) and a deck file's refusal (readDeckFile). Another test checks that a file of several decks maps none of them. docs/testing.md lists the new growth tests.Refs: GHSA-hcrw-cr33-jg78
Checklist
Refs:, notCloses:. Leave this unchecked otherwise.npm run checkpasses (lint, Markdown and spelling included),npm run lint:reusetoo if a file was added, andnpm run crosschecktoo ifns/ordecks/changed. (lint:reuseandcrosscheckn/a: no file was added, andns/anddecks/are unchanged)docs/is listed in docs/docs.ttl.packages/ui/src/i18n/). (n/a: no message changed)ns/was agreed in an issue first; no publishedns/shapes/*/vN.ttlordecks/*/vN.ttlwas edited; generated files were regenerated, not edited. (n/a:ns/,decks/and the generated files are unchanged)!and aBREAKING CHANGE:footer).npm run check:breakingsees a line ofapi/that goes, but not a feature removed, nor a reader that reads less than before.npm run lint:reuse), or a new deck its line inREUSE.toml; third-party content is credited. (n/a: no file, deck or third-party content added)npm run dev) and tried the change, and considered the user journeys.type(scope): subject,!and aBREAKING CHANGE:footer if it breaks something), with an imperative subject and a body that explains why (CONTRIBUTING.md).