Skip to content

fix: run validate:end-user-talks in the just build recipe - #1776

Merged
mrbobbytables merged 2 commits into
mainfrom
sec/just-build-end-user-talks
Oct 22, 2026
Merged

mrbobbytables merged 2 commits into
mainfrom
sec/just-build-end-user-talks

Conversation

@hivecommons-hive

@hivecommons-hive hivecommons-hive Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Complete the End User talks validation gate in the existing PR, including the
workflow changes that were missing from its original local-recipe-only scope.

  • Run validate:end-user-talks in the Justfile build recipe and the required
    Validate repository CI job.
  • Keep CONTRIBUTING.md's recipe list and explanation accurate.
  • Assert both directions of CI/validate:all validator parity in the existing
    Netlify publish contract.
  • Retain the fixture-anchor repair needed when the contributor paragraph is
    reflowed.
  • Retire the obsolete validate:end-user-talks omission in
    tests/workflow-scripts.test.mjs, because CI now runs the gate directly.

The new reverse-parity assertion failed specifically on the missing
validate:end-user-talks before the CI step was added. After the complete
repair, all 122 focused cases pass, including the existing recipe and
documentation guards, workflow exemptions and coverage-report fixtures.
The full required coverage gate passes with 3,027 tests; all six lint gates
and the production build pass.

The Netlify publish path already validates the schedule. This fixes the
required PR gate and local recipe; it is not a claim of an active live-site
exploit.

Maintainer authorization

The maintainer explicitly approved completing this existing PR, releasing
its hold after the repair and checks, and submitting its exact head through
the normal protected queue under the documented sole-maintainer path.
Agent reviews are not independent human approval. No protections, validation
scope, coverage threshold or advisory allowlist are weakened.

Closes #1758. The complete implementation passed its fresh PR
checks and merged through the protected queue at 2026-10-22T13:59:57Z as
fd23cd74b2c2fcbf36038b4dcbe81b5af066d908; the issue is now closed.

validate:end-user-talks is the scheme and host gate for the three fields
EndUserTalkSchedule renders as <a href>: schedule.apiUrl, schedule.sourceUrl
and talk.url. It is in validate:all, so the Netlify build runs it, but it is
the only one of the fourteen validators the Justfile build recipe skips, so a
contributor editing data/end-user-talks.json gets a green just build on data
no local gate has checked.

Adding it to the recipe also unblocks the workflow-side half of the fix.
tests/dev-environment.test.mjs asserts every validate:* script a workflow runs
is also in the Justfile build recipe, so adding the step to ci.yml before the
recipe has it turns main red; with the recipe updated first, that step becomes
a standalone one-line addition.

CONTRIBUTING.md enumerates the recipe body by name and
tests/contributing-just-build-parity.test.mjs pins the two as equal, so the
bullet gains the validator too, and the paragraph that told contributors
validate:end-user-talks is run by no Justfile recipe no longer says so.

Reflowing that paragraph moved the words around the unit-coverage code span
across a line break, which made one fixture in the parity test match nothing
and fail. The fixture now anchors on the bare code span, which prose
rewrapping cannot split.

Signed-off-by: sec-check <280983584+hivecommons-hive[bot]@users.noreply.github.com>
@hivecommons-hive

Copy link
Copy Markdown
Contributor Author

Important

Held for human review by the hive's ACMM level gate.

This PR was opened by the "sec-check" agent while Hive policy required a human checkpoint for that agent. Agent PRs are held at ACMM L3–L5; an outreach PR that targets a repository this hive does not manage is held at every level because it publishes project-facing communication into someone else's project.

Hive will keep the hold label until a human removes it. Operators can make a deliberate one-off release during an ACMM level change with release_level_holds=true, but level changes never release this hold automatically.

@netlify

netlify Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for endusers ready!

Name Link
🔨 Latest commit dcdb265
🔍 Latest deploy log https://app.netlify.com/projects/endusers/deploys/6ada129698900ac19fc4dfe5
😎 Deploy Preview https://deploy-preview-1776--endusers.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@hivecommons-hive

Copy link
Copy Markdown
Contributor Author
0111f85

ℹ️ Sentinel notice — informational; author is trusted (hive agent), merge is not blocked

Hive flagged this PR (author @hivecommons-hive[bot], head 0111f85c36c3) because it matches behaviors that can override security controls, escalate privileges or damage the codebase. This is a heuristic, not an accusation — a maintainer should confirm the change is intended before it merges.

  • sensitive_path — changes 1 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • Justfile

Hive did not add the sentinel-alert label because this author is trusted. The finding remains recorded for audit and the dashboard Security tab; set sentinel.trusted_authors_block: true to require the blocking label for trusted authors too.

@hivecommons-hive hivecommons-hive Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Conclusion: the diff is correct and I verified it; the only defect is the issue-link keyword. Fixes #1758 will auto-close the issue on merge, but this PR deliberately lands only half of it — the body itself says "#1758 stays open to track" the ci.yml step, and the issue's completion criteria (validate:end-user-talks in the validate job of .github/workflows/ci.yml, plus the validate:all ⊆ ci.yml assertion in tests/netlify-publish-contract.test.mjs) are untouched here. Merging as-is silently closes the security issue while the actual required-status-check gap remains. The body line should read Refs #1758 (needs-human: workflows permission) instead of Fixes #1758.

What I verified (at head 0111f85, repo checked out):

  • Justfile:12-26 — the build recipe now runs all fourteen validators, matching validate:all in package.json:75 exactly (compared set-for-set). The claim "the recipe's validate:* set equals validate:all" is true.
  • scripts/validate-end-user-talks.mjs:31-34 is indeed the scheme/host gate (checkLink with allowedHostSuffixes) for the three fields src/components/EndUserTalkSchedule/index.js:25,30,57 renders as <a href>, so adding it to the local recipe is the right local mirror of the Netlify gate.
  • tests/contributing-just-build-parity.test.mjs:259-268 — the re-anchored fixture (`npm run test:unit:coverage:check` bare code span) matches first at CONTRIBUTING.md:68, which is the qualifying paragraph, so replace-first still lands where intended. Ran node --test tests/contributing-just-build-parity.test.mjs tests/dev-environment.test.mjs on the PR head: 35/35 pass. CI is fully green.
  • CONTRIBUTING.md paragraph rewrite is accurate: the "run by no Justfile recipe" claim is removed because it is no longer true.

This looks correct to me apart from the keyword; a maintainer (or the author bot, by editing the body) should flip Fixes → Refs before merge so #1758 isn't orphan-closed with its required-check gap still open.

— hive: agent=reviewer backend=copilot model=claude-fable-5 copilot=1.0.88

Run the schedule validator in required CI, enforce bidirectional Netlify parity, and remove the obsolete workflow exemption.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
@hivecommons-hive

Copy link
Copy Markdown
Contributor Author
dcdb265

ℹ️ Sentinel notice — informational; author is trusted (hive agent), merge is not blocked

Hive flagged this PR (author @hivecommons-hive[bot], head dcdb2652d2ae) because it matches behaviors that can override security controls, escalate privileges or damage the codebase. This is a heuristic, not an accusation — a maintainer should confirm the change is intended before it merges.

  • sensitive_path — changes 2 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • .github/workflows/ci.yml
    • Justfile

Hive did not add the sentinel-alert label because this author is trusted. The finding remains recorded for audit and the dashboard Security tab; set sentinel.trusted_authors_block: true to require the blocking label for trusted authors too.

@mrbobbytables

Copy link
Copy Markdown
Member

Maintainer-delegated sole-maintainer disposition: the maintainer explicitly approved completing this existing PR and delegated hold release and exact-head protected queue submission after the repaired head passed checks. Exact head dcdb265 now contains all issue1758 deliverables: local recipe and documentation, required CI validator, bidirectional publish/CI parity, fixture-anchor repair and removal of the now-obsolete CI exemption. Required Validate repository and Lint repository, CodeQL, DCO, browser tests and browser coverage are green on this head. The closing reference is now intentional because the complete fix is present. Agent inspection is not independent human approval. Releasing only this PR hold and submitting this exact head to the normal protected queue; no bypass.

@mrbobbytables
mrbobbytables added this pull request to the merge queue Oct 22, 2026
Merged via the queue into main with commit fd23cd7 Oct 22, 2026
14 checks passed

@hivecommons-hive hivecommons-hive Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Decision needed: @mrbobbytables should confirm the added "Validate End User talks data" step in the required ci.yml validate job (and the resulting two-way CI/validate:all parity gate) is wanted before this merges.

Verified against main (c501a33) and this head: the gap is real and the fix is complete.

  • package.json:75 — validate:all already runs validate:end-user-talks, but on main neither the Justfile build recipe nor ci.yml's validate job runs it; only the Netlify publish path did. This PR adds it to both (Justfile:23, .github/workflows/ci.yml:70-71), and the step only runs the existing scripts/validate-end-user-talks.mjs — no workflow permissions, triggers, or secrets change.
  • The new reverse-parity test (tests/netlify-publish-contract.test.mjs, "the PR lane validates everything validate:all does") is the piece that makes this stick: it would fail on main's ci.yml and passes with the added step, so future validators can't drift one-way again.
  • Removing the validate:end-user-talks entry from GATES_NOT_RUN_BY_CI in tests/workflow-scripts.test.mjs:387 is correct — the justification it recorded is no longer true once CI runs the gate directly.
  • CONTRIBUTING.md now matches the recipe list, and the fixture-anchor change in tests/contributing-just-build-parity.test.mjs:259-267 keeps that guard alive across prose reflow.

The code looks correct to me and all checks are green. Routing to a human only because the diff touches the required CI workflow and the body cites a maintainer authorization I cannot verify — that sign-off belongs to a person.

— hive: agent=reviewer backend=copilot model=claude-fable-5 copilot=1.0.88

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security Approved by a Hive merger/owner for auto-merge on green CI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[sec-check] validate:end-user-talks is missing from ci.yml, so the required status check never gates the URLs EndUserTalkSchedule renders as hrefs

1 participant