Skip to content

Replace homepage hero code selector with GSAP agent-loop animation - #21134

Merged
cnunciato merged 24 commits into
masterfrom
jeffmerrick/animated-hero-gsap
Aug 27, 2026
Merged

Replace homepage hero code selector with GSAP agent-loop animation#21134
cnunciato merged 24 commits into
masterfrom
jeffmerrick/animated-hero-gsap

Conversation

@jeffmerrick

@jeffmerrick jeffmerrick commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Proposed changes

Replaces the homepage hero's code selector composite with a GSAP-driven inline SVG that plays the agentic loop from design's storyboards (Figma "Storyboards R2", node 752:19223): a prompt goes to an agent, the agent writes the VPC program in a chosen language, CI checks pass, a platform agent runs pulumi up under policy, and the AWS VPC diagram grows in. One ~23s pass, then it loops with a fresh agent and language.

  • Every pass (page load and each loop) randomizes both leads. Agents are weighted 66/15/8/4/3.5/3.5 across Claude Code, Codex, Cursor, opencode, Copilot, and Neo; languages by usage share with brand-new HCL boosted above YAML: TypeScript 51, Python 29, Go 7.5, C# 5, HCL 3.5, YAML 3, Java 1. Both tables live in hero-animation.ts (AGENT_WEIGHTS/LANG_WEIGHTS). The static no-JS/reduced-motion frame always shows Claude Code with no language chrome.
  • The SVG is authored in its finished state, so no-JS and prefers-reduced-motion render the final frame statically with no layout shift; the animation pauses offscreen and on hidden tabs.
  • The seven editor examples (one per language, adapted from the classic code-selector hero) and the terminal stream are plain-text sources at the top of data/hero_agent_loop.yaml — editing the content means editing those and running yarn --cwd theme gen:hero-text, which re-highlights them with shiki (min-light, each language's own grammar plus bash) and rewrites the generated sections underneath. shiki is a devDependency used only by that script; nothing highlight-related runs at build or page-load time. The generator fails if an example outgrows the panel's 13 rows - note: adding or removing terminal rows means shifting TERM_SCROLL_END by 18px per row.
  • The generated runs anchor every text segment to an explicit column instead of carrying leading spaces, since hugo --minify (preview/production only) collapses whitespace inside the tspans.
  • template-hero.html gains hero_animation, plus an explicit hero_visual key ("animation", "code", "video", "image") so alternate visuals can stay fully configured while one is active; pages without it keep the existing precedence. The homepage keeps its full code_snippets block configured, so hero_visual: code restores the classic selector in a one-word change. The composite itself is untouched and still used by /product/infrastructure-as-code, /gcp, /azure, and /kubernetes.
  • New hero-animation webpack entry loaded only by the homepage, ~31KB gzipped including the new gsap dependency (core only).
  • The Monaspace preload no longer skips the homepage, since the hero now types monospace above the fold.
  • Strokes use vector-effect: non-scaling-stroke except the dash-drawn rects, since Chrome measures their dashes in screen units under that effect.

🤖 Generated with Claude Code

jeffmerrick and others added 6 commits August 25, 2026 14:28
The homepage hero's right slot becomes a single GSAP-driven inline SVG
narrating the agentic loop from design's 7-frame storyboard (Figma
Storyboards R2, 752:19223): a prompt goes to an agent, the agent writes
the Pulumi VPC program, CI checks pass and roll up into a summary pill,
a platform agent runs pulumi up under policy, and the AWS VPC diagram
grows in. Plays once (~20s), holds on the finished diagram, loops.

- The scene is one morphing surface (tile -> code panel -> CI pill) plus
  a second shell (terminal -> policy pill); geometry is lifted verbatim
  from the storyboard exports, and code/terminal text is re-authored as
  per-line <text> elements at exact Figma metrics (Monaspace Neon
  7.44141px advance), revealed by clip rects — no JS text measurement.
- Authored in the finished frame-7 state, so prefers-reduced-motion and
  no-JS readers get the static finished frame with no layout shift; the
  script pauses offscreen and on hidden tabs.
- template-hero gains hero_animation as the highest-precedence right-slot
  option (split layout); the code-snippets composite stays for the four
  other pages that use it. The homepage's removed code_snippets block is
  preserved in the workspace .context for reference.
- Monaspace preload no longer skips the homepage — the hero now types
  monospace above the fold.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ixes

Round of design feedback on the agent-loop hero:

- The program and pulumi up stream now live in data/hero_agent_loop.yaml
  as colored text runs; a single _code-lines.html partial derives every
  tspan x position from monospace column math (verified within 0.001px
  of the Figma export), so editing the examples means editing plain
  YAML strings. The seven scene partials collapse into agent-loop.html
  plus that renderer.
- Subnet cubes now extrude isometrically: the top face drops onto the
  bottom face and rises while the vertical edges scale up in lockstep,
  instead of the whole cube zooming in from a point.
- The viewBox crops the 744x550 canvas to the artwork bounds
  (98 22 553 506), so the scene fills its frame — noticeably larger on
  mobile.
- Strokes get vector-effect: non-scaling-stroke, except the three
  dash-drawn rects (tile working stroke, badge borders): Chrome measures
  their pathLength-normalized dashes in screen units under that effect,
  which blanked the code panel border and leaked pill-border slivers.
  Dashes are also cleared after each draw-on completes, and the hidden
  dash state carries margin so no boundary sliver parks visible.
- Fixed the pending spinner arcs orbiting off-center (wrong sweep flag
  put the arc's center a radius away from the solid dot).
- Fixed the block cursor left floating on the next loop's opening frame:
  zero-duration caret sets rewound to stale values when the playhead
  wrapped, so caret visibility now runs through callbacks that reset()
  alone can override; the prompt caret also appears with the first
  typed character rather than ahead of it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two artwork corrections from the storyboard exports: the GitPullRequest
icon sits 10px left of its exported position (the slide-in lands on the
same offset), and us-east-2a now paints in front of us-east-2b — the
cubes' DOM order is the isometric depth order, with data-order carrying
the original left-to-right extrusion stagger.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Each pass (page load and every loop) now picks the agent that answers
the prompt: Claude Code 66%, Codex 15%, Cursor 8%, opencode 4%, GitHub
Copilot 3.5%, Pulumi Neo 3.5%.

- All six tiles are now uniform (rect + data-tile-logo group, including
  a Claude Code tile authored at tile coordinates); shell A starts at
  the chosen tile's cell, derived from its rect at pick time.
- The handover is a single callback right before the morph: the chosen
  tile's logo moves into the glyph wrapper at unchanged user-space
  coordinates while shell A's fill replaces the tile rect — invisible
  swap, and every tween keeps fixed targets. reset() sends the logo
  home and re-picks on each loop.
- Logos anchor by bbox bottom-center to the shared perch point (the
  storyboard's stations are all "bottom edge ~12.6px above the surface
  below"), so no per-logo tuning; the viewBox gains 8px of headroom for
  the tallest marks at the plate station. The robot stays baked in as
  the static finished frame for no-JS and reduced motion.
- The timeline uses repeatRefresh with function-based glyph/halo values
  so per-pass geometry re-records on every loop; proxy objects the
  typing and roll-up tweens mutate are rewound by reset().
- Fixes the missing CI checks, tests badge, and policy badge from the
  second loop on: the closing collapse fades those groups and reset()
  never restored their visibility.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The four pending spinners rotate at uneven phase offsets so they no
longer read as one synchronized ring, and the pulumi up stream gains
the Policy Packs run table (cis-aws, nist-aws, pci-dss-aws,
iso-27001-aws — matching the four policy stacks below) between the
Resources summary and Duration. The scroll end extends to land on the
longer tail.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Comments removed from hero-animation.ts, the hero SCSS, and the scene
partial's section banners (the partial and data-file headers stay — they
document the calling/editing interface). Where a comment was doing
naming work the code now does it: agent weights are keyed by data-agent
instead of positional order, the hidden dash state is a named constant,
and the PR icon's resting offset is named rather than baked into tween
endpoints.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The homepage's code_snippets composite config returns to content/_index.md
instead of living only outside the repo, and template-hero gains an
explicit hero_visual key ("animation", "code", "video", "image") so
alternate visuals can stay fully configured while one is active — on the
homepage, hero_visual: code restores the classic language selector in a
one-word change. Pages without hero_visual keep the existing precedence
(hero_animation > code_snippets > video_youtube_id > image).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The editor and terminal examples are now plain-text sources at the top
of data/hero_agent_loop.yaml; `yarn --cwd theme gen:hero-text`
re-highlights them with shiki (min-light theme, ts + bash — the same
scheme the storyboards used; the editor output matches the Figma export
character for character) and rewrites the generated run sections the
partial renders. shiki is a devDependency used only by the script, so
the page bundle is unchanged (~30KB gz).

Regenerating normalizes a few terminal colors to canonical
min-light-bash: multi-word phrases like "Loading policy packs..." keep
only the command word purple, the Policy Packs table gets purple pack
names and blue versions, and "1m47s" drops its blue digit. Text and
geometry are byte-identical.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@pulumi-bot

pulumi-bot commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Your site preview for commit 288fe06 is ready! 🎉

http://www-testing-pulumi-docs-origin-pr-21134-288fe067.s3-website.us-west-2.amazonaws.com

Changed pages:

@pulumi-bot

pulumi-bot commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Lighthouse Performance Report

Commit: 288fe06 | Metric definitions

Page Device Score FCP LCP TBT CLS SI
Homepage Mobile 🟡 53 3.5s 3.5s 1244ms 0.004 7.0s
Homepage Desktop 🟡 85 1.3s 1.7s 160ms 0.003 1.5s
Install Pulumi Mobile 🟡 57 7.5s 16.1s 77ms 0.000 7.5s
Install Pulumi Desktop 🟢 91 1.2s 1.6s 0ms 0.023 1.2s
AWS Get Started Mobile 🟡 57 7.8s 16.0s 20ms 0.000 7.8s
AWS Get Started Desktop 🟢 93 1.1s 1.4s 0ms 0.045 1.1s

Each pass now also picks a uniform-random language alongside the
weighted-random agent, per the updated storyboards (frames 1-2):

- A row of seven language tiles (TypeScript, Python, Go, C#, Java, HCL,
  YAML) enters with the agent grid; after the agent takes the double
  outline, the chosen language gets the same selection chrome and the
  unselected agent and language logos recede to violet-400.
- The chosen language's icon travels to the code panel's upper-right
  corner during the morph (same adoption mechanic as the protagonist
  glyph, anchored by bbox center) and fades with the panel at roll-up.
- data/hero_agent_loop.yaml carries one example per language, adapted
  from the classic code-selector hero to fit the panel's 13 rows; the
  shiki generator highlights each with its own grammar (all seven land
  within min-light's existing 7-color palette) and fails the run if an
  example outgrows the panel.
- The typing beat is one fixed-duration progress tween mapped onto the
  active language's line structure at pick time (blank source lines
  become pauses), so the timeline stays static while line counts and
  lengths vary per pass; long lines clip at the panel edge.
- reset() kills any in-flight recolor tweens before restoring logo
  fills, so a stale dim can never carry into the next pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ted picks

The language row becomes the storyboard's label pill (same geometry as
the prompt pill): TS PY GO C# JAVA HCL YAML, centered flow layout with a
constant gap derived from the monospace metrics. On selection the chosen
label gains its 18px icon and a rounded ring, expands to its full name
where one exists (TYPESCRIPT, PYTHON), and the row reflows around it
while the other labels recede to violet-400; the icon then travels to
the code panel's corner, scaling from 18px to its 23.4px panel size via
one manual translate+scale transform. Layout positions are computed per
pass, so both storyboard states reproduce exactly (TS-selected verified
against frame 1's coordinates).

Language picks are now weighted by real usage share with brand-new HCL
boosted above YAML: TypeScript 51, Python 29, Go 7.5, C# 5, HCL 3.5,
YAML 3, Java 1. The agent picker shares the same weighted-pick helper.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The language selection now settles for ~0.8s — ring, icon, and expanded
name all on screen — before the grid collapses and the tile morphs into
the code panel; the write beat and everything after shift accordingly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
15px instead of the storyboard's 23.4, centered at 615.5,172.5 — clear
of the second code line even at full width.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…bels

The selection reflow stopped moving the other language labels from the
second loop on: the slide used per-target function-based x values, which
did not re-evaluate under repeatRefresh. It now runs through a proxy
tween whose onUpdate reads the current pass's layout, the same pattern
the roll-up and icon travel already use; verified across three loops
with different picks.

The rest-state labels are also justified across the full pill instead of
grouping in the middle, which makes the selection's gather-and-reflow
much more visible.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Craft fixes from a review against the piece's motion contract, all in
the anticipation / never-opacity-only family:

- The language selection ring pops from inset geometry instead of
  fading in place (the same treatment the agent halo gets), and the
  language icon scale-settles in with back.out rather than fading.
- The chosen agent tile dips to 0.965 as its working stroke starts
  drawing — the press that causes the outline.
- The PR icon slides out the way it slid in at the merge swap.
- The closing collapse adds a slight scale drift on the diagram so the
  exit has depth.

Ring geometry verified across loops with different picks in both
orders.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The reset guard for the spawned icon pop used gsap.killTweensOf(iconT),
which also killed the timeline's travel tween on the same proxy — alive
on loop 1 only because reset first runs before the timeline exists. The
pop is now tracked and killed individually. Icon transform verified
identical at the panel corner across three loops with mixed picks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Preview and production builds run hugo --minify, whose HTML minifier
strips xml:space and collapses whitespace inside the SVG tspans — the
leading-pad spaces that carried code indentation and terminal column
alignment vanished on deploys while local dev (no minify) looked fine.

Generated runs are now [color, startColumn, text] segments: the
renderer positions every tspan from its column offset, and segment text
never begins with a space or contains consecutive spaces (single
interior spaces survive minification). Verified by rebuilding with
--minify and reconstructing all seven editor examples character for
character from the minified output.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Conflicts were confined to theme/package.json (both sides appended a
script — kept gen:hero-text and test-support-form) and theme/yarn.lock
(regenerated via yarn install's automatic lockfile merge).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jeffmerrick
jeffmerrick marked this pull request as ready for review August 26, 2026 19:56
@jeffmerrick
jeffmerrick requested a review from cnunciato August 26, 2026 19:57
@github-actions github-actions Bot added the review:triaging Claude Triage is currently classifying the PR label Aug 26, 2026
@jeffmerrick
jeffmerrick requested a review from CamSoper August 26, 2026 19:57
@github-actions github-actions Bot added domain:website PR touches marketing, pricing, legal, or competitive landing pages domain:mixed PR touches more than one domain domain:infra PR touches workflows, scripts, infra, Makefile, or build config review:in-progress Claude review is currently running and removed review:triaging Claude Triage is currently classifying the PR labels Aug 26, 2026
data/hero_agent_loop.yaml is now purely the human-editable plain-text
sources; the generator writes the colored run segments to
data/hero_agent_loop_generated.yaml (with a GENERATED — DO NOT EDIT
header), and the hero partial renders from the generated file. No more
mixed file where hand edits below a marker would be silently
overwritten.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-08-26T20:03:41Z

Tip

Summary: This PR replaces the homepage hero's language-selector code composite with a GSAP-driven inline SVG that plays the agentic loop (prompt → agent writes a VPC program → CI passes → pulumi up under policy → the AWS diagram grows in), plus the Hugo plumbing to select it: a new hero_visual key in template-hero.html, the hero-animation/agent-loop.html scene partial and its _code-lines.html helper, the data/hero_agent_loop.yaml text source and its shiki-based regenerator, a new webpack entry, and the gsap dependency. Almost all of it is code and design geometry rather than reader-facing prose, so the wrongness that would matter here is a hero that renders wrong or not at all — a scene partial that can't resolve, an editor example that doesn't fit its panel, or the static/no-JS/reduced-motion frame failing to appear. The reviewed passes were the code-and-template read of every changed file, the frontmatter sweep over content/_index.md, and external verification of the claims in the homepage's code snippets and the new dependency pins; nothing contradicted. The two findings below are both accuracy-of-documentation issues in the PR's own new code, not rendering breaks.

Review confidence:

Dimension Level Notes
mechanics MEDIUM Templates, SCSS, and the TypeScript timeline were read end to end, but an animation this geometry-heavy can only really be judged in a browser — the visual result, timing, and the reduced-motion/no-JS frames need a human look at a preview build.
facts HIGH
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 23 of 128 claims verified (1 unverifiable, 0 contradicted) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 29 Pass 1, 0 Pass 2, 99 Pass 3 (verified 4, contradicted 0, unverifiable 95).
  • Cited-claim spot-checks: not run (no cited claims)
  • Frontmatter sweep: ran on body + meta_desc
  • Temporal-trigger sweep: ran (recency words present in diff; spot-check in-review)
  • Code execution: not run (no static/programs/ change)
  • Code-examples checks: not run (no fenced code blocks in content files)
  • Editorial-balance pass: not run (not under content/blog/)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
0 2 0 0

🔍 Verification trail

128 claims extracted · 23 verified · 1 unverifiable · 0 contradicted
  • L18 in content/_index.md "Pulumi's tools let AI agents ship infrastructure faster while doing what they do best, without letting them 'go off the rails.'" → ➖ not-a-claim (evidence: This is marketing positioning language from Pulumi's own homepage describing their product philosophy/pipeline for AI agents and infrastructure tooling, not a falsifiable technical or factual assertion attributable to a third party.; source: content/_index.md)
  • L21-23 in content/_index.md "Setting the hero_visual field to 'animation' plays the agent-loop scene in the hero section, while setting it to 'code' runs the classic language-selector…" → ➖ not-a-claim (evidence: The claim restates the file's own code comment: "The right slot: "animation" plays the agent-loop scene; switch to "code" to run the classic language-selector composite configured below." This is a faithful description of the PR…; source: repo:content/_index.md)
  • L21-22 in content/_index.md "Setting the hero_visual field to 'code' runs a classic language-selector composite that is configured below it in the same file." → ➖ not-a-claim (evidence: The file itself contains the comment: '# The right slot: "animation" plays the agent-loop scene; switch to "code" # to run the classic language-selector composite configured below.' The claim is a restatement of the PR author's own…; source: repo:content/_index.md)
  • L27 in content/_index.md "The code_aspect_ratio value used for the hero code visual is '666/513'." → ➖ not-a-claim (evidence: (escalated from pass3) Line 27 of content/_index.md literally reads code_aspect_ratio: "666/513" — this is a front-matter configuration value authored by the PR itself (a layout/design parameter), not a falsifiable factual assertion…; source: repo:content/_index.md)
  • L28-32 in content/_index.md "The code_offsets configuration for the hero code visual is top 0%, right 0%, left 23%, and bottom 30%." → ✅ verified (evidence: (escalated from pass3) content/_index.md lines 28-32 show: code_offsets: top: "0%", right: "0%", left: "23%", bottom: "30%" — an exact match to the claim.; source: repo:content/_index.md)
  • L30 in content/_index.md "right: '0%'" → ➖ not-a-claim (evidence: "right: 0%" appears to be a CSS/positioning value (likely in a style block or shortcode parameter) in content/_index.md, not a factual or numerical assertion about the world.; source: content/_index.md L30)
  • L31 in content/_index.md "left: '23%'" → 🤷 unverifiable (evidence: The extracted claim is a bare "23%" figure with no surrounding context (subject, unit, or comparison) to identify what statistic it represents on the Pulumi homepage. Web searches for Pulumi homepage statistics did not surface any "23%"…; source: WebSearch ran query "Pulumi.com homepage stats 23% OR faster OR engineers landing page"; top results didn't address the claim; intuition: Claim text is a bare percentage with no context (regex-extracted fragment), making it impossible to determine what…)
  • L32 in content/_index.md "bottom: '30%'" → ➖ not-a-claim (evidence: "bottom: 30%" appears to be a layout/styling property (e.g., CSS positioning value in front matter for an image or element placement) rather than a falsifiable factual or statistical assertion; no subject or context ties it to a…; source: content/_index.md L32 (regex-extracted front matter field))
  • L39-43 in content/_index.md "The TypeScript code snippet imports @pulumi/aws and @pulumi/awsx, creates a VPC named 'vpc' using awsx.ec2.Vpc, and retrieves available availability zones…" → ✅ verified (evidence: Lines 39-43 of content/_index.md show exactly: import * as aws from "@pulumi/aws";, import * as awsx from "@pulumi/awsx";, const vpc = new awsx.ec2.Vpc("vpc");, and `const azs = await aws.getAvailabilityZones({ state: "available"…; source: repo:content/_index.md)
  • L42 in content/_index.md "Across all shown language examples (TypeScript, Python, Go, C#, Java), instantiating a VPC via the awsx ec2 Vpc resource with no additional arguments…" → ✅ verified (evidence: The pulumi-awsx official reference doc (provider/pkg/schemagen/ec2-vpc.md) shows zero/empty-arg Vpc construction working identically across TypeScript (new awsx.ec2.Vpc("vpc", {})), Python (awsx.ec2.Vpc("vpc")), C# (`new…; source: gh api repos/pulumi/pulumi-awsx/contents/provider/pkg/schemagen/ec2-vpc.md)
  • L43 in content/_index.md "Across all shown language examples, calling the AWS provider's getAvailabilityZones function with a 'state: available' (or equivalent) filter returns the…" → ✅ verified (evidence: All language snippets in content/_index.md (TS, Python, Go, C#, Java, Terraform, YAML) consistently pass state: "available" to getAvailabilityZones/GetAvailabilityZones. The pulumi-aws SDK docs confirm: "Allows to filter list of…; source: gh search code --owner pulumi getAvailabilityZones state available (pulumi-aws sdk/java GetAvailabilityZonesArgs.java); repo:content/_index.md lines 39-201)
  • L45-51 in content/_index.md "The TypeScript code snippet creates one aws.ec2.Subnet resource per availability zone, each with a vpcId, a cidrBlock of the form 10.0.{i}.0/24, and an…" → ➖ not-a-claim (evidence: The TypeScript snippet in the same file (lines 45-51) literally reads: azs.names.map((az, i) => new aws.ec2.Subnet(\subnet-${i}`, { vpcId: vpc.vpcId, cidrBlock: `10.0.${i}.0/24`, availabilityZone: az }))` — this is a faithful…; source: repo:content/_index.md)
  • L46 in content/_index.md "new aws.ec2.Subnet(subnet-${i}, {" → ➖ not-a-claim (evidence: This is a line of example Pulumi code (new aws.ec2.Subnet(...)) illustrating resource creation syntax, not a falsifiable assertion about a fact, date, or product behavior.; source: content/_index.md L46)
  • L57-61 in content/_index.md "The Python code snippet imports pulumi_aws and pulumi_awsx, retrieves available availability zones via aws.get_availability_zones(state='available'), and…" → ✅ verified (evidence: Lines 57-61 of content/_index.md show exactly: import pulumi_aws as aws, import pulumi_awsx as awsx, azs = aws.get_availability_zones(state="available"), and vpc = awsx.ec2.Vpc("vpc") — matching the claim verbatim.; source: repo:content/_index.md)
  • L63-68 in content/_index.md "The Python code snippet creates one aws.ec2.Subnet resource per availability zone, each with vpc_id, cidr_block of the form 10.0.{i}.0/24, and…" → ✅ verified (evidence: The Python snippet in content/_index.md (lines 63-68) reads: 'for i, az in enumerate(azs.names): aws.ec2.Subnet(f"subnet-{i}", vpc_id=vpc.vpc_id, cidr_block=f"10.0.{i}.0/24", availability_zone=az,)' — this creates one Subnet per AZ with…; source: repo:content/_index.md)
  • L79-83 in content/_index.md "The Go code snippet imports github.com/pulumi/pulumi-aws/sdk/v6/go/aws, github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ec2…" → ✅ verified (evidence: Lines 79-83 of content/_index.md contain exactly: github.com/pulumi/pulumi-aws/sdk/v6/go/aws, github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ec2, awsx "github.com/pulumi/pulumi-awsx/sdk/v2/go/awsx/ec2", and…; source: repo:content/_index.md)
  • L86-89 in content/_index.md "The Go code snippet creates a VPC using awsx.NewVpc and retrieves available availability zones using aws.GetAvailabilityZones with State set to 'available'." → ✅ verified (evidence: The Go snippet in content/_index.md (L86-89) reads: vpc, _ := awsx.NewVpc(ctx, \"vpc\", nil) and azs, _ := aws.GetAvailabilityZones(ctx, &aws.GetAvailabilityZonesArgs{State: pulumi.StringRef(\"available\")}, nil), which matches the…; source: repo:content/_index.md (L79-96); gh search code --owner pulumi "GetAvailabilityZonesArgs" repo:pulumi/pulumi-aws)
  • L90-96 in content/_index.md "The Go code snippet creates one ec2.NewSubnet resource per availability zone, each with VpcId, a CidrBlock of the form 10.0.%d.0/24, and an AvailabilityZone." → ✅ verified (evidence: Lines 90-96 of content/_index.md show: `for i, az := range azs.Names { ec2.NewSubnet(ctx, fmt.Sprintf("subnet-%d", i), &ec2.SubnetArgs{ VpcId: vpc.VpcId, CidrBlock: pulumi.String(fmt.Sprintf("10.0.%d.0/24", i)), AvailabilityZone…; source: repo:content/_index.md)
  • L106-113 in content/_index.md "The C# code snippet uses Pulumi.Awsx.Ec2.Vpc to create a VPC named 'vpc' and GetAvailabilityZones.Invoke with State set to 'available' to retrieve…" → ✅ verified (evidence: Lines 112-113 of content/_index.md show: var vpc = new Pulumi.Awsx.Ec2.Vpc("vpc"); and var azs = GetAvailabilityZones.Invoke(new() { State = "available" }); — matching the claim exactly.; source: repo:content/_index.md)
  • L115-125 in content/_index.md "The C# code snippet creates one Subnet resource per availability zone, each with VpcId, a CidrBlock of the form 10.0.{i}.0/24, and an AvailabilityZone." → ✅ verified (evidence: Lines 115-125 of content/_index.md show: result.Names.Select((az, i) => new Subnet($\"subnet-{i}\", new() { VpcId = vpc.VpcId, CidrBlock = $\"10.0.{i}.0/24\", AvailabilityZone = az, })).ToList() inside azs.Apply, confirming one…; source: repo:content/_index.md)
  • L117 in content/_index.md "new Subnet($'subnet-{i}', new()" → ➖ not-a-claim (evidence: This is a line of C# example code (new Subnet($"subnet-{i}", new() ) from a Pulumi code sample, not a falsifiable temporal or factual claim.; source: repo:content/_index.md)
  • L133-149 in content/_index.md "The Java code snippet uses com.pulumi.aws.ec2.Vpc to create a VPC and com.pulumi.aws.AwsFunctions.getAvailabilityZonesPlain with state 'available' to…" → ✅ verified (evidence: The content/_index.md Java snippet imports com.pulumi.aws.ec2.Vpc and com.pulumi.aws.AwsFunctions, calling AwsFunctions.getAvailabilityZonesPlain(GetAvailabilityZonesPlainArgs.builder().state("available").build()); gh search confirms…; source: repo:content/_index.md L133-149; gh search code --owner pulumi getAvailabilityZonesPlain (pulumi/pulumi-aws AwsFunctions.java))
  • L143 in content/_index.md "var vpc = new Vpc('vpc');" → ➖ not-a-claim (evidence: The flagged text is a line of example code (var vpc = new Vpc(\"vpc\");) from a Pulumi homepage code sample, not a falsifiable temporal claim.; source: content/_index.md L143)
  • L151-159 in content/_index.md "The Java code snippet creates one Subnet resource per availability zone, each with vpcId, a cidrBlock of the form '10.0.' + i + '.0/24', and an…" → ✅ verified (evidence: Lines 151-159 show: for (int i = 0; i < names.size(); i++) { new Subnet("subnet-" + i, SubnetArgs.builder().vpcId(vpc.id()).cidrBlock("10.0." + i + ".0/24").availabilityZone(names.get(i)).build()); } — one Subnet per AZ with vpcId…; source: repo:content/_index.md)
  • L153 in content/_index.md "new Subnet('subnet-' + i, SubnetArgs.builder()" → ➖ not-a-claim (evidence: The extracted text is a line of Java/Pulumi SDK example code (new Subnet("subnet-" + i, SubnetArgs.builder()), not a falsifiable temporal or factual assertion.; source: repo:content/_index.md)
  • L167-176 in content/_index.md "The Terraform/HCL example declares required providers named 'pulumi/aws' and 'pulumi/awsx', implying Pulumi publishes Terraform-compatible provider packages…" → ✅ verified (framing: Claim says the example "implies" Pulumi publishes Terraform-compatible provider packages under those addresses — this is true for Pulumi's own HCL runtime…; evidence: Pulumi ships a real "Pulumi HCL" product (pulumi/pulumi-hcl repo) that uses Terraform-style HCL syntax with required_providers blocks sourced from Pulumi-published providers; Pulumi's own docs blog describes consuming "our AWSx VPC…; source: gh api repos/pulumi/pulumi-hcl; gh search code --owner pulumi (pulumi/docs:content/blog/terraforms-data-model-on-pulumis-engine/index.md))
  • L178-189 in content/_index.md "The HCL/Terraform code snippet creates an awsx_ec2_vpc resource, a data source aws_availability_zones filtered by state 'available', and one aws_subnet…" → ✅ verified (evidence: Lines 178-189 of content/_index.md contain exactly: resource \"awsx_ec2_vpc\" \"vpc\" {}, data \"aws_availability_zones\" \"available\" { state = \"available\" }, and `resource "aws_subnet" "subnet" { count = length(...)…; source: repo:content/_index.md)
  • L178 in content/_index.md "The Terraform/HCL example uses a resource type awsx_ec2_vpc to create a VPC, implying this resource type exists in Pulumi's Terraform-bridged awsx provider." → ✅ verified (evidence: Pulumi's own official template repo (pulumi/templates, kubernetes-aws-hcl/main.tf) uses resource "awsx_ec2_vpc" "eks-vpc" {} with source = "pulumi/awsx", confirming awsx_ec2_vpc is a real resource type in Pulumi's Terraform-bridged…; source: gh search code --owner pulumi awsx_ec2_vpc (pulumi/templates:kubernetes-aws-hcl/main.tf))
  • L195-200 in content/_index.md "The YAML (Pulumi.yaml) code snippet defines a variable 'azs' using fn::invoke of the function aws:getAvailabilityZones with argument state: available." → ✅ verified (evidence: The Pulumi.yaml snippet at lines 195-200 reads: variables:\n azs:\n fn::invoke:\n function: aws:getAvailabilityZones\n arguments:\n state: available — exactly matching the claim's description of the variable…; source: repo:content/_index.md (lines 195-200))
  • L203-217 in content/_index.md "The YAML (Pulumi.yaml) code snippet defines a resource 'vpc' of type awsx:ec2:Vpc and two aws:ec2:Subnet resources (subnet-0 and subnet-1) with distinct…" → ✅ verified (evidence: Lines 203-218 of content/_index.md show exactly this: vpc: type: awsx:ec2:Vpc, subnet-0: type: aws:ec2:Subnet with cidrBlock: "10.0.0.0/24" and availabilityZone: ${azs.names[0]}, and subnet-1 with cidrBlock: "10.0.1.0/24" and…; source: repo:content/_index.md (lines 203-218))
  • L207 in content/_index.md "type: aws:ec2:Subnet" → ✅ verified (evidence: Official Pulumi AWS registry docs for aws.ec2.Subnet show the exact YAML resource type token: "main: type: aws:ec2:Subnet properties: vpcId: ${mainAwsVpc.id} cidrBlock: 10.0.1.0/24". This confirms aws:ec2:Subnet is a valid, real Pulumi…; source: https://www.pulumi.com/registry/packages/aws/api-docs/ec2/subnet/)
  • L214 in content/_index.md "type: aws:ec2:Subnet" → ✅ verified (evidence: Pulumi Registry documentation shows the exact YAML resource declaration: "resources: main: type: aws:ec2:Subnet properties: vpcId: ${mainAwsVpc.id} cidrBlock: 10.0.1.0/24" confirming aws:ec2:Subnet is a valid Pulumi AWS provider resource…; source: https://www.pulumi.com/registry/packages/aws/api-docs/ec2/subnet/)
  • L223 in content/_index.md "Pulumi is trusted by over 4,000 innovative companies." → ✅ verified (evidence: The current Pulumi homepage states: "Trusted by over 4,000 innovative companies," matching the claim verbatim.; source: https://www.pulumi.com/)
  • L5 in layouts/partials/template-partials/hero-animation/_agents.html "agent-loop.html and its glyph is the traveling data-glyph. Tiles 2–6 are" → ➖ not-a-claim (evidence: This is a fragment of markup/structural description from a hero animation template partial (tile numbering and glyph assignment), not a falsifiable factual assertion suitable for external verification.; source: layouts/partials/template-partials/hero-animation/_agents.html)
  • L10 in layouts/partials/template-partials/hero-animation/_diagram.html "" → ➖ not-a-claim (evidence: This is SVG markup defining a clipPath geometry (rect dimensions and a transform matrix) used in a decorative hero animation diagram, not a falsifiable factual or numerical assertion about Pulumi or any external fact.; source: layouts/partials/template-partials/hero-animation/_diagram.html)
  • L12 in layouts/partials/template-partials/hero-animation/_diagram.html "" → ➖ not-a-claim (evidence: This is an SVG path/transform attribute for a decorative hero animation diagram, not a falsifiable assertion about a fact or product behavior.; source: layouts/partials/template-partials/hero-animation/_diagram.html)
  • L14 in layouts/partials/template-partials/hero-animation/_diagram.html "<rect data-plate-fill width='288.188' height='289.341' rx='16' transform='matrix(0.866041 -0.499972 0.866041 0.499972 122 260.079)' fill='#DEDBFF'…" → ➖ not-a-claim (evidence: This is an SVG shape definition with transform matrix coordinates for a decorative hero animation graphic, not a factual or numerical claim subject to verification.; source: layouts/partials/template-partials/hero-animation/_diagram.html)
  • L19 in layouts/partials/template-partials/hero-animation/_diagram.html "<tspan x='0'…" → ➖ not-a-claim (evidence: This is raw SVG markup (a text element with transform matrix and tspans) used for a decorative hero animation diagram, not a factual assertion to verify.; source: layouts/partials/template-partials/hero-animation/_diagram.html)
  • L36 in layouts/partials/template-partials/hero-animation/_diagram.html "<text data-cube-label transform='matrix(0.866041 -0.499972 0.866041 0.499972 252 196.985)' fill='#9077F3' xml:space='preserve' font-size='10'…" → ➖ not-a-claim (evidence: This is an SVG markup fragment containing a decorative text label ("us-east-2a") used in a hero animation diagram illustrating cloud infrastructure. It is not a falsifiable factual assertion—it's a UI/design element of the PR author's…; source: layouts/partials/template-partials/hero-animation/_diagram.html)
  • L50 in layouts/partials/template-partials/hero-animation/_diagram.html "<text data-cube-label transform='matrix(0.866041 -0.499972 0.866041 0.499972 355.773 141.291)' fill='#9077F3' xml:space='preserve' font-size='10'…" → ➖ not-a-claim (evidence: This is SVG markup for a decorative hero animation diagram containing a text label "us-east-2b" with a positioning transform matrix; it is presentational code, not a falsifiable factual assertion.; source: layouts/partials/template-partials/hero-animation/_diagram.html)
  • L64 in layouts/partials/template-partials/hero-animation/_diagram.html "<text data-cube-label transform='matrix(0.866041 -0.499972 0.866041 0.499972 457.801 196.517)' fill='#9077F3' xml:space='preserve' font-size='10'…" → ➖ not-a-claim (evidence: This is a matrix-transformed SVG text label ("us-east-2c") inside a decorative hero animation diagram partial, not a falsifiable factual assertion.; source: layouts/partials/template-partials/hero-animation/_diagram.html)
  • L33 in layouts/partials/template-partials/hero-animation/_status.html "" → ➖ not-a-claim (evidence: This is an SVG path element with numeric coordinates for drawing an arc shape in a UI animation, not a factual/numerical assertion that can be verified against an external source.; source: layouts/partials/template-partials/hero-animation/_status.html)
  • L36 in layouts/partials/template-partials/hero-animation/_status.html "" → ➖ not-a-claim (evidence: This is an SVG path element with a fill color hex code and translate transform coordinates from a hero animation partial template — not a falsifiable factual assertion, just presentation/markup data.; source: layouts/partials/template-partials/hero-animation/_status.html)
  • L12 in layouts/partials/template-partials/hero-animation/agent-loop.html "(Figma 'Storyboards R2', node 752:19223) on a 744x550 canvas. The scene is" → ➖ not-a-claim (evidence: This is a code comment in the PR author's own template file describing the internal design provenance of the SVG geometry (a Figma file/node reference used during implementation), not a falsifiable factual assertion about a product or…; source: repo:layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L17 in layouts/partials/template-partials/hero-animation/agent-loop.html "" → ➖ not-a-claim (evidence: The URL is the standard W3C SVG XML namespace URI (xmlns="http://www.w3.org/2000/svg"), a required technical identifier in SVG markup, not a factual assertion to verify.; source: N/A - SVG namespace declaration, not a checkable claim)
  • L18 in layouts/partials/template-partials/hero-animation/agent-loop.html "(Figma 'Storyboards R2', node 752:19223) on a 744x550 canvas; the viewBox" → ➖ not-a-claim (evidence: This is a code comment in the PR author's own file describing the internal provenance of the SVG geometry (a Figma design node reference used when authoring the animation), not a falsifiable third-party assertion.; source: repo:layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L25 in layouts/partials/template-partials/hero-animation/agent-loop.html "" → ➖ not-a-claim (evidence: This is an XML namespace declaration attribute (xmlns) used in SVG markup, a standard boilerplate value, not a falsifiable factual assertion.; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L50 in layouts/partials/template-partials/hero-animation/agent-loop.html "" → ➖ not-a-claim (evidence: This is an SVG transform attribute (translate coordinate) in a hero animation partial, not a falsifiable factual assertion. It's markup/styling code matched by a numerical regex, not a claim about facts.; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L159 in layouts/partials/template-partials/hero-animation/agent-loop.html "" → ➖ not-a-claim (evidence: The extracted text is an SVG <path> element defining an arc shape and stroke color for a hero animation graphic, not a verifiable factual assertion.; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L162 in layouts/partials/template-partials/hero-animation/agent-loop.html "" → ➖ not-a-claim (evidence: This is a static SVG path/fill definition within the PR author's own hero-animation template markup, not a falsifiable factual assertion.; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L207 in layouts/partials/template-partials/hero-animation/agent-loop.html "" → ➖ not-a-claim (evidence: This is raw SVG clipPath/transform markup used for a hero animation graphic, not a factual or verifiable assertion.; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L209 in layouts/partials/template-partials/hero-animation/agent-loop.html "" → ➖ not-a-claim (evidence: This is an SVG rect element with matrix transform coordinates used for a decorative hero animation graphic, not a factual or numerical assertion that can be verified.; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L211 in layouts/partials/template-partials/hero-animation/agent-loop.html "<rect data-plate-fill width='288.188' height='289.341' rx='16' transform='matrix(0.866041 -0.499972 0.866041 0.499972 122 260.079)' fill='#DEDBFF'…" → ➖ not-a-claim (evidence: This is SVG rect/matrix markup for a decorative hero animation graphic (fill colors, transform coordinates), not a falsifiable factual assertion.; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L216 in layouts/partials/template-partials/hero-animation/agent-loop.html "<tspan x='0'…" → ➖ not-a-claim (evidence: This is an SVG text element from a hero animation graphic, containing decorative markup (matrix transform, coordinates, font-size) and example label text ('aws:ec2:Vpc' / '10.0.0.0/16') used purely for illustrative animation visuals, not…; source: repo:layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L233 in layouts/partials/template-partials/hero-animation/agent-loop.html "<text data-cube-label transform='matrix(0.866041 -0.499972 0.866041 0.499972 252 196.985)' fill='#9077F3' xml:space='preserve' font-size='10'…" → ➖ not-a-claim (evidence: This is SVG code for a decorative hero animation labeling a cube "us-east-2a" as illustrative example content, not a factual/numerical assertion to verify.; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L247 in layouts/partials/template-partials/hero-animation/agent-loop.html "<text data-cube-label transform='matrix(0.866041 -0.499972 0.866041 0.499972 355.773 141.291)' fill='#9077F3' xml:space='preserve' font-size='10'…" → ➖ not-a-claim (evidence: This is an SVG label string ("us-east-2b") used as decorative text in a hero animation graphic, not a falsifiable factual assertion about a product or service.; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L261 in layouts/partials/template-partials/hero-animation/agent-loop.html "<text data-cube-label transform='matrix(0.866041 -0.499972 0.866041 0.499972 457.801 196.517)' fill='#9077F3' xml:space='preserve' font-size='10'…" → ➖ not-a-claim (evidence: This is SVG markup (a text/tspan element with matrix transform and styling) rendering a decorative label "us-east-2c" inside a hero animation graphic on the Pulumi homepage; it is not a factual assertion to verify, just illustrative…; source: layouts/partials/template-partials/hero-animation/agent-loop.html)
  • L13 in theme/package.json "'@pulumi/design-tokens': 'github:pulumi/pulumi-design-system#v0.6.1'," → ✅ verified (evidence: The tag v0.6.1 exists in the pulumi/pulumi-design-system repository, matching the git dependency reference in package.json: {"ref":"refs/tags/v0.6.1", ...}.; source: gh api repos/pulumi/pulumi-design-system/git/refs/tags/v0.6.1)
  • L7 in theme/src/scss/marketing/_hero-animation.scss "width: 100%;" → ➖ not-a-claim (evidence: This is a CSS style declaration (width: 100%;) inside a stylesheet, not a falsifiable factual assertion.; source: theme/src/scss/marketing/_hero-animation.scss)
  • L12 in theme/src/scss/marketing/_hero-animation.scss "width: 100%;" → ➖ not-a-claim (evidence: This is a CSS style declaration (width: 100%;) within a SCSS stylesheet, not a falsifiable factual assertion about Pulumi products or documentation.; source: theme/src/scss/marketing/_hero-animation.scss)
  • L38 in theme/src/ts/hero-animation.ts "// the storyboard's TypeScript icon at 596,168 - 619.4,191.4)." → ➖ not-a-claim (evidence: This is a code comment in theme/src/ts/hero-animation.ts describing internal coordinate values used by the PR author's own animation/storyboard logic, not a falsifiable external claim.; source: theme/src/ts/hero-animation.ts (PR file under review))
  • L50 in theme/src/ts/hero-animation.ts "// box size, from the storyboard's TypeScript icon at 596,168 - 619.4,191.4)." → ➖ not-a-claim (evidence: This is a code comment describing internal storyboard coordinates used by the PR author to size an element in their own animation code, not a falsifiable factual claim about an external subject.; source: theme/src/ts/hero-animation.ts (reviewed file, code comment))
  • L119-120 in theme/src/ts/hero-animation.ts "gsap.set(prompt, { autoAlpha: 0, scale: 0.96, transformOrigin: '50% 50%' });" → ➖ not-a-claim (evidence: This is a code line from the PR's own TypeScript file setting GSAP animation initial state (opacity, scale, transform origin) — it is a code diff, not a checkable factual claim.; source: theme/src/ts/hero-animation.ts)
  • L124 in theme/src/ts/hero-animation.ts "gsap.set(aFill, { autoAlpha: 0, scale: 0.9, transformOrigin: '50% 50%', attr: TILE_FILL });" → ➖ not-a-claim (evidence: This is a code snippet from the PR's own hero-animation.ts file, configuring a GSAP animation (setting opacity, scale, and fill attributes on an element). It is a faithful description of the author's own implementation, not a checkable…; source: theme/src/ts/hero-animation.ts (PR file itself))
  • L169 in theme/src/ts/hero-animation.ts "gsap.set(ciSpins, { autoAlpha: 0, scale: 0.6, transformOrigin: '50% 50%' });" → ➖ not-a-claim (evidence: This is a line of TypeScript code setting GSAP animation initial state properties (opacity, scale, transform origin) for the PR's own hero-animation.ts file. It is a code statement describing the author's own implementation, not a…; source: theme/src/ts/hero-animation.ts (PR diff, not an external assertion))
  • L176-177 in theme/src/ts/hero-animation.ts "gsap.set(polStacks, { autoAlpha: 0, scale: 0.85, transformOrigin: '50% 50%' });" → ➖ not-a-claim (evidence: This is a line of source code (a gsap.set() call configuring animation properties) from the PR's own file, not a factual assertion that can be independently verified against an external source.; source: theme/src/ts/hero-animation.ts (PR diff, lines 176-177))
  • L179 in theme/src/ts/hero-animation.ts "gsap.set(polChecks, { attr: { fill: '#F49709' }, scale: 1, transformOrigin: '50% 50%' });" → ➖ not-a-claim (evidence: This is a line of TypeScript/GSAP animation code from the PR's own hero-animation.ts file, setting a fill color and scale attribute — it's implementation code, not a falsifiable factual claim.; source: theme/src/ts/hero-animation.ts (PR file itself))
  • L192 in theme/src/ts/hero-animation.ts "gsap.set(qa(root as HTMLElement, '[data-cube-edge]'), { scaleY: 0.001, transformOrigin: '50% 100%' });" → ➖ not-a-claim (evidence: This is a line of the PR's own source code (a GSAP animation setup call), not a falsifiable factual assertion about an external fact or product behavior.; source: theme/src/ts/hero-animation.ts:L192)
  • L305 in theme/src/ts/hero-animation.ts "gsap.set(panelLang, { autoAlpha: 0, x: 0, y: 0 });" → ➖ not-a-claim (evidence: This is a line of TypeScript code (a GSAP animation library call setting initial properties) extracted via regex, not a falsifiable factual assertion.; source: theme/src/ts/hero-animation.ts L305)
  • L343 in theme/src/ts/hero-animation.ts "tl.fromTo(ciPr, { autoAlpha: 0, x: -24 }, { autoAlpha: 1, x: 0, duration: 0.35, ease: 'power2.out' }, ciAt);" → ➖ not-a-claim (evidence: This is a line of GSAP animation code (tl.fromTo call with easing parameters) authored as part of the PR's own hero-animation implementation, not a factual assertion to verify against an external source.; source: theme/src/ts/hero-animation.ts (reviewed file, own code))
  • L351 in theme/src/ts/hero-animation.ts "tl.fromTo(ciChecks[i], { autoAlpha: 0, scale: 0.6, transformOrigin: '50% 50%' }, { autoAlpha: 1, scale: 1, duration: 0.35, ease: 'back.out(1.7)' }, at + 0.05);" → ➖ not-a-claim (evidence: This is a snippet of GSAP animation code (tl.fromTo call with easing/duration parameters) from the PR author's own hero-animation TypeScript file, not a falsifiable factual assertion about a product, price, or capability.; source: theme/src/ts/hero-animation.ts)
  • L355 in theme/src/ts/hero-animation.ts "tl.fromTo(ciMerge, { autoAlpha: 0, scale: 0.8, transformOrigin: '50% 50%' }, { autoAlpha: 1, scale: 1, duration: 0.3, ease: 'back.out(1.7)' }, mergedAt);" → ➖ not-a-claim (evidence: This is a snippet of the PR author's own animation code (a GSAP timeline tween configuration in hero-animation.ts), not a falsifiable external claim.; source: theme/src/ts/hero-animation.ts (reviewed file))
  • L357 in theme/src/ts/hero-animation.ts "tl.fromTo(ciPr, { autoAlpha: 0, x: -16 }, { autoAlpha: 1, x: 0, duration: 0.35, ease: 'power2.out' }, ciAt);" → ➖ not-a-claim (evidence: This is a line of animation code (GSAP timeline tween parameters) from the PR's own source file, not a falsifiable factual assertion about a product, price, or capability.; source: theme/src/ts/hero-animation.ts L357)
  • L360 in theme/src/ts/hero-animation.ts "tl.fromTo(ciPr, { autoAlpha: 0, x: -26 }, { autoAlpha: 1, x: -10, duration: 0.35, ease: 'power2.out' }, ciAt);" → ➖ not-a-claim (evidence: This is a line of TypeScript animation code (GSAP timeline tween parameters) authored by the PR itself, describing the author's own animation implementation details, not a checkable factual assertion about a product, price, or external…; source: theme/src/ts/hero-animation.ts L360)
  • L389 in theme/src/ts/hero-animation.ts "tl.fromTo(ciPr, { autoAlpha: 0, x: CI_PR_REST_X - 16 }, { autoAlpha: 1, x: CI_PR_REST_X, duration: 0.35, ease: 'power2.out' }, ciAt);" → ➖ not-a-claim (evidence: This is a line of the PR author's own TypeScript animation code (a GSAP timeline tween for a hero animation), not a falsifiable factual assertion about a third-party system or documented behavior.; source: theme/src/ts/hero-animation.ts (PR's own source file))
  • L393 in theme/src/ts/hero-animation.ts "// glyph up, trailing 60ms behind." → ➖ not-a-claim (evidence: This is a code comment describing the PR author's own animation timing design in their own source file, not a falsifiable external claim requiring verification.; source: theme/src/ts/hero-animation.ts:L393)
  • L414 in theme/src/ts/hero-animation.ts "tl.to(polShield, { autoAlpha: 1, x: 0, duration: 0.3, ease: 'power2.out' }, polAt);" → ➖ not-a-claim (evidence: This is a line of TypeScript animation code (a GSAP tween configuration) from the PR author's own hero-animation.ts file, not a falsifiable factual assertion.; source: theme/src/ts/hero-animation.ts L414)
  • L421 in theme/src/ts/hero-animation.ts "tl.fromTo(polChecks[i], { scale: 0.6, transformOrigin: '50% 50%' }, { scale: 1, duration: 0.35, ease: 'back.out(1.7)' }, at);" → ➖ not-a-claim (evidence: This is a code excerpt from the PR's own animation implementation (a GSAP tween call), not a checkable factual assertion about a third-party fact or product behavior.; source: theme/src/ts/hero-animation.ts (PR-authored source file))
  • L511 in theme/src/ts/hero-animation.ts "gsap.set(ciPr, { autoAlpha: 0, scale: 1, transformOrigin: '50% 50%' });" → ➖ not-a-claim (evidence: This is a line of TypeScript source code (a gsap.set() call configuring animation properties) from the PR's own hero-animation.ts file, not a falsifiable factual assertion about a third party or product behavior.; source: theme/src/ts/hero-animation.ts (PR diff, line 511))
  • L574 in theme/src/ts/hero-animation.ts "tl.call(() => gsap.to(tiles[chosen], { scale: 0.965, duration: 0.12, yoyo: true, repeat: 1, ease: 'power1.inOut', transformOrigin: '50% 50%' }), undefined…" → ➖ not-a-claim (evidence: This is a line of the PR author's own TypeScript animation code (GSAP tween parameters), not a factual assertion about an external system that can be verified.; source: theme/src/ts/hero-animation.ts (reviewed file itself))
  • L670 in theme/src/ts/hero-animation.ts "tl.to(ciPr, { autoAlpha: 0, x: CI_PR_REST_X - 10, duration: 0.2, ease: 'power2.in' }, mergedAt);" → ➖ not-a-claim (evidence: This is a line of the PR author's own TypeScript animation code (a GSAP tl.to() call with hardcoded animation parameters), not a falsifiable factual assertion about an external fact or source.; source: theme/src/ts/hero-animation.ts (reviewed file, own implementation code))
  • L692-693 in theme/src/ts/hero-animation.ts "tl.fromTo(ciMerge, { autoAlpha: 0, scale: 0.5, transformOrigin: '50% 50%' }, { autoAlpha: 1, scale: 1, duration: 0.32, ease: 'back.out(1.7)' }, mergedAt + 0.1);" → ➖ not-a-claim (evidence: This is a line of source code implementing the PR author's own hero animation timeline (GSAP tween parameters), not a falsifiable factual assertion to verify against an external source.; source: theme/src/ts/hero-animation.ts (reviewed file, own implementation))
  • L381 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@shikijs/core/-/core-4.4.3.tgz#00a942fa45ad0e4146ac6dbbac32b8b704b42e3f'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock entry (a package resolution URL with integrity hash), not a falsifiable documentation assertion.; source: theme/yarn.lock L381)
  • L392 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-4.4.3.tgz#42dbdc18ec2f86003624674839a8f090cdd7cb62'" → ➖ not-a-claim (evidence: This is a yarn.lock "resolved" field entry — auto-generated package manager lockfile metadata, not a falsifiable editorial claim.; source: theme/yarn.lock L392)
  • L401 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.3.tgz#a1754f9f42e0f35a55cda9a977599041a2ad5b07'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock entry recording a resolved package tarball URL and hash, not a falsifiable editorial assertion. The @shikijs/engine-oniguruma package exists on the npm/yarn registry with sequential versioning…; source: theme/yarn.lock (lockfile-generated content))
  • L409 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@shikijs/langs/-/langs-4.4.3.tgz#113282396f119dbba8d3b5e86668258fa8df6e7b'" → ➖ not-a-claim (evidence: This is a yarn.lock 'resolved' field entry, auto-generated by the yarn package manager pointing to a package tarball URL with integrity hash. It is dependency-lockfile metadata, not a falsifiable editorial claim.; source: theme/yarn.lock L409)
  • L416 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@shikijs/primitive/-/primitive-4.4.3.tgz#86490cea63b3e2c56b8d9163046e010258844d81'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock 'resolved' URL entry pointing to a package tarball on the yarn registry; it is lockfile metadata produced by the package manager, not a falsifiable assertion made by the PR author.; source: theme/yarn.lock L416)
  • L425 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@shikijs/themes/-/themes-4.4.3.tgz#8310a78261f4cf742663e07e2028df046a02bd72'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock resolved-URL entry with an integrity hash fragment, produced by the yarn package manager during dependency installation, not an authored factual assertion.; source: theme/yarn.lock L425)
  • L432 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@shikijs/types/-/types-4.4.3.tgz#019aff19f0cbfb21642c59f6f8432ced74e27b45'" → ➖ not-a-claim (evidence: This is a yarn.lock dependency resolution entry (URL + integrity hash) auto-generated by yarn, not an editorial or technical assertion made by the PR author.; source: theme/yarn.lock L432)
  • L440 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224'" → ➖ not-a-claim (evidence: This is a yarn.lock package resolution entry auto-generated by the yarn package manager, recording the registry URL and integrity hash for a dependency. It is not a falsifiable editorial assertion.; source: theme/yarn.lock L440)
  • L573 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@types/hast/-/hast-3.0.5.tgz#48020de4c0e63492f4ca9db42068c108f68b7f8f'" → ➖ not-a-claim (evidence: This is a yarn.lock 'resolved' field entry, auto-generated lockfile metadata pointing to a package tarball URL with its integrity hash fragment, not an editorial or technical claim made by the PR author.; source: theme/yarn.lock L573)
  • L597 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6'" → ➖ not-a-claim (evidence: This is a yarn.lock 'resolved' field entry, an auto-generated package registry URL from a lockfile, not an editorial or factual assertion to verify.; source: theme/yarn.lock L597)
  • L616 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock entry recording the resolved tarball URL and integrity hash for the @types/unist@3.0.3 package dependency, not a falsifiable editorial or technical claim.; source: theme/yarn.lock L616)
  • L621 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.3.tgz#094041e1a4cb1987f038335421281ac8be390bcc'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock entry (resolved URL + integrity hash for a dependency package), not an editorial or factual claim requiring verification.; source: theme/yarn.lock L621)
  • L895 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock entry recording the resolved registry URL and integrity hash for the ccount@2.0.1 npm package dependency, not an editorial or factual assertion.; source: theme/yarn.lock L895)
  • L908 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock dependency resolution entry (package URL + integrity hash), not a falsifiable editorial assertion.; source: theme/yarn.lock L908)
  • L913 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b'" → ➖ not-a-claim (evidence: This is a yarn.lock dependency resolution entry (resolved URL + hash for the character-entities-legacy npm package), which is auto-generated lockfile metadata, not an editorial or technical assertion to verify.; source: theme/yarn.lock L913)
  • L975 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock entry recording the resolved tarball URL for comma-separated-tokens@2.0.3, a real published package version confirmed on npm: "Version: 2.0.3 was published by wooorm." Lockfile metadata is not a…; source: https://socket.dev/npm/package/comma-separated-tokens)
  • L1139 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be'" → ➖ not-a-claim (evidence: This is a yarn.lock resolved-URL entry, auto-generated package manifest metadata rather than an editorial or factual assertion.; source: theme/yarn.lock L1139)
  • L1149 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018'" → ➖ not-a-claim (evidence: This is a yarn.lock lockfile entry recording a resolved package URL for the devlop npm package, which is autogenerated metadata, not an editorial or falsifiable claim.; source: theme/yarn.lock L1149)
  • L1199 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/gsap/-/gsap-3.15.0.tgz#7851baaffc77642f2db3b1749d3634f9b5a19d14'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock resolved-URL entry, not a falsifiable editorial claim. Independently, gsap 3.15.0 is confirmed as a real published npm package version, so the entry is also factually plausible.; source: WebSearch ran query "gsap 3.15.0 npm version"; https://www.npmjs.com/package/gsap)
  • L1336 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz#ccc673a55bb8e85775b08ac28380f72d47167005'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock dependency resolution entry (package tarball URL + hash), not a falsifiable editorial assertion.; source: theme/yarn.lock L1336)
  • L1353 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621'" → ➖ not-a-claim (evidence: This is a yarn.lock resolved-URL entry, which is auto-generated package manager lockfile metadata, not an editorial or documentation assertion.; source: theme/yarn.lock L1353)
  • L1365 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7'" → ➖ not-a-claim (evidence: This is a yarn.lock dependency resolution entry (URL + hash), auto-generated by the yarn package manager during dependency installation, not a falsifiable editorial assertion.; source: theme/yarn.lock)
  • L1611 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz#d7ff84ca499a57e2c060ae67548ad950e689a053'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock resolved-URL entry for a package version/hash, not a falsifiable editorial assertion.; source: theme/yarn.lock L1611)
  • L1636 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6'" → ➖ not-a-claim (evidence: This is a yarn.lock entry: an auto-generated package resolution URL with hash fragment, not an editorial or falsifiable assertion.; source: theme/yarn.lock L1636)
  • L1644 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8'" → ➖ not-a-claim (evidence: This is a yarn.lock autogenerated entry specifying the resolved tarball URL for the micromark-util-encode package dependency; it is package-manager metadata, not an editorial or factual assertion to verify.; source: theme/yarn.lock L1644)
  • L1649 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7'" → ➖ not-a-claim (evidence: This is a yarn.lock resolved-URL entry for a package tarball, auto-generated by yarn package manager, not a falsifiable editorial assertion.; source: theme/yarn.lock L1649)
  • L1658 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock resolved-URL entry for a package dependency (micromark-util-symbol@2.0.1), not an editorial or technical assertion made by the PR author.; source: theme/yarn.lock L1658)
  • L1663 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e'" → ➖ not-a-claim (evidence: This is a yarn.lock resolved-URL entry with package tarball hash, auto-generated by yarn during dependency installation, not an editorial or falsifiable assertion.; source: theme/yarn.lock L1663)
  • L1723 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz#e27ca446f7fcf0969662a3ab9b4f43176d62b139'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock resolved URL for a package dependency (oniguruma-parser@0.12.2), not an editorial or falsifiable documentation claim.; source: theme/yarn.lock)
  • L1728 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz#43e640280241b0d687a314e7a641d476407a1c4d'" → ➖ not-a-claim (evidence: This is a yarn.lock dependency resolution entry (package URL + hash), which is auto-generated package manager metadata, not an editorial or technical claim to verify.; source: theme/yarn.lock)
  • L2084 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/property-information/-/property-information-7.2.0.tgz#0809b34264e995c0bfcd3227028a1e35210af80a'" → ➖ not-a-claim (evidence: This is a yarn.lock dependency resolution entry (auto-generated package manager metadata), not a falsifiable editorial claim.; source: theme/yarn.lock L2084)
  • L2101 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/regex-recursion/-/regex-recursion-6.0.2.tgz#a0b1977a74c87f073377b938dbedfab2ea582b33'" → ➖ not-a-claim (evidence: This is a yarn.lock dependency resolution entry (a hash/URL recorded by yarn for the regex-recursion package), which is autogenerated package-manager metadata, not an editorial or falsifiable claim.; source: theme/yarn.lock)
  • L2108 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/regex-utilities/-/regex-utilities-2.3.0.tgz#87163512a15dce2908cf079c8960d5158ff43280'" → ✅ verified (evidence: npm registry confirms the regex-utilities package with "Latest version: 2.3.0, last published: a year ago" matching the tarball URL and version referenced in yarn.lock.; source: https://www.npmjs.com/package/regex-utilities)
  • L2113 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/regex/-/regex-6.1.0.tgz#d7ce98f8ee32da7497c13f6601fca2bc4a6a7803'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock resolved-URL entry for a package dependency, not a falsifiable editorial assertion made by the PR author.; source: theme/yarn.lock L2113)
  • L2225 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/shiki/-/shiki-4.4.3.tgz#31fb41c5c82435779a0b5a9b92a3b0377b061e15'" → ➖ not-a-claim (evidence: This is a yarn.lock 'resolved' field entry, auto-generated lockfile metadata recording the tarball URL and integrity hash for a dependency version, not a falsifiable editorial claim.; source: theme/yarn.lock L2225)
  • L2262 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f'" → ➖ not-a-claim (evidence: This is a yarn.lock 'resolved' field, auto-generated package manifest metadata pointing to a tarball on the yarn registry, not a falsifiable editorial claim.; source: theme/yarn.lock L2262)
  • L2286 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3'" → ➖ not-a-claim (evidence: This is a yarn.lock auto-generated dependency resolution entry (package URL + hash), not a falsifiable editorial assertion.; source: theme/yarn.lock L2286)
  • L2376 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock entry recording a package resolution URL, not an editorial or falsifiable assertion made by the PR author.; source: theme/yarn.lock)
  • L2410 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock entry recording the resolved tarball URL and integrity hash for the unist-util-is@6.0.1 package dependency, not a falsifiable editorial claim.; source: theme/yarn.lock)
  • L2417 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4'" → ➖ not-a-claim (evidence: This is a yarn.lock dependency resolution entry, auto-generated by the yarn package manager, not an editorial or falsifiable assertion.; source: theme/yarn.lock)
  • L2424 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2'" → ➖ not-a-claim (evidence: This is a yarn.lock resolved URL entry, which is auto-generated package manager metadata (dependency lockfile), not a falsifiable editorial claim.; source: theme/yarn.lock L2424)
  • L2431 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock entry recording the resolved tarball URL and integrity hash for a dependency package version; it's package-manager metadata, not a falsifiable editorial assertion.; source: theme/yarn.lock L2431)
  • L2439 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz#9a2a28b0aa76a15e0da70a08a5863a2f060e2468'" → ➖ not-a-claim (evidence: This is a yarn.lock autogenerated dependency resolution entry for the unist-util-visit npm package, not a falsifiable editorial or product claim.; source: theme/yarn.lock L2439)
  • L2461 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock resolved URL/integrity entry for a package version, not a falsifiable editorial assertion.; source: theme/yarn.lock L2461)
  • L2469 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab'" → ➖ not-a-claim (evidence: This is a yarn.lock 'resolved' field entry, auto-generated package manager metadata pointing to a package tarball URL, not an editorial or falsifiable assertion.; source: theme/yarn.lock L2469)
  • L2597 in theme/yarn.lock "resolved 'https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7'" → ➖ not-a-claim (evidence: This is an auto-generated yarn.lock dependency resolution URL for the zwitch npm package, not a falsifiable editorial claim.; source: theme/yarn.lock)
  • L14 in layouts/partials/template-partials/hero-animation/agent-loop.html "Each pass picks a weighted-random agent and a uniform-random language" → 🌀 framing-drift (evidence: theme/src/ts/hero-animation.ts L33-42 defines LANG_WEIGHTS (typescript 51, python 29, go 7.5, csharp 5, hcl 3.5, yaml 3, java 1) and L1770 picks with pickWeighted(langWeights), so the language draw is weighted, not uniform; the same wording repeats in the TypeScript comment at L217.; source: repo:theme/src/ts/hero-animation.ts at a5b8e3c)
  • L169 in layouts/partials/template-partials/template-hero.html "hero_visual is documented as an optional explicit pick of "animation", "code", "video", or "image"" → 🌀 framing-drift (evidence: The doc block at L50-58 presents hero_visual: animation as self-sufficient, but L169 calls partial (printf "template-partials/hero-animation/%s.html" $heroAnimation) with no guard — an empty hero_animation resolves to template-partials/hero-animation/.html and fails the Hugo build.; source: repo:layouts/partials/template-partials/template-hero.html at a5b8e3c)

  • Refresh this review — comment @claude #update-review. Say what you fixed, or which finding you dispute and why; both work in the same mention.
  • Ask for anything else — comment @claude with no hashtag (questions, one-off fixes). Leaves this review untouched.

Important

Please don't hide, resolve, or delete this comment! It breaks things!

📖 How pre-merge review works — the full lifecycle, short-circuits, and escape hatches.

@github-actions

Copy link
Copy Markdown
Contributor

🚨 Outstanding in this PR

No outstanding findings in this PR.

⚠️ Low-confidence

Review each and resolve as appropriate — these don't block the PR.

  • [L14] layouts/partials/template-partials/hero-animation/agent-loop.html — the header comment says "Each pass picks a weighted-random agent and a uniform-random language", but the language draw is weighted too: LANG_WEIGHTS in theme/src/ts/hero-animation.ts (L33-42) gives TypeScript 51 and Java 1, and pickWeighted(langWeights) uses it. The same wording appears again in the TypeScript comment at L217 ("The language. A uniform-random pick each pass"). The PR description gets this right — it's only the two in-code comments that are stale, presumably from before the weights table landed. Suggested fix in the partial:

    pass picks a weighted-random agent and a weighted-random language; the
    

    and at theme/src/ts/hero-animation.ts L217:

        // The language. A weighted-random pick each pass (see LANG_WEIGHTS); the
    
  • [L169] layouts/partials/template-partials/template-hero.html — the new doc block (L50-58) presents hero_visual as an independent switch — "an optional explicit pick — 'animation', 'code', 'video', or 'image'" — but hero_visual: animation only works when hero_animation is also set. With hero_animation empty, this line builds the path template-partials/hero-animation/.html, and Hugo fails the whole build on an unresolvable partial with a message that won't point anyone back at the frontmatter. Nothing in this PR trips it (the homepage sets both), so this is about the next page that copies the pattern. Either guard the call or document the pairing — the guard is cheaper:

    {{ if $heroAnimation }}{{ partial (printf "template-partials/hero-animation/%s.html" $heroAnimation) . }}{{ end }}
    

    It's also worth saying in the doc block that hero_visual: animation requires hero_animation.

📋 Triaged verifier findings

I double-checked these and realized they weren't real findings — click to expand
  • [L31] content/_index.md"left: '23%'"Mis-sourced: this is the left value inside the hero's code_offsets block — a CSS offset for the code composite's position, and a line this PR doesn't touch. The verification step read the bare 23% as a marketing statistic and went looking for it on the homepage, which is why nothing supported it. There's no claim here.

💡 Pre-existing issues in touched files (optional)

No pre-existing issues in touched files.

✅ Resolved since last review

No items resolved since the last review.

📜 Review history

  • 2026-08-26T20:03:41Z — First review of the GSAP agent-loop hero: no blockers; two documentation-accuracy findings (stale "uniform-random language" comments, and hero_visual: animation needing a hero_animation guard). (a5b8e3c)

  • Refresh this review — comment @claude #update-review. Say what you fixed, or which finding you dispute and why; both work in the same mention.
  • Ask for anything else — comment @claude with no hashtag (questions, one-off fixes). Leaves this review untouched.

Important

Please don't hide, resolve, or delete this comment! It breaks things!

📖 How pre-merge review works — the full lifecycle, short-circuits, and escape hatches.

@github-actions github-actions Bot added review:no-blockers Claude review completed cleanly; outstanding is empty review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention and removed review:in-progress Claude review is currently running review:no-blockers Claude review completed cleanly; outstanding is empty labels Aug 26, 2026
- Prompt reads "Give me a VPC with a subnet in every AZ." at 13.5px;
  sync promptChars/CW_PROMPT so the trailing period reveals cleanly.
- Badge labels tightened to "TESTS PASSED" / "POLICY CHECKS PASSED",
  with pills re-measured to keep matched insets and right alignment.
- Role label is singular ("PLATFORM AGENT").
- Terminal output reworked to mirror a real pulumi up run.
- Extend TERM_SCROLL_END to -862 so the longer terminal scrolls the
  full tail (Outputs -> Policy Packs -> Duration) into view.
- Homepage hero copy: "infrastructure as software"; refresh language mix.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@cnunciato cnunciato left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great! Made a few tweaks to some copy and adjusted the measurements to make everything fit.

The only thing I noticed (which we can definitely address as a follow-up) is that at narrower widths, the animation is slightly off center, and vertical whitespace feels like it could be tightened. So we may want to make a few tweaks to address that:

resizing.mp4

Otherwise, this is good to go. I'll merge and we can come back to it once I verify all's well in a few other browsers.

- Play the agent-loop scene a single time and rest on the completed
  diagram instead of looping (repeat 0; drop the exit fade).
- Terminal copy: "Running Pulumi..." / "pulumi up" and "Policies
  applied:"; regenerate the highlighted runs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Change the terminal's opening status line to "Tests passed. Deploying."

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Trim the platform description to end on "— safely."

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@cnunciato
cnunciato enabled auto-merge (squash) August 27, 2026 00:54
@cnunciato
cnunciato merged commit 2b38f8d into master Aug 27, 2026
11 checks passed
@cnunciato
cnunciato deleted the jeffmerrick/animated-hero-gsap branch August 27, 2026 00:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain:infra PR touches workflows, scripts, infra, Makefile, or build config domain:mixed PR touches more than one domain domain:website PR touches marketing, pricing, legal, or competitive landing pages review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants