This document lists the people responsible for maintaining opencodex and defines the project's review and merge policy.
| GitHub account | Project role | Responsibilities |
|---|---|---|
| @lidge-jun | Project owner | Project direction, releases, repository administration, and final governance decisions |
| @Ingwannu | Maintainer | Issue and pull-request triage, dev integration, security review, and repository maintenance |
The table describes project responsibilities. Actual repository permissions remain controlled through GitHub repository settings.
dev is the only integration line. The former dev2-go carry duty is retired;
see The retired dev2-go line.
| GitHub account | Project role | Period |
|---|---|---|
| @Wibias | Maintainer | 2026-07-27 – 2026-08-19 |
Former maintainers keep contributor standing and are welcome to open issues and pull requests like anyone else. Authorship credit in git history, release notes, and code comments is not rewritten when a maintainer steps down.
-
Pull requests target
dev. It is the only integration line, and promotion tomainhappens only fromdev. The target-branch check acceptsdevalone. -
The
enforce-targetCI check rejects pull requests whose head ancestry sits on themaintip while far behinddev, and rejects empty, thin, or malformed descriptions; PRs whose title or description mentionsguimust include a screenshot of the UI change in the description. Contributor PRs (authors without repository push permission) open in draft and stay there until a four-box review-readiness checklist in the description is complete: local CI green, branch on the latestdevcommit, all correct Codex and CodeRabbit findings fixed, and the ready-for-review confirmation. When all four boxes are ticked the gate marks the PR ready and notifies the maintainers listed inMAINTAINERS.md(excluding the author). Completion is bound to the exact commit the PR head pointed at: if new commits are pushed afterwards, the gate moves the PR back to draft, resets the checklist and the notification, and asks the author to test and tick the boxes again against the latest code. Before a completion is accepted, the gate verifies the checklist claims it can check itself: the branch must be on the latestdevcommit or at most 10 commits behind it, and Codex/CodeRabbit findings must be resolved. The local-CI box is an author attestation only — fork contributors cannot start repository CI; a maintainer has to — so the gate never disproves it; a new push still resets every box. A disproved claim unticks the matching box and keeps the PR a draft. Authors with repository push permission skip the ancestry heuristic only. As with the approval requirement above, this part is enforced by convention; the ruleset does not check ancestry (see the note under the change log). -
Pull requests require successful required CI checks before merge. Contributor pull requests normally require approval from at least one maintainer other than the author.
-
A current maintainer with GitHub
maintainoradminaccess may explicitly integrate a pull request intodevwithout another maintainer's approval, including their own pull request. Record that choice and the exact-head verification in the pull-request description or comment. This is maintainer integration, not a self-approval or an independent review. Outstanding maintainer change requests must still be resolved or explicitly withdrawn. Technical review, attribution, documentation and security-review duties remain in force. -
The maintainer-integration exception applies only to
dev. It does not change review rules formainorpreview, grant contributor authors approval authority, or permit direct pushes, force-pushes or branch deletion. Authors do not submit approving reviews of their own work. -
Authentication, credential handling, GitHub Actions, release automation, dependency installation, and other security-boundary changes require explicit security review.
-
A new or promoted provider preset is a credential-destination change. Before merge it needs the primary-source evidence listed under Adding a provider to the catalog: documented OpenAI-compatible endpoints (including authenticated
GET /v1/modelswhen the entry declaresliveModels), terms of service and operating legal entity, resale or routing authorization for aggregators, a named maintenance owner, and a citable verification date. Contributor affiliation with the service is disclosed, not disqualifying, and it does not lower the evidence bar. When the evidence is incomplete, prefer an inertsrc/providers/free-directory.tsreference row over a canonical registry entry. -
Security-sensitive and release-related changes should be reviewed by both maintainers when practical.
-
Integration uses pull requests, including urgent maintainer repairs. The PR-only ruleset bypass does not authorize direct pushes; incident changes to branch protection require a separate owner decision.
-
Promotion from
devtomainand npm releases is maintainer-controlled. -
Opening a release starts by moving
dev's version line forward. Before cutting a release,devmust already outrank the version being released;release.ymlasserts this and refuses to publish otherwise. Dispatch.github/workflows/dev-version-bump.ymlwith the intended version, merge the pull request it opens, then promote and release. Whendevalready outranks the target — a preview cut, or a stable hotfix belowdev's line — no move is needed and the workflow reportschanged=false.Opening a preview for the next core ends the current patch line. After
vX.Y.0-preview.*is tagged, a fix ships as part ofX.Y.0, not asX.(Y-1).(Z+1). The release helper refuses such a bump rather than producing a version the repository would reject. This is a deliberate policy restriction, not a claim that lower stable patches were historically unused.Done after the publish, as this repository did for ten releases (
32529c2b2,e4a85d134,076ad3036,befcac3e1, then #3045, #3076, #3127, #3265, #3354, #3434), it leavesdevand every open pull request carrying a failure contributors cannot fix from their own diff. The pull request itself does not go away —Protect devrequires a reviewed merge. If the pre-move is missed and publication somehow succeeds, dispatchdev-version-bump.ymlfrom the default branch with the released version andmode=repair, then merge the repair pull request. Design:devlog/_plan/260904_release_version_line/.
dev2-go was a parallel integration line that rebuilt the runtime as a Go
native port, and policy required every merge into dev to be rebased onto it
and ported under go/. That policy is withdrawn as of 2026-07-30.
The dual-track cost outran its return: the carry backlog never cleared (17
commits and 9 open needs-go-port issues at the time of the decision, against
594 commits of divergence), and dogfooding the Go runtime kept producing new
defects. Bun-native TypeScript on dev is the single runtime line again.
- The branch has been deleted from this repository. Its full history is
published at
lidge-jun/opencodex-go-archive,
and its final tip stays reachable here as the
archive/dev2-gotag. - A merge into
devcarries no port obligation. The nine openneeds-go-portissues (#661, #663, #666, #670, #674, #678, #680, #685, #703) were closed as not planned, and theneeds-go-portlabel no longer exists on the repository. - Future native work is expected to be an incremental module landing on
dev(Rust via N-API is the current candidate), not a second integration branch. Reopening a parallel runtime line is an owner decision.
Adding or removing a maintainer requires:
- agreement from the project owner,
- review by another current maintainer when available, and
- updates to this file and
.github/CODEOWNERS.
-
2026-09-06 — The owner authorized explicit maintainer integration into
devwithout a second maintainer approval. Both current maintainers haveadminaccess. The dev-only PR bypass includes GitHub'sadminandmaintainroles;writeaccess alone is insufficient. Contributor review remains the default and themain/previewrules are unchanged. The optionalscripts/ci/assert-mergeable-review.sh --maintainer-integration <pr-number> [repo]path checks the authenticated actor against the trusteddevroster and live repository permissions, preserves outstanding maintainer objections, and binds its result to the current head and base. The helper emits a validation snapshot, not a ready-to-run privileged merge command: head matching does not pin a PR's base, which may change after inspection. Revalidate the current actor anddevbase before a separately authorized merge. The helper is not proof of CI or security review and not a barrier against an administrator bypassing it. Repository settings remain authoritative for actual permissions. -
2026-08-19 — @Wibias stepped down as a maintainer and is now a contributor. This follows his own decision to stop developing opencodex; it is not a disciplinary action, and it was made with the owner's agreement (requirement 1). Requirement 2 does not apply to a maintainer's own resignation, which needs no second maintainer to ratify it. Requirement 3 is met by this file and
.github/CODEOWNERS, where the default-reviewer line and the four runtime paths that listed him (/src/adapters/,/src/providers/,/src/codex/,/src/server/) drop back to the two remaining maintainers. Repository permission was reduced to read access at the same time, so the roster and the GitHub settings agree again.Nothing he authored is being unwound. His commits, the pull requests he merged, the release-note attributions, and the code comments citing his reviews stay exactly as they are, and the trust-lane gate derived from his work in
.github/scripts/pr-sponsored-surface.cjskeeps its attribution. Returning to the maintainer table later would go through the same three requirements that govern every addition. -
2026-07-27 — @Wibias added as a maintainer. Requirement 1 (agreement from the project owner) is met: the owner requested the addition. Requirement 2 (review by another current maintainer) was never satisfied in the form this document describes. The three commits that carried the addition (
a2693c02,dc3a4ade,02bbd47a) landed ondevas direct owner pushes with no associated pull request, so no second maintainer reviewed them. Requirement 3 is met by this file and.github/CODEOWNERS. The addition took effect regardless: @Wibias held write access on the repository and merged pull requests from 2026-07-26 until he stepped down on 2026-08-19. This entry records the gap rather than papering over it — a later maintainer change should go through a reviewed pull request.Scope covers issue and pull-request triage,
devintegration, and provider/CI maintenance. (This entry originally also described carrying mergeddevwork ontodev2-go; that duty ended when the line was retired on 2026-07-30.) Security-boundary ownership in.github/CODEOWNERSis deliberately unchanged: authentication, credential handling, GitHub Actions, and release automation keep the two owners already listed for those paths, so this addition does not widen the review surface for them.Code-owner approval and the maintainer-approval requirement above are both enforced, not conventions.
dev,main, andprevieweach carry an active repository ruleset — the classic/branches/{branch}/protectionendpoint returns 404 for them, which is why this file long described the repository as unprotected.Protect dev(id 20763889) requires a pull request with one approving review, code-owner review, and extra approval for unattributed changes, and it blocks deletion and non-fast-forward pushes. Allowed merge methods are merge and squash; rebase merges are off.At that time, the actual PR bypass covered
admin; the earlier wording that includedmaintainwas inaccurate. The 2026-09-06 policy above adds the explicit maintainer-integration exception fordevand the correspondingmaintainrole. Both roles bypass through pull requests only. Force-push and deletion protections remain in place, and the integrating maintainer records the decision and evidence.
Private vulnerability reports are handled by the current maintainers according to
SECURITY.md. Do not disclose secrets or exploit details in a public issue.