Skip to content

chore(changelog): append the weekly history - #23

Open
jddunn wants to merge 1 commit into
masterfrom
ci/changelog
Open

jddunn wants to merge 1 commit into
masterfrom
ci/changelog

Conversation

@jddunn

@jddunn jddunn commented Oct 26, 2026 •

Copy link
Copy Markdown
Member

The history before 2026-11-09, in UTC, recorded by run https://github.com/framerslab/codex/actions/runs/42540708154 in codex-history/YYYY-MM.jsonl: one line for each day of the commits that reached master that day, and one line of the issues created and closed and the pull requests merged over the days not yet recorded. Each script starts after the last day it recorded, so only complete days not recorded before are added.

master is protected, so the history reaches it through this pull request. The Generate Weekly Changelog workflow opens and updates it with FRAMERS_BUMP_TOKEN, so its Test Suite and rename-guard run; landing-follows-the-bump-checks.yml labels it landing once both pass on its head, and it lands after its review comments are read, answered and resolved. A later run keeps these lines and adds its own until this pull request lands.

Summary by CodeRabbit

  • Documentation
    • Added historical activity records covering October 21, 22, and 26, and November 2, 2026.
    • The records summarize commit totals and categories, commit details, and GitHub activity, including merged pull requests and issue counts.

@sourcery-ai

sourcery-ai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Reviewer's Guide

Data structures

Append the newly recorded daily history to the October and November JSONL files.

  • codex-history/2026-10.jsonl L4-8
  • codex-history/2026-11.jsonl L1-2

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 26, 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-26T00:47:03.160952Z bff4466 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.

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The October and November history files add commit metadata and GitHub activity summaries for dates from October 21 through November 2, 2026.

Changes: History records

Layer / File(s) Summary
Add commit and activity records
codex-history/2026-10.jsonl, codex-history/2026-11.jsonl
The October file adds commit and activity records for October 21, 22, and 26. The November file adds November 2 commit metadata and activity for two merged pull requests.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Change: Other

Merge Risk: Minimal · up to acc97

The change appends history records; no merge-blocking risk is identified.

Pre-merge checks: Passed 4 · Inconclusive 1

Failed Failed checks: 1 inconclusive

Check name Status Explanation Resolution
Description check Inconclusive The description covers the core content. It explains what the history records hold, the daily and activity entries, and why the change goes through a pull request (master is protected). It also explai… Use the repository's pull request template. Add a Summary section that says the PR appends the 2026-10 and 2026-11 history records. Add an Issue section with "No issue" or the correct issue link. Add a Spec, plan and design section with "No…
Passed Passed checks: 4 passed

Check name Status Explanation
Title check Passed The title is clear and specific. It names the conventional-commit type (chore), the scope (changelog), and the main action (appending the weekly history). The changeset adds dated history records to c…
Docstring Coverage Passed No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title is clear and specific. It names the conventional-commit type (chore), the scope (changelog), and the main action (appending the weekly history). The changeset adds dated history records to codex-history/2026-10.jsonl and codex-history/2026-11.jsonl, so the title matches the main change.

Full details: Docstring Coverage

Explanation

No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 0 functions across 0 files. (1 skipped: 1 unsupported.)

Full details: Description check

Explanation

The description covers the core content. It explains what the history records hold, the daily and activity entries, and why the change goes through a pull request (master is protected). It also explains how the workflow runs and when the PR lands. The description does not follow the repository template. It has no Summary, Issue, Spec/plan/design, Type of Content, Pre-submission Checklist, License Compliance, or Validation Results sections. Those sections are not needed for a generated changelog, but the template is not followed.

Resolution

Use the repository's pull request template. Add a Summary section that says the PR appends the 2026-10 and 2026-11 history records. Add an Issue section with "No issue" or the correct issue link. Add a Spec, plan and design section with "None" if none exist. Mark the Type of Content checkbox (for example, Update to existing content). Complete the License Compliance checkboxes, or state why they do not apply to generated history. Add the Validation Results output or state that no validation was run. Keep the existing explanation of the workflow and the protected-branch reason in Additional Notes.

Finishing Touches

Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 8637779 and acc972f.

Files selected for processing: 1

  • codex-history/2026-11.jsonl

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Append October 21–25 history to the monthly changelog

📝 Documentation 🕐 10-20 Minutes

Grey Divider

AI Description

• Record 56 commits that reached master on October 21 and 22, grouped by UTC day.
• Add activity through October 25: 12 merged pull requests and no issue changes.
• Preserve earlier entries while bringing the weekly history to protected master through a pull
 request.
Diagram

graph TD
  W["Weekly workflow"] --> G["Commit history"] --> H[("Monthly JSONL")]
  W --> A["GitHub activity"] --> H
  H --> P["Changelog PR"] --> M["Protected master"]
Loading
High-Level Assessment

Append to the existing monthly JSONL file through the changelog pull request. This preserves earlier records and uses the established path for changes to protected master; replacing the file or changing the history format offers no benefit for this data-only update.

Files changed (1) +3 / -0

Documentation (1) +3 / -0
2026-10.jsonlAppend October commit and GitHub activity records +3/-0

Append October commit and GitHub activity records

• Adds UTC commit-day records for October 21 and 22, totaling 56 commits, plus one activity record covering October 21 up to October 26. The activity record lists 12 merged pull requests and no created or closed issues; the existing lines remain unchanged.

codex-history/2026-10.jsonl

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. October 21 history overstates commits 🐞 Bug ≡ Correctness
Description
The 2026-10-21 entry sets totalCommits to 50 instead of the 48 records in its byType groups and
commits array, while the 2026-10-22 entry sets it to 6 instead of 5. Consumers that trust these
stored totals will report two and one additional commits, respectively, that are not present in the
recorded histories.
Code

codex-history/2026-10.jsonl[4]

Evidence
The 2026-10-21 line stores totalCommits:50, while counting its byType entries gives 48, and the
2026-10-22 line stores totalCommits:6, while counting its byType entries gives 5. The generator
defines the total from commits.length, so both committed records differ from the repository's
generation invariant.

codex-history/2026-10.jsonl[4-4]
scripts/generate-changelog.js[174-187]
codex-history/2026-10.jsonl[5-5]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The 2026-10-21 JSONL record declares 50 commits instead of the 48 present in its grouped and flat commit lists, and the 2026-10-22 record declares 6 instead of 5, making both changelog entries internally inconsistent.
## Fix Focus Areas
- codex-history/2026-10.jsonl[4-4]
- codex-history/2026-10.jsonl[5-5]
- scripts/generate-changelog.js[174-187]
## Recommended Fix
Set the October 21 and October 22 `totalCommits` values to the actual numbers of recorded commits, or regenerate both lines from the source history so `totalCommits`, `byType`, and `commits` are derived consistently.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Tip of the day
💡 Did you know, you can see how risky a PR is at a glance with blast radius labels

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@@ -1,3 +1,6 @@
{"date":"2026-10-19","totalCommits":12,"byType":{"ci":[{"sha":"bad5bd9","fullSha":"bad5bd9074e6f819cbd19dcbab15cf880bd53b9c","author":"github-actions[bot]","email":"github-actions[bot]@users.noreply.github.com","date":"2026-10-19T10:47:10Z","url":"https://github.com/framerslab/codex/commit/bad5bd9074e6f819cbd19dcbab15cf880bd53b9c","type":"ci","scope":"codex","description":"update search index and block tags [skip ci]","body":null},{"sha":"482671c","fullSha":"482671c75b6230d10272490eccc33c2db3f8d634","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T03:08:53-07:00","url":"https://github.com/framerslab/codex/commit/482671c75b6230d10272490eccc33c2db3f8d634","type":"ci","scope":null,"description":"take the landing label off when a pull request's base changes","body":"The landing label records guards that ran against the branch a pull request\ntargets. Editing the base sends an edited event, which the Trusted Weavers\nworkflow does not handle, and its branch filter would skip a retarget away\nfrom main in any case, so the label and the guards comment stayed.\n\nA new workflow, Landing follows the base, starts on every edit of a pull\nrequest into any branch and runs its job only when the base changed. It takes\nthe label off a pull request that carried it when the base changed and says\nin the guards comment which base the guards ran against. It checks out no\ncode and has no concurrency group, so a later title edit cannot cancel it.\n\nThe Trusted Weavers approval and label steps act only while the pull request\nstill targets the base the checks ran against, and the label step reads the\npull request again once the label and its comment are on, taking the label\nback off when the head or the base moved meanwhile."},{"sha":"d71b43e","fullSha":"d71b43ea499ab06ac7a0a165b682e2d75d04a175","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T02:30:55-07:00","url":"https://github.com/framerslab/codex/commit/d71b43ea499ab06ac7a0a165b682e2d75d04a175","type":"ci","scope":null,"description":"the Weaver workflow finds its guards comment by its own author and the leading marker","body":"The three lookups took the first bot comment that contained the marker\nanywhere, so a review bot quoting the marker made the workflow try to edit\nthat bot's comment and fail. They now take github-actions[bot]'s comment\nthat starts with the marker, which is the one the workflow writes."},{"sha":"e143560","fullSha":"e14356068e1ac061980681cb9173f4f8ea976c82","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T00:32:38-07:00","url":"https://github.com/framerslab/codex/commit/e14356068e1ac061980681cb9173f4f8ea976c82","type":"ci","scope":null,"description":"keep the Weaver workflow's write token in the jobs that write, and trust the base branch's list","body":"The jobs that write labels and comments (clear-landing, approve-and-label,\nreport-failed-checks, notify-non-weaver) ask for issues and pull-requests\nwrite themselves; the workflow default is read-only. validate-content\ninstalls and runs the pull request's code with a read-only token, and its\ncheckout keeps no token on disk. The trust check reads .github/WEAVERS.txt\nfrom the base branch, so a pull request that adds its own author counts as\ntrusted only once it is merged."},{"sha":"39df6c7","fullSha":"39df6c72bde222cca1b122014d40feee2e0c8165","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T23:25:44-07:00","url":"https://github.com/framerslab/codex/commit/39df6c72bde222cca1b122014d40feee2e0c8165","type":"ci","scope":null,"description":"the landing label stays only on a head whose guards passed","body":"Trusted Weavers: runs for one pull request go one at a time, a newer\npush cancelling the older run. A push or a reopen takes the label off\nbefore the checks run again, and the guards comment says the label is\noff; a label added as the pull request was opened stays. The approval\nand the label go only on the commit the run validated, the approval\npinned to it. A head whose checks fail loses the label and the guards\ncomment says the checks failed; a failed run for an older head leaves\nthe newer head alone.\n\nIn all three flows the label comes off again when its guards comment\ncannot be posted. The re-catalog script leaves the label off when the\nindexer skipped a file, since that file is missing from the index, and\nits PR body counts the skipped files.\n\nThe docs export AUTO_CATALOG_LAND in the shell examples and describe\nthe label's new rules."},{"sha":"7ed8adf","fullSha":"7ed8adfce1017d4d972d0d74d601df84fa66350b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T21:11:51-07:00","url":"https://github.com/framerslab/codex/commit/7ed8adfce1017d4d972d0d74d601df84fa66350b","type":"ci","scope":null,"description":"label pull requests landing where they were merged automatically","body":"The inbox categorizer merged a move at 70 percent confidence or more,\nthe trusted Weaver workflow merged a validated pull request through the\nREST API, and the re-catalog script merged its pull request five\nseconds after opening it when asked to. A pull request lands only after\nits reviews and comments are read, fixed or answered and its threads\nresolved, so each of them keeps its guards, adds the landing label\n(created on first use) and posts one comment naming the guards that\npassed; a maintainer lands the pull request after that pass.\n\nThe Weaver workflow keeps one comment per pull request, takes the label\noff when a later push fails the checks, and drops contents: write,\nwhich only the merge needed. The script takes --land and\nAUTO_CATALOG_LAND, with --auto-merge and AUTO_CATALOG_MERGE kept as\nolder names for the same setting.\n\nThe test also parses the changed workflows (the YAML, every run block\nwith bash -n, every github-script body compiled as the action wraps\nit) and the script, since GitHub reports a broken workflow file only\nwhen an event would start it."}],"test":[{"sha":"63282ba","fullSha":"63282ba6702fcb34cb9afa753353225c0945cb01","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T03:06:14-07:00","url":"https://github.com/framerslab/codex/commit/63282ba6702fcb34cb9afa753353225c0945cb01","type":"test","scope":null,"description":"the landing label comes off when a pull request's base changes","body":"A pull request labelled landing keeps the label when its author moves its\nbase, though the guards ran against the old base. The tests run a new\nworkflow's github-script step on an edit that changed the base: it takes the\nlabel off and says so in the guards comment, leaves a pull request without\nthe label alone, and starts on any base, so a retarget away from main counts.\n\nThe Trusted Weavers label and approval steps must also leave a pull request\nalone once it targets another base, and take the label back off when the head\nor the base moves while the label goes on."},{"sha":"9651eec","fullSha":"9651eec1a12e385fb35a930ab0caade004705569","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T02:29:37-07:00","url":"https://github.com/framerslab/codex/commit/9651eec1a12e385fb35a930ab0caade004705569","type":"test","scope":null,"description":"the Weaver workflow edits only its own guards comment","body":"A review bot quoted the guards marker inside its own issue comment on the\npull request that added this flow. The lookup takes the first bot comment\ncontaining the marker, so the update would go to that bot's comment, which\nthe workflow token cannot edit (403), and no run could label the pull\nrequest. The stand-in for the GitHub API now refuses edits to another\nauthor's comment, and three cases put a quoting comment first."},{"sha":"e0872a3","fullSha":"e0872a37bf0afa957c8eb2e66ca5e7c3c72840d7","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T00:31:11-07:00","url":"https://github.com/framerslab/codex/commit/e0872a37bf0afa957c8eb2e66ca5e7c3c72840d7","type":"test","scope":null,"description":"the Weaver workflow writes only where it must and trusts the base branch's list","body":"The jobs that add labels and comments should hold the write token; the job\nthat installs and runs the pull request's code should get a read-only token\nand keep none in its checkout. The trusted list should come from the base\nbranch, so a pull request cannot add its own author."},{"sha":"a835e3a","fullSha":"a835e3a55b081e3a62daafc9a39501eab404c835","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T23:25:37-07:00","url":"https://github.com/framerslab/codex/commit/a835e3a55b081e3a62daafc9a39501eab404c835","type":"test","scope":null,"description":"run the landing flows' own code, and scan nested folders","body":"The Trusted Weavers workflow's github-script steps now run against a\nstand-in for the GitHub API: a push or a reopen takes the landing label\noff before the checks run again, a label added as the pull request is\nopened stays, the label and the approval go only on the commit the run\nvalidated, a failed guards comment takes the label off again, and a\nfailed check takes it off its own head and says so in the comment. The\nworkflow runs one at a time per pull request.\n\nThe inbox workflow's results step and the re-catalog script run in a\nscratch repository with stand-ins for gh, curl and npm on the PATH: both\nlabel and comment when their guards pass, take the label off again when\nthe comment cannot be posted, and never merge; the re-catalog script\nleaves the label off when the indexer skipped a file.\n\nThe merge-call scan walks nested folders under .github, scripts and lib,\nand the github-script compile check no longer counts the steps."},{"sha":"dbc203c","fullSha":"dbc203cfcee25dd3bdf6aa257540e76bdec60d12","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T21:03:55-07:00","url":"https://github.com/framerslab/codex/commit/dbc203cfcee25dd3bdf6aa257540e76bdec60d12","type":"test","scope":null,"description":"nothing here merges a pull request by itself","body":"Pull requests land only after their reviews and comments are read,\nanswered and resolved. The test scans every workflow and script for a\nmerge call (gh pr merge, the REST merge endpoint, Octokit pulls.merge,\nthe GraphQL auto-merge mutation, a merge action) and checks that the\nthree flows that would merge keep their guards, add the landing label\nand post a comment.\n\nIt fails on master: the inbox categorizer merges at 70 percent\nconfidence, the trusted Weaver workflow merges after validation, and\nthe re-catalog script merges when asked to."}],"docs":[{"sha":"e860776","fullSha":"e8607765e00f7163b80d898b50e31d3c3031d30b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T21:11:56-07:00","url":"https://github.com/framerslab/codex/commit/e8607765e00f7163b80d898b50e31d3c3031d30b","type":"docs","scope":null,"description":"pull requests land after the comment pass, under the landing label","body":"The README, the quick start, the development and re-catalog guides, the\ncontributor guide, the workflows page and the architecture overview\ndescribed automatic merges. They describe the landing label, the guards\nbehind it and the review pass before a merge, and give\nAUTO_CATALOG_LAND as the re-catalog script's own setting: no workflow\nreads it, so it is not listed as a repository secret.\n\nThe overview keeps its line count, so the block line numbers in its\nfrontmatter hold; the renamed heading's block id and text follow it."}]},"commits":[{"sha":"bad5bd9","fullSha":"bad5bd9074e6f819cbd19dcbab15cf880bd53b9c","author":"github-actions[bot]","email":"github-actions[bot]@users.noreply.github.com","date":"2026-10-19T10:47:10Z","url":"https://github.com/framerslab/codex/commit/bad5bd9074e6f819cbd19dcbab15cf880bd53b9c","type":"ci","scope":"codex","description":"update search index and block tags [skip ci]","body":null},{"sha":"482671c","fullSha":"482671c75b6230d10272490eccc33c2db3f8d634","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T03:08:53-07:00","url":"https://github.com/framerslab/codex/commit/482671c75b6230d10272490eccc33c2db3f8d634","type":"ci","scope":null,"description":"take the landing label off when a pull request's base changes","body":"The landing label records guards that ran against the branch a pull request\ntargets. Editing the base sends an edited event, which the Trusted Weavers\nworkflow does not handle, and its branch filter would skip a retarget away\nfrom main in any case, so the label and the guards comment stayed.\n\nA new workflow, Landing follows the base, starts on every edit of a pull\nrequest into any branch and runs its job only when the base changed. It takes\nthe label off a pull request that carried it when the base changed and says\nin the guards comment which base the guards ran against. It checks out no\ncode and has no concurrency group, so a later title edit cannot cancel it.\n\nThe Trusted Weavers approval and label steps act only while the pull request\nstill targets the base the checks ran against, and the label step reads the\npull request again once the label and its comment are on, taking the label\nback off when the head or the base moved meanwhile."},{"sha":"63282ba","fullSha":"63282ba6702fcb34cb9afa753353225c0945cb01","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T03:06:14-07:00","url":"https://github.com/framerslab/codex/commit/63282ba6702fcb34cb9afa753353225c0945cb01","type":"test","scope":null,"description":"the landing label comes off when a pull request's base changes","body":"A pull request labelled landing keeps the label when its author moves its\nbase, though the guards ran against the old base. The tests run a new\nworkflow's github-script step on an edit that changed the base: it takes the\nlabel off and says so in the guards comment, leaves a pull request without\nthe label alone, and starts on any base, so a retarget away from main counts.\n\nThe Trusted Weavers label and approval steps must also leave a pull request\nalone once it targets another base, and take the label back off when the head\nor the base moves while the label goes on."},{"sha":"d71b43e","fullSha":"d71b43ea499ab06ac7a0a165b682e2d75d04a175","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T02:30:55-07:00","url":"https://github.com/framerslab/codex/commit/d71b43ea499ab06ac7a0a165b682e2d75d04a175","type":"ci","scope":null,"description":"the Weaver workflow finds its guards comment by its own author and the leading marker","body":"The three lookups took the first bot comment that contained the marker\nanywhere, so a review bot quoting the marker made the workflow try to edit\nthat bot's comment and fail. They now take github-actions[bot]'s comment\nthat starts with the marker, which is the one the workflow writes."},{"sha":"9651eec","fullSha":"9651eec1a12e385fb35a930ab0caade004705569","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T02:29:37-07:00","url":"https://github.com/framerslab/codex/commit/9651eec1a12e385fb35a930ab0caade004705569","type":"test","scope":null,"description":"the Weaver workflow edits only its own guards comment","body":"A review bot quoted the guards marker inside its own issue comment on the\npull request that added this flow. The lookup takes the first bot comment\ncontaining the marker, so the update would go to that bot's comment, which\nthe workflow token cannot edit (403), and no run could label the pull\nrequest. The stand-in for the GitHub API now refuses edits to another\nauthor's comment, and three cases put a quoting comment first."},{"sha":"e143560","fullSha":"e14356068e1ac061980681cb9173f4f8ea976c82","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T00:32:38-07:00","url":"https://github.com/framerslab/codex/commit/e14356068e1ac061980681cb9173f4f8ea976c82","type":"ci","scope":null,"description":"keep the Weaver workflow's write token in the jobs that write, and trust the base branch's list","body":"The jobs that write labels and comments (clear-landing, approve-and-label,\nreport-failed-checks, notify-non-weaver) ask for issues and pull-requests\nwrite themselves; the workflow default is read-only. validate-content\ninstalls and runs the pull request's code with a read-only token, and its\ncheckout keeps no token on disk. The trust check reads .github/WEAVERS.txt\nfrom the base branch, so a pull request that adds its own author counts as\ntrusted only once it is merged."},{"sha":"e0872a3","fullSha":"e0872a37bf0afa957c8eb2e66ca5e7c3c72840d7","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T00:31:11-07:00","url":"https://github.com/framerslab/codex/commit/e0872a37bf0afa957c8eb2e66ca5e7c3c72840d7","type":"test","scope":null,"description":"the Weaver workflow writes only where it must and trusts the base branch's list","body":"The jobs that add labels and comments should hold the write token; the job\nthat installs and runs the pull request's code should get a read-only token\nand keep none in its checkout. The trusted list should come from the base\nbranch, so a pull request cannot add its own author."},{"sha":"39df6c7","fullSha":"39df6c72bde222cca1b122014d40feee2e0c8165","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T23:25:44-07:00","url":"https://github.com/framerslab/codex/commit/39df6c72bde222cca1b122014d40feee2e0c8165","type":"ci","scope":null,"description":"the landing label stays only on a head whose guards passed","body":"Trusted Weavers: runs for one pull request go one at a time, a newer\npush cancelling the older run. A push or a reopen takes the label off\nbefore the checks run again, and the guards comment says the label is\noff; a label added as the pull request was opened stays. The approval\nand the label go only on the commit the run validated, the approval\npinned to it. A head whose checks fail loses the label and the guards\ncomment says the checks failed; a failed run for an older head leaves\nthe newer head alone.\n\nIn all three flows the label comes off again when its guards comment\ncannot be posted. The re-catalog script leaves the label off when the\nindexer skipped a file, since that file is missing from the index, and\nits PR body counts the skipped files.\n\nThe docs export AUTO_CATALOG_LAND in the shell examples and describe\nthe label's new rules."},{"sha":"a835e3a","fullSha":"a835e3a55b081e3a62daafc9a39501eab404c835","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T23:25:37-07:00","url":"https://github.com/framerslab/codex/commit/a835e3a55b081e3a62daafc9a39501eab404c835","type":"test","scope":null,"description":"run the landing flows' own code, and scan nested folders","body":"The Trusted Weavers workflow's github-script steps now run against a\nstand-in for the GitHub API: a push or a reopen takes the landing label\noff before the checks run again, a label added as the pull request is\nopened stays, the label and the approval go only on the commit the run\nvalidated, a failed guards comment takes the label off again, and a\nfailed check takes it off its own head and says so in the comment. The\nworkflow runs one at a time per pull request.\n\nThe inbox workflow's results step and the re-catalog script run in a\nscratch repository with stand-ins for gh, curl and npm on the PATH: both\nlabel and comment when their guards pass, take the label off again when\nthe comment cannot be posted, and never merge; the re-catalog script\nleaves the label off when the indexer skipped a file.\n\nThe merge-call scan walks nested folders under .github, scripts and lib,\nand the github-script compile check no longer counts the steps."},{"sha":"e860776","fullSha":"e8607765e00f7163b80d898b50e31d3c3031d30b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T21:11:56-07:00","url":"https://github.com/framerslab/codex/commit/e8607765e00f7163b80d898b50e31d3c3031d30b","type":"docs","scope":null,"description":"pull requests land after the comment pass, under the landing label","body":"The README, the quick start, the development and re-catalog guides, the\ncontributor guide, the workflows page and the architecture overview\ndescribed automatic merges. They describe the landing label, the guards\nbehind it and the review pass before a merge, and give\nAUTO_CATALOG_LAND as the re-catalog script's own setting: no workflow\nreads it, so it is not listed as a repository secret.\n\nThe overview keeps its line count, so the block line numbers in its\nfrontmatter hold; the renamed heading's block id and text follow it."},{"sha":"7ed8adf","fullSha":"7ed8adfce1017d4d972d0d74d601df84fa66350b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T21:11:51-07:00","url":"https://github.com/framerslab/codex/commit/7ed8adfce1017d4d972d0d74d601df84fa66350b","type":"ci","scope":null,"description":"label pull requests landing where they were merged automatically","body":"The inbox categorizer merged a move at 70 percent confidence or more,\nthe trusted Weaver workflow merged a validated pull request through the\nREST API, and the re-catalog script merged its pull request five\nseconds after opening it when asked to. A pull request lands only after\nits reviews and comments are read, fixed or answered and its threads\nresolved, so each of them keeps its guards, adds the landing label\n(created on first use) and posts one comment naming the guards that\npassed; a maintainer lands the pull request after that pass.\n\nThe Weaver workflow keeps one comment per pull request, takes the label\noff when a later push fails the checks, and drops contents: write,\nwhich only the merge needed. The script takes --land and\nAUTO_CATALOG_LAND, with --auto-merge and AUTO_CATALOG_MERGE kept as\nolder names for the same setting.\n\nThe test also parses the changed workflows (the YAML, every run block\nwith bash -n, every github-script body compiled as the action wraps\nit) and the script, since GitHub reports a broken workflow file only\nwhen an event would start it."},{"sha":"dbc203c","fullSha":"dbc203cfcee25dd3bdf6aa257540e76bdec60d12","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-18T21:03:55-07:00","url":"https://github.com/framerslab/codex/commit/dbc203cfcee25dd3bdf6aa257540e76bdec60d12","type":"test","scope":null,"description":"nothing here merges a pull request by itself","body":"Pull requests land only after their reviews and comments are read,\nanswered and resolved. The test scans every workflow and script for a\nmerge call (gh pr merge, the REST merge endpoint, Octokit pulls.merge,\nthe GraphQL auto-merge mutation, a merge action) and checks that the\nthree flows that would merge keep their guards, add the landing label\nand post a comment.\n\nIt fails on master: the inbox categorizer merges at 70 percent\nconfidence, the trusted Weaver workflow merges after validation, and\nthe re-catalog script merges when asked to."}]}
{"date":"2026-10-20","totalCommits":11,"byType":{"chore":[{"sha":"afda9cb","fullSha":"afda9cb80f6190fe8f190da2b11c6aa28862f8c2","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-20T18:47:10Z","url":"https://github.com/framerslab/codex/commit/afda9cb80f6190fe8f190da2b11c6aa28862f8c2","type":"chore","scope":"deps","description":"bump @framers/* deps to latest published versions","body":null}],"ci":[{"sha":"b2eebab","fullSha":"b2eebab4ad1506bd05735a014a63f4ac03aa3425","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T11:10:17-07:00","url":"https://github.com/framerslab/codex/commit/b2eebab4ad1506bd05735a014a63f4ac03aa3425","type":"ci","scope":null,"description":"the bump refreshes package-lock.json with npm install --package-lock-only and commits it, so npm ci agrees with the bumped package.json","body":null},{"sha":"b2cbd80","fullSha":"b2cbd8083cb8ceaae4389a9551372c4bc312389b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T09:51:17-07:00","url":"https://github.com/framerslab/codex/commit/b2cbd8083cb8ceaae4389a9551372c4bc312389b","type":"ci","scope":null,"description":"the bump commits package.json and pnpm-lock.yaml, the manifests this repository tracks","body":"create-pull-request stages its add-paths with one git add -- <add-paths>, and\ngit stages nothing when one path matches no file. This repository tracks no\npackage.json below its root and no .gitmodules, and a plain **/package.json\ndoes not match the root package.json, so the dispatched run 39396254503 moved\n@framers/sql-storage-adapter in package.json, refreshed pnpm-lock.yaml, and\nstopped at \"fatal: pathspec '**/package.json' did not match any files\" with\nnothing committed and no pull request opened.\n\nadd-paths now names package.json and pnpm-lock.yaml. Test Suite run\n39460841498 on c578ec8 failed the new case with the same git error."},{"sha":"19f24d6","fullSha":"19f24d6537ae147fad7b7a5520c303aac9fcf991","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T20:06:02-07:00","url":"https://github.com/framerslab/codex/commit/19f24d6537ae147fad7b7a5520c303aac9fcf991","type":"ci","scope":null,"description":"the bump's landing label is decided from its guards' runs on every event, listed by workflow file and followed through re-runs, and read again after each write with no concurrency group to cancel runs","body":null},{"sha":"805e60e","fullSha":"805e60e07e83de085ac0412c0c4bee73764c9a36","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T19:49:06-07:00","url":"https://github.com/framerslab/codex/commit/805e60e07e83de085ac0412c0c4bee73764c9a36","type":"ci","scope":null,"description":"the bump labels nothing; a workflow that follows its Test Suite and rename-guard runs labels its pull request landing once both pass on its head, and keeps the label off a head they have not passed","body":null},{"sha":"c773aa2","fullSha":"c773aa2cbe8cb3d7df2a71deba50ce04551aa964","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T19:13:20-07:00","url":"https://github.com/framerslab/codex/commit/c773aa2cbe8cb3d7df2a71deba50ce04551aa964","type":"ci","scope":null,"description":"open the bump pull request with FRAMERS_BUMP_TOKEN so its Test Suite and rename-guard jobs run","body":"A pull request a workflow opens or pushes with GITHUB_TOKEN gets its\npull_request runs in an approval-required state with no job. The bump now\npushes its branch and opens its pull request with FRAMERS_BUMP_TOKEN, the\nframerslab organization secret shared with this repository, and its own\nGITHUB_TOKEN only reads.\n\nA first step fails the run with an error annotation when the secret is\nempty. The checkout takes master, so a dispatch from any branch bumps master.\nThe lockfile refresh runs with --ignore-scripts, and pnpm/action-setup and\ncreate-pull-request are pinned to the commits v6 and v7 point at (v6.0.10 and\nv7.0.11). The pull request carries the landing label.\n\nWORKFLOWS.md and the README describe the bump and the secret, and the Test\nSuite entry names its real triggers."}],"test":[{"sha":"ecaa5ba","fullSha":"ecaa5ba4887950bb9cc690ed1adf1f6c3263f341","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T11:07:57-07:00","url":"https://github.com/framerslab/codex/commit/ecaa5ba4887950bb9cc690ed1adf1f6c3263f341","type":"test","scope":null,"description":"the bump refreshes package-lock.json when the repository tracks it, with no install script, and commits it with package.json and pnpm-lock.yaml","body":null},{"sha":"c578ec8","fullSha":"c578ec8a46901cfe964adad98f875bda0d968269","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T02:00:47-07:00","url":"https://github.com/framerslab/codex/commit/c578ec8a46901cfe964adad98f875bda0d968269","type":"test","scope":null,"description":"the bump commits every manifest it changes, and each path in its add-paths matches a file here","body":"create-pull-request commits with git add -- <add-paths>, and git refuses the\nwhole add when one pathspec matches no file. The dispatched run 39396254503\nchanged package.json and pnpm-lock.yaml, then logged \"fatal: pathspec\n'**/package.json' did not match any files\" and stopped with nothing\ncommitted: this repository tracks no .gitmodules and no package.json below\nits root, and a plain pathspec needs the slash before package.json, so\n**/package.json misses the root manifest too.\n\nThe new case makes the action's commit in a scratch repository holding this\nrepository's tracked files, after changing every package.json and\npnpm-lock.yaml, and expects all of them in the commit."},{"sha":"cd32395","fullSha":"cd32395fab845199e4bab1b63de6595bf86640bd","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T20:04:16-07:00","url":"https://github.com/framerslab/codex/commit/cd32395fab845199e4bab1b63de6595bf86640bd","type":"test","scope":null,"description":"the bump's landing label follows its guards' runs whatever path form GitHub lists, through re-runs, and through events handled late or while a guard finishes","body":null},{"sha":"8a07697","fullSha":"8a0769791532da8f701c8ae60f1c339a50182352","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T19:44:53-07:00","url":"https://github.com/framerslab/codex/commit/8a0769791532da8f701c8ae60f1c339a50182352","type":"test","scope":null,"description":"the bump labels nothing itself, and its pull request is labelled landing only once its Test Suite and rename-guard pass on its head","body":null},{"sha":"c0ba431","fullSha":"c0ba4317a015f8747e31f94ff9a5344f8036ab87","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T19:05:12-07:00","url":"https://github.com/framerslab/codex/commit/c0ba4317a015f8747e31f94ff9a5344f8036ab87","type":"test","scope":null,"description":"the bump opens its pull request with FRAMERS_BUMP_TOKEN and holds the token safely","body":"A pull request a workflow opens with GITHUB_TOKEN gets its pull_request runs\nin an approval-required state with no job, so the bump's pull request must be\nopened with a personal token. The tests read the bump workflow: the token on\ncreate-pull-request, a read-only GITHUB_TOKEN, a first step that fails when\nthe secret is empty (run here with bash -e), the master checkout, the\nlockfile refresh with --ignore-scripts, every third-party action pinned to a\ncommit, the landing label, and bash -n on every run block, since the bump\nstarts only on its schedule or by hand."}]},"commits":[{"sha":"afda9cb","fullSha":"afda9cb80f6190fe8f190da2b11c6aa28862f8c2","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-20T18:47:10Z","url":"https://github.com/framerslab/codex/commit/afda9cb80f6190fe8f190da2b11c6aa28862f8c2","type":"chore","scope":"deps","description":"bump @framers/* deps to latest published versions","body":null},{"sha":"b2eebab","fullSha":"b2eebab4ad1506bd05735a014a63f4ac03aa3425","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T11:10:17-07:00","url":"https://github.com/framerslab/codex/commit/b2eebab4ad1506bd05735a014a63f4ac03aa3425","type":"ci","scope":null,"description":"the bump refreshes package-lock.json with npm install --package-lock-only and commits it, so npm ci agrees with the bumped package.json","body":null},{"sha":"ecaa5ba","fullSha":"ecaa5ba4887950bb9cc690ed1adf1f6c3263f341","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T11:07:57-07:00","url":"https://github.com/framerslab/codex/commit/ecaa5ba4887950bb9cc690ed1adf1f6c3263f341","type":"test","scope":null,"description":"the bump refreshes package-lock.json when the repository tracks it, with no install script, and commits it with package.json and pnpm-lock.yaml","body":null},{"sha":"b2cbd80","fullSha":"b2cbd8083cb8ceaae4389a9551372c4bc312389b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T09:51:17-07:00","url":"https://github.com/framerslab/codex/commit/b2cbd8083cb8ceaae4389a9551372c4bc312389b","type":"ci","scope":null,"description":"the bump commits package.json and pnpm-lock.yaml, the manifests this repository tracks","body":"create-pull-request stages its add-paths with one git add -- <add-paths>, and\ngit stages nothing when one path matches no file. This repository tracks no\npackage.json below its root and no .gitmodules, and a plain **/package.json\ndoes not match the root package.json, so the dispatched run 39396254503 moved\n@framers/sql-storage-adapter in package.json, refreshed pnpm-lock.yaml, and\nstopped at \"fatal: pathspec '**/package.json' did not match any files\" with\nnothing committed and no pull request opened.\n\nadd-paths now names package.json and pnpm-lock.yaml. Test Suite run\n39460841498 on c578ec8 failed the new case with the same git error."},{"sha":"c578ec8","fullSha":"c578ec8a46901cfe964adad98f875bda0d968269","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T02:00:47-07:00","url":"https://github.com/framerslab/codex/commit/c578ec8a46901cfe964adad98f875bda0d968269","type":"test","scope":null,"description":"the bump commits every manifest it changes, and each path in its add-paths matches a file here","body":"create-pull-request commits with git add -- <add-paths>, and git refuses the\nwhole add when one pathspec matches no file. The dispatched run 39396254503\nchanged package.json and pnpm-lock.yaml, then logged \"fatal: pathspec\n'**/package.json' did not match any files\" and stopped with nothing\ncommitted: this repository tracks no .gitmodules and no package.json below\nits root, and a plain pathspec needs the slash before package.json, so\n**/package.json misses the root manifest too.\n\nThe new case makes the action's commit in a scratch repository holding this\nrepository's tracked files, after changing every package.json and\npnpm-lock.yaml, and expects all of them in the commit."},{"sha":"19f24d6","fullSha":"19f24d6537ae147fad7b7a5520c303aac9fcf991","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T20:06:02-07:00","url":"https://github.com/framerslab/codex/commit/19f24d6537ae147fad7b7a5520c303aac9fcf991","type":"ci","scope":null,"description":"the bump's landing label is decided from its guards' runs on every event, listed by workflow file and followed through re-runs, and read again after each write with no concurrency group to cancel runs","body":null},{"sha":"cd32395","fullSha":"cd32395fab845199e4bab1b63de6595bf86640bd","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T20:04:16-07:00","url":"https://github.com/framerslab/codex/commit/cd32395fab845199e4bab1b63de6595bf86640bd","type":"test","scope":null,"description":"the bump's landing label follows its guards' runs whatever path form GitHub lists, through re-runs, and through events handled late or while a guard finishes","body":null},{"sha":"805e60e","fullSha":"805e60e07e83de085ac0412c0c4bee73764c9a36","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T19:49:06-07:00","url":"https://github.com/framerslab/codex/commit/805e60e07e83de085ac0412c0c4bee73764c9a36","type":"ci","scope":null,"description":"the bump labels nothing; a workflow that follows its Test Suite and rename-guard runs labels its pull request landing once both pass on its head, and keeps the label off a head they have not passed","body":null},{"sha":"8a07697","fullSha":"8a0769791532da8f701c8ae60f1c339a50182352","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T19:44:53-07:00","url":"https://github.com/framerslab/codex/commit/8a0769791532da8f701c8ae60f1c339a50182352","type":"test","scope":null,"description":"the bump labels nothing itself, and its pull request is labelled landing only once its Test Suite and rename-guard pass on its head","body":null},{"sha":"c773aa2","fullSha":"c773aa2cbe8cb3d7df2a71deba50ce04551aa964","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T19:13:20-07:00","url":"https://github.com/framerslab/codex/commit/c773aa2cbe8cb3d7df2a71deba50ce04551aa964","type":"ci","scope":null,"description":"open the bump pull request with FRAMERS_BUMP_TOKEN so its Test Suite and rename-guard jobs run","body":"A pull request a workflow opens or pushes with GITHUB_TOKEN gets its\npull_request runs in an approval-required state with no job. The bump now\npushes its branch and opens its pull request with FRAMERS_BUMP_TOKEN, the\nframerslab organization secret shared with this repository, and its own\nGITHUB_TOKEN only reads.\n\nA first step fails the run with an error annotation when the secret is\nempty. The checkout takes master, so a dispatch from any branch bumps master.\nThe lockfile refresh runs with --ignore-scripts, and pnpm/action-setup and\ncreate-pull-request are pinned to the commits v6 and v7 point at (v6.0.10 and\nv7.0.11). The pull request carries the landing label.\n\nWORKFLOWS.md and the README describe the bump and the secret, and the Test\nSuite entry names its real triggers."},{"sha":"c0ba431","fullSha":"c0ba4317a015f8747e31f94ff9a5344f8036ab87","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-19T19:05:12-07:00","url":"https://github.com/framerslab/codex/commit/c0ba4317a015f8747e31f94ff9a5344f8036ab87","type":"test","scope":null,"description":"the bump opens its pull request with FRAMERS_BUMP_TOKEN and holds the token safely","body":"A pull request a workflow opens with GITHUB_TOKEN gets its pull_request runs\nin an approval-required state with no job, so the bump's pull request must be\nopened with a personal token. The tests read the bump workflow: the token on\ncreate-pull-request, a read-only GITHUB_TOKEN, a first step that fails when\nthe secret is empty (run here with bash -e), the master checkout, the\nlockfile refresh with --ignore-scripts, every third-party action pinned to a\ncommit, the landing label, and bash -n on every run block, since the bump\nstarts only on its schedule or by hand."}]}
{"type":"github_activity","date":"2026-10-14","until":"2026-10-21","repository":"framerslab/codex","summary":{"issuesCreated":0,"issuesClosed":0,"prsMerged":5,"total":5},"created":[],"closed":[],"merged":[{"number":10,"title":"ci: the bump refreshes package-lock.json too, so npm ci agrees with the bumped package.json","url":"https://github.com/framerslab/codex/pull/10","mergedAt":"2026-10-20T18:46:20Z","author":"jddunn","labels":["landing"]},{"number":9,"title":"chore(deps): bump @framers/* deps to latest published versions","url":"https://github.com/framerslab/codex/pull/9","mergedAt":"2026-10-20T20:20:39Z","author":"jddunn","labels":["landing"]},{"number":8,"title":"ci: the bump commits package.json and pnpm-lock.yaml, the manifests this repository tracks","url":"https://github.com/framerslab/codex/pull/8","mergedAt":"2026-10-20T17:55:59Z","author":"jddunn","labels":["landing"]},{"number":7,"title":"ci: open the bump pull request with FRAMERS_BUMP_TOKEN so its Test Suite and rename-guard jobs run","url":"https://github.com/framerslab/codex/pull/7","mergedAt":"2026-10-20T03:40:12Z","author":"jddunn","labels":["landing"]},{"number":6,"title":"ci: merging workflows wait for the comment pass","url":"https://github.com/framerslab/codex/pull/6","mergedAt":"2026-10-19T10:43:22Z","author":"jddunn","labels":["landing"]}]}
{"date":"2026-10-21","totalCommits":50,"byType":{"ci":[{"sha":"900bcf2","fullSha":"900bcf2a132f526e7761c1aa53311c3d4557c008","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-21T22:38:32Z","url":"https://github.com/framerslab/codex/commit/900bcf2a132f526e7761c1aa53311c3d4557c008","type":"ci","scope":"codex","description":"update search index and block tags","body":null},{"sha":"a98dd1f","fullSha":"a98dd1f23560150daf1c73f73e123590dad91259","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T12:33:01-07:00","url":"https://github.com/framerslab/codex/commit/a98dd1f23560150daf1c73f73e123590dad91259","type":"ci","scope":null,"description":"the changelog and the block tag enhancement open their pull requests with create-pull-request v8.1.1, the release the bump and the index publish pin, which runs on Node.js 24","body":null},{"sha":"70eb796","fullSha":"70eb7960ab31f8343be066e1cb1dbe76104c2f00","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:59:49-07:00","url":"https://github.com/framerslab/codex/commit/70eb7960ab31f8343be066e1cb1dbe76104c2f00","type":"ci","scope":null,"description":"github-script moves to v9.0.0, create-pull-request to v8.1.1 and repository-dispatch to v4.0.1, the releases that run on Node.js 24, each pinned to its release's commit with the release named beside it; CodeRabbit skips the index pull request by its title and reviews none of the index files","body":null},{"sha":"874533f","fullSha":"874533fd98e9ec12b7e29b6cf82262c242ef4725","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-21T18:41:03Z","url":"https://github.com/framerslab/codex/commit/874533fd98e9ec12b7e29b6cf82262c242ef4725","type":"ci","scope":"codex","description":"update search index and block tags","body":null},{"sha":"dc774d0","fullSha":"dc774d0f9db60405668ea9e2ddaef09d64262cfc","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T03:25:18-07:00","url":"https://github.com/framerslab/codex/commit/dc774d0f9db60405668ea9e2ddaef09d64262cfc","type":"ci","scope":null,"description":"the changelog and the enhanced block tags reach master through pull requests opened with FRAMERS_BUMP_TOKEN, the activity script's merged pull requests query declares only the variables it uses, and the landing label follows ci/changelog and ci/ai-enhance-blocks","body":"changelog.yml runs once a week, Monday 00:00 UTC, instead of daily. One step picks the first day, seven days ago or the day a manual run names, and hands it to both history scripts. The job takes the monthly files of an open changelog pull request before the scripts append, installs nothing, and opens or updates one pull request into master from ci/changelog with create-pull-request at the commit the bump pins; its GITHUB_TOKEN only reads, and no step pushes to master.\n\nfetch-issue-activity.js drops $since from the merged pull requests query. The pullRequests connection takes no date argument, and GitHub refused the query that declared it (\"Variable $since is declared by anonymous query but not used\", run 34420881812); the date stays applied to mergedAt in the script. The created issues are kept only when created on or after the first day, since the issues filter's since is the update time.\n\nai-enhance-blocks.yml runs the enhancement in a job whose GITHUB_TOKEN only reads and whose checkout keeps no token, and archives the strands it changed as a patch. On a manual run, a second job opens or updates one pull request into master from ci/ai-enhance-blocks. On a labelled pull request, a second job commits the patch onto the pull request's branch as a fast-forward and pushes it with FRAMERS_BUMP_TOKEN, and no commit message carries a skip marker, so Test Suite and rename-guard run on the new head. The jobs that hold the token run none of the repository's code. The run's inputs reach the script as arguments.\n\nlanding-follows-the-bump-checks.yml follows ci/changelog and ci/ai-enhance-blocks beside the bump's and the index's branches."},{"sha":"4901545","fullSha":"4901545b875bae9cb49b208cc3fd0087e41bbe0d","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-21T10:25:17Z","url":"https://github.com/framerslab/codex/commit/4901545b875bae9cb49b208cc3fd0087e41bbe0d","type":"ci","scope":"codex","description":"update search index and block tags","body":null},{"sha":"9c1aac2","fullSha":"9c1aac25d73775a7416bf5d707fcff224ac8070b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:10:54-07:00","url":"https://github.com/framerslab/codex/commit/9c1aac25d73775a7416bf5d707fcff224ac8070b","type":"ci","scope":null,"description":"the index publish job keeps every waiting run with queue: max, so an older commit's run that begins waiting later no longer cancels the newer commit's publish, and each run decides when its turn comes","body":null},{"sha":"862bdcc","fullSha":"862bdcc5facced89b887707aadca0569c1a3f704","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:56:53-07:00","url":"https://github.com/framerslab/codex/commit/862bdcc5facced89b887707aadca0569c1a3f704","type":"ci","scope":null,"description":"the index publish job checks out master's head, so its pull request carries the index alone and merges without a conflict after master took an earlier index pull request; its ordering step reads the run's commit by its id, and a comparison that cannot be made fails the step instead of skipping the publish","body":null},{"sha":"9f7ea45","fullSha":"9f7ea4596c149822aedf106a3ecdef7c5879ad04","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:48:39-07:00","url":"https://github.com/framerslab/codex/commit/9f7ea4596c149822aedf106a3ecdef7c5879ad04","type":"ci","scope":null,"description":"the index publish job opens one pull request into master from ci/codex-index with FRAMERS_BUMP_TOKEN instead of pushing the index to master, which master's required checks refuse; it publishes from master only, one run at a time, leaves the pull request to the run of a later change to the index's inputs, and archives and downloads with upload-artifact v7 and download-artifact v8; the landing label follows that pull request's Test Suite and rename-guard as it follows the bump's","body":null},{"sha":"f61af18","fullSha":"f61af18fbac9447287dd1811d6e234dcb25250e2","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:37:05-07:00","url":"https://github.com/framerslab/codex/commit/f61af18fbac9447287dd1811d6e234dcb25250e2","type":"ci","scope":null,"description":"upload-artifact moves to v7 and download-artifact to v8, the current majors, which run on Node.js 24 and read each other's artifacts; v4 of both targets Node.js 20, and the runners force it onto Node.js 24 with a deprecation warning on Unit Tests, Integration Tests and Update Badges","body":null},{"sha":"d19e45b","fullSha":"d19e45b377ae6ba635926e0a18055debda2084bf","author":"github-actions[bot]","email":"github-actions[bot]@users.noreply.github.com","date":"2026-10-21T04:01:10Z","url":"https://github.com/framerslab/codex/commit/d19e45b377ae6ba635926e0a18055debda2084bf","type":"ci","scope":"codex","description":"update search index and block tags [skip ci]","body":null},{"sha":"bc025a3","fullSha":"bc025a3f304f5db4b64ee4c06618df3554f51faf","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T20:04:11-07:00","url":"https://github.com/framerslab/codex/commit/bc025a3f304f5db4b64ee4c06618df3554f51faf","type":"ci","scope":null,"description":"the badges head names the run that published it, and the publisher orders two commits on master neither of which descends from the other by their run numbers, so a delayed run cannot replace a later run's badges after master merged a second history","body":null},{"sha":"51fde7b","fullSha":"51fde7b45eda048338221785a58b2d2d76f4f077","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:45:33-07:00","url":"https://github.com/framerslab/codex/commit/51fde7b45eda048338221785a58b2d2d76f4f077","type":"ci","scope":null,"description":"the badges publisher keeps the head's badges as the later ones only while master still holds the commit they were counted from, so after a force-push moves master back, the run of its new head replaces them","body":null},{"sha":"cc6c6b8","fullSha":"cc6c6b880c5f3c3187846122fe8cf84834abce5f","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:35:51-07:00","url":"https://github.com/framerslab/codex/commit/cc6c6b880c5f3c3187846122fe8cf84834abce5f","type":"ci","scope":null,"description":"the badges publisher pushes only for a commit that is still in master's history, read from the remote before anything else, so a run of a commit a force-push dropped leaves the badges of master's new history in place","body":null},{"sha":"b51e58c","fullSha":"b51e58c38addb5fb0f75a8453c214e22ceb7bcf2","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:25:07-07:00","url":"https://github.com/framerslab/codex/commit/b51e58c38addb5fb0f75a8453c214e22ceb7bcf2","type":"ci","scope":null,"description":"the badges publisher orders the run's commit against the head's before it compares files, and pushes files equal to the branch's when they come from a later commit, so the head always names the latest commit counted","body":null},{"sha":"3f82b6d","fullSha":"3f82b6d20db00c278e3aa8670b55acd20ee5c2f2","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:12:36-07:00","url":"https://github.com/framerslab/codex/commit/3f82b6d20db00c278e3aa8670b55acd20ee5c2f2","type":"ci","scope":null,"description":"the badges publisher leaves the branch alone when its files were counted from a later master commit than the run's, read from master's history, which Update Badges now checks out whole; a head naming a commit the clone cannot place is replaced with a warning","body":null},{"sha":"dea5c38","fullSha":"dea5c38e8b68df0f75c0457274ee1115d3574326","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T14:44:48-07:00","url":"https://github.com/framerslab/codex/commit/dea5c38e8b68df0f75c0457274ee1115d3574326","type":"ci","scope":null,"description":"Update Badges runs on master and publishes shields.io endpoint files on a badges branch, never a commit to master","body":"The job ran only when github.ref was refs/heads/main, a branch this repository does not have, so it was skipped on every master run and the README kept SVG files committed to master in December 2025.\n\nThe Unit Tests job now writes one endpoint file per badge from its own run (scripts/badges/write-badge-json.js): tests counted from the coverage run's Vitest JSON report, line coverage from coverage-summary.json, the version from package.json, the licence from LICENSE. On a push to master, after the four test jobs pass, Update Badges replaces the badges branch with them, a parentless commit pushed with --force-with-lease on the head it read (scripts/badges/publish-badges-branch.sh), and purges jsDelivr's copies. It is the only job with contents: write. The README reads the files through jsDelivr, since shields.io refuses github.com addresses.\n\nThe SVG generator, its npm scripts and its committed output go, and so does the Codecov upload, which every run refused for want of a token."}],"docs":[{"sha":"1ef2824","fullSha":"1ef28247aa887ea66c043d792634ce2270b78919","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:59:49-07:00","url":"https://github.com/framerslab/codex/commit/1ef28247aa887ea66c043d792634ce2270b78919","type":"docs","scope":null,"description":"CodeRabbit skips the index pull request and its files, and a maintainer pins an action to the commit of a release that runs on Node.js 24","body":null},{"sha":"0c03ed5","fullSha":"0c03ed5fe0ff05340f096af5af7fcd35825f2bae","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:52:56-07:00","url":"https://github.com/framerslab/codex/commit/0c03ed5fe0ff05340f096af5af7fcd35825f2bae","type":"docs","scope":null,"description":"the changelog records complete days, in UTC, from the day after the last one recorded, each commit on the day it reached master, and the activity over the span from where the last one ended, read page by page, each item once","body":null},{"sha":"8b1e15a","fullSha":"8b1e15a730c4dd1bcd57264ebc1f56f933ea3200","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T03:30:56-07:00","url":"https://github.com/framerslab/codex/commit/8b1e15a730c4dd1bcd57264ebc1f56f933ea3200","type":"docs","scope":null,"description":"the block tag enhancement's docs, step names and pull request text name threads, the public name, so rename-guard passes","body":"rename-guard failed on 5381ae4 (run 39584482438): WORKFLOWS.md lines 215 and 216 and BLOCK_TAGGING_TUTORIAL.md line 305 carried the old public word, which RENAME_DONE=1 refuses in prose. ai-enhance-blocks.yml's step names, its comments and the body of the pull request it opens use the same word, and the tests read no step by its name."},{"sha":"5381ae4","fullSha":"5381ae4808ecaa5fbd0b2ce46c8167bad7282b35","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T03:25:18-07:00","url":"https://github.com/framerslab/codex/commit/5381ae4808ecaa5fbd0b2ce46c8167bad7282b35","type":"docs","scope":null,"description":"the changelog runs weekly and reaches master through a pull request from ci/changelog, the block tag enhancement opens a pull request or pushes to a labelled one with FRAMERS_BUMP_TOKEN, and the history files are the monthly JSONL files","body":"WORKFLOWS.md describes changelog.yml, ai-enhance-blocks.yml and the label workflow's four branches; README.md, codex-history/README.md and docs/CHANGELOG_SYSTEM.md describe the weekly run, its first day, its pull request and its two secrets, the monthly files and their queries, and how to enable a scheduled workflow GitHub disabled after 60 days without repository activity; the block tagging tutorial names the index and enhancement pull requests and the ai-enhance label."},{"sha":"a3d5093","fullSha":"a3d50934f5f5e9ef0a376c35f030865137d08b7f","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:52:51-07:00","url":"https://github.com/framerslab/codex/commit/a3d50934f5f5e9ef0a376c35f030865137d08b7f","type":"docs","scope":null,"description":"the search postings cover each document's whole text, read from its file","body":"README.md and docs/DEVELOPMENT.md say so, and DEVELOPMENT.md names the embedding library the build uses,\n@huggingface/transformers. The comment on the index's content field no longer calls it the text search reads, and\ncoverage counts scripts/search-index.mjs beside the two other .mjs modules it names."},{"sha":"254f551","fullSha":"254f551cbca72f56848aa12f129cfbadc0c46572","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:10:54-07:00","url":"https://github.com/framerslab/codex/commit/254f551cbca72f56848aa12f129cfbadc0c46572","type":"docs","scope":null,"description":"the index publish job keeps every waiting run","body":null},{"sha":"c37deae","fullSha":"c37deae641e96e3f59995c763c70a5f3fed4431d","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:56:53-07:00","url":"https://github.com/framerslab/codex/commit/c37deae641e96e3f59995c763c70a5f3fed4431d","type":"docs","scope":null,"description":"the index publish job checks out master's head, and an ordering comparison that cannot be made fails the step","body":null},{"sha":"a92ca3a","fullSha":"a92ca3a9ecff607e4053145d151f241df95b4cc4","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:51:46-07:00","url":"https://github.com/framerslab/codex/commit/a92ca3a9ecff607e4053145d151f241df95b4cc4","type":"docs","scope":null,"description":"the index reaches master through a pull request from ci/codex-index, the landing label follows that pull request's guards, master's protection is described, and the guides commit a manual re-index or a tutorial change on a branch and open a pull request, since master refuses a direct push","body":null},{"sha":"b057b36","fullSha":"b057b36ce4f6a09461a28ca12ea78f710909c316","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T20:42:10-07:00","url":"https://github.com/framerslab/codex/commit/b057b36ce4f6a09461a28ca12ea78f710909c316","type":"docs","scope":null,"description":"run numbers order two master commits neither of which descends from the other only when both runs' numbers are known; when either is missing, the run's files replace the branch's","body":null},{"sha":"5b53377","fullSha":"5b53377c943386b7c35c23ec363e066085f1f5e1","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:56:08-07:00","url":"https://github.com/framerslab/codex/commit/5b53377c943386b7c35c23ec363e066085f1f5e1","type":"docs","scope":null,"description":"the badges' limit: they describe the last master commit whose Test Suite run published them, so a force-push to master that starts no run, or lands after the publisher read master, leaves them until the next run on master","body":null},{"sha":"2b91751","fullSha":"2b91751c596357da15ac2db04f02e7d7e36cc07d","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:13:37-07:00","url":"https://github.com/framerslab/codex/commit/2b91751c596357da15ac2db04f02e7d7e36cc07d","type":"docs","scope":null,"description":"doc comments on the badge writer's remaining functions","body":null},{"sha":"a4663f0","fullSha":"a4663f06c5725e311c334a42aac4c49601f0128a","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:13:37-07:00","url":"https://github.com/framerslab/codex/commit/a4663f06c5725e311c334a42aac4c49601f0128a","type":"docs","scope":null,"description":"the README says what LICENSE covers: the content its Overview lists (weaves, looms, threads, tags and schemas), not the code in scripts/, lib/, tests/ and .github/","body":null},{"sha":"217463d","fullSha":"217463d68fc150978e87de037275154a447dc05b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T14:44:43-07:00","url":"https://github.com/framerslab/codex/commit/217463d68fc150978e87de037275154a447dc05b","type":"docs","scope":null,"description":"add the CC BY 4.0 legal code as LICENSE, the licence and file the README names; the repository never had the file, so the README's link to it was broken and GitHub detected no licence","body":null}],"test":[{"sha":"3c9b662","fullSha":"3c9b6627e6b2fbb63236f2dac93a108eedc76f6a","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:57:59-07:00","url":"https://github.com/framerslab/codex/commit/3c9b6627e6b2fbb63236f2dac93a108eedc76f6a","type":"test","scope":null,"description":"the workflows run github-script, create-pull-request and repository-dispatch at the commit of the release that runs on Node.js 24, every github-script body compiles as v9 runs it, and CodeRabbit skips the index pull request by its title and reviews none of its files","body":null},{"sha":"2d0e5a2","fullSha":"2d0e5a25877a6fd796369e5947f7992517cb21b0","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T11:01:18-07:00","url":"https://github.com/framerslab/codex/commit/2d0e5a25877a6fd796369e5947f7992517cb21b0","type":"test","scope":null,"description":"the changelog groups a day of commits by any type, even one named like a property every object has, such as constructor, toString or __proto__","body":null},{"sha":"f47c228","fullSha":"f47c228e95f4021d66161614b6ae180bb886748c","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:49:14-07:00","url":"https://github.com/framerslab/codex/commit/f47c228e95f4021d66161614b6ae180bb886748c","type":"test","scope":null,"description":"the changelog records complete days from the first day not yet recorded, each commit whole on the day it reached master and each activity item once from every page, and the workflow hands both scripts the day the run ends at and a first day only when a manual run names one","body":null},{"sha":"c28a3cf","fullSha":"c28a3cf5ef0f4848edaa2239880bc3497a0df552","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T02:16:43-07:00","url":"https://github.com/framerslab/codex/commit/c28a3cf5ef0f4848edaa2239880bc3497a0df552","type":"test","scope":null,"description":"the changelog and the AI-enhanced block tags reach master through pull requests opened with FRAMERS_BUMP_TOKEN, the activity script sends only GraphQL queries GitHub accepts and counts only the issues created since its first day, and the landing label follows ci/changelog and ci/ai-enhance-blocks","body":"changelog.yml failed at \"Fetch GitHub issue activity\" from 5 to 10 September (run 34420881812: \"Variable $since is declared by anonymous query but not used\") and then pushed to master, which master's protection refuses; it ran daily. ai-enhance-blocks.yml pushed to master on a manual run and pushed a [skip ci] commit with GITHUB_TOKEN on a labelled pull request, whose required checks then never report.\n\nThese cases run the activity script against a stand-in for GitHub's GraphQL API that applies GitHub's variable rules, run the changelog workflow's first step, the step that picks the first day and the step that carries an open changelog pull request's entries, and run the AI block workflow's argument handling with a stand-in node and its archive and push steps in scratch repositories. They fail on the current workflows and script."},{"sha":"6ed9de6","fullSha":"6ed9de6cee3beebba55b4345394e83f422d61a0a","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T02:03:54-07:00","url":"https://github.com/framerslab/codex/commit/6ed9de6cee3beebba55b4345394e83f422d61a0a","type":"test","scope":null,"description":"a listed document that is a link under the root to a file outside it keeps its excerpt's postings","body":"The indexer lists a .md or .yaml link by its own name and reads its target. The postings check the listed path, which\nlies under the root, then read through the link, so the whole outside file reaches the published vocabulary. This case\nlinks docs/leak.md to a file beside the root: the search must not find the file's word, must find the excerpt's, and\nthe warning must name the link. It fails here."},{"sha":"ca56a15","fullSha":"ca56a159394876140b4346b56dd4e51b24c6b2ea","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:50:11-07:00","url":"https://github.com/framerslab/codex/commit/ca56a159394876140b4346b56dd4e51b24c6b2ea","type":"test","scope":null,"description":"a search finds a document by any term of its text, past the index's 5,000-character excerpt too","body":"The search build moves unchanged to scripts/search-index.mjs, which exports it with the embedding model passed in, and\nscripts/build-search-index.mjs runs it. tests/search-index.test.js indexes documents with the indexer and runs the build\nwith a stand-in model. It fails here: the postings come from the index's content field, a document's first 5,000\ncharacters, so docs/DEVELOPMENT.md is not found by architecture, sqlite3, storage, adapter or incremental,\ndocs/RECATALOG_GUIDE.md not by generated, autogenerated, reviewing, warnings or suggestions, a term past character 9,000\nis not found, and the cut leaves the fragment arch as a term."},{"sha":"aeceb70","fullSha":"aeceb700413af37562f3d1232a317ff705851ae9","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:10:45-07:00","url":"https://github.com/framerslab/codex/commit/aeceb700413af37562f3d1232a317ff705851ae9","type":"test","scope":null,"description":"the index publish job keeps every waiting run, since GitHub's default keeps one and lets an older commit's run that begins waiting later cancel the newer commit's, and with every run kept only the run of the commit whose inputs master's head holds publishes, whatever order the runs take their turns in","body":null},{"sha":"442ebed","fullSha":"442ebed84eab392a09fa320bf1b2b0c145b22b27","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:56:29-07:00","url":"https://github.com/framerslab/codex/commit/442ebed84eab392a09fa320bf1b2b0c145b22b27","type":"test","scope":null,"description":"the index publish job checks out master's head, so its pull request starts from it and merges without a conflict after master took an earlier index pull request, and its ordering step reads the run's commit by its id and fails, deciding nothing, when it cannot","body":null},{"sha":"686e1b2","fullSha":"686e1b21d4a0f31be6e8f28fac880ae819a44128","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:47:07-07:00","url":"https://github.com/framerslab/codex/commit/686e1b21d4a0f31be6e8f28fac880ae819a44128","type":"test","scope":null,"description":"the index publish job opens one pull request into master from ci/codex-index with FRAMERS_BUMP_TOKEN and pushes nothing to master, leaves that pull request to the run of a later change to the index's inputs, and the landing label follows the index pull request's Test Suite and rename-guard as it follows the bump's","body":null},{"sha":"b60f707","fullSha":"b60f7073e6f761720583b50088bc6e5046ba3289","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T20:03:10-07:00","url":"https://github.com/framerslab/codex/commit/b60f7073e6f761720583b50088bc6e5046ba3289","type":"test","scope":null,"description":"the badges publisher orders runs of two commits neither descends from, as after a force-push and a merge of both histories, by their run numbers, and Update Badges passes the run number","body":null},{"sha":"26a937d","fullSha":"26a937d84f854918794cf46138a704300f5bc155","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:44:38-07:00","url":"https://github.com/framerslab/codex/commit/26a937d84f854918794cf46138a704300f5bc155","type":"test","scope":null,"description":"the badges publisher replaces the badges of a commit master no longer holds, as after a force-push that moves master back to an ancestor of it","body":null},{"sha":"c988607","fullSha":"c988607e6ee55d3137770266e77527062c8d74e2","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:34:50-07:00","url":"https://github.com/framerslab/codex/commit/c988607e6ee55d3137770266e77527062c8d74e2","type":"test","scope":null,"description":"the badges publisher pushes nothing for a commit master no longer holds, so a delayed run of a commit a force-push dropped cannot replace the badges of master's new history","body":null},{"sha":"60e444c","fullSha":"60e444ce1844ade62a3c50ff475f65bcbe308506","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:24:13-07:00","url":"https://github.com/framerslab/codex/commit/60e444ce1844ade62a3c50ff475f65bcbe308506","type":"test","scope":null,"description":"a later master commit whose run counts the same files as the branch's names itself on the badges head, so a delayed run of a commit between the two cannot replace its figures","body":null},{"sha":"a09126b","fullSha":"a09126bf4e3780101dae6529f90b9af9c5e92dd8","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:11:37-07:00","url":"https://github.com/framerslab/codex/commit/a09126bf4e3780101dae6529f90b9af9c5e92dd8","type":"test","scope":null,"description":"the badges publisher keeps a later master commit's badges when an earlier commit's run reaches the branch after them, from a full or a depth-1 clone; a head naming a commit it cannot find is replaced with a warning; Update Badges checks out master's history","body":null},{"sha":"b361b3b","fullSha":"b361b3bd1bc1f13cc282298dee85a5ac8ac8a4cd","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T14:40:41-07:00","url":"https://github.com/framerslab/codex/commit/b361b3bd1bc1f13cc282298dee85a5ac8ac8a4cd","type":"test","scope":null,"description":"the README's badges are shields.io endpoint files on a badges branch, written from the suite's own run and published from master; the Update Badges job named main, a branch this repository does not have","body":null}],"chore":[{"sha":"3840943","fullSha":"3840943269a0bf0a2f53294a206a0395d3355269","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-21T18:39:38Z","url":"https://github.com/framerslab/codex/commit/3840943269a0bf0a2f53294a206a0395d3355269","type":"chore","scope":"changelog","description":"append the weekly history","body":null}],"fix":[{"sha":"31af6b3","fullSha":"31af6b3c474469ddc17901c70839c83f44599855","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T11:02:27-07:00","url":"https://github.com/framerslab/codex/commit/31af6b3c474469ddc17901c70839c83f44599855","type":"fix","scope":null,"description":"the changelog groups a day's commits by type on an object with no prototype, so a type named constructor, toString or __proto__ gets its own group instead of crashing the run","body":null},{"sha":"039c0de","fullSha":"039c0de68e20871c295b733ae503867306721917","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:52:06-07:00","url":"https://github.com/framerslab/codex/commit/039c0de68e20871c295b733ae503867306721917","type":"fix","scope":null,"description":"the changelog reads each commit whole and records it on the UTC day it reached master, complete days only, from the day after the last one recorded; the activity reads every page of each list, records the span from where the last one ended up to the run's day, and leaves out what an earlier line holds; the workflow hands both scripts the day the run starts on, and a first day only when a manual run names one","body":null},{"sha":"283783e","fullSha":"283783e172a0510c1234af41b832328485cd66d0","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T02:04:42-07:00","url":"https://github.com/framerslab/codex/commit/283783e172a0510c1234af41b832328485cd66d0","type":"fix","scope":null,"description":"the search postings compare real paths before reading a listed document, so a link under the root to a file outside it is not read","body":"The check compared the listed path, which lies under the root, and the read followed the link to its target, so a\nchecked-in docs/leak.md linking outside the repository put the whole target in the published vocabulary. The root and\nthe document now resolve to their real paths first; a document outside the root keeps its excerpt's postings and the\nwarning names it. The Markdown or YAML parse follows the listed name, as the indexer's does."},{"sha":"4be2420","fullSha":"4be24202486dee37286d6c9cd8362f8a9da0dad0","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:52:11-07:00","url":"https://github.com/framerslab/codex/commit/4be24202486dee37286d6c9cd8362f8a9da0dad0","type":"fix","scope":null,"description":"the search postings read each document's whole text from its file","body":"The postings came from the index's content field, a document's first 5,000 characters, so a term past that point never\nfound its document, the cut kept a fragment of the word it fell in as a term, and an edit near a guide's top pushed terms\nout of search: the index of #14 no longer finds docs/DEVELOPMENT.md by architecture or sqlite3, nor\ndocs/RECATALOG_GUIDE.md by generated or reviewing. buildPostings reads each listed document under the root as\nscripts/auto-index.js parses it, the body after the frontmatter for Markdown and the whole file for YAML. A document it\ncannot read there, or whose path leads outside the root, keeps the content field's postings, with a warning naming it.\nThe embeddings read the same text as before."}]},"commits":[{"sha":"900bcf2","fullSha":"900bcf2a132f526e7761c1aa53311c3d4557c008","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-21T22:38:32Z","url":"https://github.com/framerslab/codex/commit/900bcf2a132f526e7761c1aa53311c3d4557c008","type":"ci","scope":"codex","description":"update search index and block tags","body":null},{"sha":"a98dd1f","fullSha":"a98dd1f23560150daf1c73f73e123590dad91259","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T12:33:01-07:00","url":"https://github.com/framerslab/codex/commit/a98dd1f23560150daf1c73f73e123590dad91259","type":"ci","scope":null,"description":"the changelog and the block tag enhancement open their pull requests with create-pull-request v8.1.1, the release the bump and the index publish pin, which runs on Node.js 24","body":null},{"sha":"1ef2824","fullSha":"1ef28247aa887ea66c043d792634ce2270b78919","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:59:49-07:00","url":"https://github.com/framerslab/codex/commit/1ef28247aa887ea66c043d792634ce2270b78919","type":"docs","scope":null,"description":"CodeRabbit skips the index pull request and its files, and a maintainer pins an action to the commit of a release that runs on Node.js 24","body":null},{"sha":"70eb796","fullSha":"70eb7960ab31f8343be066e1cb1dbe76104c2f00","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:59:49-07:00","url":"https://github.com/framerslab/codex/commit/70eb7960ab31f8343be066e1cb1dbe76104c2f00","type":"ci","scope":null,"description":"github-script moves to v9.0.0, create-pull-request to v8.1.1 and repository-dispatch to v4.0.1, the releases that run on Node.js 24, each pinned to its release's commit with the release named beside it; CodeRabbit skips the index pull request by its title and reviews none of the index files","body":null},{"sha":"3c9b662","fullSha":"3c9b6627e6b2fbb63236f2dac93a108eedc76f6a","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:57:59-07:00","url":"https://github.com/framerslab/codex/commit/3c9b6627e6b2fbb63236f2dac93a108eedc76f6a","type":"test","scope":null,"description":"the workflows run github-script, create-pull-request and repository-dispatch at the commit of the release that runs on Node.js 24, every github-script body compiles as v9 runs it, and CodeRabbit skips the index pull request by its title and reviews none of its files","body":null},{"sha":"874533f","fullSha":"874533fd98e9ec12b7e29b6cf82262c242ef4725","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-21T18:41:03Z","url":"https://github.com/framerslab/codex/commit/874533fd98e9ec12b7e29b6cf82262c242ef4725","type":"ci","scope":"codex","description":"update search index and block tags","body":null},{"sha":"3840943","fullSha":"3840943269a0bf0a2f53294a206a0395d3355269","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-21T18:39:38Z","url":"https://github.com/framerslab/codex/commit/3840943269a0bf0a2f53294a206a0395d3355269","type":"chore","scope":"changelog","description":"append the weekly history","body":null},{"sha":"31af6b3","fullSha":"31af6b3c474469ddc17901c70839c83f44599855","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T11:02:27-07:00","url":"https://github.com/framerslab/codex/commit/31af6b3c474469ddc17901c70839c83f44599855","type":"fix","scope":null,"description":"the changelog groups a day's commits by type on an object with no prototype, so a type named constructor, toString or __proto__ gets its own group instead of crashing the run","body":null},{"sha":"2d0e5a2","fullSha":"2d0e5a25877a6fd796369e5947f7992517cb21b0","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T11:01:18-07:00","url":"https://github.com/framerslab/codex/commit/2d0e5a25877a6fd796369e5947f7992517cb21b0","type":"test","scope":null,"description":"the changelog groups a day of commits by any type, even one named like a property every object has, such as constructor, toString or __proto__","body":null},{"sha":"0c03ed5","fullSha":"0c03ed5fe0ff05340f096af5af7fcd35825f2bae","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:52:56-07:00","url":"https://github.com/framerslab/codex/commit/0c03ed5fe0ff05340f096af5af7fcd35825f2bae","type":"docs","scope":null,"description":"the changelog records complete days, in UTC, from the day after the last one recorded, each commit on the day it reached master, and the activity over the span from where the last one ended, read page by page, each item once","body":null},{"sha":"039c0de","fullSha":"039c0de68e20871c295b733ae503867306721917","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:52:06-07:00","url":"https://github.com/framerslab/codex/commit/039c0de68e20871c295b733ae503867306721917","type":"fix","scope":null,"description":"the changelog reads each commit whole and records it on the UTC day it reached master, complete days only, from the day after the last one recorded; the activity reads every page of each list, records the span from where the last one ended up to the run's day, and leaves out what an earlier line holds; the workflow hands both scripts the day the run starts on, and a first day only when a manual run names one","body":null},{"sha":"f47c228","fullSha":"f47c228e95f4021d66161614b6ae180bb886748c","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T10:49:14-07:00","url":"https://github.com/framerslab/codex/commit/f47c228e95f4021d66161614b6ae180bb886748c","type":"test","scope":null,"description":"the changelog records complete days from the first day not yet recorded, each commit whole on the day it reached master and each activity item once from every page, and the workflow hands both scripts the day the run ends at and a first day only when a manual run names one","body":null},{"sha":"8b1e15a","fullSha":"8b1e15a730c4dd1bcd57264ebc1f56f933ea3200","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T03:30:56-07:00","url":"https://github.com/framerslab/codex/commit/8b1e15a730c4dd1bcd57264ebc1f56f933ea3200","type":"docs","scope":null,"description":"the block tag enhancement's docs, step names and pull request text name threads, the public name, so rename-guard passes","body":"rename-guard failed on 5381ae4 (run 39584482438): WORKFLOWS.md lines 215 and 216 and BLOCK_TAGGING_TUTORIAL.md line 305 carried the old public word, which RENAME_DONE=1 refuses in prose. ai-enhance-blocks.yml's step names, its comments and the body of the pull request it opens use the same word, and the tests read no step by its name."},{"sha":"5381ae4","fullSha":"5381ae4808ecaa5fbd0b2ce46c8167bad7282b35","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T03:25:18-07:00","url":"https://github.com/framerslab/codex/commit/5381ae4808ecaa5fbd0b2ce46c8167bad7282b35","type":"docs","scope":null,"description":"the changelog runs weekly and reaches master through a pull request from ci/changelog, the block tag enhancement opens a pull request or pushes to a labelled one with FRAMERS_BUMP_TOKEN, and the history files are the monthly JSONL files","body":"WORKFLOWS.md describes changelog.yml, ai-enhance-blocks.yml and the label workflow's four branches; README.md, codex-history/README.md and docs/CHANGELOG_SYSTEM.md describe the weekly run, its first day, its pull request and its two secrets, the monthly files and their queries, and how to enable a scheduled workflow GitHub disabled after 60 days without repository activity; the block tagging tutorial names the index and enhancement pull requests and the ai-enhance label."},{"sha":"dc774d0","fullSha":"dc774d0f9db60405668ea9e2ddaef09d64262cfc","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T03:25:18-07:00","url":"https://github.com/framerslab/codex/commit/dc774d0f9db60405668ea9e2ddaef09d64262cfc","type":"ci","scope":null,"description":"the changelog and the enhanced block tags reach master through pull requests opened with FRAMERS_BUMP_TOKEN, the activity script's merged pull requests query declares only the variables it uses, and the landing label follows ci/changelog and ci/ai-enhance-blocks","body":"changelog.yml runs once a week, Monday 00:00 UTC, instead of daily. One step picks the first day, seven days ago or the day a manual run names, and hands it to both history scripts. The job takes the monthly files of an open changelog pull request before the scripts append, installs nothing, and opens or updates one pull request into master from ci/changelog with create-pull-request at the commit the bump pins; its GITHUB_TOKEN only reads, and no step pushes to master.\n\nfetch-issue-activity.js drops $since from the merged pull requests query. The pullRequests connection takes no date argument, and GitHub refused the query that declared it (\"Variable $since is declared by anonymous query but not used\", run 34420881812); the date stays applied to mergedAt in the script. The created issues are kept only when created on or after the first day, since the issues filter's since is the update time.\n\nai-enhance-blocks.yml runs the enhancement in a job whose GITHUB_TOKEN only reads and whose checkout keeps no token, and archives the strands it changed as a patch. On a manual run, a second job opens or updates one pull request into master from ci/ai-enhance-blocks. On a labelled pull request, a second job commits the patch onto the pull request's branch as a fast-forward and pushes it with FRAMERS_BUMP_TOKEN, and no commit message carries a skip marker, so Test Suite and rename-guard run on the new head. The jobs that hold the token run none of the repository's code. The run's inputs reach the script as arguments.\n\nlanding-follows-the-bump-checks.yml follows ci/changelog and ci/ai-enhance-blocks beside the bump's and the index's branches."},{"sha":"c28a3cf","fullSha":"c28a3cf5ef0f4848edaa2239880bc3497a0df552","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T02:16:43-07:00","url":"https://github.com/framerslab/codex/commit/c28a3cf5ef0f4848edaa2239880bc3497a0df552","type":"test","scope":null,"description":"the changelog and the AI-enhanced block tags reach master through pull requests opened with FRAMERS_BUMP_TOKEN, the activity script sends only GraphQL queries GitHub accepts and counts only the issues created since its first day, and the landing label follows ci/changelog and ci/ai-enhance-blocks","body":"changelog.yml failed at \"Fetch GitHub issue activity\" from 5 to 10 September (run 34420881812: \"Variable $since is declared by anonymous query but not used\") and then pushed to master, which master's protection refuses; it ran daily. ai-enhance-blocks.yml pushed to master on a manual run and pushed a [skip ci] commit with GITHUB_TOKEN on a labelled pull request, whose required checks then never report.\n\nThese cases run the activity script against a stand-in for GitHub's GraphQL API that applies GitHub's variable rules, run the changelog workflow's first step, the step that picks the first day and the step that carries an open changelog pull request's entries, and run the AI block workflow's argument handling with a stand-in node and its archive and push steps in scratch repositories. They fail on the current workflows and script."},{"sha":"4901545","fullSha":"4901545b875bae9cb49b208cc3fd0087e41bbe0d","author":"jddunn","email":"11220853+jddunn@users.noreply.github.com","date":"2026-10-21T10:25:17Z","url":"https://github.com/framerslab/codex/commit/4901545b875bae9cb49b208cc3fd0087e41bbe0d","type":"ci","scope":"codex","description":"update search index and block tags","body":null},{"sha":"283783e","fullSha":"283783e172a0510c1234af41b832328485cd66d0","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T02:04:42-07:00","url":"https://github.com/framerslab/codex/commit/283783e172a0510c1234af41b832328485cd66d0","type":"fix","scope":null,"description":"the search postings compare real paths before reading a listed document, so a link under the root to a file outside it is not read","body":"The check compared the listed path, which lies under the root, and the read followed the link to its target, so a\nchecked-in docs/leak.md linking outside the repository put the whole target in the published vocabulary. The root and\nthe document now resolve to their real paths first; a document outside the root keeps its excerpt's postings and the\nwarning names it. The Markdown or YAML parse follows the listed name, as the indexer's does."},{"sha":"6ed9de6","fullSha":"6ed9de6cee3beebba55b4345394e83f422d61a0a","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T02:03:54-07:00","url":"https://github.com/framerslab/codex/commit/6ed9de6cee3beebba55b4345394e83f422d61a0a","type":"test","scope":null,"description":"a listed document that is a link under the root to a file outside it keeps its excerpt's postings","body":"The indexer lists a .md or .yaml link by its own name and reads its target. The postings check the listed path, which\nlies under the root, then read through the link, so the whole outside file reaches the published vocabulary. This case\nlinks docs/leak.md to a file beside the root: the search must not find the file's word, must find the excerpt's, and\nthe warning must name the link. It fails here."},{"sha":"a3d5093","fullSha":"a3d50934f5f5e9ef0a376c35f030865137d08b7f","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:52:51-07:00","url":"https://github.com/framerslab/codex/commit/a3d50934f5f5e9ef0a376c35f030865137d08b7f","type":"docs","scope":null,"description":"the search postings cover each document's whole text, read from its file","body":"README.md and docs/DEVELOPMENT.md say so, and DEVELOPMENT.md names the embedding library the build uses,\n@huggingface/transformers. The comment on the index's content field no longer calls it the text search reads, and\ncoverage counts scripts/search-index.mjs beside the two other .mjs modules it names."},{"sha":"4be2420","fullSha":"4be24202486dee37286d6c9cd8362f8a9da0dad0","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:52:11-07:00","url":"https://github.com/framerslab/codex/commit/4be24202486dee37286d6c9cd8362f8a9da0dad0","type":"fix","scope":null,"description":"the search postings read each document's whole text from its file","body":"The postings came from the index's content field, a document's first 5,000 characters, so a term past that point never\nfound its document, the cut kept a fragment of the word it fell in as a term, and an edit near a guide's top pushed terms\nout of search: the index of #14 no longer finds docs/DEVELOPMENT.md by architecture or sqlite3, nor\ndocs/RECATALOG_GUIDE.md by generated or reviewing. buildPostings reads each listed document under the root as\nscripts/auto-index.js parses it, the body after the frontmatter for Markdown and the whole file for YAML. A document it\ncannot read there, or whose path leads outside the root, keeps the content field's postings, with a warning naming it.\nThe embeddings read the same text as before."},{"sha":"ca56a15","fullSha":"ca56a159394876140b4346b56dd4e51b24c6b2ea","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:50:11-07:00","url":"https://github.com/framerslab/codex/commit/ca56a159394876140b4346b56dd4e51b24c6b2ea","type":"test","scope":null,"description":"a search finds a document by any term of its text, past the index's 5,000-character excerpt too","body":"The search build moves unchanged to scripts/search-index.mjs, which exports it with the embedding model passed in, and\nscripts/build-search-index.mjs runs it. tests/search-index.test.js indexes documents with the indexer and runs the build\nwith a stand-in model. It fails here: the postings come from the index's content field, a document's first 5,000\ncharacters, so docs/DEVELOPMENT.md is not found by architecture, sqlite3, storage, adapter or incremental,\ndocs/RECATALOG_GUIDE.md not by generated, autogenerated, reviewing, warnings or suggestions, a term past character 9,000\nis not found, and the cut leaves the fragment arch as a term."},{"sha":"254f551","fullSha":"254f551cbca72f56848aa12f129cfbadc0c46572","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:10:54-07:00","url":"https://github.com/framerslab/codex/commit/254f551cbca72f56848aa12f129cfbadc0c46572","type":"docs","scope":null,"description":"the index publish job keeps every waiting run","body":null},{"sha":"9c1aac2","fullSha":"9c1aac25d73775a7416bf5d707fcff224ac8070b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:10:54-07:00","url":"https://github.com/framerslab/codex/commit/9c1aac25d73775a7416bf5d707fcff224ac8070b","type":"ci","scope":null,"description":"the index publish job keeps every waiting run with queue: max, so an older commit's run that begins waiting later no longer cancels the newer commit's publish, and each run decides when its turn comes","body":null},{"sha":"aeceb70","fullSha":"aeceb700413af37562f3d1232a317ff705851ae9","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T01:10:45-07:00","url":"https://github.com/framerslab/codex/commit/aeceb700413af37562f3d1232a317ff705851ae9","type":"test","scope":null,"description":"the index publish job keeps every waiting run, since GitHub's default keeps one and lets an older commit's run that begins waiting later cancel the newer commit's, and with every run kept only the run of the commit whose inputs master's head holds publishes, whatever order the runs take their turns in","body":null},{"sha":"c37deae","fullSha":"c37deae641e96e3f59995c763c70a5f3fed4431d","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:56:53-07:00","url":"https://github.com/framerslab/codex/commit/c37deae641e96e3f59995c763c70a5f3fed4431d","type":"docs","scope":null,"description":"the index publish job checks out master's head, and an ordering comparison that cannot be made fails the step","body":null},{"sha":"862bdcc","fullSha":"862bdcc5facced89b887707aadca0569c1a3f704","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:56:53-07:00","url":"https://github.com/framerslab/codex/commit/862bdcc5facced89b887707aadca0569c1a3f704","type":"ci","scope":null,"description":"the index publish job checks out master's head, so its pull request carries the index alone and merges without a conflict after master took an earlier index pull request; its ordering step reads the run's commit by its id, and a comparison that cannot be made fails the step instead of skipping the publish","body":null},{"sha":"442ebed","fullSha":"442ebed84eab392a09fa320bf1b2b0c145b22b27","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:56:29-07:00","url":"https://github.com/framerslab/codex/commit/442ebed84eab392a09fa320bf1b2b0c145b22b27","type":"test","scope":null,"description":"the index publish job checks out master's head, so its pull request starts from it and merges without a conflict after master took an earlier index pull request, and its ordering step reads the run's commit by its id and fails, deciding nothing, when it cannot","body":null},{"sha":"a92ca3a","fullSha":"a92ca3a9ecff607e4053145d151f241df95b4cc4","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:51:46-07:00","url":"https://github.com/framerslab/codex/commit/a92ca3a9ecff607e4053145d151f241df95b4cc4","type":"docs","scope":null,"description":"the index reaches master through a pull request from ci/codex-index, the landing label follows that pull request's guards, master's protection is described, and the guides commit a manual re-index or a tutorial change on a branch and open a pull request, since master refuses a direct push","body":null},{"sha":"9f7ea45","fullSha":"9f7ea4596c149822aedf106a3ecdef7c5879ad04","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:48:39-07:00","url":"https://github.com/framerslab/codex/commit/9f7ea4596c149822aedf106a3ecdef7c5879ad04","type":"ci","scope":null,"description":"the index publish job opens one pull request into master from ci/codex-index with FRAMERS_BUMP_TOKEN instead of pushing the index to master, which master's required checks refuse; it publishes from master only, one run at a time, leaves the pull request to the run of a later change to the index's inputs, and archives and downloads with upload-artifact v7 and download-artifact v8; the landing label follows that pull request's Test Suite and rename-guard as it follows the bump's","body":null},{"sha":"686e1b2","fullSha":"686e1b21d4a0f31be6e8f28fac880ae819a44128","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:47:07-07:00","url":"https://github.com/framerslab/codex/commit/686e1b21d4a0f31be6e8f28fac880ae819a44128","type":"test","scope":null,"description":"the index publish job opens one pull request into master from ci/codex-index with FRAMERS_BUMP_TOKEN and pushes nothing to master, leaves that pull request to the run of a later change to the index's inputs, and the landing label follows the index pull request's Test Suite and rename-guard as it follows the bump's","body":null},{"sha":"f61af18","fullSha":"f61af18fbac9447287dd1811d6e234dcb25250e2","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-21T00:37:05-07:00","url":"https://github.com/framerslab/codex/commit/f61af18fbac9447287dd1811d6e234dcb25250e2","type":"ci","scope":null,"description":"upload-artifact moves to v7 and download-artifact to v8, the current majors, which run on Node.js 24 and read each other's artifacts; v4 of both targets Node.js 20, and the runners force it onto Node.js 24 with a deprecation warning on Unit Tests, Integration Tests and Update Badges","body":null},{"sha":"d19e45b","fullSha":"d19e45b377ae6ba635926e0a18055debda2084bf","author":"github-actions[bot]","email":"github-actions[bot]@users.noreply.github.com","date":"2026-10-21T04:01:10Z","url":"https://github.com/framerslab/codex/commit/d19e45b377ae6ba635926e0a18055debda2084bf","type":"ci","scope":"codex","description":"update search index and block tags [skip ci]","body":null},{"sha":"b057b36","fullSha":"b057b36ce4f6a09461a28ca12ea78f710909c316","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T20:42:10-07:00","url":"https://github.com/framerslab/codex/commit/b057b36ce4f6a09461a28ca12ea78f710909c316","type":"docs","scope":null,"description":"run numbers order two master commits neither of which descends from the other only when both runs' numbers are known; when either is missing, the run's files replace the branch's","body":null},{"sha":"bc025a3","fullSha":"bc025a3f304f5db4b64ee4c06618df3554f51faf","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T20:04:11-07:00","url":"https://github.com/framerslab/codex/commit/bc025a3f304f5db4b64ee4c06618df3554f51faf","type":"ci","scope":null,"description":"the badges head names the run that published it, and the publisher orders two commits on master neither of which descends from the other by their run numbers, so a delayed run cannot replace a later run's badges after master merged a second history","body":null},{"sha":"b60f707","fullSha":"b60f7073e6f761720583b50088bc6e5046ba3289","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T20:03:10-07:00","url":"https://github.com/framerslab/codex/commit/b60f7073e6f761720583b50088bc6e5046ba3289","type":"test","scope":null,"description":"the badges publisher orders runs of two commits neither descends from, as after a force-push and a merge of both histories, by their run numbers, and Update Badges passes the run number","body":null},{"sha":"5b53377","fullSha":"5b53377c943386b7c35c23ec363e066085f1f5e1","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:56:08-07:00","url":"https://github.com/framerslab/codex/commit/5b53377c943386b7c35c23ec363e066085f1f5e1","type":"docs","scope":null,"description":"the badges' limit: they describe the last master commit whose Test Suite run published them, so a force-push to master that starts no run, or lands after the publisher read master, leaves them until the next run on master","body":null},{"sha":"51fde7b","fullSha":"51fde7b45eda048338221785a58b2d2d76f4f077","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:45:33-07:00","url":"https://github.com/framerslab/codex/commit/51fde7b45eda048338221785a58b2d2d76f4f077","type":"ci","scope":null,"description":"the badges publisher keeps the head's badges as the later ones only while master still holds the commit they were counted from, so after a force-push moves master back, the run of its new head replaces them","body":null},{"sha":"26a937d","fullSha":"26a937d84f854918794cf46138a704300f5bc155","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:44:38-07:00","url":"https://github.com/framerslab/codex/commit/26a937d84f854918794cf46138a704300f5bc155","type":"test","scope":null,"description":"the badges publisher replaces the badges of a commit master no longer holds, as after a force-push that moves master back to an ancestor of it","body":null},{"sha":"cc6c6b8","fullSha":"cc6c6b880c5f3c3187846122fe8cf84834abce5f","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:35:51-07:00","url":"https://github.com/framerslab/codex/commit/cc6c6b880c5f3c3187846122fe8cf84834abce5f","type":"ci","scope":null,"description":"the badges publisher pushes only for a commit that is still in master's history, read from the remote before anything else, so a run of a commit a force-push dropped leaves the badges of master's new history in place","body":null},{"sha":"c988607","fullSha":"c988607e6ee55d3137770266e77527062c8d74e2","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:34:50-07:00","url":"https://github.com/framerslab/codex/commit/c988607e6ee55d3137770266e77527062c8d74e2","type":"test","scope":null,"description":"the badges publisher pushes nothing for a commit master no longer holds, so a delayed run of a commit a force-push dropped cannot replace the badges of master's new history","body":null},{"sha":"b51e58c","fullSha":"b51e58c38addb5fb0f75a8453c214e22ceb7bcf2","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:25:07-07:00","url":"https://github.com/framerslab/codex/commit/b51e58c38addb5fb0f75a8453c214e22ceb7bcf2","type":"ci","scope":null,"description":"the badges publisher orders the run's commit against the head's before it compares files, and pushes files equal to the branch's when they come from a later commit, so the head always names the latest commit counted","body":null},{"sha":"60e444c","fullSha":"60e444ce1844ade62a3c50ff475f65bcbe308506","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:24:13-07:00","url":"https://github.com/framerslab/codex/commit/60e444ce1844ade62a3c50ff475f65bcbe308506","type":"test","scope":null,"description":"a later master commit whose run counts the same files as the branch's names itself on the badges head, so a delayed run of a commit between the two cannot replace its figures","body":null},{"sha":"2b91751","fullSha":"2b91751c596357da15ac2db04f02e7d7e36cc07d","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:13:37-07:00","url":"https://github.com/framerslab/codex/commit/2b91751c596357da15ac2db04f02e7d7e36cc07d","type":"docs","scope":null,"description":"doc comments on the badge writer's remaining functions","body":null},{"sha":"a4663f0","fullSha":"a4663f06c5725e311c334a42aac4c49601f0128a","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:13:37-07:00","url":"https://github.com/framerslab/codex/commit/a4663f06c5725e311c334a42aac4c49601f0128a","type":"docs","scope":null,"description":"the README says what LICENSE covers: the content its Overview lists (weaves, looms, threads, tags and schemas), not the code in scripts/, lib/, tests/ and .github/","body":null},{"sha":"3f82b6d","fullSha":"3f82b6d20db00c278e3aa8670b55acd20ee5c2f2","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:12:36-07:00","url":"https://github.com/framerslab/codex/commit/3f82b6d20db00c278e3aa8670b55acd20ee5c2f2","type":"ci","scope":null,"description":"the badges publisher leaves the branch alone when its files were counted from a later master commit than the run's, read from master's history, which Update Badges now checks out whole; a head naming a commit the clone cannot place is replaced with a warning","body":null},{"sha":"a09126b","fullSha":"a09126bf4e3780101dae6529f90b9af9c5e92dd8","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T19:11:37-07:00","url":"https://github.com/framerslab/codex/commit/a09126bf4e3780101dae6529f90b9af9c5e92dd8","type":"test","scope":null,"description":"the badges publisher keeps a later master commit's badges when an earlier commit's run reaches the branch after them, from a full or a depth-1 clone; a head naming a commit it cannot find is replaced with a warning; Update Badges checks out master's history","body":null},{"sha":"dea5c38","fullSha":"dea5c38e8b68df0f75c0457274ee1115d3574326","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T14:44:48-07:00","url":"https://github.com/framerslab/codex/commit/dea5c38e8b68df0f75c0457274ee1115d3574326","type":"ci","scope":null,"description":"Update Badges runs on master and publishes shields.io endpoint files on a badges branch, never a commit to master","body":"The job ran only when github.ref was refs/heads/main, a branch this repository does not have, so it was skipped on every master run and the README kept SVG files committed to master in December 2025.\n\nThe Unit Tests job now writes one endpoint file per badge from its own run (scripts/badges/write-badge-json.js): tests counted from the coverage run's Vitest JSON report, line coverage from coverage-summary.json, the version from package.json, the licence from LICENSE. On a push to master, after the four test jobs pass, Update Badges replaces the badges branch with them, a parentless commit pushed with --force-with-lease on the head it read (scripts/badges/publish-badges-branch.sh), and purges jsDelivr's copies. It is the only job with contents: write. The README reads the files through jsDelivr, since shields.io refuses github.com addresses.\n\nThe SVG generator, its npm scripts and its committed output go, and so does the Codecov upload, which every run refused for want of a token."},{"sha":"217463d","fullSha":"217463d68fc150978e87de037275154a447dc05b","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T14:44:43-07:00","url":"https://github.com/framerslab/codex/commit/217463d68fc150978e87de037275154a447dc05b","type":"docs","scope":null,"description":"add the CC BY 4.0 legal code as LICENSE, the licence and file the README names; the repository never had the file, so the README's link to it was broken and GitHub detected no licence","body":null},{"sha":"b361b3b","fullSha":"b361b3bd1bc1f13cc282298dee85a5ac8ac8a4cd","author":"jddunn","email":"johnnyfived@protonmail.com","date":"2026-10-20T14:40:41-07:00","url":"https://github.com/framerslab/codex/commit/b361b3bd1bc1f13cc282298dee85a5ac8ac8a4cd","type":"test","scope":null,"description":"the README's badges are shields.io endpoint files on a badges branch, written from the suite's own run and published from master; the Update Badges job named main, a branch this repository does not have","body":null}]}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

1. October 21 history overstates commits 🐞 Bug ≡ Correctness

The 2026-10-21 entry sets totalCommits to 50 instead of the 48 records in its byType groups and
commits array, while the 2026-10-22 entry sets it to 6 instead of 5. Consumers that trust these
stored totals will report two and one additional commits, respectively, that are not present in the
recorded histories.
Agent Prompt
## Issue description
The 2026-10-21 JSONL record declares 50 commits instead of the 48 present in its grouped and flat commit lists, and the 2026-10-22 record declares 6 instead of 5, making both changelog entries internally inconsistent.

## Fix Focus Areas
- codex-history/2026-10.jsonl[4-4]
- codex-history/2026-10.jsonl[5-5]
- scripts/generate-changelog.js[174-187]

## Recommended Fix
Set the October 21 and October 22 `totalCommits` values to the actual numbers of recorded commits, or regenerate both lines from the source history so `totalCommits`, `byType`, and `commits` are derived consistently.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@github-actions github-actions Bot added the landing Checks and guards passed; lands after the comment pass label Oct 26, 2026
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Guards passed on acc972f:

  • Test Suite, run 42540735300
  • rename-guard, run 42540735299

Labelled landing: this pull request lands after its review comments are read, answered and resolved. No workflow merges it.

@github-actions github-actions Bot added landing Checks and guards passed; lands after the comment pass and removed landing Checks and guards passed; lands after the comment pass labels Nov 2, 2026
@github-actions github-actions Bot added landing Checks and guards passed; lands after the comment pass and removed landing Checks and guards passed; lands after the comment pass labels Nov 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

landing Checks and guards passed; lands after the comment pass

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant