Skip to content

Fix three small gaps left by the follow-up fixes - #116

Merged
savvides merged 3 commits into
mainfrom
fix/followup-minors
Oct 9, 2026
Merged

savvides merged 3 commits into
mainfrom
fix/followup-minors

Conversation

@savvides

@savvides savvides commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Summary

This PR fixes three small problems that the final review of PR #115 found. That review let them wait. It also fixes a timing problem in a test, which the first CI run of this PR found.

  1. Empty report folder. If the model ran the slug block with <project name> still in it, the block printed PROJECT_NAME_NOT_SET. It then made an empty .idstack/exports/project-name/ folder. Now the block stops with exit 1 before it makes the folder. This change is in needs-analysis and course-import.
  2. Citation forms that the tier checker did not see. test/check-citation-tiers.py examined one line at a time, with only spaces between codes. It did not examine a code before a comma, as in [A-1], [B-2] [T1]. It also did not examine a citation that a line break splits. The checker now finds citation groups in the full file. Commas can come between codes, and one line break can come between two items. A blank line ends a citation. The checker also finds a no-break space between a code and its tier again. The new test/test-citation-tiers.py tests these forms on small test repos.
  3. Chrome output after an exit. When Chrome exits, the rendered landing test now waits for stderr to close, for a maximum of 2 seconds. Chrome's helper processes can write after the main process exits, and the error message now gives that output.
  4. A half-built page in the rendered landing test. The first CI run of this PR failed in the mutation job. The baseline check found that .footer-signup button is missing from the page at a width of 320. The test waited a fixed 320 ms after it opened the page. A busy runner then measured a page that was not complete. The test now waits for Page.domContentEventFired, for a maximum of 15 seconds, and then for the 320 ms. The CSS of the page is inline, so a parsed page has its styles. Locally, the test passed 20 of 20 runs, and 10 of these ran with all CPU cores busy. This problem has no mutation case, because a mutation cannot make a runner busy each time.

Each of fixes 1 to 3 has a regression check. Mutations 54a–54d put each problem back, and each one must fail.

Verification

Check Result
./test/smoke-test.sh 405/405 (it was 401)
python3 test/test-citation-tiers.py 9 tests OK on Python 3.9.6 and 3.12
python3 test/check-citation-tiers.py . no problems. It finds the same 197 citation groups as before.
python3 test/check-doc-accuracy.py . pass
./test/mutation-test.sh guarded: 142, NOT guarded: 0, skipped: 0

idstack made the mutation run before the last commit. That commit changed the separator pattern and the anchor of mutation 54c. 54c was then examined on a copy of the repo, and it still makes 3 unit tests fail. The CI mutation job runs the full suite again.

A separate review examined the first commit. It found no critical or important problems.

Limits

  • A course with the name "Project Name". The slug block now stops for such a course. The guard compares the slug, so it also finds <Project Name> and the placeholder with extra spaces.

  • Two possible false reports. The tier checker can now give a false report in two cases. Neither case occurs in the repo:

    • A line ends with a code that has no tier, and the next line starts with a different citation.
    • A cited line is followed by a line that starts with a tier.

    Both cases give a failure that you can see. Neither case lets an incorrect tier pass.

🤖 Generated with Claude Code

savvides and others added 2 commits October 8, 2026 08:08
- The slug block stops when the course title placeholder is not replaced,
  so it no longer leaves an empty exports/project-name/ folder.
- check-citation-tiers.py checks codes with commas between them and a
  citation that one line break splits. New test/test-citation-tiers.py.
- The rendered landing test waits up to 2s for Chrome's stderr to close
  after an exit, so output from helper processes reaches the message.

Mutations 54a-54d guard the fixes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The separator matched only spaces and tabs, so a no-break space between
a code and its tier hid the citation. The old per-line match caught it.
The docstring now says that one line break can come between two items.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 8, 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-10-08T15:48:55.066056Z 5686564 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.

The rendered landing test waited a fixed 320ms after Page.navigate. On a
busy CI runner it measured a half-built page, and the mutation job's
baseline failed with ".footer-signup button is missing from the page".
The test now waits for Page.domContentEventFired (15s at most) before the
settle wait. The page's CSS is inline, so a parsed page has its styles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@savvides
savvides merged commit ea6822d into main Oct 9, 2026
10 checks passed
@savvides
savvides deleted the fix/followup-minors branch October 9, 2026 12:38
@savvides savvides mentioned this pull request Oct 9, 2026
3 tasks
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