forgedock 1.19.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +2 -0
  2. package/bin/engine.mjs +48 -3
  3. package/bin/runner.mjs +20 -4
  4. package/commands/orchestrate/phase-4-execution.md +1 -1
  5. package/commands/review-pr-agents/protocols.md +19 -0
  6. package/commands/review-pr.md +7 -6
  7. package/commands/work-on/build/architect.md +1 -1
  8. package/commands/work-on/build/implement.md +9 -1
  9. package/commands/work-on/build/validate.md +1 -1
  10. package/commands/work-on/build.md +118 -8
  11. package/commands/work-on/close.md +9 -4
  12. package/commands/work-on/remediate.md +11 -4
  13. package/commands/work-on/review.md +11 -3
  14. package/commands/work-on.md +4 -4
  15. package/docs/CONFIG.md +5 -1
  16. package/docs/RELEASE-NOTES.md +15 -0
  17. package/docs/TELEMETRY.md +2 -2
  18. package/docs/WORK-ON-RUNTIME.md +11 -3
  19. package/package.json +1 -1
  20. package/scripts/architect-resume-match.test.sh +12 -3
  21. package/scripts/build-knowledge-index.mjs +8 -5
  22. package/scripts/builder-resume-match.test.sh +12 -3
  23. package/scripts/calibration.mjs +5 -2
  24. package/scripts/check-spec-markers.sh +2 -0
  25. package/scripts/ci-local/lib.mjs +11 -3
  26. package/scripts/ci-local/run.mjs +155 -49
  27. package/scripts/ci-local/scoping.mjs +27 -4
  28. package/scripts/ci-local.sh +3 -2
  29. package/scripts/ci-local.test.sh +189 -0
  30. package/scripts/classify-finding.sh +1 -1
  31. package/scripts/file-deferred-followups.sh +91 -30
  32. package/scripts/file-deferred-followups.test.sh +101 -8
  33. package/scripts/lib/telemetry.sh +2 -0
  34. package/scripts/review-finalize.sh +101 -12
  35. package/scripts/review-finalize.test.sh +136 -5
  36. package/scripts/review-roster.sh +18 -5
  37. package/scripts/review-roster.test.sh +57 -1
  38. package/scripts/selfreview-plan.sh +86 -0
  39. package/scripts/selfreview-plan.test.sh +90 -0
  40. package/scripts/spawn-depth-check.sh +5 -4
  41. package/scripts/spawn-depth-check.test.sh +3 -0
  42. package/scripts/telemetry.test.sh +8 -0
  43. package/scripts/transition-label.sh +26 -0
  44. package/scripts/verify-phase-trail.test.sh +6 -0
@@ -278,6 +278,32 @@ fi
278
278
  # ---------------------------------------------------------------------------
279
279
  # Add target label
280
280
  # ---------------------------------------------------------------------------
281
+ # forge#3567: `gh issue edit --add-label` fails when the label is absent from the repo (a
282
+ # consumer repo not re-synced via `forgedock labels setup`), aborting the transition under
283
+ # `set -e`. Best-effort ensure first: `--force` is a create-or-update, a failure (permissions,
284
+ # rate limit, concurrent create) is ignored so the add below surfaces its own error. Only
285
+ # ForgeDock-managed names are created (fixed table mirroring bin/labels.json, kept in sync by
286
+ # bin/tests/label-bootstrap.test.mjs); a custom FORGE_LABEL_MAP name is never created.
287
+ ensure_label() {
288
+ local name="$1" LBL_COLOR="" LBL_DESC=""
289
+ case "$name" in
290
+ "workflow:investigating") LBL_COLOR="1D76DB"; LBL_DESC="Pipeline: investigation phase in progress. Managed by ForgeDock." ;;
291
+ "workflow:ready-to-build") LBL_COLOR="0075CA"; LBL_DESC="Pipeline: investigation complete, ready for build. Managed by ForgeDock." ;;
292
+ "workflow:building") LBL_COLOR="0052CC"; LBL_DESC="Pipeline: implementation in progress. Managed by ForgeDock." ;;
293
+ "workflow:in-review") LBL_COLOR="5319E7"; LBL_DESC="Pipeline: PR created, under review. Managed by ForgeDock." ;;
294
+ "workflow:remediating") LBL_COLOR="C5DEF5"; LBL_DESC="Pipeline: autonomous remediation pending (no human action needed). Managed by ForgeDock." ;;
295
+ "workflow:awaiting-merge") LBL_COLOR="FF8C00"; LBL_DESC="Pipeline: remediated + re-reviewed, awaiting a human merge decision. Managed by ForgeDock." ;;
296
+ "workflow:merged") LBL_COLOR="0E8A16"; LBL_DESC="Pipeline: PR merged, issue closed. Managed by ForgeDock." ;;
297
+ "workflow:decomposed") LBL_COLOR="BFD4F2"; LBL_DESC="Pipeline: decomposed into sub-issues. Managed by ForgeDock." ;;
298
+ "workflow:invalid") LBL_COLOR="CCCCCC"; LBL_DESC="Pipeline: issue closed as invalid after investigation. Managed by ForgeDock." ;;
299
+ "needs-human") LBL_COLOR="E4E669"; LBL_DESC="Pipeline stalled — requires human intervention. Managed by ForgeDock." ;;
300
+ "workflow:engine-error") LBL_COLOR="B60205"; LBL_DESC="Pipeline stalled — engine/tool failure (not a genuine human-judgment block). Managed by ForgeDock." ;;
301
+ *) return 0 ;;
302
+ esac
303
+ gh label create "$name" --color "$LBL_COLOR" --description "$LBL_DESC" --force "${GH_ARGS[@]}" >/dev/null 2>&1 || true
304
+ }
305
+ ensure_label "$EFFECTIVE_LABEL"
306
+
281
307
  echo "Adding $EFFECTIVE_LABEL to issue #$ISSUE_NUMBER..."
282
308
  gh issue edit "$ISSUE_NUMBER" "${GH_ARGS[@]}" --add-label "$EFFECTIVE_LABEL"
283
309
 
@@ -58,6 +58,7 @@ mk() {
58
58
  FP_*) items+=("{\"body\":\"<!-- FORGE:FAST_PATH -->\\n**COMPLEXITY_BAND**: ${k#FP_}\"}") ;;
59
59
  QUOTED) items+=('{"body":"see `<!-- FORGE:CONTRACT -->` `<!-- FORGE:CONTEXT -->` `<!-- FORGE:ARCHITECT -->` `<!-- FORGE:QUALITY_GATE -->` **Result**: PASS"}') ;;
60
60
  INV_INVALID) items+=('{"body":"<!-- FORGE:INVESTIGATOR -->\nInvalid\n<!-- INVESTIGATION:INVALID -->"}') ;;
61
+ SR) items+=('{"body":"<!-- FORGE:SELFREVIEW-AGENT:security -->\nTree: abc\n<!-- REVIEW-FINDINGS-START -->\n<!-- REVIEW-FINDINGS-END -->"}' '{"body":"<!-- FORGE:SELFREVIEW -->\n## Self-review\nTree: abc"}') ;;
61
62
  PROSE) items+=('{"body":"I ran the architect and context inline; FORGE:CONTEXT FORGE:ARCHITECT FORGE:QUALITY_GATE done"}') ;;
62
63
  esac
63
64
  done
@@ -82,6 +83,11 @@ expect_pass "lowercase band is accepted" "$(mk lower INV CONTRACT FP_trivial QG_
82
83
  expect_pass "Investigation band passes with only INVESTIGATOR+FAST_PATH" "$(mk invest INV FP_INVESTIGATION)"
83
84
  expect_pass "docs-only waives QUALITY_GATE" "$(mk docs INV CONTRACT FP_TRIVIAL)" --docs-only
84
85
 
86
+ # forge#3971: build-time self-review comments are tolerated but never satisfy a required phase marker
87
+ expect_pass "self-review comments do not disturb a full trail" "$(mk sr1 INV CONTRACT FP_COMPLEX CONTEXT ARCH QG_PASS SR)"
88
+ expect_fail "self-review comments do not stand in for QUALITY_GATE" "$(mk sr2 INV CONTRACT FP_COMPLEX CONTEXT ARCH SR)" QUALITY_GATE
89
+ expect_fail "self-review comments do not stand in for CONTEXT" "$(mk sr3 INV CONTRACT FP_STANDARD ARCH QG_PASS SR)" CONTEXT
90
+
85
91
  expect_fail "missing INVESTIGATOR" "$(mk a CONTRACT FP_COMPLEX CONTEXT ARCH QG_PASS)" INVESTIGATOR
86
92
  expect_fail "partial investigation (no COMPLETE) fails" "$(mk b INV_PARTIAL CONTRACT FP_COMPLEX CONTEXT ARCH QG_PASS)" INVESTIGATOR
87
93
  expect_fail "missing CONTRACT" "$(mk c INV FP_COMPLEX CONTEXT ARCH QG_PASS)" CONTRACT