docs(#5402): add CEL trigger / normalized-event guidance - #5404
Conversation
E2E tests are runningAuthorization passed for this commit. See the E2E Tests workflow for results. |
|
🤖 Finished Review · ✅ Success · Started 9:25 AM UTC · Completed 9:38 AM UTC |
Site previewPreview: https://131249c3-site.fullsend-ai.workers.dev Commit: |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
ReviewFindingsMedium
Previous runReviewFindingsMedium
Low
Previous run (2)ReviewFindingsMedium
Low
Previous run (3)ReviewFindingsMedium
Low
Previous run (4)ReviewFindingsMedium
Low
Previous runReviewFindingsMedium
Low
Labels: PR adds documentation guidance for BT feature files and CEL triggers to AGENTS.md Previous run (5)ReviewFindingsMedium
Low
Previous run (6)ReviewFindingsMedium
Low
Labels: PR adds documentation guidance for BT feature files and CEL triggers to AGENTS.md |
waynesun09
left a comment
There was a problem hiding this comment.
Multi-agent review pass (3 independent reviewers) on this docs-only AGENTS.md addition. Focus was factual accuracy of the normalized-event/ADR claims and completeness of the transition-kind vocabulary table, cross-checked against the actual schema, ADRs, and dispatch code.
1 HIGH: the ADR 0054 authorization rationale for preferring label_changed triggers doesn't hold up against ADR 0061 and the normalized-event README, both of which state CEL triggers express routing only, not permission policy.
4 MEDIUM: an unconfirmed "premature decision" framing of the same label_changed recommendation; two more transition kinds (comment_edited, comment_deleted) missing from the vocabulary table beyond the already-flagged updated; the synchronized row missing its semantic meaning; and a suggestion to also cover entity.kind/sub-object mismatches as a related silent-trigger-mismatch source.
Two additional findings from this pass (missing updated row, and missing severity level on the new review-guidance subsection) duplicate points already raised in the existing review thread and were not reposted.
|
/fs-fix |
|
🤖 Finished Fix · ✅ Success · Started 6:58 PM UTC · Completed 7:05 PM UTC |
🔧 Fix agent — iteration 1 (human-triggered)Addressed 4 of 8 review findings with code fixes: added missing Fixed (4):
Disagreed (4):
Tests: passed Updated by fullsend fix agent |
- Add missing `updated` transition kind to vocabulary table - Add semantic meaning to `synchronized` row (head branch new commits) - Rewrite `label_changed` rationale: correctly describe as canonical routing pattern (ADR 0054) rather than authorization mechanism; add ADR 0061 cross-reference clarifying CEL triggers express routing only - Add medium-severity level to review guidance subsection for consistency with other "When reviewing" blocks Addresses review feedback on #5404
|
/fs-review |
|
🤖 Finished Review · ✅ Success · Started 7:12 PM UTC · Completed 7:26 PM UTC |
|
/fs-fix CI status: all checks (gate, e2e, behaviour, functional-tests, test, build) are passing on I resolved the 3 threads this round's fix demonstrably addressed (verified against the current file): The following threads are still open and need another pass. Full original text below (not paraphrased) so the fix is grounded in the actual finding, plus notes on where the previous response's reasoning didn't hold up against the source. [HIGH] — ADR 0054 rationale for preferring
|
|
🤖 Finished Fix · ✅ Success · Started 7:35 PM UTC · Completed 7:41 PM UTC |
🔧 Fix agent — iteration 2 (human-triggered)Addressed all 4 open review findings. (1) Dropped the incorrect ADR 0054 / implicit-authorization framing and reframed label_changed preference as observed convention. (2) Changed prescriptive 'should use' to descriptive 'existing scenarios use'. (3) Added comment_edited and comment_deleted to vocabulary table. (4) Added entity-kind and sub-object pitfall guidance. Fixed (4):
Tests: passed Updated by fullsend fix agent |
… table - Remove "implicit authorization signal" / ADR 0054 rationale from trigger-patterns subsection; reframe label_changed preference as observed project convention per dispatch.feature - Add comment_edited and comment_deleted rows to vocabulary table (both are real TransitionKind constants emitted at runtime) - Add entity-kind and sub-object pitfall guidance alongside the existing kind-name pitfall callout Addresses review feedback on #5404
|
/fs-review |
|
🤖 Finished Review · ✅ Success · Started 7:48 PM UTC · Completed 8:02 PM UTC |
waynesun09
left a comment
There was a problem hiding this comment.
Independent 4-agent review squad pass (two Claude-based reviewers, one Grok-based, one Codex-based) as a final gate check after 3 prior fix/review rounds. Each reviewer worked from a separate fresh clone of the head commit and was instructed not to trust prior rounds' resolutions at face value, including re-deriving the comment_edited/comment_deleted and JSON-schema-validation claims from source directly.
All 4 independently verified as accurate: the 13-row transition-kind vocabulary table (1:1 match against internal/normevent/event.go's TransitionKind constants and internal/harnessdispatch/input/ghaevent.go's actual action mappings), the synchronize/synchronized naming pitfall, the dispatch.feature citation for label_changed/review_submitted BT scenario patterns, and — confirmed by all 4 independently plus my own check — that no JSON-schema-validation library is imported or wired into any runtime path anywhere in this repo, so the comment_edited/comment_deleted footnote's framing (Go-implementation-only, not a validation failure) is correct as written.
However, 3 of 4 reviewers (missed by the 4th, who verified only half of the underlying compound claim) independently converged on a HIGH-severity factual error in the "Trigger patterns for BT scenarios" passage added during the round-2 fix, and all 4 independently flagged a related MEDIUM-severity gap in the entity-kind pitfall guidance. I verified both directly against source myself before posting. Details inline below.
|
/fs-fix Independent 4-agent review squad pass (final gate check, round 4) found 1 HIGH and 2 MEDIUM findings, posted as inline review comments on this PR. Verbatim findings to address: [HIGH] — "authorization ... is independent of which
|
|
🤖 Finished Fix · ✅ Success · Started 9:09 PM UTC · Completed 9:15 PM UTC |
🔧 Fix agent — iteration 4 (human-triggered)Addressed both review findings (1 HIGH, 1 MEDIUM). HIGH: rewrote authorization gate passage to accurately describe how IsAuthorized branches on transition.kind, verified against auth.go source. MEDIUM: added issue_comment entity-kind pitfall with anti-pattern example, verified against ghaevent.go source. Fixed (2):
Tests: passed
Decision points
Updated by fullsend fix agent |
- Rewrite trigger-patterns subsection to accurately describe how IsAuthorized's outcome varies by transition.kind: label_changed (action added) and bot-authored review_submitted bypass write-role check, which is likely the actual reason BT scenarios prefer these kinds — not an arbitrary convention - Add issue_comment entity-kind pitfall: comment_added/edited/deleted transitions always carry entity.kind "work_item" even on PRs; PR-ness is signaled via linked_change_proposal and state.change_proposal, not entity.kind Addresses review feedback on #5404
|
/fs-review |
|
🤖 Finished Review · ✅ Success · Started 11:46 AM UTC · Completed 12:01 PM UTC |
55f8f1a to
c41ef30
Compare
Add docs/contributing/cel-triggers.md documenting that harness trigger CEL expressions and .feature CEL filters match the normalized event model, not raw forge webhook action names. The raw name silently evaluates false, so a mismatched trigger never fires (root cause of the PR #5309 fork-dispatch bug: "synchronize" vs normalized "synchronized"). The file is CEL/normalized-event focused rather than coupling CEL editing to behaviour-test authoring: CEL expressions appear in harnesses whether or not BT exercises them, and BT covers plenty unrelated to CEL. It points to docs/normative/normalized-event/v1/README.md as the source of truth for the full transition-kind vocabulary and per-kind sub-object / entity.kind requirements instead of duplicating a table that drifts. Add a "CEL Triggers" row to the AGENTS.md topic-guidance index. The website sidebar auto-discovers docs/contributing/ via getMarkdownFiles(), so no vitepress config change is needed. Closes #5402 Assisted-by: Claude Signed-off-by: Wayne Sun <gsun@redhat.com>
c41ef30 to
c2f7597
Compare
|
/fs-review |
|
/review |
PR Reviewer Guide 🔍Warning
Here are some key observations to aid the review process:
|
|
🤖 Finished Review · ✅ Success · Started 2:24 PM UTC · Completed 2:37 PM UTC |
|
@ifireball — friendly nudge for re-review to clear your Since your review, the PR was rebased onto current
Rebased and no longer conflicting; automated review ( |
|
🤖 Finished Retro · ✅ Success · Started 8:39 PM UTC · Completed 8:52 PM UTC |
Retro: PR #5404 — CEL trigger / normalized-event guidanceWorkflow: Issue #5402 (filed by retro agent from PR #5309) → triage → code agent opens PR #5404 → 6 review rounds + 4 fix iterations over 2 days → human restructures and rebases → merged. Timeline
Review quality analysis
The review agent never read Evidence for existing open issues
Autonomy readinessThis PR demonstrates that documentation PRs making behavioral claims about system internals (authorization gates, event validation, schema compliance) are NOT candidates for reduced human review. The review agent's 7 passes caught only formatting-level issues and generated a false positive, while humans identified 2 HIGH factual errors and an architectural coupling problem. Human review was essential for correctness on this class of change. Proposals filed |
Summary
Adds
docs/contributing/cel-triggers.mddocumenting that harnesstriggerCEL expressions — and the CEL filters in.featurefixtures — match the normalized event model, not raw forge webhook action names. A raw action name silently evaluatesfalse, so a mismatched trigger never fires. This is the root cause of the PR #5309 fork-dispatch bug ("synchronize"vs normalized"synchronized"), issue #5402.What changed since the last review round
This PR was rebased onto current
mainand substantially restructured in response to review:AGENTS.mdinto a topic file.main(Split AGENTS.md into topic-specific docs under docs/contributing/ #5504) split the monolithicAGENTS.mdinto per-topic files underdocs/contributing/, withAGENTS.mdnow a lightweight index. The guidance now lives indocs/contributing/cel-triggers.md, andAGENTS.mdgains one index row.docs/normative/normalized-event/v1/README.md's Transition kind vocabulary, Transition sub-objects, and CEL trigger examples sections. Those remain authoritative for the full kind list and per-kindentity.kind/ sub-object requirements.IsAuthorized/ ADR-0054 authorization rationale flagged HIGH across review rounds. Removing it clears that finding and the BT coupling in one cut.Kept: the actionable rule (use normalized kinds), the high-value
synchronize→synchronizedpitfall, and the medium-severity review-guidance line.Testing
make lintpasses on staged changes (lint-md-links,lint docs link scope,lint agent doc referencesall green — anchors validated via lychee--include-fragments)docs/contributing/viagetMarkdownFiles(); no vitepress config change neededCloses #5402