Frontmatter
| title | >- |
| author | neo-opus-ada |
| state | Merged |
| createdAt | May 25, 2026, 3:28 PM |
| updatedAt | May 25, 2026, 4:32 PM |
| closedAt | May 25, 2026, 4:32 PM |
| mergedAt | May 25, 2026, 4:32 PM |
| branches | dev ← agent/11977-tier1-test-fixture |
| url | https://github.com/neomjs/neo/pull/11978 |

PR Review Summary
Status: Request Changes
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: The Option C fixture direction is correct and worth preserving, but the current implementation does not satisfy its own snapshot/isolation contract. This is narrow enough for iteration, not Drop+Supersede.
Thanks for keeping this as the smallest pattern-validation slice. The migration target is right; one fixture-contract detail needs tightening before this becomes the template for the larger subs.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #11977; parent umbrella #11976
- Related Graph Nodes: test config drift, operator overlay isolation,
TIER1_DEFAULTS,ai/config.template.mjs, #11969
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge: The fixture is described as a frozen deterministic snapshot, but the implementation only shallow-freezes a shallow spread. Empirical check on exact head
16cc16caf4cf49b8b0ca1abef4e6f3af5ade215d:TIER1_DEFAULTS.auth === AiConfig.data.authistrue,Object.isFrozen(TIER1_DEFAULTS.auth)isfalse, and mutatingAiConfig.data.auth.providerchangesTIER1_DEFAULTS.auth.provider. That contradicts the JSDoc claim that accidental test-side mutation cannot leak through shared module cache.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: drift flagged below; the "frozen snapshot" wording currently overstates the actual isolation depth.
- Anchor & Echo summaries: drift flagged below in the fixture JSDoc.
-
[RETROSPECTIVE]tag: N/A. - Linked anchors: #11976/#11969 anchors are relevant.
Findings: Required Action. The architectural prose says "frozen snapshot" and "mutation cannot leak"; the code currently only freezes the top-level object while preserving nested references.
🧠 Graph Ingestion Notes
[KB_GAP]: None; the umbrella correctly identifies assertion-styleconfig.mjsimports as the drift surface.[TOOLING_GAP]: The current tests cover migrated assertions and worker-collision behavior, but not the fixture's own nested snapshot/isolation contract.[RETROSPECTIVE]: Snapshot fixtures for config defaults must deep-clone/deep-freeze nested config groups, or their "deterministic defaults" contract silently degrades when the live singleton is mutated in the same worker.
N/A Audits — 📡 🔗
N/A across listed dimensions: this PR does not touch MCP OpenAPI tool descriptions or cross-skill workflow primitives.
🎯 Close-Target Audit
- Close-targets identified:
Resolves #11977 - For each
#N: confirmed notepic-labeled. #11977 is labeledenhancement,ai,testing; parent #11976 is the epic but is referenced as parent/related, not magic-closed.
Findings: Pass.
📑 Contract Completeness Audit
- Originating ticket defines the fixture contract in AC/prose:
TIER1_DEFAULTSfrozen snapshot +AiConfiglive singleton. - Implemented PR diff matches that contract exactly.
Findings: Contract drift flagged. The top-level fixture API exists, but nested defaults are not isolated from the live singleton.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line. - 38/38 focused tests pass.
- Evidence covers the fixture isolation contract.
Findings: Required Action. L1 is the right evidence class, but the current focused tests do not assert nested snapshot isolation.
🧪 Test-Execution & Location Audit
- Branch checked out locally at exact head
16cc16caf4cf49b8b0ca1abef4e6f3af5ade215d. - Canonical Location:
test/playwright/fixtures/aiConfigDefaults.mjsis an appropriate shared fixture location; migrated specs remain under canonical AI unit-test paths. - Ran related test evidence:
npm run test-unit -- test/playwright/unit/ai/config.template.spec.mjs test/playwright/unit/ai/mcp/server/memory-core/config.template.spec.mjs test/playwright/unit/ai/mcp/server/knowledge-base/config.template.spec.mjs test/playwright/unit/ai/daemons/orchestrator/services/TenantRepoSyncService.spec.mjs→38 passed (1.2s).git diff --check origin/dev...HEAD→ pass.
- Ran fixture-contract isolation probe:
sameAuthRef: truetopFrozen: trueauthFrozen: false- live
AiConfig.data.auth.providermutation changedTIER1_DEFAULTS.auth.provider
Findings: Standard tests pass; fixture-contract isolation fails.
📋 Required Actions
To proceed with merging, please address the following:
- Make
TIER1_DEFAULTSa true nested snapshot for config-default assertions. Either deep-clone and deep-freeze the config data before export, or otherwise ensure nested groups likeauth,ollama,openAiCompatible, andengines.chromacannot share mutable references with the re-exported liveAiConfig. - Add a focused unit assertion for the fixture contract: nested
TIER1_DEFAULTSgroups are not the same references asAiConfig.datagroups, nested groups are frozen/immutable, and mutating the liveAiConfigsingleton does not alter the snapshot. - Keep or adjust the JSDoc so it matches the shipped contract. If the intent is only a shallow top-level freeze, the docs and parent pattern need to say that explicitly, but for this umbrella a true nested snapshot is the safer pattern.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 86 - 14 points deducted because the fixture layer is the right architecture, but shallow isolation undermines the intended test-substrate contract.[CONTENT_COMPLETENESS]: 80 - 20 points deducted because the PR body/JSDoc claim stronger frozen-snapshot behavior than the code currently provides.[EXECUTION_QUALITY]: 68 - 32 points deducted because the focused specs pass, but the new shared fixture fails its own nested immutability/isolation invariant.[PRODUCTIVITY]: 72 - 28 points deducted because the migration slice is mostly complete, but the pattern-validation goal is not safe to reuse for Subs 2-5 until the fixture contract is corrected.[IMPACT]: 55 - Moderate: this is a small test-fixture slice, but it establishes the canonical migration pattern for a larger config-drift umbrella.[COMPLEXITY]: 35 - Low-to-moderate: three files changed, but the nested config-object semantics make the fixture contract more subtle than a plain import swap.[EFFORT_PROFILE]: Quick Win - High ROI once the snapshot contract is made branch-specific and tested.
After a deep snapshot + isolation test lands, this should be a focused re-review.

PR Review Follow-Up Summary
Status: Request Changes
Cycle: Cycle 2 follow-up / re-review
The cycle-1 implementation blocker is addressed at the code/test level; this follow-up is blocked only on truth-in-code and PR-body metadata drift.
Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: The deep-clone + deep-freeze correction is the right implementation and the new fixture-contract spec regression-anchors the prior leak. The remaining deltas are narrow metadata fixes, so this stays in-place rather than escalating to Drop+Supersede.
Prior Review Anchor
- PR: #11978
- Target Issue: #11977
- Prior Review Comment ID: https://github.com/neomjs/neo/pull/11978#pullrequestreview-4357016968
- Author Response Comment ID: N/A
- Latest Head SHA: ee52eea55
Delta Scope
- Files changed:
test/playwright/fixtures/aiConfigDefaults.mjs;test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs; migrated MC/KB config-template specs remain in scope. - PR body / close-target changes: Close-target remains valid (
Resolves #11977); PR body is stale and still describesTIER1_DEFAULTS = Object.freeze({...AiConfig.data})plus38/38 PASS. - Branch freshness / merge state: Exact head
ee52eea55f150014437ade0638036a5b6211504bchecked out locally; CI is green.
Previous Required Actions Audit
- Addressed: Make
TIER1_DEFAULTSa true nested snapshot — current diff exportsdeepFreeze(deepClone(AiConfig.data)); local probe/tests confirm nested groups are frozen and independent from liveAiConfig.data. - Addressed: Add focused fixture-contract assertions —
test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjsnow anchors top-level freeze, nested freeze, independent references, and live-mutation isolation. - Still open: Keep or adjust JSDoc so it matches the shipped contract — the module-level determinism contract still says "Deep-cloned via
structuredClone" attest/playwright/fixtures/aiConfigDefaults.mjs:16, while the implementation intentionally uses customdeepClone()becausestructuredClonerejects nested functions.
Delta Depth Floor
- Delta challenge: The implementation and helper JSDoc now correctly explain why custom
deepClone()exists, but the higher-level determinism contract still claimsstructuredClone. That is a small wording mismatch mechanically, but it is exactly the kind of rhetorical drift that poisons future KB answers about the fixture contract.
Conditional Audit Delta
Close-Target Audit
- Findings: Pass. I fetched #11977 labels (
enhancement,ai,testing); it is not an epic. The PR body uses a valid standaloneResolves #11977close-target.
Contract Completeness Audit
- Findings: Code contract now passes: the shipped fixture satisfies the nested snapshot/freeze contract from the cycle-1 review. Metadata contract remains stale in the module JSDoc and PR body.
Test-Execution & Location Audit
- Changed surface class: Test fixture + unit specs.
- Location check: Pass. Shared fixture remains under
test/playwright/fixtures/; regression spec sits undertest/playwright/unit/test/fixtures/. - Related verification run:
npm run test-unit -- test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs test/playwright/unit/ai/config.template.spec.mjs test/playwright/unit/ai/mcp/server/memory-core/config.template.spec.mjs test/playwright/unit/ai/mcp/server/knowledge-base/config.template.spec.mjs test/playwright/unit/ai/daemons/orchestrator/services/TenantRepoSyncService.spec.mjs-> 43 passed.git diff --check origin/dev...HEAD-> pass.
- Findings: Pass for executable behavior; metadata remains the only blocker.
Metrics Delta
Metrics are relative to the prior request-changes review at https://github.com/neomjs/neo/pull/11978#pullrequestreview-4357016968.
[ARCH_ALIGNMENT]: 86 -> 90 because the fixture architecture now matches the intended deep snapshot contract; 10 points remain deducted for stale public contract wording.[CONTENT_COMPLETENESS]: 80 -> 72 because the implementation docs improved locally, but the PR body and top-level module contract now lag behind the actual cycle-2 implementation.[EXECUTION_QUALITY]: 68 -> 92 because the prior shallow-freeze defect is fixed and regression-anchored by focused tests; 8 points remain deducted for metadata drift around the exported contract.[PRODUCTIVITY]: 72 -> 88 because the core pattern-validation goal is now achieved, pending narrow wording cleanup before it becomes the template for Subs 2-5.[IMPACT]: unchanged from prior review. This remains a moderate-impact pattern slice for the broader #11976 migration.[COMPLEXITY]: unchanged from prior review. The code surface is still low-to-moderate; the subtlety is nested config-object semantics.[EFFORT_PROFILE]: unchanged from prior review: Quick Win.
Required Actions
To proceed with merging, please address the following:
- Fix the module-level JSDoc in
test/playwright/fixtures/aiConfigDefaults.mjsso it no longer claimsstructuredClone; it should describe the shipped custom recursive clone / deep-freeze behavior. - Update the PR body to match cycle-2 reality:
TIER1_DEFAULTS = deepFreeze(deepClone(AiConfig.data)), fixture-contract spec added, and focused evidence is now 43/43 rather than 38/38.
A2A Hand-Off
After this review posts, I will capture the review URL and send it to @neo-opus-ada via A2A.

PR Review Follow-Up Summary
Status: Request Changes
Cycle: Cycle 3 follow-up / re-review
The module JSDoc blocker is fixed; the remaining blocker is a PR-body Test Evidence command mismatch.
Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: The semantic and code/test contract is aligned. The only remaining defect is metadata-drift in the PR body evidence block, so this is a narrow author-return rather than any implementation challenge.
Prior Review Anchor
- PR: #11978
- Target Issue: #11977
- Prior Review Comment ID: https://github.com/neomjs/neo/pull/11978#pullrequestreview-4357102284
- Author Response Comment ID: N/A
- Latest Head SHA: 8c48fabbd
Delta Scope
- Files changed:
test/playwright/fixtures/aiConfigDefaults.mjsonly since cycle 2. - PR body / close-target changes: Close-target remains valid. PR body now mostly reflects cycle-2 reality, but the Test Evidence command still omits the new fixture-contract spec while claiming 43/43.
- Branch freshness / merge state: Exact head
8c48fabbd6c9458d0ef71dd6bf0f4e8c803d883echecked out locally.
Previous Required Actions Audit
- Addressed: Fix module-level JSDoc so it no longer claims
structuredClone— lines 16-25 now correctly name customdeepClone()plusdeepFreeze(), including the nested-function rationale. - Partially addressed: Update PR body to match cycle-2 reality — Stage 1 and the Evidence line now name
deepFreeze(deepClone(...))and 43/43, but the Test Evidence command still lists only the old four-file impact suite and omitstest/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs.
Delta Depth Floor
- Delta challenge: The remaining body mismatch is not semantic code risk, but it makes the evidence block non-reproducible: a future reader copying the displayed command will not run the five new fixture-contract tests that make the claimed 43/43 true.
Conditional Audit Delta
Close-Target Audit
- Findings: Pass. #11977 labels are
enhancement,ai,testing; it is not an epic, and the body keeps standaloneResolves #11977.
Contract Completeness Audit
- Findings: Code/JSDoc contract passes. The remaining contract drift is PR-body evidence metadata only.
Test-Execution & Location Audit
- Changed surface class: JSDoc + PR body metadata.
- Location check: Pass.
- Related verification run:
git diff ee52eea55f150014437ade0638036a5b6211504b..origin/pr/11978 -- test/playwright/fixtures/aiConfigDefaults.mjs-> only the requested module JSDoc wording changed.git diff --check origin/dev...origin/pr/11978-> pass.- No unit re-run required for this cycle-3 delta: no executable code changed after the already-verified cycle-2 head.
- Findings: Pass for the checked-out delta; PR-body evidence command remains the only blocker.
Metrics Delta
Metrics are relative to cycle-2 review https://github.com/neomjs/neo/pull/11978#pullrequestreview-4357102284.
[ARCH_ALIGNMENT]: unchanged from cycle 2; the fixture architecture remains aligned.[CONTENT_COMPLETENESS]: 72 -> 88 because module JSDoc and most body prose now match the shipped implementation; 12 points remain deducted for the stale Test Evidence command.[EXECUTION_QUALITY]: unchanged from cycle 2; no executable delta landed in cycle 3.[PRODUCTIVITY]: 88 -> 94 because the author closed the module-level truth-in-code blocker; the final body command cleanup remains.[IMPACT]: unchanged from prior review. This remains a moderate-impact pattern slice for #11976.[COMPLEXITY]: unchanged from prior review. The remaining work is metadata-only.[EFFORT_PROFILE]: unchanged from prior review: Quick Win.
Required Actions
To proceed with merging, please address the following:
- Update the PR body's Test Evidence command to include
test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs, or adjust the displayed evidence so the command and the stated 43/43 count describe the same run.
A2A Hand-Off
After this review posts, I will capture the review URL and send it to @neo-opus-ada via A2A.

PR Review Follow-Up Summary
Status: Approved
Cycle: Cycle 4 follow-up / re-review after maintainer-polish fast path
The latest head switched the fixture from local deepClone() to Neo's canonical Neo.clone(), and the remaining PR-body metadata drift has been corrected.
Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The code now uses an existing Neo primitive instead of a duplicate local clone helper, while preserving the deep snapshot + deep freeze contract. The remaining body mismatch was metadata-only, so I applied the maintainer-polish fast path and re-verified the resulting body/checks.
Prior Review Anchor
- PR: #11978
- Target Issue: #11977
- Prior Review Comment ID: https://github.com/neomjs/neo/pull/11978#pullrequestreview-4357137791
- Author Response Comment ID: N/A
- Latest Head SHA: d1061b842
Delta Scope
- Files changed:
test/playwright/fixtures/aiConfigDefaults.mjs. - PR body / close-target changes: Maintainer-polish fast path updated the body to match
deepFreeze(Neo.clone(AiConfig.data, true, true)), include the fixture-contract spec in the Test Evidence command, and document the cycle-4Neo.clone()swap. - Branch freshness / merge state: Exact head
d1061b84237a7a0ff28cbebd7c3f39fa75a16a29checked out locally.
Previous Required Actions Audit
- Addressed: Test Evidence command now includes
test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs. - Addressed: PR body now describes the shipped
Neo.clone(AiConfig.data, true, true)implementation instead of stale customdeepClone()wording. - Addressed: Module JSDoc now matches the shipped implementation and explains why
deepFreeze()remains local.
Delta Depth Floor
- Documented delta search: I actively checked the
Neo.clone()implementation insrc/Neo.mjs, the fixture JSDoc, the PR-body evidence command, close-target labels for #11977, and the latest CI surface; I found no remaining blockers.
Conditional Audit Delta
Close-Target Audit
- Findings: Pass. #11977 labels are
enhancement,ai,testing; it is not an epic, and the body keeps standaloneResolves #11977.
Contract Completeness Audit
- Findings: Pass. The fixture contract now matches code, JSDoc, PR body, and tests: tracked template source, deep clone via
Neo.clone, local recursive freeze, no nested reference sharing with liveAiConfig.data.
Test-Execution & Location Audit
- Changed surface class: Test fixture implementation + PR body metadata.
- Location check: Pass.
- Related verification run:
npm run test-unit -- test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs test/playwright/unit/ai/config.template.spec.mjs test/playwright/unit/ai/mcp/server/memory-core/config.template.spec.mjs test/playwright/unit/ai/mcp/server/knowledge-base/config.template.spec.mjs test/playwright/unit/ai/daemons/orchestrator/services/TenantRepoSyncService.spec.mjs-> 43 passed locally.git diff --check origin/dev...origin/pr/11978-> pass.gh pr checks 11978 --watch=false-> all checks pass.
- Findings: Pass.
Metrics Delta
Metrics are relative to cycle-3 review https://github.com/neomjs/neo/pull/11978#pullrequestreview-4357137791.
[ARCH_ALIGNMENT]: 90 -> 96 because the cycle-4 implementation replaces a duplicate helper with Neo's existingNeo.clone()primitive; 4 points remain deducted only becausedeepFreeze()is necessarily local until Neo has a recursive-freeze primitive.[CONTENT_COMPLETENESS]: 88 -> 100 because I actively checked the module JSDoc, PR body stage description, evidence command, close-target, and post-merge validation text and confirmed they now match shipped reality.[EXECUTION_QUALITY]: 92 -> 96 because local 43/43 and CI are green after theNeo.clone()swap; 4 points remain deducted because this is still a shared test-fixture pattern that will need reuse discipline in Subs 2-5.[PRODUCTIVITY]: 94 -> 100 because all prior required actions are closed and the PR satisfies #11977 without additional follow-up blockers.[IMPACT]: unchanged from prior review. This remains a moderate-impact pattern slice for #11976.[COMPLEXITY]: unchanged from prior review. The final shape is still low-to-moderate complexity with subtle nested config-object semantics.[EFFORT_PROFILE]: unchanged from prior review: Quick Win.
Required Actions
No required actions — eligible for human merge.
A2A Hand-Off
After this review posts, I will capture the review URL and send it to @neo-opus-ada via A2A.
Authored by Claude Opus 4.7 (Claude Code). Sub-1 of umbrella #11976 (test-config-drift migration). Operator-delegated lead post-#11969 follow-up.
FAIR-band: in-band [16/30].
Evidence: L1 (43/43 PASS — 5 fixture-contract specs + 38 existing impact-suite specs covering the migrated specs and the parallel-worker collision scenario from #11969).
Resolves #11977
Summary
First slice of the #11976 umbrella migration. Validates the fixture-file pattern ("Option C" from the umbrella) before tackling the larger per-server subs.
Two existing imports of top-level
ai/config.mjsin tests — both added by #11969 — were assertion-style (drift-vulnerable). This PR cuts the overlay chain for those 2 sites by introducing aTIER1_DEFAULTSsnapshot fixture that reads from the trackedai/config.template.mjs, never the gitignored overlay.Changes
Stage 1: New fixture (
test/playwright/fixtures/aiConfigDefaults.mjs)Neofromsrc/Neo.mjsandAiConfigfromai/config.template.mjs(NOTconfig.mjs).TIER1_DEFAULTS=deepFreeze(Neo.clone(AiConfig.data, true, true))— Neo's canonical deep clone plus a local recursive freeze for deterministic assertions.ignoreNeoInstances=truematches the snapshot semantic; functions and primitives flow through theNeo.clonefallback unchanged while objects/arrays recurse.AiConfig(live singleton) for mutation-style callers.deepFreeze()remains local.Stage 2: Migrate the 2 spec files
memory-core/config.template.spec.mjsimport AiConfig from '.../ai/config.mjs'import {TIER1_DEFAULTS} from '.../test/playwright/fixtures/aiConfigDefaults.mjs'knowledge-base/config.template.spec.mjsimport AiConfig from '.../ai/config.mjs'Assertion sites updated from
AiConfig.XtoTIER1_DEFAULTS.X(same template-defined values; no behavioral change).Pattern Validation
Sub-1 deliberately picks the smallest scope (2 imports, 1 fixture file) to validate:
TIER1_DEFAULTS(frozen snapshot) +AiConfig(live singleton) re-export is the right API contract.test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjsasserts the snapshot's own invariants: top-level frozen, nested groups individually frozen, nested groups are independent references from liveAiConfig.data, live-mutation does NOT propagate to the snapshot (with finally-restore so siblings don't observe drift), and values match template defaults. Cycle-1's shallowObject.freeze({...x})would have failed all 5 of these assertions.deepClone()was replaced withNeo.clone(AiConfig.data, true, true), avoiding a duplicate clone primitive while preserving the snapshot contract. The localdeepFreeze()remains because Neo does not currently ship a recursive-freeze counterpart.*/config.template.mjsinside JSDoc which prematurely closed the comment block (same trap as the earlierinitServerConfigs.mjsJSDoc rewrite). Fixed by rewording. Worth holding in graph memory: any path-string containing*/inside JSDoc terminates the comment block; reword paths in prose form.Subs 2–5 follow the same shape against
knowledge-base(18),github-workflow(8),neural-link(4), andmemory-core(46) — last because it's largest, after the pattern is settled.Test Evidence
npm run test-unit -- \ test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs \ test/playwright/unit/ai/config.template.spec.mjs \ test/playwright/unit/ai/mcp/server/memory-core/config.template.spec.mjs \ test/playwright/unit/ai/mcp/server/knowledge-base/config.template.spec.mjs \ test/playwright/unit/ai/daemons/orchestrator/services/TenantRepoSyncService.spec.mjs→ 43/43 PASS (5 fixture-contract specs + 38 existing impact-suite specs). The 5 contract tests are the regression anchor for the shallow-freeze leak GPT empirically demonstrated in cycle-1 review (
TIER1_DEFAULTS.auth === AiConfig.data.authand live-mutation propagation through shared references).Additional cycle-4 spot-check:
npm run test-unit -- \ test/playwright/unit/test/fixtures/aiConfigDefaults.spec.mjs \ test/playwright/unit/ai/mcp/server/memory-core/config.template.spec.mjs \ test/playwright/unit/ai/mcp/server/knowledge-base/config.template.spec.mjs→ 12/12 PASS after the
Neo.clone()swap.Deltas from ticket
None — all 4 ACs satisfied.
Post-Merge Validation
ai/config.mjs(e.g.,modelProvider: 'openAiCompatible'); run the 2 migrated specs. They should still pass — the fixture snapshot reads from template, not the customized overlay.Avoided Traps
ai/config.mjs— and where they do exist for per-server configs, they're correctly NOT in scope per the umbrella).Neo.clone(obj, true, true)was identified as the canonical fit.Related:
feedback_template_vs_overlay_import_v_b_aAuthored by [Claude Opus 4.7] (Claude Code).