Repository navigation
Seed ESLint factory work and allow experimental dry-run notices - #67023
Conversation
Seed an idempotent daily worker cohort, document Policy setup and queue diagnostics, paginate remote workflow discovery, and cancel write-capable no-effect Claims. Add explicit compile --allow-experimental while preserving all other dry-run gates. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
✅ PR Code Quality Reviewer completed the code quality review.
|
|
🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅
|
|
✅ Test Quality Sentinel completed test quality analysis. Test Quality Sentinel skipped because pre-fetch PR data was unavailable: unable to fetch test file diff
|
|
✅ Ponytail Reviewer completed successfully! Lean already. Ship.
|
|
✅ Design Decision Gate 🏗️ completed the design decision gate check. See the comment below for the result and any generated ADR draft.
|
🏗️ Design Decision Gate — ADR RequiredThis PR makes significant changes to core business logic (237 new lines across 📄 Draft ADR committed:
📋 What to do next
Once an ADR is linked in the PR body, this gate will re-run and verify the implementation matches the decision. 🔍 Decision inferred from this PR
Note: this PR also bundles unrelated changes (ESLint factory daily cohort admission, paginated remote workflow discovery). Those were treated as secondary to the primary architectural decision above. 📋 Michael Nygard ADR Format ReferenceAn ADR must contain these four sections to be considered complete:
All ADRs are stored in
|
There was a problem hiding this comment.
🔵 Needs a closer look
It introduces autonomous write-capable queue admission and dispatch behavior without complete optional scanner coverage.
0 open findings
What changed in this PR
Adds bounded daily ESLint factory admissions, improves remote workflow discovery, and permits explicit dry-run acknowledgment of experimental notices.
Changes:
- Adds date-keyed factory plans, policy generation, and corrected Claim cancellation behavior.
- Adds paginated, host-aware remote workflow discovery.
- Adds
compile --allow-experimentalwith warning accounting and reporting.
Security review found no confirmed regression, but optional Docker scanners were not run.
| File | Description |
|---|---|
specs/eslint-factory/README.md |
Updates formal-model boundaries. |
pkg/workflow/compiler_validators.go |
Classifies experimental notices. |
pkg/workflow/compiler_types.go |
Stores experimental warning count. |
pkg/workflow/compiler_mutators.go |
Manages the new counter. |
pkg/workflow/compiler_experimental_warning_test.go |
Tests notice accounting. |
pkg/cli/workflows.go |
Adds paginated, host-aware discovery. |
pkg/cli/run_workflow_validation.go |
Reuses centralized discovery. |
pkg/cli/run_workflow_validation_test.go |
Tests pagination and hosts. |
pkg/cli/compile_development.go |
Allows acknowledged notices. |
pkg/cli/compile_development_report.go |
Reports accepted notice counts. |
pkg/cli/compile_development_report_test.go |
Tests dry-run gating. |
pkg/cli/compile_config.go |
Adds configuration option. |
docs/src/content/docs/reference/compilation-process.md |
Documents the new flag. |
docs/src/content/docs/patterns/linter-factory.md |
Documents deployment and diagnosis. |
cmd/gh-aw/main.go |
Registers and propagates the flag. |
cmd/gh-aw/compile_flags_test.go |
Tests flag propagation. |
actions/setup/js/work_queue_documentation.test.cjs |
Tests queue documentation. |
actions/setup/js/eslint_factory_portfolio.test.cjs |
Tests factory plans and policy. |
actions/setup/js/eslint_factory_portfolio.cjs |
Generates plans and policy. |
.github/workflows/eslint-monster.md |
Corrects no-effect cancellation. |
.github/workflows/eslint-monster.lock.yml |
Regenerates monster workflow. |
.github/workflows/eslint-miner.md |
Corrects no-rule cancellation. |
.github/workflows/eslint-miner.lock.yml |
Regenerates miner workflow. |
.github/workflows/eslint-factory-dispatcher.md |
Adds daily admission flow. |
.github/workflows/eslint-factory-dispatcher.lock.yml |
Regenerates dispatcher workflow. |
.github/aw/work-queue.md |
Clarifies queue semantics. |
.github/aw/debug-agentic-workflow.md |
Documents experimental opt-in. |
.changeset/patch-eslint-factory-producer.md |
Records factory fixes. |
.changeset/minor-compile-allow-experimental.md |
Records the new CLI option. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
Skills-Based Review 🧠
Applied /tdd and /codebase-design (pr-triage: new_feature, high-impact files: eslint_factory_portfolio.cjs, eslint-factory-dispatcher.md, compile_development.go, compiler_experimental_warning_test.go, run_workflow_validation.go).
I read the full diff, the new JS module (eslint_factory_portfolio.cjs + its test), the Go experimental-warning accounting (compile_development.go, compile_development_report.go, compiler_mutators.go/compiler_validators.go), and the fetchGitHubWorkflows pagination fix. I also verified claims against the repo: go build ./..., go vet, and the targeted Go test suite (pkg/workflow, pkg/cli, cmd/gh-aw) all pass locally. JS tests could not be executed in this sandbox (npm registry blocked by a self-signed-cert proxy), so I statically traced eslint_factory_portfolio.test.cjs and work_queue_documentation.test.cjs against the implementation instead.
📋 Key Themes & Highlights
Key Themes
- No actionable bugs found. The accepted-experimental-warning threshold is computed/checked in three places (
compile_development.go's two comparisons andcompile_development_report.go's<=); all three agree and are exercised byTestDryRunExperimentalOptIn's table (including a forged"Using experimental feature: ..."string injected into a structured per-result warning, which correctly still fails the gate — good defense against spoofing the opt-in). This logic is spread thin across two files; a future/codebase-designpass could centralize it into one helper to reduce the chance of the three checks drifting apart, but it's not a blocking issue today given the test coverage. - The new
eslint_factory_portfolio.cjsplan/policy builders have solid input validation (repo slug regex, UTC date round-trip check, positive-decimal principal IDs) and the test suite exercises idempotent same-day admission, producer-entitlement rejection, and the dispatcher's actualgithub-scriptpreparation step via a sandboxedAsyncFunctionreplay — a nice example of testing embedded workflow scripts without executing CI. fetchGitHubWorkflows's pagination/host fix (run_workflow_validation.go,workflows.go) replaces an un-paginated 50-workflowgh workflow listwith--paginate --slurpplusrepoutil.NormalizeRepoForAPIfor GHES hosts, matched by a table-driven test using a fakeghscript — correctly covers later-page, disabled-workflow, enterprise-host, suffix-collision (not-eslint-factory-dispatcher.lock.ymlvseslint-factory-dispatcher.lock.yml), and malformed-JSON cases.- Compiled lock file (
eslint-factory-dispatcher.lock.yml) correctly reflects the newbash: [cat ...]tool allowlist and thePrepare the UTC ESLint factory cohortstep — verified by direct inspection, not just trusting the diff.
Positive Highlights
- ✅ Good regression-test design: tests actively try to defeat the new opt-in (forged experimental-notice text, ordinary/aggregate/safe-update/schedule/inventory warnings, scanner failures) and assert the gate still fails for all of them.
- ✅ Docs (
linter-factory.md,work-queue.md,debug-agentic-workflow.md) stay consistent with real CLI subcommands (stats,state,explain,policy,--no-baseline) — spot-checked againstwork_command.go/audit_command.go. - ✅ Clear separation between "uninitialized queue" (deployment failure →
missing_data) and "empty queue" (noop), reinforced consistently across the dispatcher prompt, docs, and worker "cancel vs. noop" wording for write-capable Claims.
No blocking issues identified; approving.
🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · copilot · sonnet50 · 203.8 AIC · ⌖ 14.5 AIC · ⊞ 10.1K
Comment /matt to run again
The live dispatcher failed on installation-token collaborator pull metadata before reading queue refs. Establish contents visibility through actual Git reads, preserve real API denials, and require a readable default ref before reporting an absent queue in a nonempty repository. Add regressions and document the activation/Policy boundary. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
@copilot address the following outstanding work in one pass:
Push the necessary fixes, reply to each listed review thread and resolve it when addressed. Ignore feedback already answered or resolved. Use the pr-finisher skill and stop when only human review or CI remains; do not trigger CI. Sous-chef head: ae0ccdf
|
…eue-debugging Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Regenerate the frontmatter reference to restore the work-queue boolean example tested by CI. Complete the experimental-notice ADR with explicit classification, independent validation gates, alternatives, and regression evidence. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Merged latest |
…-es-linter-queue-debugging
Keep the concurrent null-format assertion and verify the boolean example restored by regeneration, rather than masking a stale documentation artifact. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
@copilot address the following outstanding work in one pass:
Push the necessary fixes, reply to each listed review thread and resolve it when addressed. Ignore feedback already answered or resolved. Use the pr-finisher skill and stop when only human review or CI remains; do not trigger CI. Sous-chef head: de01388
|
…eue-debugging # Conflicts: # go.sum Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Merged latest |
|
🎉 This pull request is included in a new release. Release: |
The ESLint factory dispatcher had no recurring producer and could report an uninitialized queue as an empty backlog. Make it admit a bounded daily cohort before scheduling, while preserving native queue authority and administrator-controlled deployment.
Changes
compile --allow-experimentalacknowledgment for built-in experimental-feature notices. Preserve warning counts and visible reporting; other warnings, security validation, model diagnostics, and scanner failures remain fatal.mainand preserve concurrent Copilot upgrades to Go 1.26.9 andgolang.org/x/netv0.60.0. Regenerate the stale frontmatter reference and assert bothwork-queue: trueandwork-queue: nullinstead of masking the missing boolean example.Architecture decision
ADR: ADR-67023: Acknowledge Experimental-Feature Notices via an Explicit Compile Flag.
The completed decision record covers operator-requested acknowledgment, fixed-table classification, synchronized counters, independent fatal diagnostics, alternatives, and regression evidence. Its status remains Proposed pending maintainer acceptance.
Validation
make lintpassed on the combined branch../gh-awand recompiled all 333 normal workflows after both integrations.GOTOOLCHAIN=go1.26.9 make security-govulncheckpassed: zero reachable vulnerabilities and zero vulnerable imported packages. One advisory in a required module is informational because no affected code path was found../gh-aw compile ... --dry-run --allow-experimental --jsonpassed with four valid workflow results, three acknowledged notices, and shellcheck coverage. Committed locks are normal production compilations, not diagnostic locks.Known baseline failure: final
make agent-report-progressstill exits nonzero on unchanged custom Go lint findings involving diagnostic-print error handling, function lengths, and existing slice indexing. Standard lint and impacted tests passed. No lint rules, assertions, or checks were suppressed.CI hand-off: CI on the final pushed HEAD remains unverified. A maintainer must re-trigger CI before merge; the earlier JavaScript artifact and Go-advisory failures have been corrected and verified locally.
Deployment boundary
Two explicitly authorized live dispatcher runs were performed using local
./gh-aw. Run 37860259692 exposed the installation-token visibility misclassification. After the fix, run 37861825738 passed that boundary and failed closed withwork_queue_policy_missingduring activation.No Policy was installed, worker identity invented, queue protection changed, native Work admitted, Claim created, or worker launched. End-to-end admission, launch, Result, and Release remain unverified. Deployment still requires administrator-installed Policy, verified principals, immutable worker revisions, and the documented writer protections. Both one-run live-test authorizations are consumed; this finishing pass did not dispatch workflows.