Skip to content

Spec 016 T016, T017: one description per answer, and renames that fail both sides - #706

Merged
adamjohnwright merged 1 commit into
mainfrom
spec016/t016-one-description-v2
Oct 27, 2026
Merged

adamjohnwright merged 1 commit into
mainfrom
spec016/t016-one-description-v2

Conversation

@adamjohnwright

Copy link
Copy Markdown
Contributor

Replaces #705, with its review's findings fixed, and #704's review's note.

From #705's review:

  • The readers' own aliases are now protected. These are the pathway browser's Search.Entry, Search.Result, Search.Facet, Search.PathwayOf and Search.Icon.*, and the site's SearchResult and ResultGroup. They're held in a written list that the spec checks against the code both ways, so turning an alias into an interface is still caught. I showed that on Search.Entry: the alias list fails, and the interface is named.
  • More shapes count as a description: Readonly<{…}> and other wrapped object types, mapped types, parenthesised and array object types, and classes. Names of other types (Record, Pick, indexed access) are allowed, as aliases.

From #704's review: the single icon's test now checks its image's address, not its loading. The replay doesn't serve the release's files to an <img>, so the old check depended on the live host. The test passes on replay.

Spec 016 User Story 1: the guarantee is shown, not assumed.

  • T016: projects/contract/one-description.spec.ts refuses an interface or an object type in the site's or the pathway browser's code (anywhere, namespaces included) under one of two kinds of name:

    • a contract type's own exported name;
    • a name a reader re-exports a contract type as. The site's SearchEntry is the contract's SearchEntryView, for example.

    An alias of the contract's type is a name, not a description, and is allowed. A re-added interface SearchEntry in the site's search model failed it, naming the file.

  • T017: tasks.md records a field renamed in each of the search family's moves, failing the writer and every reader:

    • the facets' count;
    • the entry's exactType;
    • the results' numberOfMatches.

    The commands and the failing lines are listed there. The pathway browser reads exactType only in templates, which the site's production build checks.

Test-only; nothing served changes. Lint and dead code are at their baselines, and preflight passes.

🤖 Generated with Claude Code

…l both sides

one-description.spec refuses an interface, a class or an object type in
the site or the pathway browser under a contract name, a name a reader
re-exports the contract's type as, or one of the readers' own aliases
(Search.Entry, SearchResult and the rest, written down and held to the
code both ways, so an alias turned into an interface is still caught).
Wrapped, mapped, parenthesised and array shapes count. tasks.md records a
field renamed in each of the search family's moves failing the writer and
every reader. The single icon's test checks its image's address, not its
loading, which the replay cannot serve (#704's review).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@adamjohnwright
adamjohnwright merged commit 22e3728 into main Oct 27, 2026
8 checks passed
@adamjohnwright
adamjohnwright deleted the spec016/t016-one-description-v2 branch October 27, 2026 02:45
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