@mutmutco/codex-plugin 4.3.15 → 4.3.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mmi",
3
- "version": "4.3.15",
3
+ "version": "4.3.17",
4
4
  "mmiCompat": "4.x",
5
5
  "description": "MMI workflow skills and org gates delivery.",
6
6
  "author": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/codex-plugin",
3
- "version": "4.3.15",
3
+ "version": "4.3.17",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -366,9 +366,13 @@ collaborator list + the per-branch allowlist are the record — no separate rost
366
366
  `pytest` / `pip install -e ".[dev]"` with `--var GATE_PY_VERSION=` (3.11 default). The runtime selects
367
367
  which setup step (`setup-node` vs `setup-python`) the rendered `if:` fires. The check command runs
368
368
  under the org **wall-clock budget** (#3178): the render pins `run-with-budget` to the CLI's blessed SHA
369
+ (since #6256 that one pin also covers the `zeroci-verify` step — both actions ship from the same Hub commit)
369
370
  with `--var GATE_MAX_SECONDS=` (300s onboarding default — tighten once the gate is measured, via
370
371
  `--var` or `org project set <repo> --var gate={"maxSeconds":N}`); `ci audit` and the release train
371
- both enforce the step, so do not remove it. `bootstrap apply --execute` installs that JSON as the
372
+ both enforce the step, so do not remove it. ZeroCI C3 (#6254): `--var GATE_AFFECTED_CMD=...` (or
373
+ `gate={"affectedCmd":"..."}`) runs an affected-only selection on pull_request instead of `GATE_CMD`;
374
+ empty (default) keeps the full suite on PRs. Pushes, tags and the rendered nightly `schedule`
375
+ (`17 3 * * *` on the default branch) always run the full `GATE_CMD` — that nightly is the drift catcher. `bootstrap apply --execute` installs that JSON as the
372
376
  repository ruleset itself (#6070) and reports one `product-ruleset` row: `PARK` (the gate file is not on
373
377
  the base branch yet — installed disabled), `WAIT` (the gate exists but has not emitted a proven-green
374
378
  `gate` context — kept disabled; re-run apply after the gate passes), `ACTIVATE` (gate green — enforcement
@@ -377,6 +381,13 @@ collaborator list + the per-branch allowlist are the record — no separate rost
377
381
  $OWNER/$REPO` remains the supported fallback; confirm `product required-check ruleset enforcement active`
378
382
  with `bootstrap verify` before reporting bootstrap complete. MMI-Hub keeps its own three-job gate
379
383
  (`cli`/`infra`/`docs`) — never apply the product ruleset there.
384
+ - **The ruleset requires an up-to-date head (#6263)** — the seeded reference sets
385
+ `strict_required_status_checks_policy: true` ("require branches to be up to date before merging"), so the
386
+ last of several parallel landings re-tests on the real combination instead of a base that lacked the
387
+ others (Jerv-JervCode#4289). `bootstrap apply --execute` and `ci reconcile --apply` re-PUT an existing
388
+ non-strict ruleset; `bootstrap verify` reports it as `product required-check ruleset requires an up-to-date
389
+ branch`. `pr merge` / `pr land` update a BEHIND head from the base with a merge commit and re-wait once —
390
+ see `docs/Guides/train-troubleshooting.md#head-behind-base`.
380
391
  - **A brand-new repo cannot pass the gate you just installed — its first commit must carry a real project
381
392
  (#2928).** The seeded `gate.yml` runs `GATE_INSTALL_CMD` + `GATE_CMD` (`npm ci` + `npm run check` by
382
393
  default) **unconditionally**. An empty repo has no `package.json`, so the gate **fails on the seed PR
@@ -1,6 +1,9 @@
1
1
  name: gate
2
2
  # Org-standard green-before-merge gate for product repos (#1333). Runs on PRs, train-branch pushes,
3
3
  # and v* tags so /release and /hotfix can discover required contexts on the tagged SHA.
4
+ # ZeroCI C3 (#6254): a nightly `schedule` run on the default branch executes the FULL GATE_CMD even when
5
+ # a signed receipt already proves the tree — the drift catcher for affected-only PR selection
6
+ # (GATE_AFFECTED_CMD) and for stale receipts. The job `if:` below admits `schedule` (it is not a push).
4
7
  #
5
8
  # Runner: self-hosted mmi-runner (mmi-live) — see docs/Guides/gh-runner-runbook.md in MMI-Hub.
6
9
  # #4118: if GATE_CMD runs tsgo or other memory-heavy typecheck / browser work, pin this job to
@@ -11,6 +14,9 @@ name: gate
11
14
  # bootstrap with --var):
12
15
  # GATE_RUNTIME — node | python (selects which setup step fires)
13
16
  # GATE_CMD — the check command ({{GATE_CMD}})
17
+ # GATE_AFFECTED_CMD — affected-only check command run on pull_request instead of GATE_CMD (#6254);
18
+ # empty (default) renders GATE_CMD here too, so the PR gate stays the full suite.
19
+ # Pushes, tags and the nightly schedule always run GATE_CMD. ({{GATE_AFFECTED_CMD}})
14
20
  # GATE_INSTALL_CMD — the dependency-install command ({{GATE_INSTALL_CMD}})
15
21
  # GATE_WORKDIR — app working directory when not the repo root ({{GATE_WORKDIR}})
16
22
  # GATE_CACHE_DEP_PATH— npm lockfile path for runner-checkout heal ({{GATE_CACHE_DEP_PATH}})
@@ -22,7 +28,8 @@ name: gate
22
28
  # GATE_FULL_RUN_BRANCH — train branch whose PUSHES run the full gate job (development on full/direct;
23
29
  # main on trunk). `main` is ALWAYS included in the job `if:` below so a required-
24
30
  # checks ruleset on main cannot be silently skipped by a future bootstrap (#4113).
25
- # GATE_BUDGET_SHA is rendered by the CLI from its blessed run-with-budget pin — not an operator knob.
31
+ # GATE_BUDGET_SHA is rendered by the CLI from its blessed run-with-budget pin — not an operator knob. It
32
+ # also pins zeroci-verify (MMI-Hub#6253): both actions ship from the same Hub commit.
26
33
  # GATE_RUNNER_SHA pins the org runner-checkout / runner-node-toolchain actions (#5610).
27
34
  # Estate policy 2026-08-23: GitHub-hosted Windows (`windows-latest` / windows-*) is forbidden org-wide.
28
35
  # Do not add a windows-compat (or any other) job that runs-on GH-hosted Windows. Linux self-hosted
@@ -34,6 +41,9 @@ on:
34
41
  push:
35
42
  branches: {{GATE_PUSH_BRANCHES_YAML}}
36
43
  tags: ['v*']
44
+ # #6254: nightly full run on the default branch — catches affected-only drift and stale receipts.
45
+ schedule:
46
+ - cron: '17 3 * * *'
37
47
 
38
48
  env:
39
49
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
@@ -48,6 +58,8 @@ concurrency:
48
58
 
49
59
  permissions:
50
60
  contents: read
61
+ # MMI-Hub#6253: ZeroCI receipts are commit statuses on the PR head; the gate reads them, never writes them.
62
+ statuses: read
51
63
 
52
64
  jobs:
53
65
  gate:
@@ -115,10 +127,31 @@ jobs:
115
127
  if: ${{ '{{GATE_RUNTIME}}' == 'python' }}
116
128
  run: |
117
129
  python3 --version || { echo "::error title=CI runner toolchain::RUNNER NOT PROVISIONED — python3 not on PATH after setup-python. This is the runner, not your diff; no install or test ran. Re-run the job; if it persists the mmi-runner python toolchain needs attention (docs/Guides/gh-runner-runbook.md in MMI-Hub)."; exit 1; }
130
+ # MMI-Hub#6253 ZeroCI: skip the install and the budgeted run when a trusted seat already ran this
131
+ # exact command on this exact tree (receipt = commit status zeroci/<command> on the PR head). It
132
+ # needs only git and gh, so it sits before the install. Only `verified=true` skips;
133
+ # absent/stale/unreadable fall through to the install and the budgeted run below.
134
+ - id: zeroci
135
+ uses: mutmutco/MMI-Hub/.github/actions/zeroci-verify@{{GATE_BUDGET_SHA}}
136
+ with:
137
+ command: {{GATE_CMD}}
138
+ working-directory: {{GATE_WORKDIR}}
139
+ head-sha: ${{ github.event.pull_request.head.sha || github.sha }}
118
140
  - run: {{GATE_INSTALL_CMD}}
141
+ if: ${{ steps.zeroci.outputs.verified != 'true' || github.event_name == 'schedule' }}
119
142
  # #3178: the check runs under the org wall-clock budget — a hung suite dies at the ceiling instead
120
143
  # of squatting a runner lane for GitHub's 6h default. ci-audit + the release train enforce this step.
121
- - uses: mutmutco/MMI-Hub/.github/actions/run-with-budget@{{GATE_BUDGET_SHA}}
144
+ # #6254 (ZeroCI C3): two complementary budget steps. pull_request runs GATE_AFFECTED_CMD (rendered
145
+ # equal to GATE_CMD until the knob is set); every other trigger runs the full GATE_CMD. The nightly
146
+ # schedule runs even when the zeroci receipt already proves the tree — that is its whole point.
147
+ - if: ${{ steps.zeroci.outputs.verified != 'true' && github.event_name == 'pull_request' }}
148
+ uses: mutmutco/MMI-Hub/.github/actions/run-with-budget@{{GATE_BUDGET_SHA}}
149
+ with:
150
+ command: {{GATE_AFFECTED_CMD}}
151
+ max-seconds: {{GATE_MAX_SECONDS}}
152
+ working-directory: {{GATE_WORKDIR}}
153
+ - if: ${{ github.event_name != 'pull_request' && (steps.zeroci.outputs.verified != 'true' || github.event_name == 'schedule') }}
154
+ uses: mutmutco/MMI-Hub/.github/actions/run-with-budget@{{GATE_BUDGET_SHA}}
122
155
  with:
123
156
  command: {{GATE_CMD}}
124
157
  max-seconds: {{GATE_MAX_SECONDS}}
@@ -1,5 +1,5 @@
1
1
  {
2
- "_comment": "Repository-level ruleset requiring the product gate job (#1333). Apply via GitHub repo rulesets (master-admin) after bootstrap seeds gate.yml — the job name gate must match this context.",
2
+ "_comment": "Repository-level ruleset requiring the product gate job (#1333). Apply via GitHub repo rulesets (master-admin) after bootstrap seeds gate.yml — the job name gate must match this context. strict_required_status_checks_policy=true (#6263): the head must be up to date with the base before merging, so the last of several parallel landings re-tests on the real combination.",
3
3
  "name": "mmi-product-required-checks",
4
4
  "target": "branch",
5
5
  "enforcement": "active",
@@ -13,7 +13,7 @@
13
13
  {
14
14
  "type": "required_status_checks",
15
15
  "parameters": {
16
- "strict_required_status_checks_policy": false,
16
+ "strict_required_status_checks_policy": true,
17
17
  "required_status_checks": [
18
18
  { "context": "gate" }
19
19
  ]