Skip to content

chore(ci)(deps): bump actions/upload-pages-artifact from 3 to 4 - #25

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/actions/upload-pages-artifact-4
Closed

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/actions/upload-pages-artifact-4

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jan 19, 2026 •

Copy link
Copy Markdown
Contributor

Bumps actions/upload-pages-artifact from 3 to 4.

Release notes

Sourced from actions/upload-pages-artifact's releases.

v4.0.0

What's Changed

Full Changelog: actions/upload-pages-artifact@v3.0.1...v4.0.0

v3.0.1

Changelog

See details of all code changes since previous release.

Commits
  • 7b1f4a7 Merge pull request #127 from heavymachinery/pin-sha
  • 4cc19c7 Pin actions/upload-artifact to SHA
  • 2d163be Merge pull request #107 from KittyChiu/main
  • c704843 fix: linted README
  • 9605915 Merge pull request #106 from KittyChiu/kittychiu/update-readme-1
  • e59cdfe Update README.md
  • a2d6704 doc: updated usage section in readme
  • 984864e Merge pull request #105 from actions/Jcambass-patch-1
  • 45dc788 Add workflow file for publishing releases to immutable action package
  • efaad07 Merge pull request #102 from actions/hidden-files
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](actions/upload-pages-artifact@v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file github_actions labels Jan 19, 2026
@vercel

vercel Bot commented Jan 19, 2026 •

Copy link
Copy Markdown

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

Project Deployment Review Updated (UTC)
spec Ready Ready Preview, Comment Jan 19, 2026 0:54am

Request Review

@dependabot @github

dependabot Bot commented on behalf of github Jan 21, 2026

Copy link
Copy Markdown
Contributor Author

Looks like actions/upload-pages-artifact is no longer a dependency, so this is no longer needed.

@dependabot dependabot Bot closed this Jan 21, 2026
@dependabot
dependabot Bot deleted the dependabot/github_actions/actions/upload-pages-artifact-4 branch January 21, 2026 06:36
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Sep 9, 2026
…with namespace regexp on 8 objects (objectstack-ai#15122)

* docs(audits): objectstack-ai#14096 census — ledger vs namespace regexp disagree on 8 objects

Ruling item 1 (director seat, 总监批 objectstack-ai#25, 2026-09-01, maintainer verbatim
「同意」): count how many platform-namespace objects the hand-adjudicated
tenancy ledger (`PLATFORM_OBJECT_TENANCY`) judges differently than the
namespace regexp `/^(sys_|cloud_|ai_)/` that both seed paths still use.

Result: 8, not 0 — sys_file, sys_upload_session, sys_approval_request,
sys_approval_action, sys_approval_approver, sys_automation_run,
sys_notification_delivery, sys_record_share. Per ruling item 3 this STOPS
here: no option (A/B/C) is implemented, no seed path is touched, no row on
disk is touched. The full predicate, the header control (84/25/59
reproduced), the three-site re-derivation and the disagreement table are in
the audit doc; the census script is self-contained and re-runnable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68

* fix(audits): guard objectstack-ai#14096 census against a silent-zero broken ledger read

Reviewer on PR objectstack-ai#15122 reproduced a silent-failure mode: emptying
PLATFORM_OBJECT_TENANCY to {} and rebuilding still prints
reproduced_matches_header: true and exits 0, with disagreement_count
silently reading 0 -- indistinguishable from a genuine zero. The header
control never reads the ledger (it's an AST census of the object files),
so it validates the population and tenant-field logic and proves nothing
about the ledger import.

Add a hard floor (LEDGER_ENTRY_COUNT_FLOOR = 5, current ledger has 9
entries) on the imported PLATFORM_OBJECT_TENANCY: below it, the script
throws a loud, explicit error instead of reporting a clean zero. Also
correct the audit doc's "its other outputs can be trusted" sentence to
say precisely what the control does and does not cover, and add a "What
this census does not claim" section scoping the result (does not measure
actual row counts on any deployment, or when each ledger verdict was
decided relative to the seed paths' code) without softening it -- the
count is still 8, confirmed three ways.

Reproduced the reviewer's break on this branch (empty ledger -> rebuild
-> exit 0, disagreement 0), applied the fix, reproduced again (same
mutation -> rebuild -> now exit 1, loud error), then restored the ledger
file and proved the restore by git hash-object equality against
git rev-parse HEAD, plus empty git diff HEAD and git status --porcelain.
Re-ran on the real, rebuilt ledger: still reports 8.

Part of objectstack-ai#14096

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68

* fix(audits): stop check:pnpm-filter-targets red on the new error message

My own error-message string in the last commit wrote the rebuild hint as
`pnpm --filter '@objectstack/objectql^...' build`, using an escaped
single quote (\') around the filter target. check:pnpm-filter-targets
scans raw JS source text (masking comments, not string-literal escapes),
so it read the escape sequence as `--filter \` and correctly flagged
that as a filter naming no real package -- a real, self-inflicted
finding, not a bug in the gate.

Reworded to reference the existing documented commands (the module doc
comment above, and the audit doc's "Commands to re-run this census"
section) instead of respelling the pnpm invocation inline. Re-ran
check:pnpm-filter-targets: green. Re-ran the script against the real
ledger: still reports 8.

Part of objectstack-ai#14096

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68

---------

Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Sep 21, 2026
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Sep 28, 2026
…ectstack-ai#19497) (objectstack-ai#19516)

Fixes objectstack-ai#19497

Clause-②: no

Retires the half-state patrol's schedule under ruling objectstack-ai#208 on objectstack-ai#19491
(director seat, summon objectstack-ai#25), direct-dispatch channel, on the
maintainer's verbatim instruction:

> 「19491 接受你的建议,并立刻派发处理相关任务。」

R3 of that ruling, verbatim:

> **R3** the half-state patrol: ⛔ not frozen, ⛔ not trimmed; its
**schedule is retired** (workflow_dispatch only, on demand for the
triage seat's daily reconciliation; **objectstack-ai#19497**) and the charter's 「锚行未处置
⛔ 不开新派发」 precondition is deleted (objectstack-ai#19496). No line of the 36,717 is
edited.

and the maintainer's question it answers: 「巡查仪留着却不继续开发,会不会反而不停的报错误的信息」

## What changed — two files, +89 / −45

**1. `.github/workflows/half-state-patrol.yml`** — the card's change:

1. `on:` drops the `schedule:` block (`37 1,7,13,19 * * *`) and its
cadence comment. `workflow_dispatch: {}` and the whole `pull_request:`
paths trigger are kept byte-identical, so a PR editing the patrol still
proves it on a real runner.
2. The header prose that promised the cadence is rewritten, in seven
places, to describe on-demand use and to carry the ⛔ against
re-scheduling it on the old argument: the 「why a workflow」 section (kept
as history, marked half-superseded), the objectstack-ai#13544 correction paragraph,
the `Swept` heartbeat paragraph, the new `on:` block prose, the
`concurrency` note, the anchor-issue fallback note, and the citation
census's HOW OFTEN / WHAT IT COSTS note.
3. ⛔ Not touched, as ruled:
`.github/actions/half-state-patrol/action.yml` and
`scripts/pm/check-half-states.mjs` — 0 lines of its 36,717.

**2. `scripts/pm/dispatch-gates.mjs`** — a forced repair, outside the
card's named surface, reported rather than smuggled:

Two cases of that tool's self-test read the live `.github/workflows`
tree and assert that the specimen workflow declares `schedule`. Retiring
the schedule makes both false. Measured before touching them, on the
workflow-only commit: `✗ dispatch-gates self-test: 2 of 1883 case(s)
failed`, and the two are exactly those. `pnpm check:pm-dispatch-gates`
is a required-context gate (`Lint & Repo Gates`) and
`scripts/ci/select-gate-families.sh` runs the `pm_dispatch_gates` family
for a modified path of class `workflow` (its `*)` arm returns 0), so the
red is this PR's, on this PR.

The repair is the minimum that makes each case true again, and each
keeps the fact it was always about: `'schedule'` drops out of the
trigger list one case asserts (it still pins that the specimen is not "a
workflow no PR runs"), and `&& isScheduled('half-state-patrol.yml')`
drops out of the other (it still pins that the live sweep is withheld by
the value-bearing class and nothing else). ⛔ Nothing is added: pinning
the ABSENCE of a schedule would be a new ratchet, which ruling objectstack-ai#208's R6
does not let this file grow without the maintainer's sentence. A comment
above the pair records the ruling so the next reader does not restore
the pin.

If the director seat would rather this file were not touched at all, the
alternative is to land the sibling card first or to leave the PR red by
design — flagged in the report's `open_questions`, not decided here.

No step, permission, job, timeout or input of the workflow changed.
Parsed after the edit:

```
top keys: ['name', True, 'permissions', 'concurrency', 'jobs']
on: {'workflow_dispatch': {}, 'pull_request': {'paths': ['scripts/pm/check-half-states.mjs', 'scripts/invoked-as.mjs', 'scripts/pm/sweep-closed-cards.mjs', 'scripts/check-issue-citations.mjs', '.github/actions/half-state-patrol/**', '.github/workflows/half-state-patrol.yml']}}
jobs: ['patrol']
steps: ['Checkout repository', 'Setup Node.js', 'Sweep the board and update the anchor', 'Sweep the closed cards', "Census the repo's issue citations"]
```

## Census — every other path into the patrol, file by file

Population: `git grep -ni 'half.state' -- .github` = 15 files at
2cac363. Dropping comment lines leaves **four** non-comment
references outside the patrol's own two files:

```
.github/workflows/board-snapshot.yml:176:      - 'scripts/pm/check-half-states.mjs'
.github/workflows/lint.yml:1189:      - name: PM half-state sweeper self-test
.github/workflows/lint.yml:1190:        run: pnpm check:pm-half-states
.github/workflows/test-nightly-tiers.yml:442:            // scripts/pm/check-half-states.mjs. ⛔ Do not re-derive 65,536 from
```

and exactly one `uses:` of the action anywhere in the tree
(`half-state-patrol.yml:236`, the local path).

| file | runs the patrol? | scheduled? | verdict |
|---|---|---|---|
| `.github/workflows/half-state-patrol.yml` | **yes** — `uses:
./.github/actions/half-state-patrol` | was `37 1,7,13,19 * * *` |
**schedule removed here**; the call stays, `workflow_dispatch` +
`pull_request` stay |
| `.github/actions/half-state-patrol/action.yml` | it *is* the patrol
body | composite action — declares no trigger of its own | untouched by
ruling |
| `.github/workflows/board-snapshot.yml` | **no** — it runs
`scripts/pm/board-snapshot.mjs`; its one non-comment reference is a
`pull_request: paths:` entry, because the archiver imports the sweeper's
proxy-re-exec plan. Its other three hits are prose (the request budget
it shares, and the cron offset it chose against the patrol). | yes, `7
2,8,14,20 * * *` — its own archiver cadence | **keeps its schedule and
its call**: it is not a path into the patrol |
| `.github/workflows/lint.yml` | **no** — `pnpm check:pm-half-states` is
the sweeper's OFFLINE `--self-test` (no network, no token, no board
read, no anchor write), which lint.yml's own comment separates from the
live sweep at length | yes (hourly full run) | **keeps both**; the
self-test's PR-time scoping is the sibling card's, not this one's |
| `.github/workflows/test-nightly-tiers.yml` | **no** — one `//` comment
citing where a constant comes from | yes | untouched |
| `.github/workflows/checklist-status.yml`,
`.github/workflows/merged-branch-reaper.yml` | **no** — 0 hits for
`half.state`; they were hits on a wider grep only for their own `:37`
cron minute | yes (`37 3 * * 1`, `37 4 * * 1`) | untouched |
| `closing-target-claim-guard.yml`, `cross-repo-issue-closer.yml`,
`cut-rc.yml`, `merge-queue-triage.yml`,
`platform-checklist-watchdog.yml`, `release-coverage-patrol.yml`,
`required-set-patrol.yml`, `scheduled-full-run-card.yml`,
`shard-timings-refresh.yml`, `stale.yml` | **no** — comment text only
(`cut-rc.yml` is a false positive: "the doc half states below") | varies
| untouched |

So: one scheduled invocation of the patrol existed, and it is the one
this PR retires. No other workflow loses a call or a schedule.

## H57 — the card's expectation, measured and corrected

The card asks this PR to record H57 (「the workflow's latest scheduled
run is green and fresh」) as reading the retired schedule as stale on
every on-demand run. Measured against `scripts/pm/check-half-states.mjs`
at 2cac363, that is not what happens:

- `h57Population()` holds a workflow **out** of H57's population when it
declares any of `H57_PR_GATING_EVENTS` = `pull_request` /
`pull_request_target` / `merge_group`. `half-state-patrol.yml` declares
`pull_request` and already did before this PR, so H57 has never judged
it (`kind: 'pr-gating'`) and could not report it stale.
- After this PR the same workflow is held out one branch earlier, as
`kind: 'not-scheduled'`. The only H57-visible change is in its
unconditional population clause: one fewer workflow "declares a
schedule", one fewer held out as PR-gating. No row is filed either way.

**The reading that IS stale, and is deliberately left unrepaired here:**
`renderCadenceExpectation()` stamps `expected every 6h (...) · next by
…` beside `Swept` in the anchor body on **every** run, computed from the
sweeper's own `PATROL_CRON` / `PATROL_CADENCE_HOURS` constants — which
this PR may not touch (「No line of the 36,717 is edited」). So the next
on-demand run publishes a deadline against a schedule nobody fires. The
workflow header now says so in place, and the one-line repair is
reported as an out-of-scope finding rather than done here.

## Acceptance

```
$ git grep -n 'cron' .github/workflows/half-state-patrol.yml ; echo "exit=$?"
exit=1                      # 0 hits (was 1 line on 2cac363)
$ git grep -c 'workflow_dispatch' .github/workflows/half-state-patrol.yml
3                           # was 2 on 2cac363
```

The card states the control as `= 1`; measured on `origin/main` the same
grep answers **2** (the trigger key plus the citation census's cadence
note), and this PR takes it to 3 because two rewritten comments name the
dispatch path in prose. The load-bearing readings are the ones that
cannot be moved by prose: the trigger key appears exactly once (line
174), and the parsed `on:` mapping above contains `workflow_dispatch`
and no `schedule`.

## Gates

Every family `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derives for this diff was run, each exit
code captured before any pipe (`cmd > log 2>&1; code=$?`), then
reconciled against a fresh derivation:

```
$ node scripts/pm/dispatch-gates.mjs --ran RANFILE --repo objectstack-ai/objectstack
Run reconciliation — 48 derived, 48 run, 0 NOT-MEASURED, 0 UNRUN.
✓ dispatch-gates --ran: 48 derived famil(ies) accounted for — 48 run, 0 NOT-MEASURED
  (a DERIVED zero — all 48 recorded an exit code and none of them is 3).
```

47 of the 48 exited 0 in one detached battery. The 48th is `pnpm
check:pm-dispatch-gates` — the one its own header says to run detached —
and it is also the reverse-verification pair for the repair above, both
legs measured from committed states:

```
before (51a65a3, the workflow-only commit):
  ✗ dispatch-gates self-test: 2 of 1883 case(s) failed.
  ✗ ⭐ the card's own specimen declares a pull_request trigger beside its schedule — …
  ✗ the card's specimen is still discovered … — not withheld for being scheduled
after (dbeb16d, with the two cases re-pointed):
  ✓ dispatch-gates self-test: 1883 cases pass.
  check:pm-dispatch-gates: the battery took 1031.6s on this box.      :: exit 0
```

Also run, as the dispatch asks:

```
$ bash scripts/ci/select-gate-families.selftest.sh                     :: exit 0
all 40 cases passed (192 checks)
```

`actionlint` is not wired in this repo (0 hits over
`.github/workflows/*.yml` and `package.json`); the workflow lint here is
the `check:workflow-status-functions` /
`check:workflow-step-name-quoting` / `check:node-version` /
`check:required-contexts` / `check:ci-filter-parity` /
`check:self-test-wired` / `check:stall-guard-*` families, all inside the
48 and all green.

Stated rather than implied: the 54 artifact-roster families, the 11
wide-population families, the 14 pending-changeset families and the
always-runs tail that the same tool prints OUTSIDE the derived 48 were
not run here — CI owns those. The branch carries a merge of `main` at
48c39e0 and CI judges the merged generation.

## Tier

Tier S in the card's words — measured on the FINAL file list, the
register does not hold either path:

```
$ node scripts/pm/check-governed-merges.mjs --branch claude/issue-19497-patrol-schedule-retired
derived from `git diff --name-only --no-renames 48c39e0 dbeb16d` (three-dot): 2 path(s).
governed-surface predicate: 0 of 2 path(s) hit the register (6 surfaces, repo-agnostic).
  ✅  NOT governed — ordinary queue landing applies to a PR with exactly this file list.
  size: 134 changed line(s) (+89 / −45) ≤ 5000 — under the human-merge threshold
```

`skip-changeset`: one `.github/workflows/**` file and one
`scripts/pm/**` file. Nothing under `packages/**`, nothing in any
package's `files[]`, nothing published.

## Acceptance notes

Noted, not filed — stale cadence prose this PR's change makes inaccurate
in files it does not own:

- `.github/workflows/lint.yml:4742` ("runs REPORT-ONLY in
`half-state-patrol.yml`, four times a day"). Successor: the sibling
card's dev, already in flight in that file.
- `.github/workflows/board-snapshot.yml:38,140` and
`.github/workflows/release-coverage-patrol.yml:102,113` — both cite the
patrol's retired cron as the reason their own minute/hour was chosen.
The offsets they bought stay correct; only the reason is now historical.
Successor: none scheduled.
- `scripts/pm/check-half-states.mjs` header prose ("a scheduled caller",
four runs a day) — under the same ⛔ as its constants; not touched.

---
_Generated by [Claude
Code](https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE)_

---------

Co-authored-by: Claude <noreply@anthropic.com>

This branch was successfully deployed

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

Labels

ci/cd dependencies Pull requests that update a dependency file size/xs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants