@codyswann/lisa 3.45.6 → 3.45.8

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 (71) hide show
  1. package/all/copy-overwrite/scripts/lisa-floor-collisions.mjs +50 -3
  2. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  3. package/dist/core/lisa-owned-hash-ledger.js +5 -0
  4. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  5. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  6. package/dist/core/upstream-evidence-manifest.js +9 -9
  7. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  8. package/dist/migrations/ensure-playwright-dedicated-caller.d.ts +77 -0
  9. package/dist/migrations/ensure-playwright-dedicated-caller.d.ts.map +1 -0
  10. package/dist/migrations/ensure-playwright-dedicated-caller.js +370 -0
  11. package/dist/migrations/ensure-playwright-dedicated-caller.js.map +1 -0
  12. package/dist/migrations/index.d.ts +1 -0
  13. package/dist/migrations/index.d.ts.map +1 -1
  14. package/dist/migrations/index.js +3 -0
  15. package/dist/migrations/index.js.map +1 -1
  16. package/expo/create-only/.github/workflows/nightly-e2e-report.yml +2 -2
  17. package/package.json +1 -1
  18. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  20. package/plugins/lisa-agy/plugin.json +1 -1
  21. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  23. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  24. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  30. package/plugins/lisa-expo-agy/plugin.json +1 -1
  31. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  35. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  36. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  41. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  45. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  46. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  51. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  55. package/plugins/lisa-rails-agy/plugin.json +1 -1
  56. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  61. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  66. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  68. package/typescript/copy-overwrite/.github/GITHUB_ACTIONS.md +5 -6
  69. package/typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs +23 -16
  70. package/harper-fabric/copy-overwrite/.github/dependabot.yml +0 -47
  71. package/typescript/copy-overwrite/.github/dependabot.yml +0 -43
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.45.6",
3
+ "version": "3.45.8",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -653,12 +653,11 @@ with:
653
653
  │ ├── claude-nightly-code-complexity.yml # Nightly code complexity
654
654
  │ ├── auto-update-pr-branches.yml # Auto-update PRs from base
655
655
  │ └── .env.example # Secrets template
656
- ├── k6/
657
- ├── scripts/ # Test scripts
658
- ├── scenarios/ # Test configurations
659
- ├── thresholds/ # Performance thresholds
660
- └── README.md # K6 documentation
661
- └── dependabot.yml # Dependency updates
656
+ └── k6/
657
+ ├── scripts/ # Test scripts
658
+ ├── scenarios/ # Test configurations
659
+ ├── thresholds/ # Performance thresholds
660
+ └── README.md # K6 documentation
662
661
  ```
663
662
 
664
663
  ## Troubleshooting
@@ -69,8 +69,8 @@
69
69
  *
70
70
  * ## Inherited from three implementations, with one path closed
71
71
  *
72
- * `DECISIVE_CONCLUSIONS` comes from gemini's `check-nightly-e2e.mjs` and is kept
73
- * because it is the right vocabulary. What is NOT kept is gemini's
72
+ * `DECISIVE_CONCLUSIONS` comes from acmeorgb's `check-nightly-e2e.mjs` and is
73
+ * kept because it is the right vocabulary. What is NOT kept is acmeorgb's
74
74
  * `unknown`-passes-with-a-warning: that is a fail-open path, and here `unknown`
75
75
  * fails once bootstrap closes. The bypass model and the context-pinning
76
76
  * discipline come from acmeorgd (TUN-525 / TUN-402). The job-name filter comes from
@@ -236,7 +236,7 @@ export const ISSUE_ACTIONS = Object.freeze({
236
236
  *
237
237
  * The reporter used to state, in every issue it filed, that "pull requests into
238
238
  * `<branch>` are blocked". That sentence was a hardcoded claim about somebody
239
- * else's branch ruleset, and in TunnlAI/frontend it was measurably FALSE: not
239
+ * else's branch ruleset, and in one measured adopter it was measurably FALSE: not
240
240
  * one required context on `dev` matched this gate, so the suite blocked nothing
241
241
  * — while people burned audited bypass labels to clear a gate that was not
242
242
  * gating. An issue that misstates its own consequences is worse than one that
@@ -265,8 +265,8 @@ export const REQUIREDNESS = Object.freeze({
265
265
  * easily these two strings drift apart.
266
266
  *
267
267
  * Overridable via the `gate_context` input, because a repo that has not yet
268
- * converged onto the template publishes a different string (PropSwapLLC's fork
269
- * publishes the bare `🌙 Nightly E2E Health`, with no job suffix).
268
+ * converged onto the template publishes a different string — one adopter's fork
269
+ * publishes the bare `🌙 Nightly E2E Health`, with no job suffix.
270
270
  */
271
271
  export const DEFAULT_GATE_CONTEXT = "🌙 Nightly E2E Health / 🌙 Gate";
272
272
 
@@ -1243,7 +1243,7 @@ export function resolveSuiteGrace(suite, maxDays, now) {
1243
1243
  }
1244
1244
 
1245
1245
  // ---------------------------------------------------------------------------
1246
- // 4. Bypass — maintainers only, no self-bypass, reason required, auto-expiring
1246
+ // 4. Bypass — maintainers only, reason required, auto-expiring, self-service
1247
1247
  // ---------------------------------------------------------------------------
1248
1248
 
1249
1249
  /**
@@ -1251,8 +1251,21 @@ export function resolveSuiteGrace(suite, maxDays, now) {
1251
1251
  * the caller gathered.
1252
1252
  *
1253
1253
  * Every rejection carries a stable `reason` token so the audit says WHICH
1254
- * condition failed. A bypass one person can both request and grant is not a
1255
- * control, which is why `self_bypass` exists as its own rejection.
1254
+ * condition failed.
1255
+ *
1256
+ * The bypass is deliberately SELF-SERVICE: the PR's own author may apply the
1257
+ * label and have it honoured. It did not start that way — a `self_bypass`
1258
+ * rejection used to require a second person — and the measurement that removed
1259
+ * it is worth keeping next to the code. Across one portfolio repository, 93
1260
+ * pull requests carried the label and exactly ONE waiver was ever honoured,
1261
+ * because on a small team (and on any repo where an agent opens the PR) the
1262
+ * author and the only available labeller are the same party. A control that
1263
+ * fires on 1% of attempts is not protecting anything; it is routing the other
1264
+ * 99% onto the unaudited admin merge, which records nothing at all. The value
1265
+ * of this mechanism is the AUDIT RECORD, not the second pair of eyes, so every
1266
+ * arm that produces the record is kept and only the second-party requirement
1267
+ * is gone. `prAuthor` is therefore still carried onto the audit — recorded,
1268
+ * never used to reject. (Owner ruling, 2026-08-19.)
1256
1269
  *
1257
1270
  * `extraReasonPattern` is an ADDITIONAL requirement, never a replacement for
1258
1271
  * `REQUIRED_BYPASS_REASON_PATTERN`. An override that could replace the built-in
@@ -1307,10 +1320,6 @@ export function evaluateBypass(request) {
1307
1320
  detail: actorPermission ?? "unknown",
1308
1321
  });
1309
1322
  }
1310
- if (prAuthor && labelEvent.actor.toLowerCase() === prAuthor.toLowerCase()) {
1311
- return reject("self_bypass");
1312
- }
1313
-
1314
1323
  const cappedHours = Math.min(maxHours, BYPASS_ABSOLUTE_MAX_HOURS);
1315
1324
  const appliedMs = Date.parse(labelEvent.createdAt);
1316
1325
  if (Number.isNaN(appliedMs)) return reject("no_attributable_actor");
@@ -1368,8 +1377,6 @@ const BYPASS_REJECTIONS = Object.freeze({
1368
1377
  "nobody can be shown to have applied it (the PR timeline was unreadable — this is normal on a fork PR). An unattributable bypass is not an audited bypass.",
1369
1378
  actor_not_maintainer:
1370
1379
  "the person who applied it does not have `admin` or `maintain` on this repository. Bypasses are maintainers only.",
1371
- self_bypass:
1372
- "it was applied by the PR's own author. A bypass one person can both request and grant is not a control.",
1373
1380
  bypass_expired:
1374
1381
  "it was applied longer ago than `bypass_max_hours` allows. Bypasses auto-expire so a label nobody removes cannot become a permanent hole.",
1375
1382
  no_reason_or_ticket:
@@ -1595,7 +1602,7 @@ export function formatReport(verdict, context) {
1595
1602
  ` 2. Re-run the suite from the Actions tab against \`${context.branch}\`, running the WHOLE suite. A \`workflow_dispatch\` run counts exactly like a scheduled one, so a green dispatch clears this gate immediately — no waiting for tomorrow. What does not count is a NARROWED re-run: leave any platform / tag / shard picker on its "all" default, because a run that skipped an arm says nothing about that arm.`,
1596
1603
  " 3. Re-run this check on your PR.",
1597
1604
  "",
1598
- `If the failure is in the harness rather than the app — or this IS the PR that fixes the red nightly — a maintainer (not you) can apply the \`${context.bypassLabel}\` label after you add a \`Nightly-E2E-Bypass: <TICKET> <reason>\` line to the PR body. There is no admin-merge-past-red: the audited bypass is the only sanctioned path.`
1605
+ `If the failure is in the harness rather than the app — or this IS the PR that fixes the red nightly — waive the gate yourself: add a \`Nightly-E2E-Bypass: <TICKET> <reason>\` line to the PR body, then apply the \`${context.bypassLabel}\` label. You may apply it to your own PR; anyone with \`admin\` or \`maintain\` here can. The waiver auto-expires a bounded number of hours after the label goes on (\`bypass_max_hours\`, 24 by default, hard-capped at 72), so it cannot become a permanent hole. Prefer this route: it is the only way past this gate that records who waived it, under which ticket, and when the waiver expires. An admin merge may also be available — that is a property of this repository's own ruleset rather than of this gate, so read its bypass actors rather than assuming either way — but it leaves no such record.`
1599
1606
  );
1600
1607
  } else {
1601
1608
  lines.push(
@@ -1851,7 +1858,7 @@ function meaningParagraph(claim, branch) {
1851
1858
  * A bypass recipe printed unconditionally is how people end up applying an
1852
1859
  * audited waiver label to a check that was never required — burning the audit
1853
1860
  * trail the label exists to create, to buy a merge that was never blocked. That
1854
- * happened in TunnlAI/frontend.
1861
+ * happened in a measured adopter repository.
1855
1862
  *
1856
1863
  * @param {{state: string}} claim - Effective claim
1857
1864
  * @param {{branch: string, bypassLabel: string}} context - Reporting context
@@ -1,47 +0,0 @@
1
- # This file is managed by Lisa and IS replaced on each `lisa` run.
2
- # Do not edit directly — durable changes belong upstream in Lisa.
3
-
4
- # Harper/Fabric override of the TypeScript dependabot template.
5
- # A fresh Harper/Fabric repo ships with only a `main` branch, so this file
6
- # omits `target-branch` — Dependabot then opens PRs against the repository's
7
- # default branch instead of a `dev` branch that does not exist. If a project
8
- # adopts a long-lived integration branch, set `target-branch` back per updater.
9
-
10
- version: 2
11
- updates:
12
- # JavaScript/Node.js dependencies
13
- - package-ecosystem: npm
14
- directory: /
15
- schedule:
16
- interval: weekly
17
- day: monday
18
- open-pull-requests-limit: 10
19
- groups:
20
- production-dependencies:
21
- dependency-type: production
22
- update-types:
23
- - minor
24
- - patch
25
- development-dependencies:
26
- dependency-type: development
27
- update-types:
28
- - minor
29
- - patch
30
- labels:
31
- - dependencies
32
- commit-message:
33
- prefix: 'chore(deps)'
34
- prefix-development: 'chore(deps-dev)'
35
-
36
- # GitHub Actions
37
- - package-ecosystem: github-actions
38
- directory: /
39
- schedule:
40
- interval: weekly
41
- day: monday
42
- open-pull-requests-limit: 5
43
- labels:
44
- - dependencies
45
- - github-actions
46
- commit-message:
47
- prefix: 'ci(deps)'
@@ -1,43 +0,0 @@
1
- # This file is managed by Lisa and IS replaced on each `lisa` run.
2
- # Do not edit directly — durable changes belong upstream in Lisa.
3
-
4
- version: 2
5
- updates:
6
- # JavaScript/Node.js dependencies
7
- - package-ecosystem: npm
8
- directory: /
9
- schedule:
10
- interval: weekly
11
- day: monday
12
- target-branch: dev
13
- open-pull-requests-limit: 10
14
- groups:
15
- production-dependencies:
16
- dependency-type: production
17
- update-types:
18
- - minor
19
- - patch
20
- development-dependencies:
21
- dependency-type: development
22
- update-types:
23
- - minor
24
- - patch
25
- labels:
26
- - dependencies
27
- commit-message:
28
- prefix: 'chore(deps)'
29
- prefix-development: 'chore(deps-dev)'
30
-
31
- # GitHub Actions
32
- - package-ecosystem: github-actions
33
- directory: /
34
- schedule:
35
- interval: weekly
36
- day: monday
37
- target-branch: dev
38
- open-pull-requests-limit: 5
39
- labels:
40
- - dependencies
41
- - github-actions
42
- commit-message:
43
- prefix: 'ci(deps)'