Repository navigation
Conversation
Microcosm's pre-August name and the dataset it replaced as the default still appeared on pages the site renders. The income-shift footer printed a frozen dataset key, the US home page carried a card for the earlier dataset, the Budget Lab memo named the old build, and the unlinked slide deck described the earlier dataset's construction. The footer now shows a label built from the build id, the memo says Microcosm and names the build by its commit, and the card, its image and the slide go, since no clean page exists to link and the slide's figures describe the earlier dataset. A regression test renders every view and scans site code, public files and the generated memo. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Cut a clause that repeated "identical model version". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The names test now clicks every control a page shows, including any a click reveals, and re-renders to click any control an earlier click hid. It leaves the country switch alone: clicking it swapped the page to the other country, so the US scenario picker went unswept. - Escape the invisible characters in the test's character class so eslint passes. - Point the approach and capabilities links at pages that show no retired name. - Return no build label for a timestamp that names no calendar date. - compare_data_builds.py compares build o with the published build p by default, prints both runs' versions, and warns when they differ in country model version or net-income exclusions. - The memo says the build p rerun kept policyengine-us at 1.764.6 and moved policyengine.py from 4.22.3 to 5.0.1, in place of calling it a data-only change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… read The sweep now clicks elements styled with a pointer cursor, which reaches the research page's expandable cards and the uprating explorer's toggle. For each radio group, tab list and select on the starting page, it also tries each option with every option of each other group shown alongside it, so it reaches every AI adoption scenario with every wage variant. Site code may name a data key that holds a frozen id only where ALLOWED_READS lists it, and AIScenarios may name certifiedDataBuildId only inside its call to microcosmBuildLabel. A new test renders the shared header and footer from @policyengine/ui-kit and lists the two policyengine.org pages they link that show a retired name: Research and Python. The research listing joins the pages that show one, and archives join the documents public/ may not serve unread. The memo's stability paragraph no longer attributes the differences between builds to the data or credits them to a recalibration, drops the capital gains claim that no Microcosm commit between the builds supports, and names Rapid / proportional as the variant behind the New York figure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The sweep now returns a route to each control that a click hid before the pass reached it, such as the other options of a list that closes once someone chooses. It replays each route from a fresh render, works whatever the replayed control reveals, and fails once it needs more than 1,000 routes. For each option of every radio group, tab list, list box and select on the starting page, a pass starts from that option and leaves the group alone. Native radios that share a name form one group, and the pairing step now draws its pairs from the same groups. The test now counts the org's repository list, the profile README's pages, microcosm-dynamics, and the listed repositories' branch roots and README files among the pages that show a retired name. In a mutation run the test fails on all 55 deliberate breaks and passes on 7 harmless edits. Turning off the option passes or the routes, or cutting the routes to one level, lets through the breaks that each phase targets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
policyengine.org/us/model names the earlier dataset seven times in its comparison with TRIM3, NBER TAXSIM or mRelief, and a click or a ?compare= link opens that comparison. The study linked the page from its home, research, policy analysis and income shift pages. The model documentation links in PolicyAnalysis, IncomeShift and ShiftSweep and the research page's model link now open https://policyengine.github.io/policyengine-us/, which the model page itself links as the policyengine-us documentation. UK pages keep policyengine.org/uk/model, which shows neither name. The PolicyEngine card on the home page describes the whole project, so it now opens the country's home page, and the unmounted capabilities component gets the docs link. The sweep data's model_url and MODEL_URL in compute_shift_sweep.py and compute_ai_scenarios.py move to the docs together, so the next run writes the same link. The committed analysis outputs keep the old one, since the site serves none of them. The test now lists the model page among pages that show a retired name and expects the shared header to link it. Against the old links, it fails on all four pages and on the sweep data. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On #54's branch, useUpratingTable fetches withBasePath(UPRATING_TABLE_PATH), a constant that upratingTable.js defines. The fetch check counted only a path written in the call, so it failed on a tree that merges #54, though the fetch still asks for a file public/ serves. The check now also accepts a fetch that names a constant, and looks up the value site code gives that constant. It fails when no site code defines the name, or when site code gives it more than one value. A unit test checks fetchedFile with a written path, a constant, a constant with two values and an undefined name. On a tree that merges #54, six breaks fail the check: a missing file, a constant with two values, a remote address in a constant, an undefined name, a template path and a fetch without the base path. Renaming the constant passes, and so does defining it twice with one value. The header-and-footer test and the BibTeX download test now get the 120-second limit the page tests have. Under load the header sweep took 6.5 seconds and failed Vitest's default 5-second limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#54 adds a comment that uses the word fetch, and the check counted that word as a request with no served fetch to match it. The check now blanks every comment that espree finds before it counts. espree, the parser ESLint already runs on this code, leaves a URL inside a string whole. A request word in a string or in page copy still counts, and a file espree can't parse, such as a TypeScript file, keeps its comments. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The names test imports espree directly, so package.json now lists it beside eslint, which already installs the same version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Removes Microcosm's pre-August name, and the name of the dataset it replaced as the default, from everything the study site renders at policyengine.org/us/ai-inequality. The study's own pages also stop linking pages that show either name. The shared PolicyEngine header still links three policyengine.org pages that show the earlier dataset's name: Model, Python and Research.
Changes
microcosmBuildLabelbuilds that label from the published release id and returns null for an id whose timestamp names no calendar date. JSON keys and ids stay as published.bun run build:memoregeneratedsrc/data/memoContent.js.model_urlandMODEL_URLincompute_shift_sweep.pyandcompute_ai_scenarios.pymove to the documentation too, so the next run writes the same link. The committed analysis outputs keep the old link, since the site serves none of them.analysis/: renames prose in docstrings, comments andAI_SCENARIOS.mdbut keeps frozen ids, keys, fixtures and committed outputs. By defaultcompare_data_builds.pynow compares build o with the published build p results. It prints each run's policyengine-us and policyengine.py versions, and it warns when the two runs differ in country model version or in the benefits they keep out of net income.Invariants
src/App.jsxshows either retired name in its text, title or attribute values in any state the sweep below reaches, and no route's content links a page listed inPAGES_SHOWING_RETIRED_NAMES. No file a page hands over as a download, such as the references page's BibTeX, shows either name.src/App.jsx, sinceapp/holds only the catch-all page that renders the router app.@policyengine/ui-kit, which wrap every page, show neither name in any state the sweep reaches. Of the listed pages, they link only the three inSHELL_LINKS_TO_RETIRED_PAGES: policyengine.org/us/model, /us/python and /us/research.public/serves contain neither name, once the test folds compatibility characters and drops invisible ones. Markup files also contain neither name once the test strips their tags and decodes their entities.src/utils/modelMetadata.jsmay spell the old name only in the release-id prefix it has to recognize.public/,src/andapp/hold no PDF, Office file or archive unless someone has read it in full and listed it inCHECKED_DOCUMENTS, which starts empty.PAGES_SHOWING_RETIRED_NAMES. The test resolves root-relative and protocol-relative paths, and link targets in served markup, as policyengine.org would.public/serves, throughfetch(withBasePath(...)). The call names the path itself or a string constant that site code defines with one value.ALLOWED_READSlists it, and only inside the call listed with it.AIScenariosnamescertifiedDataBuildIdinsidemicrocosmBuildLabel(...)and nowhere else. Code that prints a whole metadata object names no key, so only the sweep can catch it.microcosmBuildLabelreturns a label for a Microcosm US build id, in either spelling, whose timestamp names a real calendar date, and null for anything else.src/retiredDatasetNames.test.jsxchecks all but the last: it reads each route fromsrc/App.jsx, renders it in each country and sweeps it. The sweep works every button, native disclosure, checkbox and radio, and every element with an inline pointer cursor or a role or state that marks it as a control. It also works any element whose React props carry a press or hover handler, such as a card that a CSS class styles as clickable. It hovers each element that handles a hover before pressing it, and after each step it records the page's text, title, attribute values and links.A click can hide a control before the pass reaches it, as a menu that closes on a choice hides its other options. The sweep then renders the page again, replays the steps back to that control, works it and runs a pass from there, up to 1,000 replays per page. The sweep also gives each option of every radio group, tab list, list box and select a fresh render and a pass that keeps that option chosen. A last phase tries each option of one group with each option of every other group. The sweep leaves the country switch alone, because the test renders each country's page separately. It reaches 239 distinct states of the US policy-analysis page, 221 of income-shift and 42 of research.
The sweep never tries three options together, presses a key or types, and a page that adds a text field fails until the sweep learns to fill it. The option passes and the pairing phase don't replay controls they hide. The test never loads the uprating explorer's table, since the public-file checks read that file directly, and the charts draw nothing in jsdom, so the sweep never reads chart labels. A link to an outside page the list doesn't name passes, so someone has to read each new outside page by eye. The fetch check looks constants up by name, so it can't tell a served constant from a local variable that shadows it.
src/utils/modelMetadata.test.jschecks the last invariant, with month 13, 32 July, day 0, 31 February, 29 February 2027 and a leap day.Verification
analysis/testsand skips 13.bun run buildsucceeds, and Prettier flags the same nine files here as on main.ALLOWED_PHRASES. Turning off the option passes or the replays, or cutting replays to one level, lets through the breaks each phase targets.src/data/shiftSweepData.json, where they rewrite the description line next to themodel_urlline this branch changes. To resolve it, keep their description and this branch'smodel_url. Vitest passes on each merged tree and pytest on each that changesanalysis/, and both pass on a tree that merges all four.Left for other repositories
These pages still show a retired name, and the study's own pages no longer link them:
PolicyEngineShellfrom@policyengine/ui-kitrenders the same header on every page here as on policyengine.org. Its US navigation links Model, Python and Research, so the site links those three pages while they show the name.Left for the study refresh
src/data/incomeDistributionData.jsonstill comes from the earlier dataset, and the refresh should rerun it. Its metadata doesn't render, and no page names a source for the charts it feeds (IncomeDistributionBreakdown,BaselineDistributionSummary), so nothing labels them Microcosm.src/data/shiftSweepData.jsonandsrc/data/incomeDistributionData.jsonrecord local file paths (runtime_dataset_sourceandbaseline_microdata_path), and the site bundles both files. The refresh should drop those paths or record published addresses.paper/prose still uses the old names, though no page on the site links to it..gitignore, and with this branch in five more files: the memo,memoContent.js,compare_data_builds.py,compute_ai_scenarios.pyandreconcile_budget_lab.py. Its side of the memo's stability and reproducibility paragraphs uses Microcosm's old name and prints its release id, so the new test will fail on it until the resolved memo drops both.🤖 Generated with Claude Code