@mutmutco/codex-plugin 4.3.20 → 4.3.21

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.20",
3
+ "version": "4.3.21",
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.20",
3
+ "version": "4.3.21",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -366,13 +366,9 @@ 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)
370
369
  with `--var GATE_MAX_SECONDS=` (300s onboarding default — tighten once the gate is measured, via
371
370
  `--var` or `org project set <repo> --var gate={"maxSeconds":N}`); `ci audit` and the release train
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
371
+ both enforce the step, so do not remove it. Every trigger runs the full `GATE_CMD`. `bootstrap apply --execute` installs that JSON as the
376
372
  repository ruleset itself (#6070) and reports one `product-ruleset` row: `PARK` (the gate file is not on
377
373
  the base branch yet — installed disabled), `WAIT` (the gate exists but has not emitted a proven-green
378
374
  `gate` context — kept disabled; re-run apply after the gate passes), `ACTIVATE` (gate green — enforcement
@@ -381,13 +377,11 @@ collaborator list + the per-branch allowlist are the record — no separate rost
381
377
  $OWNER/$REPO` remains the supported fallback; confirm `product required-check ruleset enforcement active`
382
378
  with `bootstrap verify` before reporting bootstrap complete. MMI-Hub keeps its own three-job gate
383
379
  (`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
+ - **The committed ruleset owns its up-to-date policy.** New repositories default to
381
+ `strict_required_status_checks_policy: false`. Bootstrap and CI reconciliation preserve that policy
382
+ when updating contexts, and converge the live ruleset to the committed setting. Repositories may
383
+ explicitly require an up-to-date head. `pr merge` / `pr land` still update a BEHIND head from the base
384
+ with a merge commit and re-wait once see `docs/Guides/train-troubleshooting.md#head-behind-base`.
391
385
  - **A brand-new repo cannot pass the gate you just installed — its first commit must carry a real project
392
386
  (#2928).** The seeded `gate.yml` runs `GATE_INSTALL_CMD` + `GATE_CMD` (`npm ci` + `npm run check` by
393
387
  default) **unconditionally**. An empty repo has no `package.json`, so the gate **fails on the seed PR
@@ -1,9 +1,6 @@
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).
7
4
  #
8
5
  # Runner: self-hosted mmi-runner (mmi-live) — see docs/Guides/gh-runner-runbook.md in MMI-Hub.
9
6
  # #4118: if GATE_CMD runs tsgo or other memory-heavy typecheck / browser work, pin this job to
@@ -14,9 +11,6 @@ name: gate
14
11
  # bootstrap with --var):
15
12
  # GATE_RUNTIME — node | python (selects which setup step fires)
16
13
  # 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}})
20
14
  # GATE_INSTALL_CMD — the dependency-install command ({{GATE_INSTALL_CMD}})
21
15
  # GATE_WORKDIR — app working directory when not the repo root ({{GATE_WORKDIR}})
22
16
  # GATE_CACHE_DEP_PATH— npm lockfile path for runner-checkout heal ({{GATE_CACHE_DEP_PATH}})
@@ -28,27 +22,18 @@ name: gate
28
22
  # GATE_FULL_RUN_BRANCH — train branch whose PUSHES run the full gate job (development on full/direct;
29
23
  # main on trunk). `main` is ALWAYS included in the job `if:` below so a required-
30
24
  # checks ruleset on main cannot be silently skipped by a future bootstrap (#4113).
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.
25
+ # GATE_BUDGET_SHA is rendered by the CLI from its blessed run-with-budget pin — not an operator knob.
33
26
  # GATE_RUNNER_SHA pins the org runner-checkout / runner-node-toolchain actions (#5610).
34
27
  # Estate policy 2026-08-23: GitHub-hosted Windows (`windows-latest` / windows-*) is forbidden org-wide.
35
28
  # Do not add a windows-compat (or any other) job that runs-on GH-hosted Windows. Linux self-hosted
36
29
  # (mmi-live / mmi-heavy) is the only CI merge gate. Rare Windows proof stays on the owner's machine or
37
30
  # a future self-hosted Windows runner — never windows-latest.
38
31
  # (seed touch: keep BOM digests in lockstep after classifier land.)
39
- # harbour: unmanaged
40
- # The nightly `schedule` cron below is GitHub's own clock by design (docs/schedules.md rule 5, #6270): it is
41
- # the drift catcher for the PR gate (#6254), a required-check workflow that must not become a SCHEDULE# row
42
- # armed and dispatched by the plane it otherwise never touches — the merge gate stays decoupled from the
43
- # schedule plane, exactly as the deadman is.
44
32
  on:
45
33
  pull_request:
46
34
  push:
47
35
  branches: {{GATE_PUSH_BRANCHES_YAML}}
48
36
  tags: ['v*']
49
- # #6254: nightly full run on the default branch — catches affected-only drift and stale receipts.
50
- schedule:
51
- - cron: '17 3 * * *'
52
37
 
53
38
  env:
54
39
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
@@ -63,8 +48,6 @@ concurrency:
63
48
 
64
49
  permissions:
65
50
  contents: read
66
- # MMI-Hub#6253: ZeroCI receipts are commit statuses on the PR head; the gate reads them, never writes them.
67
- statuses: read
68
51
 
69
52
  jobs:
70
53
  gate:
@@ -132,31 +115,10 @@ jobs:
132
115
  if: ${{ '{{GATE_RUNTIME}}' == 'python' }}
133
116
  run: |
134
117
  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; }
135
- # MMI-Hub#6253 ZeroCI: skip the install and the budgeted run when a trusted seat already ran this
136
- # exact command on this exact tree (receipt = commit status zeroci/<command> on the PR head). It
137
- # needs only git and gh, so it sits before the install. Only `verified=true` skips;
138
- # absent/stale/unreadable fall through to the install and the budgeted run below.
139
- - id: zeroci
140
- uses: mutmutco/MMI-Hub/.github/actions/zeroci-verify@{{GATE_BUDGET_SHA}}
141
- with:
142
- command: {{GATE_CMD}}
143
- working-directory: {{GATE_WORKDIR}}
144
- head-sha: ${{ github.event.pull_request.head.sha || github.sha }}
145
118
  - run: {{GATE_INSTALL_CMD}}
146
- if: ${{ steps.zeroci.outputs.verified != 'true' || github.event_name == 'schedule' }}
147
119
  # #3178: the check runs under the org wall-clock budget — a hung suite dies at the ceiling instead
148
120
  # of squatting a runner lane for GitHub's 6h default. ci-audit + the release train enforce this step.
149
- # #6254 (ZeroCI C3): two complementary budget steps. pull_request runs GATE_AFFECTED_CMD (rendered
150
- # equal to GATE_CMD until the knob is set); every other trigger runs the full GATE_CMD. The nightly
151
- # schedule runs even when the zeroci receipt already proves the tree — that is its whole point.
152
- - if: ${{ steps.zeroci.outputs.verified != 'true' && github.event_name == 'pull_request' }}
153
- uses: mutmutco/MMI-Hub/.github/actions/run-with-budget@{{GATE_BUDGET_SHA}}
154
- with:
155
- command: {{GATE_AFFECTED_CMD}}
156
- max-seconds: {{GATE_MAX_SECONDS}}
157
- working-directory: {{GATE_WORKDIR}}
158
- - if: ${{ github.event_name != 'pull_request' && (steps.zeroci.outputs.verified != 'true' || github.event_name == 'schedule') }}
159
- uses: mutmutco/MMI-Hub/.github/actions/run-with-budget@{{GATE_BUDGET_SHA}}
121
+ - uses: mutmutco/MMI-Hub/.github/actions/run-with-budget@{{GATE_BUDGET_SHA}}
160
122
  with:
161
123
  command: {{GATE_CMD}}
162
124
  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. 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.",
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.",
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": true,
16
+ "strict_required_status_checks_policy": false,
17
17
  "required_status_checks": [
18
18
  { "context": "gate" }
19
19
  ]