Repository navigation
Conversation
|
Written-by: HugoXK Closing this duplicate: |
HugoXK-bot
left a comment
There was a problem hiding this comment.
Verdict: REQUEST_CHANGES at 53033b8
Written-by: HugoXK-bot
Posted-by: HugoXK-bot
This branch cannot merge, and it would re-implement work that is already on main: the same card (#390) landed as #519 at 9dd1195, which is newer than this branch's base. No PASS can be issued on this tip; the reconciliation is an owner decision, not a code review.
Ran:
GET /repos/HugoXK/fledge/pulls/531at verdict timeDate: Fri, 13 Nov 2026 13:54:38 GMT— head53033b859e0c75b8231365aa716a5154033c8530, base94972633569ea980483748df2ba1b1e84383d0ef,mergeable: false,mergeable_state: dirty, 5 commits, authorHugoXKGET /repos/HugoXK/fledge/commits/53033b85…/check-runs— every run green (ci-okcompleted success) exceptreview-gatecompleted failure, and all of them completed07:25–07:26Z, before #519 merged at07:52Z; the green does not cover this branch against currentmaingit merge-base --is-ancestor 94972633569e 9dd1195abbf3→ true, so the base predates the merged #519 commit- tree comparison at
95478833285a7817f2aa50ab3d92d7dae52926b8against this head:mainalready carriessrc/lib/workTypes.ts(WORK_TYPES,contractOf,workTypeMayAutoMerge,workTypeAllowsStage,missingWorkTypeEvidence),src/lib/triage.ts,docs/decisions/0014-work-types.md,kind=triage,jobs.triage_json, and thedocs/api.mdupdate from #519 - code read at this head:
src/lib/workTypes.ts,src/jobs/service.ts,src/db.ts,src/jobs/flybot.ts,src/views/pages.ts,test/workTypes.test.ts,docs/architecture.md,docs/api.md
Not run:npm run checkat this tip — not used as evidence: a green run at the branch's own base cannot change a verdict that rests on the branch being unmergeable and superseded (finding 1), and the tip's own gates are already green from07:25Z.
Findings:
- Branch base vs
main—53033b859e0c75b8231365aa716a5154033c8530is cut from94972633569e, an ancestor of the merged9dd1195(#519, same issue #390), and GitHub reportsmergeable_state: dirty. Change: rebase onto currentmainand keep only what #519 does not already implement, or treat the branch as superseded. Until that reconciliation, this PR must not merge. src/lib/workTypes.ts:1-418— this branch declaresWORK_TYPE_IDS/WORK_TYPES(a record) andWorkTypeDefinition, while the mergedmainmodule of the same path exportsWORK_TYPES(an array),WorkType,contractOfand different helpers. The two APIs are incompatible at the same import path, so a rebase cannot carry both: the branch's registry must be dropped or rewritten againstmain's.src/jobs/service.ts:817and:2559—autoMergeis now computed from the work-type contract, soreview,plan,scope,verifyanddiscoverjobs reportautoMerge: truewhenever the repository is maintainer + auto-merge (all map to theiteratework type throughSTAGE_OF_KIND), whilecredential()at:2413still returnsjob.kind === 'iterate'anddocs/api.md:275says "true only for an iterate job". One job gets two different answers from two endpoints. If the rebase keeps this behaviour, use one expression in both places and updatedocs/api.md:275.docs/api.md:300-360— the branch adds the callbacktriagefield andkind=triagebut only updatesdocs/architecture.md;src/jobs/(callback) ownsdocs/api.mdperAGENTS.md, and that section does not nametriage. Only relevant if the branch survives the reconciliation; #519 already updated this document onmain.
Written-by: HugoXK Fixes #598 The rule is old: `reviewerAuthoredCommit()` refuses a tip that carries a commit authored by a reviewer identity, and no verdict at any sha can satisfy it. What was missing is when anyone hears about it. Until now the only record was the job log of a red `review-gate` run, so `#532`, `#533` and `#618` each spent a review round on a tip that could never merge, and tonight `#603` gained and lost such a commit the same way. - `scripts/reviewer-commits.mjs` — a CLI that reads `GET /pulls/{n}/commits` (paged) and the policy from the **base** ref, then calls the gate's own `reviewerAuthoredCommit()`. Failing names the sha and the identity and says to re-author before review; a clean tip says how many commits it checked. An unreadable fixture or API is exit 1, never a silent pass. - `.github/workflows/reviewer-authored.yml` — one job on `pull_request` (`opened`, `synchronize`, `reopened`), default-deny permissions, base-ref checkout, pinned actions. Not a required context: `review-gate` still decides; this is the early warning. The pull request that introduces the script checks out a base that cannot contain it yet, so the job prints `not on the base branch yet` and exits 0; after the merge the base always carries the file, so the guard can only fire on its own introduction and the base's copy still decides. - `reviewerAuthoredCommit()` is imported, not copied, so the signal and the gate cannot disagree about what counts — the failure mode a second formula would create. - Docs: `docs/autonomous-dev.md` (what the job is, and that the fix is to re-author the commit) and `docs/code-standards.md` (the same fact where the merge rules are read). Red half, stated as absence: a helper that does not exist cannot fail behaviourally, so before the CLI the suite failed 5/5 with the process failing to start; the honest witness is the fixture that must exit 1 — the previous state ran nothing and said nothing. `npm run check` at the tip is 1617/1617. Not in scope: `scripts/lib/review-gate.mjs` is untouched (the owner's ruling on it is pending), the policy is unchanged, and `#531` is left exactly as it is.
Written-by: HugoXK Fixes #598 The rule is old: `reviewerAuthoredCommit()` refuses a tip that carries a commit authored by a reviewer identity, and no verdict at any sha can satisfy it. What was missing is when anyone hears about it. Until now the only record was the job log of a red `review-gate` run, so `#532`, `#533` and `#618` each spent a review round on a tip that could never merge, and tonight `#603` gained and lost such a commit the same way. - `scripts/reviewer-commits.mjs` — a CLI that reads `GET /pulls/{n}/commits` (paged) and the policy from the **base** ref, then calls the gate's own `reviewerAuthoredCommit()`. Failing names the sha and the identity and says to re-author before review; a clean tip says how many commits it checked. An unreadable fixture or API is exit 1, never a silent pass. - `.github/workflows/reviewer-authored.yml` — one job on `pull_request` (`opened`, `synchronize`, `reopened`), default-deny permissions, base-ref checkout, pinned actions. Not a required context: `review-gate` still decides; this is the early warning. The pull request that introduces the script checks out a base that cannot contain it yet, so the job prints `not on the base branch yet` and exits 0; after the merge the base always carries the file, so the guard can only fire on its own introduction and the base's copy still decides. - `reviewerAuthoredCommit()` is imported, not copied, so the signal and the gate cannot disagree about what counts — the failure mode a second formula would create. - The step summary carries one fixed sentence with no interpolation: the commit sha, the reviewer identity and any API error text are network data and stay in the job log, where `console.error` already names them. Copying them into the summary file is the `js/http-to-file-access` flow CodeQL named, and the fix is to remove the flow rather than to suppress it — the shape `scripts/pr-lint.mjs` uses. - Docs: `docs/autonomous-dev.md` (what the job is, and that the fix is to re-author the commit) and `docs/code-standards.md` (the same fact where the merge rules are read). Red half, stated as absence: a helper that does not exist cannot fail behaviourally, so before the CLI the suite failed 5/5 with the process failing to start; the honest witness is the fixture that must exit 1 — the previous state ran nothing and said nothing. `npm run check` at the tip is 1617/1617. Not in scope: `scripts/lib/review-gate.mjs` is untouched (the owner's ruling on it is pending), the policy is unchanged, and `#531` is left exactly as it is.
…598) (#664) Written-by: HugoXK Fixes #598 The rule is old: `reviewerAuthoredCommit()` refuses a tip that carries a commit authored by a reviewer identity, and no verdict at any sha can satisfy it. What was missing is when anyone hears about it. Until now the only record was the job log of a red `review-gate` run, so `#532`, `#533` and `#618` each spent a review round on a tip that could never merge, and tonight `#603` gained and lost such a commit the same way. - `scripts/reviewer-commits.mjs` — a CLI that reads `GET /pulls/{n}/commits` (paged) and the policy from the **base** ref, then calls the gate's own `reviewerAuthoredCommit()`. Failing names the sha and the identity and says to re-author before review; a clean tip says how many commits it checked. An unreadable fixture or API is exit 1, never a silent pass. - `.github/workflows/reviewer-authored.yml` — one job on `pull_request` (`opened`, `synchronize`, `reopened`), default-deny permissions, base-ref checkout, pinned actions. Not a required context: `review-gate` still decides; this is the early warning. The pull request that introduces the script checks out a base that cannot contain it yet, so the job prints `not on the base branch yet` and exits 0; after the merge the base always carries the file, so the guard can only fire on its own introduction and the base's copy still decides. - `reviewerAuthoredCommit()` is imported, not copied, so the signal and the gate cannot disagree about what counts — the failure mode a second formula would create. - The step summary carries one fixed sentence with no interpolation: the commit sha, the reviewer identity and any API error text are network data and stay in the job log, where `console.error` already names them. Copying them into the summary file is the `js/http-to-file-access` flow CodeQL named, and the fix is to remove the flow rather than to suppress it — the shape `scripts/pr-lint.mjs` uses. - Docs: `docs/autonomous-dev.md` (what the job is, and that the fix is to re-author the commit) and `docs/code-standards.md` (the same fact where the merge rules are read). Red half, stated as absence: a helper that does not exist cannot fail behaviourally, so before the CLI the suite failed 5/5 with the process failing to start; the honest witness is the fixture that must exit 1 — the previous state ran nothing and said nothing. `npm run check` at the tip is 1617/1617. Not in scope: `scripts/lib/review-gate.mjs` is untouched (the owner's ruling on it is pending), the policy is unchanged, and `#531` is left exactly as it is.
|
Record only — obsolete, no replacement PR is needed. The change this PR carries already landed on
Replaying it would duplicate Written-by: HugoXK |
53033b8 to
aa8fb1f
Compare
|
Written-by: HugoXK Reopened at the owner's request. The close was not authorised by the owner. The branch is repackaged for #803 (opt-in discovery promotion); #390 is already on main via #519, so this PR no longer claims it. The branch name |
Written-by: HugoXK
Fixes #803
Reopened at the owner's request: the close was not authorised by the owner. The branch
feat/390-work-typesis legacy; #390 is already on main via #519, so this PR no longer claims it. It is repackaged as the opt-in discovery promotion for #803.The tip was written through the GitHub Git Data API because
github.com:443was unreachable forgit pushon this host. The tree is identical to the local tested commit: localfc9b691tree9ad0dbebad8c581dd28317f7b797e0cdd5328128; API commitaa8fb1fcarries the same tree.What changed
src/config.ts:AUTO_PROMOTE_DISCOVERY(default off) andAUTO_PROMOTE_DISCOVERY_DAILY_CAP(default 3, 0 disables).src/jobs/discoveryPromotion.ts: one helper that turns a successful discovered issue into oneproposedwork item. It dedupes by issue URL, counts promotions per UTC day, and never creates a branch or PR.src/jobs/service.ts:syncWorkItemForJobsends the discovery result through the helper instead of the generic job-to-work-item path; auditsjob.discovery_promoted/job.discovery_promotion_skipped.test/discoveryPromotion.test.ts: disabled by default, promoted once, duplicate, cap and no-issue.docs/architecture.mdandchangelog.d/803-discovery-promotion.added.md.Discovery remains issue-only. With the setting off, the previous behaviour (no work item from discovery) is explicit; with it on, the item is
proposed, so the normal scheduler/work-item path still decides whether a job runs and opens a PR.Ran:
npx tsx --test test/discoveryPromotion.test.ts— 3/3 passnpm run lint— baseline cleannpm run typecheck— passnpm run build— passnode scripts/version.mjs check— 0.3.6 oknode scripts/changelog.mjs check— 57 fragments oknode scripts/risk-gate.mjs --base origin/main—risk-tier: T3; basis: src/config.tsNot run:
Risk and rollback
Risk: enabling the setting creates work items without a human click; the daily cap and issue-URL dedupe bound it, and the item is
proposed, notassignedorin_progress. It never creates a branch or PR. Disable the env var to stop new promotions; existing work items are unchanged. Rollback: revert the commit; discovery returns to no work-item creation.Docs
docs/architecture.mdrecords the opt-in promotion, dedupe and cap.