Skip to main content
This page is the system’s own list of what it has not decided. Each entry has a stable TITAN-GAP-<NN> so it can be cited, tracked, and closed.
This is not a to-do list you may resolve by inference. Asked about anything here, the answer is “Titan does not specify this” plus a pointer to the entry. A confident invented answer in the system’s voice is the most expensive failure available, because it propagates and nobody can trace where it came from.

How this differs from Divergences

A divergence has two answers competing. A gap has none.

How to use it

  1. Do not fill the gap. Say it is unspecified and cite the ID.
  2. Where a page’s guidance is a proposal rather than a decision, it says so and links here.
  3. Closing an entry means recording a decision, not deleting the row — entries stay with a resolution note so the reasoning survives.

Deferred by decision

TITAN-GAP-01

Color scheme and density are out of scope for now. Until this closes, every value in this documentation is the light color scheme at comfortable density, and no page states intent for any other mode.

Definitions and vocabulary

TITAN-GAP-02

112 of 244 tokens have nothing recorded about what they are for. The coverage is inverted from what you would expect: the component-scoped tokens are well documented, while the foundations everything is built on are not.

Step 1 — move the recovered definitions into code

44 definitions currently reach the documentation only through this transcription. Design recorded them; implementation never carried them across. While that stays true, the definitions depend on a snapshot of a spreadsheet rather than on the package.

Step 2 — define what neither source defines

The remaining 112 have no definition in code and none in the specification. Four token families are entirely undefined and are the place to start, because they are what everything else is built from: Writing these is a design decision each time, not a transcription — which is why this step is second and larger than the first.

TITAN-GAP-03

The vocabulary is specified but was never surfaced.

TITAN-GAP-04

Seven groups of distinct tokens resolve to one value, with no stated distinction.
Two of these have visible consequences today.background-hover and background-selected are the same color, so a hovered row and a selected row are indistinguishable — the hover feedback on a selected row communicates nothing.link-default and link-visited are the same color, so visited links cannot be identified. Same-role collisions across background/border/icon/text are expected and correct — a status color used in four roles is one decision. These seven are within a single role.

TITAN-GAP-05

Where two tokens both apply, nothing says which to pick.

Accessibility

TITAN-GAP-06

The measured contrast failures are untriaged.

TITAN-GAP-07

No token expresses dark text on a bold status fill.

TITAN-GAP-08

Reduced motion is unimplemented in the token layer.

TITAN-GAP-09

Focus Not Obscured is unaddressed.

TITAN-GAP-10

No forced-colors guidance exists.

TITAN-GAP-11

Contrast is not enforced in Titan’s own CI.

Structure and layout

TITAN-GAP-12

No layout tokens exist at all.

TITAN-GAP-13

Surfaces have no layering order.

TITAN-GAP-14

The stacking ladder does not cover every layer.

TITAN-GAP-15

The page-region model exists in code and was undocumented.

TITAN-GAP-23

The frame measures its own layout from the DOM at runtime.

TITAN-GAP-24

The region layer largely bypasses the spacing scale.

TITAN-GAP-25

The footer’s leading slot is a convention, not a named slot.
The convention itself is right. Left is where you came from, and that reading is worth preserving. The gap is that the frame expresses it by arrangement rather than by name, so the meaning lives in a story instead of in the API.

TITAN-GAP-26

No step indicator exists for multi-step flows.

TITAN-GAP-27

Pagination has no home in the page frame, and three unreconciled implementations.
Local reimplementation is the signal worth acting on. Neither app built a PaginationBar because it wanted a bespoke one. Both built one because nothing in the system covered the case, and the second team could not discover that the first had already solved it.

TITAN-GAP-29

Vertical tabs are a navigation rail with no region and no archetype.

TITAN-GAP-30

A tab can show an error in design and cannot in code.
The design library also carries two unreconciled notes on tabs, written by whoever built it: hover and pressed states were added for consistency with other components and flagged for review on the code side, and 2px of padding was removed and flagged for parity. Neither is recorded anywhere in code, and both disappear when the library is rebuilt. They are listed here so the questions survive the file.

TITAN-GAP-31

The most-used loading primitive carries no design decisions at all.
Adoption is the argument here, not novelty. This is not a missing component; it is a shipped one that 13 applications depend on and that the system has never made a decision about. The duplicated loading files are the measurable cost, and they are the same signal as the two independently built pagination bars in TITAN-GAP-27.

Per-foundation

TITAN-GAP-16

No design intent is recorded for any motion value.

TITAN-GAP-17

Iconography has no meaning registry and no proposal process.

TITAN-GAP-18

Typography has unresolved redundancy and no responsive scale.

Contribution process

TITAN-GAP-19

Tokens have no lifecycle metadata and no deprecation path.
The cost of this gap grows. Every token added without a lifecycle field is another one that can only be removed abruptly. Adding the field costs roughly the same today as it will next year; not having it costs more each time the token count rises.

TITAN-GAP-20

No approval path is recorded for a token change.

TITAN-GAP-21

Un-themed API is reachable and nothing prevents it.

TITAN-GAP-22

No component expresses a failed action.

TITAN-GAP-32

At least four independent disabled/dimmed-opacity values exist across the Forms group, with no rule for which applies where.

TITAN-GAP-33

No mixed/indeterminate state exists for showing a partially-checked group.

Known defects

Not decisions — bugs. Listed here so they are not mistaken for open questions.

Closed

A closed entry stays on this page with a resolution note, and the release it landed in when there is one — deleting it loses the reason the system looks the way it does.

TITAN-GAP-28

Where the tab bar sits, and who supplies its gutter — closed by the design library.
Last modified on September 2, 2026