Skip to content

Add full Codex provider support across MAP workflows - #458

Merged
azalio merged 4 commits into
azalio:mainfrom
Vladislav00:codex-full-support
Sep 15, 2026
Merged

azalio merged 4 commits into
azalio:mainfrom
Vladislav00:codex-full-support

Conversation

@Vladislav00

Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai

coderabbitai Bot commented Sep 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 283 files, which is 183 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 340d7986-158c-451f-be96-65828bf374e3

📥 Commits

Reviewing files that changed from the base of the PR and between 0b267e6 and c0813df.

📒 Files selected for processing (283)
  • .agents/references/map-json-output-contracts.md
  • .agents/references/map-output-examples.md
  • .agents/references/map-xml-prompt-envelopes.md
  • .agents/skills/map-architecture/SKILL.md
  • .agents/skills/map-auto/SKILL.md
  • .agents/skills/map-auto/auto-reference.md
  • .agents/skills/map-check/SKILL.md
  • .agents/skills/map-check/check-reference.md
  • .agents/skills/map-debug/SKILL.md
  • .agents/skills/map-efficient/SKILL.md
  • .agents/skills/map-explain/SKILL.md
  • .agents/skills/map-fast/SKILL.md
  • .agents/skills/map-learn/SKILL.md
  • .agents/skills/map-learn/templates/example-rules.md
  • .agents/skills/map-learn/templates/rules-unconditional.md
  • .agents/skills/map-learn/templates/rules-with-paths.md
  • .agents/skills/map-memory-now/SKILL.md
  • .agents/skills/map-plan/SKILL.md
  • .agents/skills/map-plan/plan-reference.md
  • .agents/skills/map-release/SKILL.md
  • .agents/skills/map-release/release-reference.md
  • .agents/skills/map-resume/SKILL.md
  • .agents/skills/map-resume/resume-reference.md
  • .agents/skills/map-review/SKILL.md
  • .agents/skills/map-review/adversarial-reference.md
  • .agents/skills/map-review/review-reference.md
  • .agents/skills/map-skill-eval/SKILL.md
  • .agents/skills/map-so-search/SKILL.md
  • .agents/skills/map-so-search/scripts/sofa_search.py
  • .agents/skills/map-state/SKILL.md
  • .agents/skills/map-state/scripts/check-complete.sh
  • .agents/skills/map-state/scripts/get-plan-path.sh
  • .agents/skills/map-state/scripts/init-session.sh
  • .agents/skills/map-state/scripts/show-focus.sh
  • .agents/skills/map-state/templates/findings.md
  • .agents/skills/map-state/templates/iteration_history.md
  • .agents/skills/map-state/templates/progress.md
  • .agents/skills/map-state/templates/task_plan.md
  • .agents/skills/map-task/SKILL.md
  • .agents/skills/map-tdd/SKILL.md
  • .agents/skills/map-tokenreport/SKILL.md
  • .agents/skills/map-understand/SKILL.md
  • .agents/skills/map-wayfind/SKILL.md
  • .agents/skills/map-wayfind/wayfind-reference.md
  • .claude/hooks/map-memory-finalize.py
  • .claude/hooks/map-token-meter.py
  • .claude/hooks/post-compact-context.py
  • .claude/hooks/ralph-iteration-logger.py
  • .claude/hooks/safety-guardrails.py
  • .claude/hooks/workflow-context-injector.py
  • .claude/references/hook-patterns.md
  • .codex/agents/actor.toml
  • .codex/agents/decomposer.toml
  • .codex/agents/documentation-reviewer.toml
  • .codex/agents/evaluator.toml
  • .codex/agents/final-verifier.toml
  • .codex/agents/monitor.toml
  • .codex/agents/predictor.toml
  • .codex/agents/reflector.toml
  • .codex/agents/researcher.toml
  • .codex/config.toml
  • .codex/hooks.json
  • .codex/hooks/context-meter.py
  • .codex/hooks/detect-clarification-triggers.py
  • .codex/hooks/end-of-turn.sh
  • .codex/hooks/map-memory-capture.py
  • .codex/hooks/map-memory-endmark.py
  • .codex/hooks/map-memory-recall.py
  • .codex/hooks/map-memory-session.py
  • .codex/hooks/map-stop.py
  • .codex/hooks/map-token-meter.py
  • .codex/hooks/post-compact-context.py
  • .codex/hooks/pre-compact-save-transcript.py
  • .codex/hooks/ralph-context-pruner.py
  • .codex/hooks/ralph-iteration-logger.py
  • .codex/hooks/safety-guardrails.py
  • .codex/hooks/scrub-internal-ids.py
  • .codex/hooks/workflow-context-injector.py
  • .codex/hooks/workflow-gate.py
  • .map/scripts/map_step_runner.py
  • CHANGELOG.md
  • Makefile
  • README.md
  • docs/ARCHITECTURE.md
  • docs/USAGE.md
  • pyproject.toml
  • scripts/lint-hooks.py
  • src/mapify_cli/__init__.py
  • src/mapify_cli/__main__.py
  • src/mapify_cli/codex_exec.py
  • src/mapify_cli/delivery/codex_copier.py
  • src/mapify_cli/delivery/template_renderer.py
  • src/mapify_cli/install_manifest.py
  • src/mapify_cli/memory/capture.py
  • src/mapify_cli/memory/finalize.py
  • src/mapify_cli/provider_registry.py
  • src/mapify_cli/skills_eval/aggregator.py
  • src/mapify_cli/skills_eval/apply_patcher.py
  • src/mapify_cli/skills_eval/description_optimizer.py
  • src/mapify_cli/skills_eval/dispatcher.py
  • src/mapify_cli/skills_eval/eval_schema.py
  • src/mapify_cli/skills_eval/proposer.py
  • src/mapify_cli/skills_eval/runner.py
  • src/mapify_cli/templates/codex/agents/actor.toml
  • src/mapify_cli/templates/codex/agents/decomposer.toml
  • src/mapify_cli/templates/codex/agents/documentation-reviewer.toml
  • src/mapify_cli/templates/codex/agents/evaluator.toml
  • src/mapify_cli/templates/codex/agents/final-verifier.toml
  • src/mapify_cli/templates/codex/agents/monitor.toml
  • src/mapify_cli/templates/codex/agents/predictor.toml
  • src/mapify_cli/templates/codex/agents/reflector.toml
  • src/mapify_cli/templates/codex/agents/researcher.toml
  • src/mapify_cli/templates/codex/config.toml
  • src/mapify_cli/templates/codex/hooks.json
  • src/mapify_cli/templates/codex/hooks/context-meter.py
  • src/mapify_cli/templates/codex/hooks/detect-clarification-triggers.py
  • src/mapify_cli/templates/codex/hooks/end-of-turn.sh
  • src/mapify_cli/templates/codex/hooks/map-memory-capture.py
  • src/mapify_cli/templates/codex/hooks/map-memory-endmark.py
  • src/mapify_cli/templates/codex/hooks/map-memory-recall.py
  • src/mapify_cli/templates/codex/hooks/map-memory-session.py
  • src/mapify_cli/templates/codex/hooks/map-stop.py
  • src/mapify_cli/templates/codex/hooks/map-token-meter.py
  • src/mapify_cli/templates/codex/hooks/post-compact-context.py
  • src/mapify_cli/templates/codex/hooks/pre-compact-save-transcript.py
  • src/mapify_cli/templates/codex/hooks/ralph-context-pruner.py
  • src/mapify_cli/templates/codex/hooks/ralph-iteration-logger.py
  • src/mapify_cli/templates/codex/hooks/safety-guardrails.py
  • src/mapify_cli/templates/codex/hooks/scrub-internal-ids.py
  • src/mapify_cli/templates/codex/hooks/workflow-context-injector.py
  • src/mapify_cli/templates/codex/hooks/workflow-gate.py
  • src/mapify_cli/templates/codex/references/map-json-output-contracts.md
  • src/mapify_cli/templates/codex/references/map-output-examples.md
  • src/mapify_cli/templates/codex/references/map-xml-prompt-envelopes.md
  • src/mapify_cli/templates/codex/skills/map-architecture/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-auto/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-auto/auto-reference.md
  • src/mapify_cli/templates/codex/skills/map-check/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-check/check-reference.md
  • src/mapify_cli/templates/codex/skills/map-debug/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-explain/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-fast/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-learn/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-learn/templates/example-rules.md
  • src/mapify_cli/templates/codex/skills/map-learn/templates/rules-unconditional.md
  • src/mapify_cli/templates/codex/skills/map-learn/templates/rules-with-paths.md
  • src/mapify_cli/templates/codex/skills/map-memory-now/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-plan/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-plan/plan-reference.md
  • src/mapify_cli/templates/codex/skills/map-release/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-release/release-reference.md
  • src/mapify_cli/templates/codex/skills/map-resume/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-resume/resume-reference.md
  • src/mapify_cli/templates/codex/skills/map-review/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-review/adversarial-reference.md
  • src/mapify_cli/templates/codex/skills/map-review/review-reference.md
  • src/mapify_cli/templates/codex/skills/map-skill-eval/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-so-search/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-so-search/scripts/sofa_search.py
  • src/mapify_cli/templates/codex/skills/map-state/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-state/scripts/check-complete.sh
  • src/mapify_cli/templates/codex/skills/map-state/scripts/get-plan-path.sh
  • src/mapify_cli/templates/codex/skills/map-state/scripts/init-session.sh
  • src/mapify_cli/templates/codex/skills/map-state/scripts/show-focus.sh
  • src/mapify_cli/templates/codex/skills/map-state/templates/findings.md
  • src/mapify_cli/templates/codex/skills/map-state/templates/iteration_history.md
  • src/mapify_cli/templates/codex/skills/map-state/templates/progress.md
  • src/mapify_cli/templates/codex/skills/map-state/templates/task_plan.md
  • src/mapify_cli/templates/codex/skills/map-task/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-tdd/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-tokenreport/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-understand/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-wayfind/SKILL.md
  • src/mapify_cli/templates/codex/skills/map-wayfind/wayfind-reference.md
  • src/mapify_cli/templates/hooks/README.md
  • src/mapify_cli/templates/hooks/map-memory-finalize.py
  • src/mapify_cli/templates/hooks/map-token-meter.py
  • src/mapify_cli/templates/hooks/post-compact-context.py
  • src/mapify_cli/templates/hooks/ralph-iteration-logger.py
  • src/mapify_cli/templates/hooks/safety-guardrails.py
  • src/mapify_cli/templates/hooks/workflow-context-injector.py
  • src/mapify_cli/templates/map/scripts/map_step_runner.py
  • src/mapify_cli/templates/references/hook-patterns.md
  • src/mapify_cli/templates_src/_partials/apply-patch-paths.py.jinja
  • src/mapify_cli/templates_src/_partials/codex-memory-hook-wrapper.py.jinja
  • src/mapify_cli/templates_src/codex/agents/actor.toml.jinja
  • src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja
  • src/mapify_cli/templates_src/codex/agents/documentation-reviewer.toml.jinja
  • src/mapify_cli/templates_src/codex/agents/evaluator.toml.jinja
  • src/mapify_cli/templates_src/codex/agents/final-verifier.toml.jinja
  • src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja
  • src/mapify_cli/templates_src/codex/agents/predictor.toml.jinja
  • src/mapify_cli/templates_src/codex/agents/reflector.toml.jinja
  • src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja
  • src/mapify_cli/templates_src/codex/config.toml.jinja
  • src/mapify_cli/templates_src/codex/hooks.json.jinja
  • src/mapify_cli/templates_src/codex/hooks/context-meter.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/detect-clarification-triggers.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/end-of-turn.sh.jinja
  • src/mapify_cli/templates_src/codex/hooks/map-memory-capture.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/map-memory-endmark.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/map-memory-recall.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/map-memory-session.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/map-stop.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/map-token-meter.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/post-compact-context.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/pre-compact-save-transcript.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/ralph-context-pruner.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/ralph-iteration-logger.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/safety-guardrails.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/scrub-internal-ids.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/workflow-context-injector.py.jinja
  • src/mapify_cli/templates_src/codex/hooks/workflow-gate.py.jinja
  • src/mapify_cli/templates_src/codex/references/map-json-output-contracts.md.jinja
  • src/mapify_cli/templates_src/codex/references/map-output-examples.md.jinja
  • src/mapify_cli/templates_src/codex/references/map-xml-prompt-envelopes.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-architecture/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-auto/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-auto/auto-reference.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-check/check-reference.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-debug/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-learn/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-learn/templates/example-rules.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-learn/templates/rules-unconditional.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-learn/templates/rules-with-paths.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-memory-now/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-plan/plan-reference.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-release/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-release/release-reference.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-resume/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-resume/resume-reference.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-review/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-review/adversarial-reference.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-review/review-reference.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-skill-eval/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-so-search/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-so-search/scripts/sofa_search.py.jinja
  • src/mapify_cli/templates_src/codex/skills/map-state/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-state/scripts/check-complete.sh.jinja
  • src/mapify_cli/templates_src/codex/skills/map-state/scripts/get-plan-path.sh.jinja
  • src/mapify_cli/templates_src/codex/skills/map-state/scripts/init-session.sh.jinja
  • src/mapify_cli/templates_src/codex/skills/map-state/scripts/show-focus.sh.jinja
  • src/mapify_cli/templates_src/codex/skills/map-state/templates/findings.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-state/templates/iteration_history.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-state/templates/progress.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-state/templates/task_plan.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-task/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-tdd/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-tokenreport/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-understand/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-wayfind/SKILL.md.jinja
  • src/mapify_cli/templates_src/codex/skills/map-wayfind/wayfind-reference.md.jinja
  • src/mapify_cli/templates_src/hooks/README.md.jinja
  • src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja
  • src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja
  • src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja
  • src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja
  • src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja
  • src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja
  • src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja
  • src/mapify_cli/templates_src/references/hook-patterns.md.jinja
  • src/mapify_cli/templates_src/skills/map-architecture/SKILL.md.jinja
  • src/mapify_cli/templates_src/skills/map-auto/SKILL.md.jinja
  • src/mapify_cli/update_state.py
  • tests/fixtures/codex/config.toml
  • tests/hooks/test_safety_guardrails.py
  • tests/test_agent_dispatch_audit.py
  • tests/test_decomposition.py
  • tests/test_hook_patterns.py
  • tests/test_install_manifest.py
  • tests/test_map_step_runner.py
  • tests/test_mapify_cli.py
  • tests/test_memory_capture.py
  • tests/test_memory_finalize.py
  • tests/test_skills.py
  • tests/test_skills_eval_runner.py
  • tests/test_template_render.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


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.

Mikhail [azalio] Petrov added 3 commits September 14, 2026 19:23
… ungated; guardrail allowlist precedence

Codex workflow-gate (.codex/hooks/workflow-gate.py):
- Only Bash commands with an EXTRACTABLE write target (>, >>, tee, sed -i,
  cp/mv/install, dd of=, sort/yq -o, git --output) and apply_patch headers go
  through the phase gate; a command with no target is not gated — parity with
  the Claude twin and the documented azalio#164 limitation. The previous fail-closed
  classifier denied the orchestrator's own `VAR=$(python3 .map/scripts/...)`,
  `SUBTASK_ID=$(jq ...)` and `TEST_OUTPUT=$(pytest ...)` lines in RESEARCH /
  TEST_FAIL_GATE / DECOMPOSE and deadlocked $map-efficient and $map-tdd.
- Targets are extracted per LINE, so a mutating second line can no longer hide
  behind a read-only first line (`echo hi\nsed -i ... src.py` was allowed).
- `2>&1)` inside a `$(...)` capture is a descriptor, not a file target.
- Unresolved targets (`> "$FILE"`, globs) stay denied outside editing phases.
- step_state.json is read once per call; the writer tables live in one place.

safety-guardrails.py: the sensitive-basename blocklist runs before the built-in
safe prefixes (unchanged from the PR), but an EXPLICIT `safe_path_prefixes`
list in .map/config.yaml now wins over the blocklist instead of being a dead
toggle; the unreachable `is_safe_path` branch is gone.

apply_patch header parsing is one shared partial
(templates_src/_partials/apply-patch-paths.py.jinja) used by all four hooks;
it accepts patch text or the hook tool_input mapping.

memory/capture.py: real Codex rollouts store apply_patch as a
custom_tool_call with a STRING input (or function_call with JSON arguments);
both shapes now populate files_touched.

pyproject.toml: mypy excludes only templates/map/scripts/ and the
duplicate-basename templates/codex/ copies; pyright checks the whole
templates/ tree again (100 -> 73 -> 93 files under mypy).

install_manifest: .agents/references is a Codex scan root.

Tests: explicit-target deny cases incl. multi-line, orchestrator-command allow
cases across phases, opaque-command parity cases, guardrail override, real
rollout capture shape, manifest references.
… hook ownership, hooks.json macro

- mapify_cli.codex_exec owns the `codex exec --json` argv and the JSONL event
  fold; memory finalize, skill-eval dispatcher and the description proposer
  all use it (finalize also gets --skip-git-repo-check, which the other two
  already passed).
- mapify_cli.provider_registry is the one place that spells provider names
  and their directories; validation sites, skill_dir lookups and
  update_state._PROVIDERS derive from it; dispatcher_for() picks the
  production dispatcher.
- `mapify _memory-hook`: finalize/recall helpers extracted, the composite
  `session` action reuses them, one output path; the unused Codex
  map-memory-finalize.py wrapper (never registered in hooks.json) is removed.
- codex_copier recognises MAP-owned hook registrations from the shipped
  .codex/hooks/ listing instead of a hand-maintained 18-name list;
  project-owned scripts in the same directory are preserved.
- hooks.json.jinja builds every registration through one launcher macro
  (rendered output is semantically identical).
- map-architecture and map-auto Codex twins are `[% include %]`s of the
  Claude source with PROVIDER-conditional frontmatter and command prefix;
  rendered output is byte-identical; a test pins the mechanism.
- Codex memory hooks fall back to `python -m mapify_cli` when `mapify` is not
  on PATH (new __main__.py); MAPIFY_CLI still wins.
- Dead `.removeprefix("$")` on the skill-eval marker removed; the HC-6
  tracker reference in skill-eval run is replaced by the actual invariant.
…rict_sensitive_names)

Default behaviour is back to what shipped before this PR: a file inside a safe
directory (built-in prefixes or safe_path_prefixes) is trusted as-is, so
src/config/secrets.yaml and tests/fixtures/credentials.json stay allowed on
upgrade. `strict_sensitive_names: true` in .map/config.yaml opts a project into
checking the sensitive-basename blocklist first, for Read/Edit/Write and Codex
apply_patch alike; in strict mode safe prefixes never mask a sensitive name.

Tests cover the default parity paths, strict-mode denies inside safe prefixes,
and strict mode ignoring an explicit prefix list. CHANGELOG/USAGE updated.
@azalio
azalio merged commit 4c4aca3 into azalio:main Sep 15, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants