Skip to content

fix(ops): make named operator checks fail on blocked readiness with advisory aliases explicitly named - #133

Merged
nish3451 merged 3 commits into
mainfrom
fix/operator-checks-strict-20260813b
Aug 13, 2026
Merged

fix(ops): make named operator checks fail on blocked readiness with advisory aliases explicitly named#133
nish3451 merged 3 commits into
mainfrom
fix/operator-checks-strict-20260813b

Conversation

@nish3451

Copy link
Copy Markdown
Collaborator

What

The named readiness/operator npm commands previously ran their check scripts without --strict, so blocked readiness exited 0 every time — a false-green for operators. This change wires --strict into each named command so blocked readiness fails loudly with no hidden flag, and preserves report-only behavior under explicitly named :advisory aliases that required gates never use.

Commands made strict by default

  • client:checkcheck-client-readiness.mjs --strict
  • prospect:checkcheck-prospect-readiness.mjs --strict
  • send:setupcheck-outbound-sender-setup.mjs --strict
  • prospect:site-checkcheck-recording-sites.mjs --strict
  • market:paritycheck-market-parity-readiness.mjs --strict
  • market:proof-checkcheck-market-proof-run.mjs --strict

Each keeps an explicitly named <command>:advisory alias running the script without --strict (report only).

Regression test

New scripts/test-operator-check-strictness.mjs, wired into both npm run ci and npm run test, builds blocked fixtures (blocked client, blocked prospect, unreachable site, no proof rows) and asserts:

  • every named strict command exits nonzero on blocked fixtures, without any hidden flag
  • advisory aliases exit zero on the same blocked state (report only)
  • green fixtures (fully prepared prospect, captured proof run, empty queue) exit zero
  • the ci/test gates run the detector and never invoke :advisory aliases

Also fixed check-client-readiness.mjs and check-prospect-readiness.mjs to parse their positional path argument correctly when --strict is supplied by the npm script.

Validation

  • node scripts/test-operator-check-strictness.mjs → passed
  • node scripts/test-active-operator-surfaces.mjs → passed
  • node scripts/test-client-readiness-contract.mjs → passed
  • node scripts/test-outbound-send-readiness.mjs → passed
  • node scripts/test-direction-proof-gate.mjs → passed
  • node scripts/test-service-engine.mjs → passed
  • Full operator suite (10 scripts) → all passed
  • Named strict commands on the real repo (blocked state): client:check 1, prospect:check 1, send:setup 1, market:parity 1, market:proof-check 1 (nonzero); prospect:site-check 0 (no queued prospects — green state)
  • Advisory aliases: send:setup:advisory 0, prospect:site-check:advisory 0, market:parity:advisory 0
  • npm run ci and npm run test reach and pass the new strictness test; the chain stops later at check-retention-automation.mjs, which fails identically on pristine origin/main (pre-existing: requires the canonical main checkout to point at the TinyStudio repo)

…dvisory aliases explicitly named

The named readiness/operator npm commands (client:check, prospect:check,
send:setup, prospect:site-check, market:parity, market:proof-check) ran the
underlying check scripts without --strict, so blocked readiness exited 0
every time. Wire --strict into each named command so a blocked fixture
fails loudly with no hidden flag, keep report-only behavior under
explicitly named :advisory aliases, and add a fixture-driven strictness
test (blocked fixtures fail, green fixtures pass, advisory aliases exit 0)
to the required ci/test gates.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@nish3451, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 7 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: dbf2c886-e554-4a80-9f6f-925aba2f4284

📥 Commits

Reviewing files that changed from the base of the PR and between 17f364c and 4d55816.

📒 Files selected for processing (4)
  • package.json
  • scripts/check-client-readiness.mjs
  • scripts/check-prospect-readiness.mjs
  • scripts/test-operator-check-strictness.mjs

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands.

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 50fc6614e4

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +85 to +88
delete agencyConfig.senderEmail
delete agencyConfig.senderPhysicalAddress
delete agencyConfig.dkimSelector
delete agencyConfig.senderDomain

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Override sender defaults instead of deleting keys

When DNS is unavailable or silently drops queries, deleting these fields does not prevent network access because agencyConfig() merges the fixture over defaults that still provide senderEmail: "hello@tinystudio.io". Both send:setup and market:parity therefore perform DNS lookups; the new required CI test can hit its 120-second timeout, leave descendant checker processes running, and even treat the resulting status: null as the expected nonzero verdict. Set the sender fields to explicit empty values so the fixture actually overrides the defaults and remains deterministic.

Useful? React with 👍 / 👎.

Comment thread package.json
Comment on lines +9 to +10
"client:check": "node scripts/check-client-readiness.mjs --strict",
"client:check:advisory": "node scripts/check-client-readiness.mjs",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Point draft readiness workflow at advisory aliases

When a prospect or client is still being prepared, growth-brain/quality/readiness-gates.md tells operators to run these base commands, separately reserves explicit strict invocations for before sending, and states that draft status is acceptable. Injecting --strict here makes that documented draft workflow exit 1, while the new advisory aliases are never mentioned. Update the draft examples to use client:check:advisory and prospect:check:advisory, and remove the now-redundant explicit strict examples.

Useful? React with 👍 / 👎.

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@nish3451
nish3451 merged commit c617364 into main Aug 13, 2026
2 checks passed
nish3451 pushed a commit that referenced this pull request Aug 13, 2026
…le with main after PRs #135/#104/#99/#112/#100/#105)

The PR #130 branch had already been reconciled with origin/main through
c617364 (PRs #131 + #133/#134/#132/#116). Since then origin/main moved to
d4f3ef4 with six more merges (#135 #104 #99 #112 #100 #105). Pull them in
so PR #130 can be reviewed against current main without weakening the
capture/rollback/reverification implementation or the PR #131 fail-closed
missing-secret gate.

The merge resolved cleanly:
- PR #130 capture/rollback logic (publish-public-site.mjs canonical_deployment,
  rollbackTo, restored identity re-verify, accept-again) is intact.
- PR #130 test file (scripts/test-pages-release.mjs) is intact and wired
  into the npm ci/test scripts.
- PR #131 fail-loud missing-secret workflow step in
  .github/workflows/deploy-public-site.yml is preserved byte-for-byte.
- The new origin/main changes touch operator surfaces and the deploy
  bundle prep; none of them modify the publish-public-site.mjs rollback
  contract or the Pages token gate, so there were no conflict markers.
nish3451 added a commit that referenced this pull request Aug 20, 2026
…on main (#130/#132/#133) (#197)

Record the decision for the inbox backlog line
(tinystudio-in priority=normal AUG13-16). Investigation shows every item is
already in main:

- truthful-reversible-pages-release: LANDED via PR #130 (ea9eab2); release
  lane fails truthfully on missing credentials and rolls back bad uploads
  (scripts/test-pages-release.mjs passes 38/38).
- service-backup-restore-roundtrip: LANDED via PR #132 (4a7f442); restore
  mode in service-state-backup.mjs.
- operator-checks-strict: LANDED via PR #133 (c617364); named operator
  checks fail on blocked readiness with advisory aliases explicitly named.

No code change required; this closes the backlog by recording the decision.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant