Skip to content

TML-2733: address migration list --graph PR #628 review findings#636

Merged
wmadden merged 6 commits into
mainfrom
tml-2733-migration-list-graph-review-followups
May 30, 2026
Merged

TML-2733: address migration list --graph PR #628 review findings#636
wmadden merged 6 commits into
mainfrom
tml-2733-migration-list-graph-review-followups

Conversation

@wmadden

@wmadden wmadden commented May 30, 2026

Copy link
Copy Markdown
Contributor

Linked issue

Refs TML-2733. Follow-up to TML-2702 (PR #628, migration list --graph), batching that PR's open architect + principal-engineer review findings into one change.

At a glance

--ascii now governs the flat list too, not just --graph. Both renderers share one kind-glyph table and select the Unicode or ASCII row by glyph mode:

export const MIGRATION_LIST_UNICODE_KIND_GLYPH: Record<MigrationEdgeKind, string> = {
  forward: '*', rollback: '↩', self: '⟲',
};
export const MIGRATION_LIST_ASCII_KIND_GLYPH: Record<MigrationEdgeKind, string> = {
  forward: '*', rollback: '<', self: '~',
};

Previously the flat list hard-coded the Unicode glyphs regardless of --ascii. That was the one real behaviour gap among the review findings; the rest of this PR is structural cleanup that leaves output byte-identical.

Decision

Address every open finding from PR #628's review in a single follow-up, with three operator-confirmed calls and the rest at implementer discretion:

  1. Move the lane-allocator/layout module out of migration-tools into the CLI (architect Finding A) — view-model geometry (laneIndex, passThroughLanes, fan/join connectors) is a rendering concern, so it now lives with the renderer that consumes it. migration-tools keeps only the topology (edge-kind + degrees), which is a genuine domain fact.
  2. Correct the docs (architect Finding C) — the tolerant classifier does not reuse MigrationGraph / detectCycles; it runs an independent tolerant pass. The docs claimed reuse the code never performed. Docs-only, by decision — the strict/tolerant split is deliberate and stays.
  3. Implement the rule-5 "unwoven" degrade (PE Finding F01) — a forward edge whose producer sorts above its consumer is now rendered unwoven rather than threading a possibly-misleading lane, with tests covering that ordering.

The remaining findings (B, D, E, N1–N3, F02–F06) are folded in: glyph-mode capability relocation, a single kind-glyph table, flat-list --ascii, the renames, per-component cycle seeding, a discriminating per-space test, bright kind glyphs in both views, trailing-whitespace trimming, and small readability cleanups.

How it fits together

  1. Topology layer (migration-tools). Renamed EdgeKindMigrationEdgeKind and MigrationGraphTopologyMigrationListGraphTopology (the latter no longer reads as the strict MigrationGraph's topology). The pure-cycle DFS now seeds the still-unvisited remainder in lexical order before its second pass, so a graph with both a rooted component and a disjoint cycle picks the documented back-edge.
  2. Layout moves to the CLI. migration-list-graph-layout.ts and its tests move into cli/.../formatters/; the migration-tools subpath export, package.json entry, and tsdown entry are removed. Import direction is now strictly CLI → migration-tools. The ConnectorKind member joinBelow becomes joinAbove to match the design's node-relative "join above / fan below" vocabulary.
  3. Glyph capability + kind glyph unify. GlyphMode / detectGlyphMode move to a glyph-mode.ts that terminal-ui owns (it no longer imports up into a formatter). The Unicode kind-glyph table lives once in migration-list-data-column and both renderers consume it. The command classifies topology once (buildMigrationListTopologyBySpace) and passes it into both render paths.
  4. Flat list gains a glyph mode. renderMigrationListWithStyle takes a GlyphMode; the command threads the resolved mode to the flat path as well as the graph, so --ascii is honoured everywhere.

What lands in this PR

Commit What it adds
7306ce7 Topology renames, lexical pure-cycle seeding, docs correction (C)
eb29dac Layout module → CLI, joinAbove, rule-5 unwoven degrade (F01), line trimming (F05), layout cleanups (F06)
6b7fbea glyph-mode.ts (B), shared kind glyphs (D), flat --ascii (E), bright kind glyphs (F04), classify-once handoff
6ff4b89 Restore the layout topology param; align command test manifests
0a7016d Slice spec + plan
f54e6cc Review fixes: discriminating per-space test (F03), route graph kind glyph through the styler, scrub residual reuse wording

Reviewer notes

  • F03 was the one review must-fix. The principal-engineer pass caught that the original per-space test's cycle was internal to one space, so it would still pass under a (wrong) global classification. It's rewritten as a cross-space spurious cycle (app: X→Y, ext: Y→X) that forms a 2-cycle only when merged — reverting to global classification flips one edge to a rollback and fails the test. See cli/test/commands/migration-list.test.ts.
  • F01's degrade is narrower than the literal contract, and deliberately so: it un-weaves only the producer-above-consumer case (hasLaterForwardDepartingFrom), so normal linear chains and legitimate tips keep their woven lanes. The PE pass judged this more correct than the literal rule-5 wording.
  • Output is byte-identical except the two intended deltas (flat --ascii glyphs; the kind glyph routed through the styler, which is currently identity so goldens are unchanged).
  • Two non-blocking nits left as follow-ups (below), both flagged by the architect as non-blocking.

Verification

  • cli migration-list suites (migration-list-graph-render, migration-list-render, migration-list-styler, commands/migration-list, migration-list-graph-layout): 97/97.
  • migration-tools topology suite: 14/14, package typecheck clean.
  • pnpm --filter @prisma-next/cli typecheck (src + test): clean. pnpm lint:deps: clean. Biome on touched files: clean.
  • Pre-existing, unrelated flakes left untouched: the version / removed-verb-redirects cli suites (cold-spawn timeouts) and some migration-tools test-only type errors (hints/labels on MigrationMetadata in files this PR doesn't touch).

Follow-ups

  • The two render entry points disagree on a missing-space topology (the graph path throws, the flat path recomputes) — harmonise on one discipline. Non-blocking; can't occur with the current call sites.
  • buildMigrationListTopologyBySpace currently lives on the flat-render module; relocate to a neutral home if a third consumer appears.

Alternatives considered

  • Share the 3-colour DFS between detectCycles and the tolerant classifier (architect Finding C's deeper fix). Rejected for this PR by decision: tolerance (never throw, no genesis assumption) is the point of the second pass, and unifying the DFS would entangle the strict path's throwing semantics with the offline list view. Corrected the docs instead.
  • Keep the layout module in migration-tools and prefix its exported types. Rejected — the settled design always placed lane geometry in the CLI, and the smaller domain-package surface is the cleaner outcome.

Checklist

  • All commits are signed off (git commit -s) per the DCO.
  • I read CONTRIBUTING.md and the change is scoped to one logical concern (PR TML-2702: add migration list --graph annotated-tree mode #628 review follow-ups).
  • Tests are updated (new tests for F01, F02, F03, and flat --ascii).
  • The PR title is in TML-NNNN: <sentence-case title> form.

Summary by CodeRabbit

Release Notes

  • New Features

    • Added ASCII glyph mode support for migration list output, enabling compatibility with non-Unicode terminals.
    • Improved migration graph layout algorithm with smarter edge placement for complex migration hierarchies.
  • Bug Fixes

    • Fixed trailing whitespace in rendered migration list output.
    • Enhanced visual styling to display migration type indicators with proper brightness levels.
  • Refactor

    • Restructured internal topology pre-computation for more efficient graph rendering across multiple migration spaces.

Review Change Stack

@wmadden wmadden requested a review from a team as a code owner May 30, 2026 14:24
@coderabbitai

coderabbitai Bot commented May 30, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@wmadden, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 53 minutes and 14 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: f70faf01-a416-4567-99ea-96574bcd4fd0

📥 Commits

Reviewing files that changed from the base of the PR and between f54e6cc and 93deb57.

⛔ Files ignored due to path filters (5)
  • projects/migration-list-graph/design-notes.md is excluded by !projects/**
  • projects/migration-list-graph/plan.md is excluded by !projects/**
  • projects/migration-list-graph/slices/review-followups/plan.md is excluded by !projects/**
  • projects/migration-list-graph/slices/review-followups/spec.md is excluded by !projects/**
  • projects/migration-list-graph/spec.md is excluded by !projects/**
📒 Files selected for processing (20)
  • packages/1-framework/3-tooling/cli/src/commands/migration-list.ts
  • packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-data-column.ts
  • packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-graph-layout.ts
  • packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-graph-render.ts
  • packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-render.ts
  • packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-styler.ts
  • packages/1-framework/3-tooling/cli/src/utils/glyph-mode.ts
  • packages/1-framework/3-tooling/cli/src/utils/terminal-ui.ts
  • packages/1-framework/3-tooling/cli/test/commands/migration-list.test.ts
  • packages/1-framework/3-tooling/cli/test/utils/formatters/migration-list-graph-fixtures.ts
  • packages/1-framework/3-tooling/cli/test/utils/formatters/migration-list-graph-layout.test.ts
  • packages/1-framework/3-tooling/cli/test/utils/formatters/migration-list-graph-render.test.ts
  • packages/1-framework/3-tooling/cli/test/utils/formatters/migration-list-render.test.ts
  • packages/1-framework/3-tooling/cli/test/utils/formatters/migration-list-styler.test.ts
  • packages/1-framework/3-tooling/migration/package.json
  • packages/1-framework/3-tooling/migration/src/exports/migration-list-graph-layout.ts
  • packages/1-framework/3-tooling/migration/src/exports/migration-list-graph-topology.ts
  • packages/1-framework/3-tooling/migration/src/migration-list-graph-topology.ts
  • packages/1-framework/3-tooling/migration/test/migration-list-graph-topology.test.ts
  • packages/1-framework/3-tooling/migration/tsdown.config.ts
📝 Walkthrough

Walkthrough

The PR refactors the migration list rendering system to become topology-aware and support configurable glyph modes (Unicode or ASCII). It renames type identifiers for clarity, adds lookahead-based graph layout optimizations, and centralizes glyph-mode detection as a reusable utility.

Changes

Topology-Aware Migration List Rendering

Layer / File(s) Summary
Glyph Mode Detection Infrastructure
packages/1-framework/3-tooling/cli/src/utils/glyph-mode.ts, packages/1-framework/3-tooling/cli/src/utils/terminal-ui.ts, packages/1-framework/3-tooling/cli/test/commands/migration-list.test.ts
New standalone glyph-mode module detects 'unicode' or 'ascii' mode by checking TTY and locale environment variables (LC_ALL, LC_CTYPE, LANG). Detection logic is extracted from the graph renderer and centralized so it can be reused across CLI and tests.
Topology Type System Refactoring
packages/1-framework/3-tooling/migration/src/migration-list-graph-topology.ts, packages/1-framework/3-tooling/migration/src/exports/migration-list-graph-topology.ts, packages/1-framework/3-tooling/migration/package.json, packages/1-framework/3-tooling/migration/tsdown.config.ts, packages/1-framework/3-tooling/migration/test/migration-list-graph-topology.test.ts
Renames EdgeKindMigrationEdgeKind and MigrationGraphTopologyMigrationListGraphTopology; updates classifyMigrationListGraphTopology to post-process DFS by collecting unvisited nodes, sorting lexically, then iterating those; removes public export of computeMigrationListGraphLayout from the migration package.
Glyph Mode Data Column Support
packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-data-column.ts
Adds glyph lookup maps and exported helper functions (migrationListKindGlyph, migrationListForwardArrow, migrationListEmptySource) that select glyphs based on GlyphMode; updates MigrationDataColumnOptions to reference MigrationEdgeKind.
Graph Layout Algorithm: Topology-Aware Refactoring
packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-graph-layout.ts
computeMigrationListGraphLayout now accepts optional topology parameter; adds hasLaterForwardDepartingFrom lookahead to place unwoven edges early; changes ConnectorKind from 'joinBelow' to 'joinAbove'; refactors forward-degree helpers to operate on MigrationListGraphTopology; updates edge-kind typing throughout.
Graph Renderer: Topology-Aware and Glyph-Mode Support
packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-graph-render.ts
Imports GlyphMode from separate module; simplifies GlyphPalette using constants from migration-list-data-column; adds topology parameter to renderGraphSpaceBlock and renderMigrationListGraphResult; updates kind rendering to apply styler; trims trailing whitespace from output lines.
Non-Graph Renderer: Topology-Aware and Glyph-Mode Support
packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-render.ts
Introduces buildMigrationListTopologyBySpace helper that precomputes topology per space; updates renderMigrationListWithStyle to accept glyphMode and optional topologyBySpaceId; refactors per-space rendering to prefer cached topology with inline fallback; updates row formatting to use glyph-mode-aware kind glyphs.
Styling and CLI Integration
packages/1-framework/3-tooling/cli/src/utils/formatters/migration-list-styler.ts, packages/1-framework/3-tooling/cli/src/commands/migration-list.ts
Styler changed so kind glyphs remain bright instead of dimmed; CLI integration computes topologyBySpaceId once via buildMigrationListTopologyBySpace and passes to both graph and non-graph renderers.
Tests, Fixtures, and API Alignment
packages/1-framework/3-tooling/cli/test/commands/migration-list.test.ts, packages/1-framework/3-tooling/cli/test/utils/formatters/migration-list-*.test.ts, packages/1-framework/3-tooling/cli/test/utils/formatters/migration-list-graph-fixtures.ts
Test fixtures import local computeMigrationListGraphLayout; layout tests expect joinAbove connectors and add coverage for unplaceable forward edges; render tests verify glyph-mode behavior; styler tests assert non-dim kind output; CLI tests add per-space topology classification scenario asserting forward edges across spaces forming a spurious cycle.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • prisma/prisma-next#603: Delegates CLI human output to renderMigrationListWithStyle, which depends on the renderer API and topology-aware signature updates in this PR.
  • prisma/prisma-next#628: Modifies the same migration-list renderer pipeline around graph topology and edge-kind classification, with this PR further refining those components to be topology-aware and typed via MigrationEdgeKind.

Suggested reviewers

  • aqrln

Poem

🐰 A topology refined, a glyph mode found,
Unwoven edges placed with lookahead sound.
From EdgeKind to MigrationEdgeKind we climb,
Each renderer topology-aware, each style sublime! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 4.65% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'TML-2733: address migration list --graph PR #628 review findings' directly references the specific review follow-ups being addressed and aligns with the PR's main objective of addressing review findings from PR #628.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch tml-2733-migration-list-graph-review-followups

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

github-actions Bot commented May 30, 2026

Copy link
Copy Markdown

size-limit report 📦

Path Size
postgres / no-emit 135.21 KB (0%)
postgres / emit 124.97 KB (0%)
mongo / no-emit 73.94 KB (0%)
mongo / emit 68.67 KB (0%)

@pkg-pr-new

pkg-pr-new Bot commented May 30, 2026

Copy link
Copy Markdown

Open in StackBlitz

@prisma-next/extension-author-tools

npm i https://pkg.pr.new/@prisma-next/extension-author-tools@636

@prisma-next/mongo-runtime

npm i https://pkg.pr.new/@prisma-next/mongo-runtime@636

@prisma-next/family-mongo

npm i https://pkg.pr.new/@prisma-next/family-mongo@636

@prisma-next/sql-runtime

npm i https://pkg.pr.new/@prisma-next/sql-runtime@636

@prisma-next/family-sql

npm i https://pkg.pr.new/@prisma-next/family-sql@636

@prisma-next/extension-arktype-json

npm i https://pkg.pr.new/@prisma-next/extension-arktype-json@636

@prisma-next/extension-cipherstash

npm i https://pkg.pr.new/@prisma-next/extension-cipherstash@636

@prisma-next/middleware-cache

npm i https://pkg.pr.new/@prisma-next/middleware-cache@636

@prisma-next/mongo

npm i https://pkg.pr.new/@prisma-next/mongo@636

@prisma-next/extension-paradedb

npm i https://pkg.pr.new/@prisma-next/extension-paradedb@636

@prisma-next/extension-pgvector

npm i https://pkg.pr.new/@prisma-next/extension-pgvector@636

@prisma-next/extension-postgis

npm i https://pkg.pr.new/@prisma-next/extension-postgis@636

@prisma-next/postgres

npm i https://pkg.pr.new/@prisma-next/postgres@636

@prisma-next/sql-orm-client

npm i https://pkg.pr.new/@prisma-next/sql-orm-client@636

@prisma-next/sqlite

npm i https://pkg.pr.new/@prisma-next/sqlite@636

@prisma-next/target-mongo

npm i https://pkg.pr.new/@prisma-next/target-mongo@636

@prisma-next/adapter-mongo

npm i https://pkg.pr.new/@prisma-next/adapter-mongo@636

@prisma-next/driver-mongo

npm i https://pkg.pr.new/@prisma-next/driver-mongo@636

@prisma-next/contract

npm i https://pkg.pr.new/@prisma-next/contract@636

@prisma-next/utils

npm i https://pkg.pr.new/@prisma-next/utils@636

@prisma-next/config

npm i https://pkg.pr.new/@prisma-next/config@636

@prisma-next/errors

npm i https://pkg.pr.new/@prisma-next/errors@636

@prisma-next/framework-components

npm i https://pkg.pr.new/@prisma-next/framework-components@636

@prisma-next/operations

npm i https://pkg.pr.new/@prisma-next/operations@636

@prisma-next/ts-render

npm i https://pkg.pr.new/@prisma-next/ts-render@636

@prisma-next/contract-authoring

npm i https://pkg.pr.new/@prisma-next/contract-authoring@636

@prisma-next/ids

npm i https://pkg.pr.new/@prisma-next/ids@636

@prisma-next/psl-parser

npm i https://pkg.pr.new/@prisma-next/psl-parser@636

@prisma-next/psl-printer

npm i https://pkg.pr.new/@prisma-next/psl-printer@636

@prisma-next/cli

npm i https://pkg.pr.new/@prisma-next/cli@636

@prisma-next/cli-telemetry

npm i https://pkg.pr.new/@prisma-next/cli-telemetry@636

@prisma-next/emitter

npm i https://pkg.pr.new/@prisma-next/emitter@636

@prisma-next/migration-tools

npm i https://pkg.pr.new/@prisma-next/migration-tools@636

prisma-next

npm i https://pkg.pr.new/prisma-next@636

@prisma-next/vite-plugin-contract-emit

npm i https://pkg.pr.new/@prisma-next/vite-plugin-contract-emit@636

@prisma-next/mongo-codec

npm i https://pkg.pr.new/@prisma-next/mongo-codec@636

@prisma-next/mongo-contract

npm i https://pkg.pr.new/@prisma-next/mongo-contract@636

@prisma-next/mongo-value

npm i https://pkg.pr.new/@prisma-next/mongo-value@636

@prisma-next/mongo-contract-psl

npm i https://pkg.pr.new/@prisma-next/mongo-contract-psl@636

@prisma-next/mongo-contract-ts

npm i https://pkg.pr.new/@prisma-next/mongo-contract-ts@636

@prisma-next/mongo-emitter

npm i https://pkg.pr.new/@prisma-next/mongo-emitter@636

@prisma-next/mongo-schema-ir

npm i https://pkg.pr.new/@prisma-next/mongo-schema-ir@636

@prisma-next/mongo-query-ast

npm i https://pkg.pr.new/@prisma-next/mongo-query-ast@636

@prisma-next/mongo-orm

npm i https://pkg.pr.new/@prisma-next/mongo-orm@636

@prisma-next/mongo-query-builder

npm i https://pkg.pr.new/@prisma-next/mongo-query-builder@636

@prisma-next/mongo-lowering

npm i https://pkg.pr.new/@prisma-next/mongo-lowering@636

@prisma-next/mongo-wire

npm i https://pkg.pr.new/@prisma-next/mongo-wire@636

@prisma-next/sql-contract

npm i https://pkg.pr.new/@prisma-next/sql-contract@636

@prisma-next/sql-errors

npm i https://pkg.pr.new/@prisma-next/sql-errors@636

@prisma-next/sql-operations

npm i https://pkg.pr.new/@prisma-next/sql-operations@636

@prisma-next/sql-schema-ir

npm i https://pkg.pr.new/@prisma-next/sql-schema-ir@636

@prisma-next/sql-contract-psl

npm i https://pkg.pr.new/@prisma-next/sql-contract-psl@636

@prisma-next/sql-contract-ts

npm i https://pkg.pr.new/@prisma-next/sql-contract-ts@636

@prisma-next/sql-contract-emitter

npm i https://pkg.pr.new/@prisma-next/sql-contract-emitter@636

@prisma-next/sql-lane-query-builder

npm i https://pkg.pr.new/@prisma-next/sql-lane-query-builder@636

@prisma-next/sql-relational-core

npm i https://pkg.pr.new/@prisma-next/sql-relational-core@636

@prisma-next/sql-builder

npm i https://pkg.pr.new/@prisma-next/sql-builder@636

@prisma-next/target-postgres

npm i https://pkg.pr.new/@prisma-next/target-postgres@636

@prisma-next/target-sqlite

npm i https://pkg.pr.new/@prisma-next/target-sqlite@636

@prisma-next/adapter-postgres

npm i https://pkg.pr.new/@prisma-next/adapter-postgres@636

@prisma-next/adapter-sqlite

npm i https://pkg.pr.new/@prisma-next/adapter-sqlite@636

@prisma-next/driver-postgres

npm i https://pkg.pr.new/@prisma-next/driver-postgres@636

@prisma-next/driver-sqlite

npm i https://pkg.pr.new/@prisma-next/driver-sqlite@636

commit: 7fb1b71

wmadden-electric and others added 6 commits May 30, 2026 17:42
… docs

Rename EdgeKind → MigrationEdgeKind and MigrationGraphTopology →
MigrationListGraphTopology. Sort still-WHITE nodes lexically before the
second DFS pass so disjoint pure cycles seed deterministically. Correct
project docs: the tolerant classifier re-implements adjacency + DFS,
it does not reuse MigrationGraph or detectCycles.

Signed-off-by: wmadden-electric <286902546+wmadden-electric@users.noreply.github.com>
Move migration-list-graph-layout into the CLI formatter layer and drop
the migration-tools export. Rename joinBelow → joinAbove, implement
rule-5 unwoven degrade when a forward producer sorts above its consumer,
right-trim rendered graph lines, and collapse assignProducerLane.

Signed-off-by: wmadden-electric <286902546+wmadden-electric@users.noreply.github.com>
Move GlyphMode detection to glyph-mode.ts. Share kind-glyph tables across
flat and graph renderers; thread glyph mode into the flat list. Keep kind
glyphs bright in both views. Classify topology once in the command and pass
it into both render paths. Add per-space classification and ASCII flat-list
tests.

Signed-off-by: wmadden-electric <286902546+wmadden-electric@users.noreply.github.com>
…ests

Restore optional topology argument on computeMigrationListGraphLayout for
the command handoff. Drop hints/labels from migration-list command test
packages to match current manifest validation.

Signed-off-by: wmadden-electric <286902546+wmadden-electric@users.noreply.github.com>
… and plan

Signed-off-by: Will Madden <madden@prisma.io>
- F03/AC17: rewrite the per-space test as a cross-space spurious cycle so it
  fails if classification reverts to global (the old fixture cycle was internal
  to one space and did not discriminate).
- Route the graph-gutter kind glyph through style.kind so the bright-in-both
  policy has a single source of truth (output byte-identical; style.kind is
  identity).
- Docs (C): scrub the surviving "reuse MigrationGraph / mirrors detectCycles"
  claims in design-notes and spec; the tolerant classifier is independent.

Signed-off-by: Will Madden <madden@prisma.io>
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.

2 participants