Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Migrate Gaal implement/review/revise to the local gaal watch; keep mechanical workflows on Actions

Open
#1,197 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
8/100
Issue type
Refactor
Clarity
Mostly clear
Activity status
Active
Tech stack
github-actions, shell

Research direction

Start with the workflows in .github/workflows/ (gaal-agent.yml, pr-review.yml, pr-revise.yml, issue-triage.yml) and the scripts they call, including pr-replay.sh and publish-policy.sh. The work is a maintainer-run change that gates those jobs on the GAAL_ENGINE variable, adds a diff-only fork-PR review path, and adds .gaal/project.yml. Done when the acceptance criteria in the issue hold, with the mechanical workflows unchanged.

Written by the indexing model from the issue text.

Description

architecture chore github_actions needs-human ready-for-agent

Goal

Move OfflineCV's memory-heavy Gaal steps (implement, review, revise) from the GitHub Actions workflows to the standalone gaal (116-Ideas/gaal) running gaal watch locally. There they get okfmem and CodeGraph. Mechanical workflows stay on Actions, which is free on this public repo.

Contributors must see no change: the same gaal label, the same /gaal commands, and the same review → revise loop.

Why

The Actions Gaal runs every LLM step without the repo's durable memory or a code graph. The review standards, verification rules and parser gotchas live in okfmem (the review-process, verification and parser lanes) and exist only locally. That memory must not go into an Actions run on this repo, because a public repo's claude-code-action output is not safe to publish (unmasked transcript, token inherited by subprocesses). So the steps that need it have to run locally.

Placement

Workflow LLM Memory value After the migration
ci, deploy-pages, promote-release, stale-claims, moderate-comments no none Actions, unchanged
pr-auto-triage no none Actions, unchanged
pr-auto-rebase conflicts only low Actions, unchanged. The gaal profile sets rebase.unlinked_prs: false so the watch does not rebase the same PRs too (116-Ideas/gaal#328)
issue-triage yes low Actions, unchanged (it must handle outsiders' issues). Its auto-gaal handoff now starts the local watch instead of gaal-agent.yml
gaal-agent (implement, /gaal commands) yes high Local watch
pr-review yes high Local watch for trusted PRs. Fork PRs get a diff-only Actions review (below)
pr-revise yes high Local watch

Plan

  1. Prerequisites (in 116-Ideas/gaal):

    • 116-Ideas/gaal#161: scope headless runs' writes to the checkout. A local run on a public repo still reads outsiders' comments, and $HOME holds okfmem and the gaal keys.
    • 116-Ideas/gaal#522: per-step placement plus the memory boundary.
  2. Onboard. Run gaal onboard to write .gaal/project.yml, with okfmem and CodeGraph on, placement per the table, rebase.unlinked_prs: false, and gates matching npm run verify:quick / verify.

  3. Cutover switch. Add a repo variable GAAL_ENGINE (actions | local). Gate the gaal-agent, pr-review (trusted path) and pr-revise jobs on vars.GAAL_ENGINE != 'local', so the two systems never both act on one label or PR. Rollback is flipping the variable back.

  4. Fork PR review. Add a diff-only review path to pr-review.yml for fork PRs:

    • It reads the diff and files through the API and posts a COMMENT review.
    • There is no checkout of PR code and no install.
    • No okfmem is involved.

    This is what #1192 (a contributor's fork PR) lacked: it got no bot review at all.

  5. Trial. Set GAAL_ENGINE=local and run a week of real issues through the watch. Compare against the Actions Gaal: review rounds to converge, needs-human rate, and wall-clock delay from label to PR. 116-Ideas/gaal#441 gives the CodeGraph token numbers.

  6. Remove. After the trial, delete the gated jobs and the scripts only they use. Keep pr-replay.sh, which pr-auto-rebase still uses.

Acceptance criteria

  • .gaal/project.yml is on main with okfmem and CodeGraph on, the placement above, and rebase.unlinked_prs: false.
  • With GAAL_ENGINE=local, a gaal-labelled issue is implemented, reviewed and revised by the local watch, and no Actions Gaal job runs on it.
  • With GAAL_ENGINE=actions (or unset), behaviour is exactly today's.
  • A fork PR gets a diff-only bot review that checks out no PR code. A test or a dry run shows no secret is present in the job that reads PR content.
  • No mechanical workflow in the table changed behaviour.
  • The okfmem tooling lane and CLAUDE.md / docs/CONTRIBUTING-PROCESS.md say which system runs which step.

Out of scope

  • Moving mechanical workflows to the local watch.
  • Bot approval of PRs. Approval stays human, except for the classes pr-auto-triage already handles.

Changes under .github/ can't be published by the Actions Gaal (publish-policy.sh), so this is a maintainer-run change, labelled needs-human to keep triage from handing it to Gaal.

Dominant language
TypeScript
Stars
11
Forks
4
PR merge metrics
No merged PRs in 30d

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from offlinecv/OfflineCV

All issues in offlinecv/OfflineCV

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.