Skip to content

Add Entity Resolution case study; refresh EV Charging metadata and re-tier projects - #14

Merged
cbratkovics merged 9 commits into
mainfrom
feat/entity-resolution-case-study
Sep 25, 2026
Merged

cbratkovics merged 9 commits into
mainfrom
feat/entity-resolution-case-study

Conversation

@cbratkovics

Copy link
Copy Markdown
Owner

Motivation

  • Add the Entity Resolution independent project as a featured card and a case-study route, with every published number traced to a committed v0.1.0 artifact key, and coverage reported separately from accuracy.
  • Close the Codex finding on PR Feature EV charging data case study and surface projects earlier #13: page-level openGraph and twitter objects replaced the root ones, so case-study routes rendered without og:image / twitter:image.
  • Re-tier the project grid to match the resume's Selected Independent Projects lineup, and align three EV Charging statements with the EV repository's docs on main.

Description

  • portfolio/components/case-study/: EvidenceLinks, Section, and FindingBlock extracted from the EV page (identical markup) plus a caseStudyMetadata() helper that builds route metadata with the site's social image in both objects. Both case-study routes use them.
  • portfolio/data/projects.ts: new optional, data-only citations: ArtifactCitation[] on Project; new entity-resolution entry (featured: true) with 21 citations pinned to entity-resolution commit f50d764 (tag v0.1.0); grid re-tiered by data fields and order only: EV Charging (flagship) → Entity Resolution → Fantasy Football → NBA (featured) → SQL Genius → AI Chat → Document Intelligence (additional).
  • portfolio/app/projects/entity-resolution/page.tsx: new route mirroring the EV page (canonical URL, Open Graph and Twitter metadata with image, skip link, "Back to projects", eyebrow, "As of v0.1.0" scope line, evidence links top and bottom, one /#work cross-link). Registered in app/sitemap.ts.
  • EV card and page: three meaning-level alignments listed under Claims narrowed. No EV numbers changed. No v0.1.0 GitHub Release exists for either repository, so no Release links were added. No screenshots were added: the two candidate images in demo_images are generated infographics rather than product captures, and each carries a figure the text does not.
  • Tests: content-contract assertions now encode the new tier contract (4 featured / 3 additional, new order, 13 narratives), check the Entity Resolution hedges, and require every cited figure to appear in the card or page copy. E2E covers the new route, the homepage tier order, the sitemap entry, and og:image / twitter:image on both routes.

Deliberate assertion changes: featured: false count 2 → 3, ordered title list and repository list extended, narrative counts 12 → 13, plus the new entity-resolution content-contract and e2e tests. No assertion was loosened.

Artifact citations (Entity Resolution, v0.1.0, commit f50d764)

Figure on site Artifact and key Value
482,514 / 482K sampled release groups artifacts/manifest.json#counts.musicbrainz.sampled 482514
241,752 in-scope truth pairs artifacts/blocking_report.json#pair_completeness.truth_pairs 241752
96.3% before cap artifacts/blocking_report.json#pair_completeness.union 0.963355
96.2% after cap artifacts/blocking_report.json#pair_completeness.after_cap 0.962362
cap of 200 artifacts/blocking_report.json#candidate_cap_per_a 200
240 truth pairs lost artifacts/blocking_report.json#pair_completeness.truth_pairs_lost_to_cap 240
7.6M candidate pairs artifacts/blocking_report.json#candidate_pairs_after_cap 7595477
rules precision 0.9946 artifacts/eval_rules_v1.json#metrics.at_auto_accept.precision 0.994615
rules recall 0.931 artifacts/eval_rules_v1.json#metrics.at_auto_accept.recall_labelled 0.930917
rules F1 0.962 artifacts/eval_rules_v1.json#metrics.at_auto_accept.f1 0.961712
classifier precision 0.9993 artifacts/eval_learned_v1.json#metrics.at_auto_accept.precision 0.999344
classifier recall 0.850 artifacts/eval_learned_v1.json#metrics.at_auto_accept.recall_labelled 0.849952
classifier F1 0.919 artifacts/eval_learned_v1.json#metrics.at_auto_accept.f1 0.918614
review queue 25,076 artifacts/eval_rules_v1.json#metrics.ambiguity_rule.review_queue 25076
review queue 6,016 artifacts/eval_learned_v1.json#metrics.ambiguity_rule.review_queue 6016
4,501 unverified accepts artifacts/eval_rules_v1.json#metrics.unverified_accepts.count 4501
0.50 unlinked share per side artifacts/manifest.json#sample.thresholds.a.unlinked_share_actual 0.5
~13.8 GiB data peak artifacts/manifest.json#runtime.data_dir_bytes_peak 14784312081 bytes
242,542 linked album release groups artifacts/profile/musicbrainz.json#truth.a_records_with_link_by_primary_type.Album 242542
2,324,821 album release groups artifacts/profile/musicbrainz.json#records.albums 2324821
decision-level calibration overconfident artifacts/eval_learned_v1.json#metrics.calibration.decision_level.ece vs pair_level.ece 0.047858 vs 0.000147

EV Charging figures were re-verified against the EV v0.1.0 artifacts and are unchanged: row counts are sums over by_source.*.{bronze,accepted,quarantined} in artifacts/silver/silver-20260920T194003Z.json; 45.1%, 12.4%, 3.6×, 28% (0.276), 11.4%, 10.5–12.4%, 8.7–11.4%, and 48,619 / 20,699 / 17,677 / 9,258 all resolve to keys in artifacts/findings/findings-20260920T194023Z.json.

Testing

Run in portfolio/ in this order (Node 23.9 locally; engines says 22.x, CI uses .nvmrc):

npm run lint            → exit 0 (eslint .)
npm run type-check      → exit 0 (tsc --noEmit)
npm test                → 13 tests, pass 13, fail 0
npm run build           → ✓ Generating static pages (10/10); routes: /, /projects/ev-charging-data-unified-schema, /projects/entity-resolution, /sitemap.xml, /robots.txt, /opengraph-image
npm run test:e2e        → 4 tests, pass 4, fail 0
npm run check:publication        → Publication content check passed.
npm run check:publication:build  → Publication content check passed.

Built HTML (via next start):

/projects/ev-charging-data-unified-schema
  <meta property="og:image" content="https://cbratkovics.dev/opengraph-image"/>
  <meta name="twitter:image" content="https://cbratkovics.dev/opengraph-image"/>
/projects/entity-resolution
  <meta property="og:image" content="https://cbratkovics.dev/opengraph-image"/>
  <meta name="twitter:image" content="https://cbratkovics.dev/opengraph-image"/>
/sitemap.xml
  <loc>https://cbratkovics.dev</loc>
  <loc>https://cbratkovics.dev/projects/ev-charging-data-unified-schema</loc>
  <loc>https://cbratkovics.dev/projects/entity-resolution</loc>
homepage first-occurrence order: Flagship evidence < EV Charging < Entity Resolution < Fantasy Football < NBA Stat Predictor < Additional work < SQL Genius < AI Chat < Document Intelligence

EV case-study HTML diffed against main (scripts and asset hashes excluded): the only changes are the build-id comment, the five added og:image* / twitter:image meta tags, and the three approved copy changes below. 18 changed lines.

External URLs on the new card and page (repository, results site, Findings, Methods card, a pinned artifact blob, EV Findings) all returned HTTP 200 from this environment.

Claims narrowed

  • Entity Resolution card and page describe three methods (exact-match rule, weighted rules baseline, calibrated classifier), not "two matchers"; the headline comparison remains rules vs. classifier.
  • The draft's "135 cited figures across 12 files" was dropped: the checker reports 124 at v0.1.0, and the count is checker output, not an artifact. The page now says the checker fails the build when a cited figure lacks a matching key.
  • "MusicBrainz editors have linked a large share of release groups" became "242,542 of its 2,324,821 album-type release groups", both cited.
  • The card summary says the sampled release groups were "matched against" Discogs masters rather than "linked to", since half the sample is unlinked by design.
  • "A 'How this was built' section in the README says so" became "the brief says so": the entity-resolution README on main no longer carries that sentence; docs/BRIEF.md does.
  • The pipeline line places dbt bronze/silver/gold after the artifacts, matching the repository's architecture.
  • EV page: "three public operators' charging-session logs" → "three public sources' charging-session logs" (the UK DfT publication is not an operator).
  • EV card and page: the "pilot at multi-port stations around midday" recommendation is replaced by prioritizing late-morning-to-mid-afternoon investigation at multi-port stations, with port-inventory validation and queue or turned-away-driver evidence required before claiming constrained demand or choosing an intervention.
  • EV card and page: added "Utilization figures are within-source only; the sources differ in operator, place, and period and are not compared."

🤖 Generated with Claude Code

cbratkovics and others added 7 commits September 24, 2026 19:49
…k into shared components

The EV case-study page keeps identical markup; the helpers now live in
components/case-study/ so a second case-study route can reuse them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Page-level openGraph and twitter objects replace the root layout's, so the
EV route rendered without a social image (Codex finding on PR #13). A shared
caseStudyMetadata() helper now builds the route metadata with the site's
social image in both objects.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
EV Charging stays the flagship; Fantasy Football and NBA Stat Predictor are
featured; SQL Genius, AI Chat, and Document Intelligence move to additional
work. Data fields and order only; the content-contract tier assertions
name the new contract.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Mirrors the EV page: shared case-study helpers and metadata (with the
site's social image), an "As of v0.1.0" scope line, evidence links at top
and bottom, and every figure scoped to the v0.1.0 artifacts. Registered
in the sitemap.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ions

Adds an optional, data-only citations field to Project, populated for the
new entry with every card and case-study figure traced to a v0.1.0
artifact key (pinned to commit f50d764). The content-contract suite now
asserts the new count and order, the labelled-fold hedges, and that
every cited figure is used in the copy.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ization figures

Three meaning-level alignments with the EV repository's docs on main
(artifacts unchanged): the UK DfT publication is a source, not an
operator; the idle-fee recommendation now prioritizes investigation and
requires port-inventory and queue evidence before claiming constrained
demand; and the limitations state that utilization figures are
within-source only. Numbers are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…images

Asserts the new sitemap entry, the homepage tier contract, og:image and
twitter:image on both case-study routes, the narrowed EV copy, and the
Entity Resolution page's scoped evidence and hedges.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
cbratkovics-dev Ready Ready Preview Sep 25, 2026 12:28am UTC

Request Review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-24T23:58:56.717732Z b2ba8d7 PR opened
🔒 Security Review ✅ Completed 2026-09-24T23:59:03.892571Z b2ba8d7 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

…ned artifacts link

Thesis line now says three methods; the ownership statement is the
owner's own; the scope line links every figure to the artifacts directory
at commit f50d764 (tag v0.1.0). E2E asserts all three.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…e every page numeral

Review-queue and unverified-accept counts are test-fold MusicBrainz
records, so the card and page say records. Adds citations for the five
blocking keys, the three methods, the queue ratio, the feature version,
and the one-to-many link counts; the decision-record count on the page
is replaced by the ADR range.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@cbratkovics
cbratkovics merged commit b1ab073 into main Sep 25, 2026
3 checks passed

This branch was successfully deployed

1 active deployment
Preview — 0129f430 Deployed Sep 25, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant