Repository navigation
epic(194): recurring maintenance and contributor quality policy - #284
Merged
Merged
Conversation
Recent feature PRs merged while the automatic quality and test jobs were skipped, so contracts such as FFmpeg publication, caption schema validation, chat-dock handoff, and permission precedence reached main without an integration check. The review records what is verified, what stays conditional, and which PRs should have been held, so cleanup starts from evidence rather than file size. Contributor blocking is defined as an evidence-based policy. The blocklist stays empty until attribution and review gates can support it.
LESSONS.md records what the 2026-10-13 review found merged work got wrong, as rules with evidence and a review-day count, so agents read the rule before repeating the mistake. AGENTS.md and CLAUDE.md point to it. The regression docs now cite reference practice for each fix, link the lessons, and index the seven epics (#188 to #194) and their 37 sub-issues. Each sub-issue is worked in its own worktree and merged into its epic branch, and the epic merges into main in one reviewed PR.
The quality and test jobs were gated on a release/* or release-v* head branch, so an ordinary PR, including a PR into an epic branch, reported green check names without running anything. LESSONS.md records 77 of 84 merged PRs never running them. Run quality and test on every non-draft pull request regardless of base branch, keep them off drafts (which cannot be merged), and stop excluding dependency-bot actors. Add a push trigger for main and epic/** so the integrated head is validated too. Add a ci-gate job named "CI Gate" that needs quality, test, browser-e2e and build and runs with if: always(). It succeeds only when quality, test and build all succeeded; a skipped, cancelled or failed required job is a failure, so a skipped job cannot read as green. Browser E2E is accepted only when it was not requested, and a draft PR is accepted because GitHub cannot merge it. Values reach the script through env, and every action reference remains a full commit SHA. Refs #196 (cherry picked from commit 952c925)
The quality and test jobs were gated on a release/* or release-v* head branch, so an ordinary PR, including a PR into an epic branch, reported green check names without running anything. LESSONS.md records 77 of 84 merged PRs never running them. Run quality and test on every non-draft pull request regardless of base branch, keep them off drafts (which cannot be merged), and stop excluding dependency-bot actors. Add a push trigger for main and epic/** so the integrated head is validated too. Add a ci-gate job named "CI Gate" that needs quality, test, browser-e2e and build and runs with if: always(). It succeeds only when quality, test and build all succeeded; a skipped, cancelled or failed required job is a failure, so a skipped job cannot read as green. Browser E2E is accepted only when it was not requested, and a draft PR is accepted because GitHub cannot merge it. Values reach the script through env, and every action reference remains a full commit SHA. Refs #196 (cherry picked from commit 952c925)
…ook (#238) Define the recurring maintenance review in doc/maintenance/review-process.md: cadence and owner, the review scope, the report format, how bounded cleanup pull requests are selected, and the LESSONS.md step for adding, incrementing, and promoting a lesson. Record the first dry run in doc/maintenance/2026-10-14-weekly-dry-run/README.md against head d182f23, in the documented format, with the real check output and the checks that could not run. Scheduling a recurring job is a separate maintainer decision and is not live. Closes #230
Records what each live channel provider actually does, per provider and per runtime, with a path:line citation for every cell and the live consumer named. Covers the plugin runtime (shared/channels, Slack/Discord/Telegram/Lark), the gateway runtime (shared/services/gateway, WhatsApp/iMessage webhooks and the feishu, linear, sms adapters), and the legacy slack-gateway path. Documents inbound transport, credentials source, user identity, permissions, persistence, scheduling, and stop behavior for each. Findings recorded: the gateway runtime has no production caller of startGateway(), so its adapter map is empty and the WhatsApp and iMessage webhook routes return 503; the gateway_* tables have no migration; the legacy Slack gateway runs with no permission or persistence layer; and the two live Slack stacks are uncoordinated. Ends with a decision-needed section listing candidate canonical runtimes and stating that migration is a separate issue. No runtime is chosen here.
…cy replay (#239) Checkpoint 7 of the regression maintenance plan asks for the records behind the contributor quality policy. This adds the incident record template, an empty blocklist with its entry schema, a schema check with fixtures, and the replay of the thresholds against the documented historical cases. The incident template follows blameless postmortem practice: it records the failed contract and the gate that missed it, not a judgement of a person. The blocklist is empty and names no contributor, vendor, model family, or agent session. An entry requires evidence, affected scope, effective date, expiry, remediation, and an appeal link. The check validates the committed blocklist, accepts the valid fixture, and rejects the fixture that is missing a required field. The replay places stacked PRs #102, #103 and #105, manual CI #176, and the different-authors case below the probation threshold of two. It counts the stacked chain once, does not blame the corrective author, and does not count the environment-specific resolve.test.ts failure.
git-workspace derived its repos and sessions directories from homedir()
at import time, and the local archive adapter defaulted to the previous
brand directory .neuma. Both ignored NEUMAR_APP_DATA_DIR, so tests and
packaging could write into the developer's real home directory.
Resolve the repos and sessions roots through getAppDir() per call, and
default the archive root to {app data dir}/archive. A pre-rebrand
.neuma/archive tree is renamed to the new root on the first write, so
archives published before the rebrand stay reachable; an injected rootDir
is left untouched.
Refs #226
…nd CI (#244) The tracked architecture pages still described a browser IndexedDB fallback, Vite 7, TypeScript 5.8, Node 20 build targets, a Bun-compiled API sidecar, and a tauri-action release step. None of those match the current tree. Take each statement from its source of truth: src/shared/db/database.ts (an API client for the /db routes), the manifests in package.json, src-api/package.json, and src-tauri/Cargo.toml, and .github/workflows/ci.yml plus build.yml. Also correct stale details found while verifying: react-markdown replaced by streamdown, the Tauri migration list, the workspace member list, the pnpm and oxlint/oxfmt claims, and the validate script summary.
A failed read used to mean "empty", so an unguarded ALTER TABLE on a table that does not exist aborted ten later migrations and left the database half-upgraded with no error. `addColumnIfMissing` now names the missing table instead of surfacing SQLite's generic message. The new suite drops each table a migration alters, reruns the registry, and asserts the resulting schema and applied versions match a database built from scratch. Migrations that repair a missing video intent table are listed explicitly; every other missing prerequisite is corruption and must throw without advancing the version.
…262) The wrapper typed every handler as (args: never) and round-tripped the tool list and resolved args through `as unknown as` / `as never`. Give the handler a single bivariant input type (projectId: string, rest unknown) so each tool's own typed handler is assignable without a cast and valid calls compile at the call site. Tool names, descriptions and input schemas are unchanged on the wire. Add a compile-time check that the wrapped handler types projectId. Refs #224
…263) * fix(api): make unsupported 501 routes truthful and pin V1 task route POST /memory/entities/extract, /memory/consolidate and the chat surface of POST /plugins/:id/apply now answer 501 not_available_over_http with a reason that names no unreachable alternative. No UI or external caller exists for any of them. Keep /task/:taskId mounted as the reversible assumption pending the open V1 retirement decision, and pin both task routes with a wiring test. Refs #223 * docs(task): reflect approved V1 route retention Refs #223
…#273) Move the four vivid-overlay library tools (list presets, save preset, save style from template, save user document) plus their exclusive schemas and color-normalization helper into src-api/src/shared/mcp/video-overlay-library-tools.ts. The factory receives session resolution, the proposal-only policy, and the result helpers from the host, so registration still passes through the typed wrapper and each tool name, description, schema, and registration position is unchanged. The real MCP tools/list inventory is byte-identical before and after for all four transcript/multicam flag combinations. video-edit-server.ts drops from 7,157 to 6,879 lines. Refs #228
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 14 minutes. View limit details
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. Comment |
… into merge/194-onto-main
7 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #194
Adds the PR evidence template, a manual weekly/pre-release maintenance process with accountable ownership and expiring exceptions, and contributor-policy records. The records include an incident template, an empty blocklist with a shared validator, fixtures, and a replay against documented historical cases. No scheduled job, access restriction, or repository settings change is enabled.
All three sub-issues (#229, #230, #231) are merged. Main through E6 (
9539e2ab) was integrated cleanly. Final verified head:1eed6f135d7aa8a3b1614deb4d5ae4234b15bd6b.Verification at that exact head, Node v26.11.1 / pnpm 11.22.0:
pnpm validate: passed.pnpm test:fast: passed, 407 frontend files / 1,837 tests and 608 API files / 4,058 tests; 3 API files and 6 tests skipped.GITHUB_BASE_REF=main pnpm check:warning-baseline: passed.node --test doc/maintenance/incidents/check-blocklist.test.mjs: all five tests passed.All non-skipped CI checks passed at the final head. Squash merged into main as
aaca138d7c3773be662941b4081c8d97ea40019c. Browser E2E, live provider calls, and release operations were not run locally. The historical dry-run report records its original source baseline and does not claim to describe the newly integrated code. Related epic issue #194 remains open; no automatic closing keyword is added.