Skip to content

fix(codex): drop invalid top-level version field + correct timeout unit (seconds)#482

Merged
NiveditJain merged 3 commits into
FailproofAI:mainfrom
chhhee10:fix-codex-hooks-schema
Jul 9, 2026
Merged

fix(codex): drop invalid top-level version field + correct timeout unit (seconds)#482
NiveditJain merged 3 commits into
FailproofAI:mainfrom
chhhee10:fix-codex-hooks-schema

Conversation

@chhhee10

@chhhee10 chhhee10 commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Problem

Installing failproofai hooks for OpenAI Codex wrote a top-level "version": 1
into .codex/hooks.json. Codex CLI's HooksFile struct is
#[serde(deny_unknown_fields)] and permits only hooks (+ optional
description), so Codex rejects the file. Confirmed against real Codex CLI
v0.143.0
:

warning: failed to parse hooks config .../.codex/hooks.json:
unknown field `version`, expected `description` or `hooks` at line 1 column 11

When this fires the hooks fail to load entirely — so no failproofai policy
evaluates on Codex sessions.

Separately, the Codex timeout was written as 60000. Codex reads timeout
in seconds (its timeout_sec field, default 600), so 60000 meant ~16.7h,
not 60s.

Fix (Codex-only)

  • Stop writing version, and strip any leftover version on the next
    install and uninstall, so a previously-broken hooks.json self-heals on
    reinstall (upgraders already have version: 1 on disk).
  • Correct the timeout: 6000060 (seconds) in codex.buildHookEntry and
    the regenerated dogfood .codex/hooks.json.
  • Keep the __failproofai_hook__ marker (Codex's internally-tagged
    HookHandlerConfig::Command has no deny_unknown_fields, so it's tolerated
    and stays the primary install-detection key).
  • Extract the repeated version-stripping into a shared stripLegacyVersion()
    helper used by both writeHookEntries and removeHooksFromFile.
  • Copilot and Cursor legitimately carry version: 1 in their own schemas and
    are untouched.

Verification

Tested against real Codex CLI v0.143.0:

  • Old config (version: 1) → reproduces the exact parse warning above; hooks
    don't load.
  • New config (no version, timeout: 60), generated by the real
    writeHookEntries install path → parses cleanly, hooks load.

Plus: unit 1907 passed, Codex e2e 10 passed, tsc --noEmit clean,
eslint 0 errors, bun run build green, and the config self-heals on both
install and uninstall.

Summary by CodeRabbit

  • Fixes
    • Corrected Codex hook configuration so generated settings no longer include an invalid top-level version field.
    • Updated hook timing values to use the expected unit, preventing misconfigured Codex hook timeouts.
    • Existing Codex settings will now be cleaned up automatically when outdated fields are found.

chhhee10 and others added 3 commits July 9, 2026 11:31
Codex CLI strictly expects only 'hooks' at the top level and fails to parse 'version'. This removes the version injection for Codex configuration and handles existing config files with a version field.
Codex reads the hooks `timeout` field in SECONDS (its `timeout_sec` field,
default 600), not milliseconds like Claude/Cursor/Gemini. The old 60000 meant
~16.7h, not 60s. Fix `codex.buildHookEntry` and regenerate the dogfood
`.codex/hooks.json` to `timeout: 60`, add a unit assertion, and add the
0.0.12-beta.0 CHANGELOG entry covering both the version-field drop and this
timeout correction.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Removes the invalid top-level version field from Codex hooks settings and changes Codex hook timeout values from milliseconds (60000) to seconds (60), aligning with Codex's timeout_sec semantics. Adds a helper to strip legacy version, updates read/write logic, tests, changelog, and related comments.

Changes

Codex Hooks Timeout and Version Fix

Layer / File(s) Summary
Codex hooks config file update
.codex/hooks.json
Removes top-level version field and changes all hook timeout values from 60000 to 60.
Codex integration logic: version stripping and timeout
src/hooks/integrations.ts
Adds stripLegacyVersion helper, removes version from CodexSettingsFile type, stops backfilling version on read, changes hook timeout to seconds, and conditionally rewrites settings on install/removal to strip legacy version.
Test expectations and documentation comments
__tests__/e2e/hooks/codex-integration.e2e.test.ts, __tests__/hooks/integrations.test.ts, CHANGELOG.md, src/hooks/types.ts
Updates tests to expect version undefined and 60-second timeout, adds version-removal coverage, records the fix in CHANGELOG, and revises Copilot/Cursor comments about version: 1 usage.

Estimated code review effort: 2 (Simple) | ~12 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Caller
  participant Integrations as integrations.ts
  participant Settings as CodexSettingsFile

  Caller->>Integrations: install hooks
  Integrations->>Settings: readSettings()
  Integrations->>Integrations: stripLegacyVersion(settings)
  Integrations->>Settings: writeHookEntries(timeout=60)
  Caller->>Integrations: remove hooks
  Integrations->>Integrations: stripLegacyVersion(settings)
  Integrations->>Settings: write back if removed>0 or hadVersion
Loading

Poem

A rabbit hopped through hooks.json today,
Found "version" napping — shooed it away.
Sixty seconds, not sixty-thousand more,
Codex counts time the way it did before.
Thump thump! Configs clean, tests all agree,
Hop along now, this fix is carrot-free! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is detailed but does not follow the required template and omits the Type of Change and Checklist sections. Rewrite the PR description using the repository template: add Description, select Type of Change, and complete the Checklist items.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the Codex version-field removal and timeout fix.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

__tests__/e2e/hooks/codex-integration.e2e.test.ts

ESLint skipped: missing config or dependency (missing-dependency). The ESLint configuration references a package that is not available in the sandbox.

__tests__/hooks/integrations.test.ts

ESLint skipped: the ESLint configuration for this file references a package that is not available in the sandbox.

src/hooks/integrations.ts

ESLint skipped: the ESLint configuration for this file references a package that is not available in the sandbox.

  • 1 others

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hermes-exosphere

Copy link
Copy Markdown

🔍 Automated code review started — analyzing [{"additions":6,"deletions":7,"path":".codex/hooks.json"},{"additions":5,"deletions":0,"path":"CHANGELOG.md"},{"additions":1,"deletions":1,"path":"tests/e2e/hooks/codex-integration.e2e.test.ts"},{"additions":19,"deletions":6,"path":"tests/hooks/integrations.test.ts"},{"additions":22,"deletions":9,"path":"src/hooks/integrations.ts"},{"additions":2,"deletions":2,"path":"src/hooks/types.ts"}] files, +55/-25...

⏱️ This may take a few minutes. Results will be posted here when complete.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CHANGELOG.md`:
- Around line 3-7: Add the missing PR reference to the changelog entry by
updating the 0.0.12-beta.0 bullet in CHANGELOG.md to include the appropriate
(#<PR_NUMBER>) suffix; keep the existing release note text intact and only amend
the bullet that describes the Codex hooks fix.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fc274a87-084c-446a-a27f-6d04f6572cf3

📥 Commits

Reviewing files that changed from the base of the PR and between e12deca and b2d2d3e.

📒 Files selected for processing (6)
  • .codex/hooks.json
  • CHANGELOG.md
  • __tests__/e2e/hooks/codex-integration.e2e.test.ts
  • __tests__/hooks/integrations.test.ts
  • src/hooks/integrations.ts
  • src/hooks/types.ts

Comment thread CHANGELOG.md
Comment on lines +3 to +7
## 0.0.12-beta.0 — 2026-07-09

### Fixes
- Codex hooks: drop the invalid top-level `version` field from `.codex/hooks.json` (Codex CLI v0.142+ rejects it with `unknown field 'version'`, refusing to start any session), and strip any leftover `version` on the next install/uninstall so previously-broken configs self-heal. Also correct the Codex `timeout` unit from `60000` to `60` — Codex reads `timeout` in seconds (its `timeout_sec` field), so the old value meant ~16.7h instead of 60s. Copilot and Cursor legitimately carry `version: 1` in their own schemas and are untouched.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the CHANGELOG version matches package.json
rg '"version"' package.json | head -1

Repository: FailproofAI/failproofai

Length of output: 191


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== package.json version ==\n'
rg -n '"version"' package.json | head -1

printf '\n== CHANGELOG.md excerpt ==\n'
cat -n CHANGELOG.md | sed -n '1,20p'

Repository: FailproofAI/failproofai

Length of output: 4098


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
text = Path('CHANGELOG.md').read_text()
print('PR marker present:', '(#' in text or 'PR' in text)
PY

Repository: FailproofAI/failproofai

Length of output: 185


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
import re

text = Path('CHANGELOG.md').read_text()
lines = text.splitlines()
for i, line in enumerate(lines[:20], 1):
    if re.search(r'^\s*-\s+', line):
        print(f'bullet@{i}: {line}')
PY

Repository: FailproofAI/failproofai

Length of output: 3862


Add the PR number to this changelog entry.
The 0.0.12-beta.0 release header matches package.json; the bullet still needs a (#<PR_NUMBER>) suffix.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.md` around lines 3 - 7, Add the missing PR reference to the
changelog entry by updating the 0.0.12-beta.0 bullet in CHANGELOG.md to include
the appropriate (#<PR_NUMBER>) suffix; keep the existing release note text
intact and only amend the bullet that describes the Codex hooks fix.

Source: Coding guidelines

@hermes-exosphere

Copy link
Copy Markdown

[progress] Deep review in progress — analyzed the diff (Codex version field removal + timeout unit fix across src/hooks/integrations.ts, .codex/hooks.json, tests, changelog). Now installing deps to run the full unit + e2e suite, tsc, and eslint for evidence.

@chhhee10 chhhee10 assigned chhhee10 and unassigned chhhee10 Jul 9, 2026
@chhhee10 chhhee10 added the bug Something isn't working label Jul 9, 2026
Comment thread src/hooks/integrations.ts
// • Stdin event names arrive snake_case (pre_tool_use); we canonicalize to PascalCase before policy lookup
// • No "local" scope
// • Settings file carries a top-level "version": 1 marker
// • Settings file does NOT carry a top-level "version" marker (Codex strictly expects only `hooks`)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Info (doc consistency): This line correctly updates the Codex header to note it no longer carries a top-level version. But two parallel comments in this same file still describe Codex as carrying version: 1 and are now stale:

  • src/hooks/integrations.ts:390 (Copilot header): `{ "version": 1, "hooks": {...} }`, mirroring Codex. — Codex no longer mirrors this shape.
  • src/hooks/integrations.ts:541 (Cursor header): carries `version: 1` like Codex/Copilot. — should read like Copilot.

The PR already fixed the exact twins of these in src/hooks/types.ts (Copilot: dropped “like Codex’s hooks.json”; Cursor: “like Codex/Copilot” → “like Copilot”), so these two in integrations.ts were just missed.

Fix: drop the “mirroring Codex” / “like Codex” references at lines 390 and 541. Documentation-only — not blocking.

@hermes-exosphere

Copy link
Copy Markdown

🔍 Automated Code Review

📋 Executive Summary

This is a tight, correct, well-scoped bugfix. It removes the invalid top-level version field from .codex/hooks.json (which Codex CLI's deny_unknown_fields HooksFile struct rejects, killing all hook loading) and corrects the Codex timeout from 6000060 (Codex reads seconds, so 60000 meant ~16.7h). The change also self-heals previously-broken configs on the next install and uninstall via a shared stripLegacyVersion() helper. I reproduced all four heal paths end-to-end against the real code and the full suite is green (1907 unit + 10 Codex e2e, tsc/eslint clean). Only two cosmetic doc-comment nits found — nothing blocking.


📊 Change Architecture

graph TD
    A["failproofai policies --install / --uninstall (--cli codex)"] -->|"invokes"| B[codex Integration]
    B --> C["stripLegacyVersion(settings) 🟢"]
    B --> D["buildHookEntry: timeout 60000 → 60 🟡"]
    C --> E["writeHookEntries: strip version, write 6 events"]
    C --> F["removeHooksFromFile: strip version + remove hooks 🔵"]
    F -->|"write only if removed>0 OR hadVersion 🟢"| G[".codex/hooks.json (no version, timeout 60)"]
    E --> G
    D --> G
    G -->|"deny_unknown_fields OK"| H["Codex CLI loads hooks ✅"]
    style C fill:#90EE90
    style F fill:#87CEEB
    style D fill:#FFD700
    style H fill:#90EE90
Loading

Legend: 🟢 New helper / logic | 🔵 Modified | 🟡 Value fix (breaking-bug fix)


🔴 Breaking Changes

No new breaking changes — this PR fixes a breaking bug.

  • The .codex/hooks.json serialization format changes (drops version), but Codex was already rejecting the old format, so no working setup regresses.
  • Upgrade path is safe and self-healing: existing on-disk version: 1 files are cleaned on the next --install or --uninstall. Verified for all cases below.
  • Copilot (integrations.ts:466) and Cursor (integrations.ts:607) still legitimately write version: 1 in their own schemas — correctly left untouched.

⚠️ Issues Found

No correctness/logic defects. Three minor, non-blocking items:

  1. 🔵 Infosrc/hooks/integrations.ts:390 — Stale comment: Copilot header still says its wrapper is { "version": 1, "hooks": {...} }, "mirroring Codex." Codex no longer carries version. (See inline comment.)
  2. 🔵 Infosrc/hooks/integrations.ts:541 — Stale comment: Cursor header says it carries version: 1 "like Codex/Copilot" — should be "like Copilot." The PR fixed the exact twin in types.ts:162 but missed this one.
  3. 🔵 Info (process) — Branch is missing one commit from origin/main (dc21740, eslint-config-next bump build(deps-dev): Bump eslint-config-next from 16.2.9 to 16.2.10 #475). The repo's CLAUDE.md ("Branch must contain all commits from main") recommends a git rebase origin/main before merge. CI is green, so non-blocking.

🔬 Logical / Bug Analysis

stripLegacyVersion() (integrations.ts:62) — uses "version" in settings (catches version: null/undefined too) and returns whether a delete happened. Correct and minimal.

readSettings (integrations.ts:270) — correctly stops backfilling version: 1. ✅ Note: the old code had a latent bug where uninstall would re-add version: 1 (backfilled on read, then written back) — this PR eliminates that.

removeHooksFromFile (integrations.ts:323) — the write is now gated on removed > 0 || hadVersion. I checked the edge cases:

  • {version:1} only, no hooks → early-return path writes {} (self-heal). ✅
  • {version:1, ...fp hooks} → strips version and removes hooks in one write. ✅
  • foreign file (no version, no fp hooks) → not rewritten, contents preserved byte-for-byte (improvement over the old always-write). ✅
  • Return value semantics unchanged, so manager.ts:421's "Removed N hook(s)" messaging is unaffected.

Timeout (integrations.ts:291)60 (s) is equivalent in wall-clock to the other CLIs' 60_000 (ms). No functional regression; only the unit is corrected. ✅

Type change — dropping version?: number from CodexSettingsFile is safe; no remaining reader references s.version for Codex (tsc --noEmit clean).


🧪 Evidence — Build & Test Results

Unit + typecheck + lint
$ bun run test:run
 Test Files  106 passed (106)
      Tests  1907 passed (1907)

$ npx tsc --noEmit
=== TSC EXIT: 0 ===

$ npx eslint . --config eslint.config.mjs
✖ 5 problems (0 errors, 5 warnings)   # all 5 warnings are pre-existing, in files this PR does not touch
=== ESLINT EXIT: 0 ===
Codex e2e
$ npx vitest run --config vitest.config.e2e.mts __tests__/e2e/hooks/codex-integration.e2e.test.ts
 Test Files  1 passed (1)
      Tests  10 passed (10)
End-to-end self-heal validation (real codex.writeHookEntries / removeHooksFromFile against temp files)
Scenario 1 — reinstall heals broken config (version:1 + timeout:60000):
  PASS  version removed
  PASS  PreToolUse timeout == 60
  PASS  all 6 event keys present
Scenario 2 — uninstall removes hooks AND strips version:
  PASS  removed count == 6
  PASS  version removed
  PASS  hooks removed
Scenario 3 — uninstall with version but no failproofai hooks:
  PASS  removed count == 0
  PASS  version removed (self-heal)
Scenario 4 — foreign hooks + no version untouched:
  PASS  removed count == 0
  PASS  foreign hook preserved

ALL SELF-HEAL SCENARIOS PASS
Committed .codex/hooks.json sanity
has version: false
event keys: SessionStart, PreToolUse, PermissionRequest, PostToolUse, UserPromptSubmit, Stop
distinct timeouts: 60

Version consistency: package.json = 0.0.12-beta.0 matches the CHANGELOG heading ## 0.0.12-beta.0 — 2026-07-09. ✅
CI: all 11 checks green (build, quality, test default + 2 matrix env configs, test-e2e, CodeRabbit, OSV/Socket).


🔗 Issue Linkage

⚠️ No issue linked. The PR body itself documents the repro against real Codex CLI v0.143.0 (unknown field 'version'), which is good traceability, but a linked issue would help.


💡 Suggestions

  • Fix the two stale doc comments (items 1–2) — a 2-line cleanup that keeps the per-CLI headers internally consistent with the types.ts edits already in this PR.
  • git rebase origin/main to pick up #475 before merge, per repo convention.
  • Optional: add one unit test for the combined uninstall path (version: 1 + failproofai hooks present → both stripped in a single write) — Scenario 2 above. Currently integrations.test.ts covers the two halves separately (:233 version-only-on-write, :239 version-only-on-remove) but not together.
  • Nit: PR body says "v0.143.0" while the CHANGELOG says "v0.142+" — harmless (superset), just noting.

🏆 Verdict

⚠️ APPROVED WITH SUGGESTIONS — The fix is correct, minimal, and thoroughly verified end-to-end; tests are legitimate (they assert the new behavior, not just re-baselined). The only findings are two stale doc comments and a rebase recommendation — none blocking.


Automated code review · 2026-07-09 UTC

@hermes-exosphere hermes-exosphere left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review complete — Approved with suggestions.

Correct, minimal, well-scoped fix (drop invalid top-level version, correct Codex timeout unit to seconds, self-heal on install/uninstall). Verified end-to-end: full suite green (1907 unit + 10 Codex e2e, tsc/eslint clean), and I reproduced all four self-heal paths against the real code. No correctness issues.

Non-blocking suggestions: two stale doc comments still tie Codex to version: 1 (integrations.ts:390 and :541 — twins of the ones already fixed in types.ts), and the branch should rebase onto origin/main to pick up #475. Details in the summary + inline comment.

@NiveditJain NiveditJain merged commit a33ac72 into FailproofAI:main Jul 9, 2026
11 checks passed
NiveditJain added a commit that referenced this pull request Jul 9, 2026
…lation sync (#484)

Add the 17 Dependabot bumps (#463-#481) and the docs translation sync (#462)
merged this cycle to the 0.0.12-beta.0 CHANGELOG section, and append the missing
(#482) reference to the Codex hooks Fixes entry, matching the repo convention that
every release documents its dependency bumps.


Claude-Session: https://claude.ai/code/session_01FQLQSMW6WJH5jA2Dm9qbF8

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
chhhee10 added a commit that referenced this pull request Jul 9, 2026
* feat: sync agent CLI harnesses with upstream docs

Append newly-documented hook events and fix two timeout-unit bugs found
by comparing each integrated CLI's upstream docs to this repo.

Scope 1 (event names):
- Claude: append `Setup`, `MessageDisplay` (no event map — build stays green)
- Codex: append `subagent_start`, `pre_compact`, `post_compact`,
  `subagent_stop`. CODEX_EVENT_MAP entries are intentionally NOT added so
  `tsc` fails until a reviewer picks the canonical HookEventType (per the
  map-bearing-CLI rule) — see PR checklist.
- Copilot: append `PostToolUseFailure`, `ErrorOccurred`, `PreCompact`,
  `PermissionRequest` (docs show explicit PascalCase variants; no event
  map — build stays green). `notification` / `subagentStart` are
  camelCase-only upstream and deferred to the reviewer.

Scope 3 (settings-file shape, #482-class timeout-unit fix):
- Claude and Cursor read `timeout` in SECONDS per their docs (Claude
  "60 for agent"; Cursor "Execution timeout in seconds"), so the old
  `60000` meant ~16.7h. Corrected writer + dogfood fixtures + unit tests
  to `60`. Gemini's `timeout` is genuinely milliseconds (default 60000)
  and is left unchanged.

Verified each claim by fetching the primary docs directly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(codex): complete CODEX_EVENT_MAP for the 4 newly-synced events

The prior commit added subagent_start/pre_compact/post_compact/subagent_stop
to CODEX_HOOK_EVENT_TYPES but intentionally left their CODEX_EVENT_MAP entries
out to fail tsc as a reviewer flag. Each has an exact 1:1 canonical
HookEventType (SubagentStart/PreCompact/PostCompact/SubagentStop, all already
in HOOK_EVENT_TYPES), so fill them in directly.

Besides unblocking tsc, this fixes a real runtime bug: with no mapping,
writeHookEntries resolved CODEX_EVENT_MAP[event] to undefined and collapsed
all four events into a single literal "undefined" key in users'
.codex/hooks.json (the source of the removeHooksFromFile "7 vs 10" test
failure). The map is exhaustive, so tsc still guards against a future
event-added-mapping-missing drift.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(claude): keep Setup, defer observe-only MessageDisplay

The prior commit appended both Setup and MessageDisplay to HOOK_EVENT_TYPES.
writeHookEntries installs a failproofai hook for every entry in that array, so
appending MessageDisplay would spawn a subprocess on every assistant message
render — and the docs mark MessageDisplay observe-only (cannot block or modify,
no matcher support), so that cost buys zero enforcement value.

Keep Setup (fires only on --init/--maintenance; low-frequency, harmless to
install) and defer MessageDisplay to the reviewer checklist with a documented
NOTE, mirroring how the sync bot defers uncertain items. Net event count is
29, so update the two manager.test count assertions and the description.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(copilot): append Notification, correct the deferral note

The prior commit's comment claimed both notification and subagentStart are
camelCase-only upstream. Re-checking the cli-hooks-reference: Notification DOES
have a documented PascalCase "VS Code compatible" variant, so append it to
COPILOT_HOOK_EVENT_TYPES (no event map, build stays green). Only subagentStart
is genuinely camelCase-only, so it stays deferred to the reviewer checklist.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: correct Codex timeout field name + update changelog for review

- The Codex timeout comment said the field is `timeout_sec`; docs confirm it
  is literally `timeout` (unit seconds, default 600). Fix the comment.
- Rewrite the 0.0.13-beta.0 changelog entry to describe the reviewed result:
  Codex map completed, Copilot Notification added, MessageDisplay deferred.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: failproofai-hook-sync <hook-sync-bot@exosphere.host>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: chhhee10 <chetanraghuvanshi85@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants