Skip to content

fix(lifecycle): hide decorative rail during semantic interactions - #253

Open
sacloudy wants to merge 1 commit into
tt-a1i:mainfrom
sacloudy:fix/lifecycle-semantic-rail
Open

fix(lifecycle): hide decorative rail during semantic interactions#253
sacloudy wants to merge 1 commit into
tt-a1i:mainfrom
sacloudy:fix/lifecycle-semantic-rail

Conversation

@sacloudy

@sacloudy sacloudy commented Sep 1, 2026

Copy link
Copy Markdown

Problem and value

Closes #244.

Lifecycle diagrams render a decorative primary rail behind the authored states. During Intent Trace, direct-relationship preview, and committed Semantic Passport focus, semantic nodes and edges dim but that unmarked decoration stays fully opaque. It can then read as a false direct edge across unrelated states.

This change keeps the rail in the ordinary READ view while removing that false semantic signal from all three public interaction states.

Scope

  • What changed:
    • Mark only the decorative lifecycle path with data-lifecycle-rail.
    • Hide that decoration while data-intent-trace-active, data-relationship-preview-active, or data-focus-active is present.
    • Add final-HTML contract coverage plus a real-Chrome regression that exercises node hover, relationship hover, and committed focus.
    • Refresh all generated HTML, Gallery metadata, README motion proof, Architecture Delta proof, and the packaged skill.
  • What deliberately did not change:
    • No JSON schema, validator, layout, authored topology, route, reachability, relationship identity, or default READ presentation changed.
    • The rail does not receive data-edge-from, data-edge-to, or any semantic relationship metadata.
  • No unrelated changes: confirmed.

Stability impact

  • Compatibility and migration risk: low. Existing typed JSON and public viewer APIs are unchanged; this is one renderer marker and three interaction-scoped CSS rules.
  • Renderer, validator, package, or generated-artifact risk: lifecycle output gains one inert data attribute. The validator remains unchanged. Checked-in artifacts and archify.zip were regenerated and verified.
  • Failure behavior and rollback path: unsupported or non-lifecycle diagrams do not emit the marker, so the selectors are no-ops. Reverting this single commit restores the previous presentation.

Tests run

ARCHIFY_CHROME='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' \
  npx -y -p node@22 -c 'node --test \
    archify/test/architecture-delta.test.mjs \
    archify/test/cli.test.mjs \
    archify/test/generated-artifact-xml.test.mjs \
    archify/test/intent-trace.test.mjs \
    archify/test/lifecycle-rail-browser.test.mjs \
    archify/test/readme-showcase.test.mjs \
    archify/test/relationship-direct-explorer.test.mjs \
    archify/test/semantic-passport.test.mjs'

Result: 86 tests passed, 0 failed, 0 skipped. The browser test uses pointer events in real Chrome and asserts the computed rail opacity in all three interaction modes.

cd archify
ARCHIFY_CHROME='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' \
  npx -y -p node@22 -c 'npm test'

Result: 1,021 tests; 1,017 passed, 0 failed, 4 environment-gated tests skipped.

node archify/bin/archify.mjs deliver lifecycle /tmp/lifecycle-rail-repro.json \
  /tmp/lifecycle-rail-repro.html --quality showcase --json
node archify/bin/archify.mjs visual-check /tmp/lifecycle-rail-repro.html \
  --json

Result: delivery passed 9/9 validation checks with 0 errors and 0 warnings; automated Chrome evidence passed with no diagnostics.

Visual evidence

Manual review passed at 1440×900 in both light and dark themes. A before/after real-Chrome capture confirmed:

Node Intent Trace — before Node Intent Trace — after
Before: decorative rail stays bright through dimmed states After: decorative rail is hidden while the selected state remains clear
Committed focus — before Committed focus — after
Before: decorative rail reads as a false direct edge behind the Passport After: decorative rail is hidden while the Passport and focused state remain unchanged

Runtime measurements match the captures: the rail had computed opacity 1 before the fix and 0 in each semantic interaction after the fix.

Normal READ remains visually unchanged: the marked rail is present and its computed opacity is not 0.

Generated artifacts

  • Rebuilt root and packaged examples under examples/ and archify/examples/, including the legacy examples/web-app.html alias.
  • Rebuilt docs/gallery.html, all 11 Gallery artifacts, and docs/gallery/manifest.json.
  • Rebuilt examples/checkout-platform-delta.html and its receipt.
  • Re-recorded docs/assets/archify-live-proof.gif and its proof JSON from the refreshed Gallery artifacts.
  • Rebuilt archify.zip with Node.js 22; archive integrity and package-freshness tests pass.

Checklist

  • I used a minimal focused change and preserved existing typed JSON behavior unless the issue requires a contract change.
  • I ran the relevant targeted tests and npm test in archify/.
  • I added or updated a regression test for behavioral changes.
  • I checked generated artifacts and package freshness when their sources changed.
  • I removed secrets, private repository content, and customer data from fixtures and screenshots.

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.

[Bug]: Lifecycle rail appears as a false direct edge during semantic interactions

1 participant