From adea1f5d87591d176ad1263e551685a02d630a9a Mon Sep 17 00:00:00 2001 From: Qwynn Marcelle Date: Thu, 30 Jul 2026 17:52:32 -0400 Subject: [PATCH 1/2] feat(tally): consolidate judge journey UI, shared geometry tokens, dead code cleanup - Consolidate two-level header into single .tally-nav with brand, links, search, CTA - Add sticky section index with fade transition (visibility/opacity, not display) - Add hero breadcrumb (workspace.json / Showcase) - Hide Starlight built-in header on showcase page - Rename act 2 to 'The resolution', act 3 to 'The evidence changed the plan' - Enlarge opening proof visual to 60/40 split ratio - Remove third hero CTA (Try Tally ghost), keep only Read the story + Explore evidence - Wire search icon to /getting-started/ with Ctrl+K keyboard shortcut - Add shared geometry tokens (--wj-control-height, --wj-control-radius, etc.) to custom.css - Fix sidebar active state: flex centering instead of display:block - Standardize Tally nav controls to shared 44px height and radius - Remove dead trustSignals export and deleted Tally component files - Remove 887KB favicon.png (unused, SVG is the configured favicon) - Add homepage showcase section with failure-first framing - Add Tally Showcase link to footer - Clean up stale routeData.ts reference to showcase/tally.mdx - Update tests for new act titles, CTA count, nav structure, breadcrumb, sticky index --- astro.config.mjs | 1 + public/favicon.png | Bin 14037 -> 0 bytes public/favicon.svg | 38 ++- src/components/overrides/Footer.astro | 1 + src/components/tally/TallyActNav.astro | 56 ----- src/components/tally/TallyHero.astro | 121 ---------- src/components/tally/TallyHeroCtas.astro | 50 ---- src/components/tally/TallyNextActions.astro | 49 ---- src/data/tally-showcase.ts | 85 +------ src/pages/index.astro | 29 +++ src/pages/showcase/tally/index.astro | 248 +++++++++++++++----- src/routeData.ts | 17 -- src/styles/custom.css | 26 +- tests/tally.spec.ts | 86 ++++++- 14 files changed, 358 insertions(+), 449 deletions(-) delete mode 100644 public/favicon.png delete mode 100644 src/components/tally/TallyActNav.astro delete mode 100644 src/components/tally/TallyHero.astro delete mode 100644 src/components/tally/TallyHeroCtas.astro delete mode 100644 src/components/tally/TallyNextActions.astro diff --git a/astro.config.mjs b/astro.config.mjs index 620bdd0..44a8f0d 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -92,6 +92,7 @@ export default defineConfig({ { label: 'Showcase', items: [ + { label: 'Tally: Change Impact Cockpit', link: '/showcase/tally/' }, { label: 'Tally: Proof', link: '/showcase/tally/proof/' }, ], }, diff --git a/public/favicon.png b/public/favicon.png deleted file mode 100644 index 0382af5706a0bd30dae029e499220d397d3975fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14037 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 S!u#MqNODrjk|pBL-uw?(QFv1T diff --git a/public/favicon.svg b/public/favicon.svg index f044172..5b2cbbb 100644 --- a/public/favicon.svg +++ b/public/favicon.svg @@ -1,4 +1,34 @@ - - - w.json - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/overrides/Footer.astro b/src/components/overrides/Footer.astro index ef10344..6fd2075 100644 --- a/src/components/overrides/Footer.astro +++ b/src/components/overrides/Footer.astro @@ -23,6 +23,7 @@
  • Spec
  • Audit Tool
  • Examples
  • +
  • Tally Showcase
  • FAQ
  • diff --git a/src/components/tally/TallyActNav.astro b/src/components/tally/TallyActNav.astro deleted file mode 100644 index 9501e76..0000000 --- a/src/components/tally/TallyActNav.astro +++ /dev/null @@ -1,56 +0,0 @@ ---- -import { acts } from '../../data/tally-showcase'; ---- - - - - diff --git a/src/components/tally/TallyHero.astro b/src/components/tally/TallyHero.astro deleted file mode 100644 index c5b69b2..0000000 --- a/src/components/tally/TallyHero.astro +++ /dev/null @@ -1,121 +0,0 @@ ---- -import { productIdentity, assets, trustSignals, ctaLinks } from '../../data/tally-showcase'; - -const lockup = assets.lockup; -const hasDemoVideo = false; ---- - -
    - {lockup.alt} -

    {productIdentity.hero}

    -

    {productIdentity.supporting}

    - -
      - {trustSignals.map((signal) => ( -
    • - {signal.href ? ( - {signal.label} - ) : ( - {signal.label} - )} -
    • - ))} -
    -
    - - diff --git a/src/components/tally/TallyHeroCtas.astro b/src/components/tally/TallyHeroCtas.astro deleted file mode 100644 index 190cdbd..0000000 --- a/src/components/tally/TallyHeroCtas.astro +++ /dev/null @@ -1,50 +0,0 @@ ---- -import { ctaLinks } from '../../data/tally-showcase'; - -const hasDemoVideo = false; ---- - - - - diff --git a/src/components/tally/TallyNextActions.astro b/src/components/tally/TallyNextActions.astro deleted file mode 100644 index ed656b2..0000000 --- a/src/components/tally/TallyNextActions.astro +++ /dev/null @@ -1,49 +0,0 @@ ---- -import { nextActions } from '../../data/tally-showcase'; ---- - -
    - {nextActions.map((action) => ( -
    -

    {action.role}

    -

    {action.title}

    -
      - {action.steps.map((step) => ( -
    1. {step}
    2. - ))} -
    - -
    - ))} -
    - - diff --git a/src/data/tally-showcase.ts b/src/data/tally-showcase.ts index bdbe16a..ec9a60d 100644 --- a/src/data/tally-showcase.ts +++ b/src/data/tally-showcase.ts @@ -219,7 +219,7 @@ export const narrativeActs: NarrativeAct[] = [ { number: 2, id: 'the-mechanism', - title: 'How Tally resolves source context', + title: 'The resolution', kicker: '02', asset: 'explainer02', composition: 'full-width', @@ -230,7 +230,7 @@ export const narrativeActs: NarrativeAct[] = [ { number: 3, id: 'the-changed-decision', - title: 'The decision that changed', + title: 'The evidence changed the plan', kicker: '03', asset: 'explainer03', composition: 'before-after', @@ -262,15 +262,6 @@ export const narrativeActs: NarrativeAct[] = [ }, ]; -// ─── Trust signals (hero) ─── - -export const trustSignals = [ - { label: '44 stable claim IDs', href: '/showcase/tally/proof/' }, - { label: 'Immutable commit-pinned evidence', href: null }, - { label: 'No warehouse, no credentials', href: null }, - { label: '35/35 adapter parity checks', href: null }, -] as const; - // ─── Stable claim records (from docs/claim-ids.json v2 at pinned revision) ─── export type TallyClaim = { @@ -378,78 +369,6 @@ export const limitations: TallyLimitation[] = [ { id: 'one-subject', statement: 'One subject per golden fixture. The nested corpus is exercised by a perturbation test and the live evidence package.', source: 'test/fixtures/golden/', claimId: 'TALLY-CLAIM-044' }, ]; -// ─── Next action by role ─── - -export type NextAction = { - role: string; - title: string; - steps: string[]; - links: { label: string; href: string }[]; -}; - -export const nextActions: NextAction[] = [ - { - role: 'Judge', - title: 'Verify the claims in 60 seconds', - steps: [ - 'Open the golden root-level fixture.', - 'Check the code block: repositoryRelativePath is models/customers.sql, method is manifest-join.', - 'Check the evidence block: tier is VERIFIED, one record with checkExecuted true.', - 'Check the writeback block: succeeded true, bothStatesRead true, noop true.', - 'Check the unavailable block: two entries, each stating what is missing and why.', - ], - links: [ - { label: 'Golden root-level fixture', href: `${sourceBaseUrl}/test/fixtures/golden/change-impact-event.root.json` }, - { label: 'Judging guide', href: `${sourceBaseUrl}/JUDGING.md` }, - ], - }, - { - role: 'Adopter', - title: 'Run the join against your own DataHub', - steps: [ - 'Clone the datahub-agent repository.', - 'Install dependencies: npm install.', - 'Start a local DataHub instance (requires Docker).', - 'Run the emitter against your dbt project.', - 'Inspect the emitted ChangeImpactEvent and writeback receipt.', - ], - links: [ - { label: 'Quickstart guide', href: `${sourceBaseUrl}/docs/quickstart.md` }, - { label: 'Clean quickstart proof', href: `${sourceBaseUrl}/evaluation/clean-quickstart-proof.md` }, - ], - }, - { - role: 'Implementer', - title: 'Integrate workspace.json with your tool', - steps: [ - 'Read the change-impact event contract.', - 'Consume the Zod-validated CockpitViewModel.', - 'Run the test suite: npm test.', - 'Run the typecheck and clean-room audit.', - 'Verify adapter parity: 35 of 35 checks pass.', - ], - links: [ - { label: 'Source repository', href: `https://github.com/${sourceRepository}` }, - { label: 'Cockpit architecture', href: `${sourceBaseUrl}/docs/cockpit-architecture.md` }, - ], - }, - { - role: 'Contributor', - title: 'Reproduce the evaluation', - steps: [ - 'Clone the proof corpus at the pinned commit.', - 'Run the node-type coverage probe.', - 'Verify the HAC-152 checksums.', - 'Run the full verification suite: npm test, typecheck, clean-room, parity.', - 'Read the claim ledger for every figure and its verification command.', - ], - links: [ - { label: 'Claim ledger', href: `${sourceBaseUrl}/docs/claims.md` }, - { label: 'Live evidence package', href: `${sourceBaseUrl}/evaluation/hac-152/` }, - ], - }, -]; - // ─── CTA links ─── export const ctaLinks = { diff --git a/src/pages/index.astro b/src/pages/index.astro index 9506b7d..675b6bc 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -370,6 +370,35 @@ const exampleCode = `{ + +
    +
    +

    Showcase

    +

    + A silent zero, found and fixed. +

    +
    +
    +

    + DataHub knows lineage and schema. Git knows which files change together. + The join sounds trivial: a dbt model is a file. But when a dbt project + lives in a subdirectory, every lookup misses and the join returns zero + rows, silently, with no error. Tally is a + Change Impact Cockpit that resolves the mismatch, joins catalog context + with repository evidence, and attaches a bounded receipt to every claim. +

    +

    + Read the Tally showcase for the five-act + narrative: the silent failure, the mechanism, the evidence that changed + the plan, the verifiable receipt, and the honest evidence boundary. +

    +
    + +
    + {recentPosts.length > 0 && (
    diff --git a/src/pages/showcase/tally/index.astro b/src/pages/showcase/tally/index.astro index 6e3c91a..a2b003a 100644 --- a/src/pages/showcase/tally/index.astro +++ b/src/pages/showcase/tally/index.astro @@ -26,8 +26,8 @@ const cockpitUrl = ctaLinks.liveEvidence; template: 'splash', tableOfContents: false, head: [ - { tag: 'meta', attrs: { property: 'og:image', content: '/tally/og-1200x630.png' } }, - { tag: 'meta', attrs: { name: 'twitter:image', content: '/tally/og-1200x630.png' } }, + { tag: 'meta', attrs: { property: 'og:image', content: ogImage } }, + { tag: 'meta', attrs: { name: 'twitter:image', content: ogImage } }, { tag: 'meta', attrs: { property: 'og:type', content: 'website' } }, { tag: 'meta', attrs: { property: 'og:site_name', content: 'workspace.json' } }, { tag: 'meta', attrs: { property: 'og:url', content: 'https://workspacejson.dev/showcase/tally/' } }, @@ -41,23 +41,37 @@ const cockpitUrl = ctaLinks.liveEvidence; hasSidebar={false} >
    - {/* ─── Top navigation ─── */} + {/* ─── Top navigation (consolidated: replaces Starlight's built-in header) ─── */} + {/* ─── Sticky section index (appears after scroll) ─── */} + + {/* ─── Hero ─── */}
    - {/* ─── Product screenshot ─── */} -
    -

    - Tally resolved the dataset to its exact repository-relative path, joined - lineage and code impact, and surfaced three declared evidence gaps. -

    -
    - - Tally Impact review for game_events showing exact source resolution, three declared evidence gaps, and upstream and downstream lineage. - -
    - - View full-resolution screenshot - - -
    - {/* ─── Narrative acts with varied composition ─── */} {narrativeActs.map((act) => { const asset = assets[act.asset]; @@ -254,6 +239,35 @@ const cockpitUrl = ctaLinks.liveEvidence; ); })} + {/* ─── Product screenshot (after narrative so the judge sees failure before repair) ─── */} +
    +

    + Tally resolved the dataset to its exact repository-relative path, joined + lineage and code impact, and surfaced three declared evidence gaps. +

    +
    + + Tally Impact review for game_events showing exact source resolution, three declared evidence gaps, and upstream and downstream lineage. + +
    + + View full-resolution screenshot + + +
    + {/* ─── Why this matters ─── */}

    Why this matters

    @@ -294,6 +308,30 @@ const cockpitUrl = ctaLinks.liveEvidence;

    +