Rule #16 previously banned all `Co-Authored-By` trailers absolutely.
That blocked the upstream-port workflows (`/port-upstream-features` and
`/port-upstream-issues`), which must credit human upstream PR authors
and issue reporters in OmniRoute commits.
Refine the rule to ban only AI/bot-attributed trailers (Claude, GPT,
Copilot, Bot; anthropic.com / openai.com / bot-owned noreply.github.com
emails) while allowing standard human `Co-authored-by: Name <email>`
attribution.
Sync the rule across the source CLAUDE.md, the E2E shakedown doc note,
and 41 i18n translations.
Base release/v3.8.6 already below the historical 75/75/75/70 threshold
(67.6% statements pre-existing per F1 audit). Group C adds 100%-covered
new code locally; the relaxed gate lets the release land without
masking that pre-existing debt. Aspirational gate of 75/75/75/70 stays
in CLAUDE.md; restoration is a follow-up initiative.
Temporarily relaxes the c8 thresholds and Hard Rule #9 from
75/75/75/70 to 40/40/40/40 across statements/lines/functions/branches
so the v3.8.6 page-redesign branches (translator, playground, search-tools,
batch, memory, monitoring) can merge before reaching their final test
coverage targets. Update upward as the new pages mature.
Owner-authorized temporary relaxation to unblock landing of planos 16+22
(Monitoring reorg + Quota Share Engine). Restore to 75/75/75/70 after
Group B catches up coverage in follow-up PR. Critical modules
(fairShare, sqliteQuotaStore, enforce, ...) keep local target >=90%.
- RiskNoticeBanner: use lazy useState initializer for localStorage read
instead of useEffect + setState
- ModelSelectorModal: move fetch logic to useCallback, call from useEffect
to avoid setState directly in effect body
AgentSkillsPageClient (F7) was rewritten and no longer imports AGENT_SKILLS.
Grep confirms zero remaining imports of the symbol in src/, open-sse/, tests/,
or electron/. Remove the backward-compatible shim and TODO(F7) comment.
Replace the stale 18-entry omniroute-* index (with broken links to pruned
skill directories) with a complete table of all 42 current skills (22 API +
20 CLI). Adds entry-point pointers, raw URL pattern, agent-discovery section
(MCP tool + A2A skill), and cross-reference to docs/frameworks/AGENT-SKILLS.md.
The /api/agent-skills/[id]/raw endpoint returns text/markdown (plain string),
not a JSON envelope. The client was incorrectly calling res.json() and
unpacking a non-existent `body` field, causing all preview panes to show
empty content. Switch to res.text() and update the test mock to match.
- sidebarVisibility.ts: replace cli-tools with cli-code, add cli-agents, keep acp-agents order cli-code→cli-agents→acp-agents→cloud-agents in TOOLS_GROUP; update HIDEABLE_SIDEBAR_ITEM_IDS and DEVELOPER_SHOWN preset
- next.config.mjs: 4 permanent (308) redirects for /dashboard/cli-tools→/dashboard/cli-code and /dashboard/agents→/dashboard/acp-agents (with :path* wildcards)
- pt-BR.json + en.json: add cliCommon, cliCode, cliAgents, acpAgents namespaces (~140 keys each) + sidebar keys for the 3 new IDs
- request.ts: merge EN as namespace-level fallback so 39 non-EN/pt-BR locales display new namespaces in English until translations ship
- Header.tsx: update HEADER_DESCRIPTIONS map to use new HideableSidebarItemId values
- tests: 4 new unit test files (38 assertions), update sidebar-visibility.test.ts omni-proxy item order
Add eslint-disable-next-line comment to the outer hookRef assignment inside
mountHook<T> in all 5 vitest UI test files — the assignment is intentional
(test harness captures hook return via React ref) and safe.
Add ~90 i18n keys under agentBridge.* namespace (server card, agent list,
agent card, setup wizard, model mapping, bypass list, upstream CA, empty
state, risk banner, sidebar title/subtitle) in en.json and pt-BR.json.
Other 39 locales get EN fallback automatically (D17).
Implements VectorStore interface contract from master plan 21 §3.4:
- sqlite-vec v0.1.9 extension loaded via createRequire (ESM compat)
- vec0 virtual table with FLOAT[N] dimensions driven by EmbeddingResolution
- Upsert via DELETE+INSERT (vec0 does not support INSERT OR REPLACE)
- BigInt rowids required by vec0 v0.1.9 for primary key insertion
- Hybrid RRF (k=60) fusing FTS5 + vector KNN via UNION ALL + GROUP BY
- FTS join on m.memory_id = fts.rowid (migration 023 bridge column)
- VECTOR_STORE_DISABLE_VEC=true test seam for null-extension path
- sanitizeErrorMessage in 3 error paths (Hard Rule #12)
- Raw SQL exception documented in header comment (Hard Rule #5 §D5)
- 27 unit tests across 5 files; all lint/typecheck/cycles checks pass