visual: motion landing pass (trust surfaces knocked out) + browser-evidence fixes + note-surface-dna - #251
Merged
Merged
Conversation
…aces Score-fix-rescore against the node-platform note-surface corpus (three M2 design rules extracted from an owner-authorized Mew source checkout, with Evernote/Fabric counterexamples). Receipts validated by reference-corpus-gate (10 records, 63 citations, exit 0) and committed under docs/design/note-surface/. rule-stream-not-chrome (1 -> 3): NoteworthyInbox items and NotebookDigestWorkbench blocks drop per-entry card chrome (background, border, radius) for divider-separated stream rows — the treatment the full-screen notebook detail view already used. Failed/researching/ needs_review state styling is retained: that is trust-surface signaling, not entry chrome. The digest's review aside stays (patch previews are proposal/diff trust surfaces) and holds the score at 3, on the record. rule-single-accent-inline (1 -> 3): the foreign periwinkle #b8c7ff on typed-block labels becomes var(--accent-ink) — NodeRoom's own terracotta, never Mew's teal; the accent-tinted index chip on every block goes achromatic; inbox entity names in the why-panel become the surface's one inline accent carrier. The oversize inbox popover shadow was not among the lowest criteria and stays unimproved at 2, honestly. rule-capture-always-armed (1 -> 3): the ctrl/cmd+K palette now lists "Capture a thought" first — buildWallCapture creates an empty wall capture through the CAS spine (no classification question before the first keystroke), opens the wall, and focuses the new post-it. Honest absence: rooms without a wall list no dead command; mobile persistent affordance remains absent and scores 0, unimproved. Suite: typecheck clean; vitest 2672 passed / 3 failed — the same three load-dependent flakes as the untouched origin/main baseline (2668/3), each passing in isolation. Trust-surface selftest PASS before and after; live gate after: boot-FAILED trust surface PASS, landing NOT_RUN (no trust surface qualifies there). New scenario suite tests/captureThought covers empty-text capture, 50-capture burst uniqueness, shared color cycle, and CAS replay refusal (4/4 passing). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… springy drill feedback One-shot transform/opacity motion on the demo-camera surfaces, built on motion/react (motion@12, already a dependency): - src/ui/motion/motionPrims.tsx (new): MotionRoot (MotionConfig reducedMotion="user" — under prefers-reduced-motion every transform is dropped and entrances degrade to opacity-only), Rise (fade+rise entrance, mount or whileInView once), Settle (spring settle for committed numbers), PressButton (hover/tap scale spring). - Landing.tsx: hero staggered entrance (eyebrow → h1 → lede → CTA row → trust chips, demo panel), feature cards scroll-staggered. Replaces the two NodeReveal usages on this surface. - LandingStory.tsx (#story): hero stagger, proof board + closing CTA scroll reveals. StoryStage untouched (sticky canvas — no transform ancestors added). - StoryLab.tsx: the three drill panels reveal on scroll; drill buttons get springy hover/tap; conflict/lease/proposal/approved result cards spring in; step lists stagger. CSS :active transform removed in favor of the spring. All copy, testids, and the literal reason:'locked' / semantic_rebase tokens untouched. - StoryQuickDemo.tsx: variance + note cells spring-settle on commit; agent turns rise into the feed. Verified: tsc clean; noClobberWedge + wedge-drill 3/3; Playwright drive of all three drills through the motion wrappers passes; reduced-motion run ends at opacity:1 / transform:none. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every deletion grep-verified (zero runtime importers), per the 11-agent
surface audit + manual re-verification:
- MobileScreens: dead Room/Coach/ExtractCard screens + their toJSON/
highlightJSON helpers (~330 loc); MobileChat: unmounted Composer (the
live path is MobileApp's inline composer); dead scopeTable re-exports;
ExtractCard-only CSS block in mobile.css
- panels/Artifact.tsx: unmounted Research + ResearchLegacy (renders via
GenericSheet since the :514 comment; helpers kept — GenericSheet uses them)
- trace: TraceStorybook + LoopRewardPanel + their orphan test (classic
tested-but-never-constructed; proofloopArtifacts' renderTraceStorybook
is an unrelated local string renderer and is untouched)
- Chat.tsx: dead coach prop (Coach is a RoomShell mode since the split)
- storyTape.ts: dead Actor/MEMBERS/AGENTS/LandingEvent/EVENT_TAPE exports
- primitives/designSystem: 6 dead exports + their now-orphaned CSS blocks
- styles.css: 6 zero-consumer namespaces (r-excel-*, r-sidebar-*,
r-activity-*, r-pill-auto, r-feature, r-beat-desc)
- LeftRail: {false && ...} dead JSX (dup binder-review-queue testid) +
voided sub helper
- stale-comment hygiene (ExcelGridSheet references), .gitignore dedupe,
archived the obsolete kimi handoff (targets a component deleted in d022d42)
Test-floor repairs landed with measurements:
- githubActionsRuntimePins: expected ref updated for the node-platform ->
NodeKit repo rename (5de0508); same immutable SHA pin
- proofloop longrun/dogfood tests: root cause was re-parsing a grown ~15MB
.proofloop longrun state.json per plan build (2.54s measured); readJson
now memoized by path+mtime; per-file timeout 5s -> 30s with the numbers
in-file
- nodebookWorkspaceProjection: 60s -> 180s with cold/warm measurements
(70.95s cold transform of six lazy renderer plugins, ~7s warm)
NOT deleted (kept-legacy, documented): split-pane kind-tab strip (e2e-pinned),
legacy Note editor (docs/STACK.md:13), agent-operation-stream fallback (live
safety net), notebook envelope lane (needs a wire-or-collapse decision),
initials() 4x dedup REFUTED (implementations differ on separators/single names).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- restore commit/createElement/deleteElement CAS helpers (ResearchLegacy ends 15 lines earlier than the audit's range; the splice swallowed them) - restore ExtractCard + toJSON/highlightJSON + extract CSS: audit's zero-consumer claim REFUTED — SampleCapture renders it (MobileScreens:221) - drop freshnessLabel/freshnessClass (only Research used them), orphaned scopeTable fn + ScopeLane type in MobileSheets, unused MobileChat imports - tests: the vi.setConfig insertion had silently failed; now actually applied Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…al/motion-landing
…face Rungs named (motion-ladder): - Rung 3 (reviewed recipe, motionPrims.tsx): hero staggered Rise entrances, panel Rise-in-view reveals, Settle spring on a just-committed cell value, PressButton hover/tap springs on drill run/reset, chat-turn + step-log arrivals. Rung 2 is insufficient only where spring physics or shared viewport-once choreography is the point; motion@12.42.2 was already a main dependency — no new library decision. - Reduced motion: MotionConfig reducedMotion="user" — transforms drop, entrances collapse to fades of the same design (lane evidence: after-reduced-motion-story.png, re-verified in this pass). Knocked out (NO MOTION on believe/approve surfaces, regardless of rung): - .sl-conflict verdict pane, .sl-lease hold status, .sl-chip rebase proposal (its Approve is a plain button again), .sl-evi approved evidence, and the rs-proof-section Rise — a proposal may animate in elsewhere; the surface carrying the decision may not. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Browser-review findings fixed (before/after in .qa/evidence/20260829-ui-endtoend): - landingStory floats: rsPop keyframes end at transform:none and were clobbering placement transforms (one-owner violation) — the L6 resolution card clipped the 1440 viewport because its translateX(-50%) died at animation end. Placement now uses the independent translate property. -tr floats sit above the card instead of on the sheet header. - StoryLab try-it-live panels: constrained to the shared 760px column (were full-bleed after the first drill card). - story hero: agents highlight retokened #8C92E0 indigo -> #D97757 terracotta (agent provenance token; purple stays presence-only). - chat agent receipts: the amber Needs-review chip is now the review affordance (button opening the artifact at the cell) instead of a status span beside one. - investigation tiles: an unrun verifier renders em dash, a measured zero stays 0. - live graph rail: element labels humanized (raw r_* ids no longer leak), footnote bumped to a legible token size. - NodeBook tab: honest empty state when the room has zero visual artifacts — the vendored surface was rendering three panes of the same text list. - landing story-tape rail: scratchnode.live -> noderoom.live, inert Previous arrow removed; room-tour brand strings NodeAgent -> NodeRoom (copy only). Refuted own findings (Browser-pane input artifacts, probes green in Playwright): Enter-to-commit works; the +N overflow menu opens with all items. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dit polices StoryLab/StoryQuickDemo no longer import motion/react directly — feed/log arrivals go through a named Arrive prim (one vocabulary, one boundary). design:audit green (was 3 findings). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…al/motion-landing # Conflicts: # src/ui/workArtifacts/work-artifacts.css
…er; repoint line-pinned citations; idle verifier tiles read em dash - motion whileInView threw an uncaught IntersectionObserver ReferenceError in jsdom and unmounted the entire App tree (roomFullNoFlash went red); the guard lives in the shared prim so every caller is covered, and old engines get the same content with a mount fade instead of a scroll reveal. - .tours + START_HERE citations repointed after Chat.tsx/Landing.tsx line shifts (the checkable-citations gate caught the drift). - investigationSurface idle-case expectation updated 0 -> em dash to match the unrun-verifier-is-not-a-measured-zero change (completed-run zeros still assert as numbers). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Scaffold Handoff — For Your Coding Agent
Immutability CheckMode: advisory ✅ No immutable files were modified in this branch. Changed Files
Needs Adversarial Review — Do NOT Apply YetThese proposals passed the reject check but have not been approved by
Safety Boundary
Immutable files (never modify):
Scaffold files (safe to modify):
|
npm audit clean; the mermaid render path (nodebookWorkspaceProjection, 5 tests) re-run green against the bumped sanitizer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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 (stacked on #)
Receipts
🤖 Generated with Claude Code