From 054cb82a38f5625338f658e55ed46cd05d41509b Mon Sep 17 00:00:00 2001 From: jay Date: Sun, 2 Aug 2026 20:17:56 +0000 Subject: [PATCH 1/2] feat(community): establish contributor foundation Add 0BSD licensing, contributor guidance, pull request CI, and public task specifications. Include the license in the generated agent-kit release bundle. --- .github/workflows/ci.yml | 23 +++++++ CONTRIBUTING.md | 51 +++++++++++++++ INDEX.md | 19 ++++-- LICENSE | 7 ++ README.md | 46 ++++++++++++- README_release.md | 42 +++++++++++- Taskfile.yml | 4 +- commands/task.md | 2 +- docs/tasks/README.md | 54 +++++++++++++++ ...add-shared-rule-contributor-walkthrough.md | 45 +++++++++++++ ...T002_validate-release-config-references.md | 50 ++++++++++++++ ...-mutable-tool-action-version-references.md | 65 +++++++++++++++++++ tests/release-copy.sh | 7 ++ 13 files changed, 404 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 docs/tasks/README.md create mode 100644 docs/tasks/T001_add-shared-rule-contributor-walkthrough.md create mode 100644 docs/tasks/T002_validate-release-config-references.md create mode 100644 docs/tasks/T003_audit-mutable-tool-action-version-references.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..aa92e05 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: CI + +"on": + pull_request: + push: + branches: + - main + +permissions: + contents: read + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Check out source + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - name: Install Task + uses: arduino/setup-task@01a4adf9db2d14c1de7a560f09170b6e0df736aa # v2.1.0 + with: + version: "3.52.0" + - name: Run repository tests + run: task test diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..507949a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,51 @@ +# Contributing To Codegeist Agent Kit + +This repository owns the generic OpenCode rules, commands, skills, helper +scripts, plugins, and configuration shared by otherwise unrelated consuming +repositories. + +## Shared Policies + +The account-wide Codegeist policies apply alongside this repository-specific +guide: + +- [Contribution policy](https://github.com/codegeist-ai/.github/blob/main/CONTRIBUTING.md) +- [Code of Conduct](https://github.com/codegeist-ai/.github/blob/main/CODE_OF_CONDUCT.md) +- [Security policy](https://github.com/codegeist-ai/.github/blob/main/SECURITY.md) +- [Support guide](https://github.com/codegeist-ai/.github/blob/main/SUPPORT.md) + +Do not report vulnerabilities or sensitive information in a public issue. + +## Choose The Owning Repository + +Changes belong here only when they are useful across repositories with +unrelated products, architectures, and deployment models. Project-specific +paths, workflows, deployment behavior, and product conventions belong in the +consuming repository's `.oc_local/` commands, rules, or skills. + +Open an issue before starting when ownership or generic applicability is +unclear. + +## Source Workflow + +1. Find or open a repository [Issue](https://github.com/codegeist-ai/codegeist-agent-kit/issues) and check the [Codegeist roadmap](https://github.com/users/codegeist-ai/projects/1). +2. Use the linked specification under [`docs/tasks/`](docs/tasks/README.md) when one exists. +3. Create a topic branch from the source `main` branch. +4. Edit the source paths at the repository root. The generated `release` branch and consuming `.opencode/` checkouts are distribution outputs, not implementation targets. +5. Run the normal repository check: + +```bash +task test +``` + +6. Open a pull request that links the Issue and local task, summarizes the source and release impact, and reports verification. + +`task test` copies and validates the release bundle without creating commits, +publishing a release, or updating submodules. Release publication through +`task release-build` is maintainer-only and happens after source review. + +## License + +Codegeist-owned material and submitted contributions are accepted under the +[Zero-Clause BSD License](LICENSE), SPDX identifier `0BSD`, without a separate +CLA or DCO requirement. Preserve third-party licenses and notices. diff --git a/INDEX.md b/INDEX.md index 51857d7..41a4352 100644 --- a/INDEX.md +++ b/INDEX.md @@ -16,13 +16,19 @@ Agent-owned navigation map for the shared OpenCode workspace. - `rules/` - durable instructions loaded by `opencode.json`. - `skills/` - specialized workflows that can be loaded on demand. - `plugin/` - optional Graphify OpenCode integration. +- `docs/tasks/` - source-repository task guide and local implementation specs + linked from public Issues. +- `.github/workflows/ci.yml` - read-only contributor CI that runs `task test`. - `opencode.json` - runtime configuration that loads shared instructions, plugins, MCP servers, and permissions. - `playwright-mcp.json` - Playwright MCP browser launch configuration copied into the generated release bundle. - `README.md` - source-repository overview for maintainers. +- `CONTRIBUTING.md` - generic-versus-local ownership and source contribution + workflow. - `README_release.md` - source file copied to `README.md` on the generated `release` branch. +- `LICENSE` - canonical 0BSD license copied into the generated release bundle. - `Taskfile.yml` - release-copy, release-build, and smoke-test entrypoints. - `tests/release-copy.sh` - smoke test for the generated release bundle. @@ -32,9 +38,11 @@ Agent-owned navigation map for the shared OpenCode workspace. ## Key Workflows +- Start source contributions from `main`, use the linked Issue and local task, + and never implement changes in generated `release` or `.opencode/` checkouts. - Use `task test` after changing release runtime files or release-copy behavior. -- Use `task release-build` only after reviewing `README_release.md` changelog - updates for consumer-visible changes. +- Maintainers use `task release-build` only after source review and + `README_release.md` changelog updates for consumer-visible changes. - Use `/task spec ""` and `/task impl <task-ref> [instructions]` for tracked task work. - Use `/update-index <directory>` to create or refresh directory-local indexes. @@ -42,6 +50,8 @@ Agent-owned navigation map for the shared OpenCode workspace. ## Search Hints - `RELEASE_PATHS` - release bundle source paths in `Taskfile.yml`. +- `docs/tasks/README.md` - Issue-to-task-to-PR linkage and status conventions. +- `LICENSE` - 0BSD terms that must remain in source and release output. - `playwright-mcp.json` - browser config used by the shared Playwright MCP. - `/update-index` - command for creating or refreshing directory indexes. - `spec`, `impl` - task command actions for specification and implementation. @@ -57,5 +67,6 @@ Agent-owned navigation map for the shared OpenCode workspace. ## Agent Notes - Keep this index compact because it is loaded into OpenCode instructions. -- Keep this file outside the `.opencode` release submodule. Consuming - repositories own their root `INDEX.md` content. +- Keep this file outside the `.opencode` release submodule while keeping + `LICENSE` in that bundle. Consuming repositories own their root `INDEX.md` + content. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9116b9e --- /dev/null +++ b/LICENSE @@ -0,0 +1,7 @@ +BSD Zero Clause License + +Copyright (C) 2026 Codegeist contributors + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/README.md b/README.md index f83e03d..e0c449c 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,13 @@ multiple repositories via a checked-out `.opencode/` directory. - `commands/` - shared slash-command definitions - `rules/` - shared durable workflow and editing rules - `skills/` - shared reusable skills +- `docs/tasks/` - local implementation specifications linked from public Issues +- `CONTRIBUTING.md` - repository-specific source contribution workflow +- `LICENSE` - Zero-Clause BSD license for Codegeist-owned material +- `README.md` - this source repository's contributor and maintainer guide; it is + not copied into the generated release +- `README_release.md` - release consumer guide copied to `README.md` in the + generated `.opencode` bundle - `INDEX.md` - root agent navigation index for this source repository; it is not copied into the generated `.opencode` release submodule - `opencode.json` - OpenCode config for loading the shared rule set @@ -36,8 +43,9 @@ multiple repositories via a checked-out `.opencode/` directory. Consuming repositories should add the generated `release` branch as their `.opencode` submodule. The release branch contains only the files needed at -runtime: `.gitignore`, `README.md`, `opencode.json`, `playwright-mcp.json`, -`ai-scripts/`, `commands/`, `rules/`, `skills/`, and `plugin/`. +runtime: `.gitignore`, `LICENSE`, `README.md`, `opencode.json`, +`playwright-mcp.json`, `ai-scripts/`, `commands/`, `rules/`, `skills/`, and +`plugin/`. ```bash git submodule add -b release <repository-url> .opencode @@ -50,12 +58,41 @@ To update an existing consuming repository to the latest release branch commit: git submodule update --remote .opencode ``` -Maintainers build and push the release branch from this repository with: +After source review, maintainers build and push the release branch from this +repository with: ```bash task release-build ``` +## Contributing + +Source work starts from `main` and a topic branch, never from the generated +`release` branch or a consuming repository's `.opencode/` checkout. Read the +[local contribution guide](CONTRIBUTING.md), find public work in +[Issues](https://github.com/codegeist-ai/codegeist-agent-kit/issues) and the +[Codegeist roadmap](https://github.com/users/codegeist-ai/projects/1), and use the +[local task guide](docs/tasks/README.md) for accepted implementation +specifications. + +The canonical normal check is non-publishing: + +```bash +task test +``` + +Effective account-wide guidance is provided by the shared +[contribution policy](https://github.com/codegeist-ai/.github/blob/main/CONTRIBUTING.md), +[Code of Conduct](https://github.com/codegeist-ai/.github/blob/main/CODE_OF_CONDUCT.md), +[security policy](https://github.com/codegeist-ai/.github/blob/main/SECURITY.md), +and [support guide](https://github.com/codegeist-ai/.github/blob/main/SUPPORT.md). +Codegeist-owned material is available under the [0BSD license](LICENSE). + +The visible [Codegeist account profile](https://github.com/codegeist-ai) is +sourced from [`codegeist-ai/codegeist-ai`](https://github.com/codegeist-ai/codegeist-ai). +The separate [`codegeist-ai/.github`](https://github.com/codegeist-ai/.github) +repository remains the source of shared community defaults. + ## Shared Vs Local Keep this repository repo-agnostic. @@ -84,6 +121,9 @@ analysis flows should live in local overlays such as: ## Development Notes +- Run `task test` after source changes. It validates a temporary release copy + without creating or publishing a release branch. +- Release publication is maintainer-only after review. - `node_modules/` is ignored. - `package.json` and `package-lock.json` are local-only plugin files and are ignored because consuming workspaces do not require pinned plugin versions. diff --git a/README_release.md b/README_release.md index b2e526b..01f2b66 100644 --- a/README_release.md +++ b/README_release.md @@ -26,17 +26,25 @@ configuration while leaving project-specific behavior in the consuming repo. and should only build or update graphs when the user explicitly asks for it. - `playwright-mcp.json` contains shared browser launch settings used by the `playwright` MCP server in `opencode.json`. +- `LICENSE` carries the Zero-Clause BSD terms for Codegeist-owned material in + this distribution. The generated `release` branch is intentionally minimal. During release copy, this source file is renamed from `README_release.md` to `README.md`. The release branch should contain only runtime files needed by consuming repositories: -`.gitignore`, `README.md`, `opencode.json`, `playwright-mcp.json`, +`.gitignore`, `LICENSE`, `README.md`, `opencode.json`, `playwright-mcp.json`, `ai-scripts/`, `commands/`, `rules/`, `skills/`, and `plugin/`. ## Changelog ### Current Version +- Changed `/task impl` to record successfully verified work as `solved` instead + of `implemented`, aligning generated task updates with the documented local + task lifecycle. +- Added the canonical `0BSD` `LICENSE` to generated release bundles so the + distributed Codegeist-owned runtime content carries its license. No consumer + action is required beyond receiving a future submodule update. - Moved Playwright MCP snapshots, console logs, screenshots, and related output under the workspace-local ignored `.chrome/playwright-mcp/` directory instead of creating `.playwright-mcp/` at the workspace root. @@ -191,6 +199,38 @@ Do not add product-specific deployment steps, architecture assumptions, branch names, or planning rules to the shared `.opencode` submodule unless they are intended to apply across all consuming repositories. +## Contributing Upstream + +This checkout is generated distribution content. Propose generic shared +OpenCode behavior in the +[`codegeist-agent-kit` source repository](https://github.com/codegeist-ai/codegeist-agent-kit) +from a topic branch based on source `main`; do not implement it on `release` or +inside a consuming `.opencode/` checkout. Project-specific behavior belongs in +the consuming repository's `.oc_local/` overlay. + +Use the source repository's +[contribution guide](https://github.com/codegeist-ai/codegeist-agent-kit/blob/main/CONTRIBUTING.md), +[Issues](https://github.com/codegeist-ai/codegeist-agent-kit/issues), +[local task guide](https://github.com/codegeist-ai/codegeist-agent-kit/blob/main/docs/tasks/README.md), +and the [Codegeist roadmap](https://github.com/users/codegeist-ai/projects/1). +These links deliberately target source `main`; contributor docs and local task +specifications are not files in this generated release bundle. +The effective shared policies are the Codegeist +[contribution policy](https://github.com/codegeist-ai/.github/blob/main/CONTRIBUTING.md), +[Code of Conduct](https://github.com/codegeist-ai/.github/blob/main/CODE_OF_CONDUCT.md), +[security policy](https://github.com/codegeist-ai/.github/blob/main/SECURITY.md), +and [support guide](https://github.com/codegeist-ai/.github/blob/main/SUPPORT.md). +The distributed files are licensed under [0BSD](LICENSE). + +The canonical source check is: + +```bash +task test +``` + +It validates a temporary release copy without publishing. Release publication +is maintainer-only after source review. + ## Extending This Agent Kit A consuming repository can ask its coding agent to add reusable shared behavior diff --git a/Taskfile.yml b/Taskfile.yml index 2cb5479..4dc149b 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -20,7 +20,7 @@ # - TEST_RELEASE_KEEP: set to `1` to keep the temp directory after `test-release`. # # Related files: -# - README_release.md copied as README.md, opencode.json, +# - README_release.md copied as README.md, LICENSE, opencode.json, # playwright-mcp.json, ai-scripts/, commands/, rules/, skills/, plugin/ # - INDEX.md is intentionally excluded from RELEASE_PATHS because it belongs to # the consuming repository root, not the generated .opencode submodule. @@ -32,7 +32,7 @@ vars: RELEASE_REMOTE: '{{default "origin" .RELEASE_REMOTE}}' RELEASE_SOURCE: '{{default "HEAD" .RELEASE_SOURCE}}' RELEASE_WORKTREE: '{{default ".release-build" .RELEASE_WORKTREE}}' - RELEASE_PATHS: README_release.md opencode.json playwright-mcp.json ai-scripts commands rules skills plugin + RELEASE_PATHS: README_release.md LICENSE opencode.json playwright-mcp.json ai-scripts commands rules skills plugin TEST_RELEASE_DIR: '{{default "" .TEST_RELEASE_DIR}}' tasks: diff --git a/commands/task.md b/commands/task.md index be976ae..6d8d01b 100644 --- a/commands/task.md +++ b/commands/task.md @@ -98,7 +98,7 @@ implementation pass. git --no-pager diff --check ``` -9. Use status `implemented` when verification passes. Use `blocked` when a user +9. Use status `solved` when verification passes. Use `blocked` when a user decision, failing dependency, or unresolved specification gap prevents safe implementation. diff --git a/docs/tasks/README.md b/docs/tasks/README.md new file mode 100644 index 0000000..45b4c4f --- /dev/null +++ b/docs/tasks/README.md @@ -0,0 +1,54 @@ +# Local Task Guide + +GitHub owns public work discovery and status. This directory keeps the focused +implementation specifications accepted for this repository. + +## Linkage + +```text +Codegeist roadmap -> repository Issue -> local task -> branch -> pull request -> merge +``` + +- The [Codegeist roadmap](https://github.com/users/codegeist-ai/projects/1) gives + the account-wide view. +- A repository [Issue](https://github.com/codegeist-ai/codegeist-agent-kit/issues) + owns public discussion, priority, assignment, and status. +- A local task owns the implementation goal, acceptance criteria, file scope, + non-goals, and verification. +- A ready Issue links its local task path, and the task's `Public Tracking` + field links back with the full Issue URL. +- The implementation branch and pull request link both the Issue and task. The + pull request reports verification and updates the task status when practical. +- Merge closes the Issue and moves the public roadmap item to its completed + state. Historical task files remain implementation records, not ready work. + +Tasks start as `docs/tasks/TNNN_<slug>.md`, using the next available numeric ID. +Only introduce nested task directories when a task genuinely needs child tasks. + +## Statuses + +- `open` - accepted local work that has not entered implementation. +- `specified` - the task is clear enough to implement through `/task impl`. +- `in progress` - implementation is active when the repository records this + intermediate state. +- `blocked` - implementation cannot proceed until a named dependency or decision + is resolved. +- `solved` - implementation, acceptance criteria, and local verification are + complete, but review or final handoff can still remain. +- `finalized` - review and required handoff are complete and the task is kept as + a historical record. +- `cancelled` - the task will not be implemented; the task records why. + +Local task status does not make work publicly ready. Public readiness is tracked +separately: `Public Tracking` must contain an Issue URL, and the Issue or Roadmap +item must be marked ready. A locally `open` or `specified` task with pending +public tracking is not yet advertised contributor work. + +Backlog ideas without accepted scope stay in the repository Issue tracker or +`docs/tasks/backlog.md`; they are not presented as ready implementation tasks. + +## Required Task Fields + +Each public candidate includes `Status`, `Public Tracking`, `Goal`, `Acceptance +Criteria`, `Files`, `Non-Goals`, and `Verification`. Keep the specification +small enough that a contributor can tell when it is complete. diff --git a/docs/tasks/T001_add-shared-rule-contributor-walkthrough.md b/docs/tasks/T001_add-shared-rule-contributor-walkthrough.md new file mode 100644 index 0000000..96da332 --- /dev/null +++ b/docs/tasks/T001_add-shared-rule-contributor-walkthrough.md @@ -0,0 +1,45 @@ +# T001 Add Shared Rule Contributor Walkthrough + +Status: open + +Public Tracking: pending issue creation + +## Goal + +Add a beginner-safe documentation walkthrough showing how a contributor can +propose one generic shared rule without editing generated release or consuming +submodule files. + +The repository currently explains the ownership boundary and normal check, but +does not provide an end-to-end example of a small shared rule change. + +## Acceptance Criteria + +- A focused guide follows one fictional rule from the root `rules/` source path + through any required `opencode.json` registration and release documentation + decision. +- The guide contrasts a genuinely generic rule with behavior that belongs in a + consuming repository's `.oc_local/` overlay. +- The example directs contributors to run `task test` and explains that they do + not publish `release` or update consuming submodules. +- `CONTRIBUTING.md` and `INDEX.md` link the walkthrough without duplicating it. +- The documentation introduces no runtime rule or configuration change. + +## Files + +- `docs/contributing/shared-rule-walkthrough.md` +- `CONTRIBUTING.md` +- `INDEX.md` + +## Non-Goals + +- Do not add a real shared rule solely to support the example. +- Do not document maintainer release publication as a contributor step. +- Do not change `.opencode/` or another repository's `.oc_local/` files. + +## Verification + +- Follow the walkthrough against the current source and release path names. +- Verify every new repository-local link resolves. +- Run `task test`. +- Run `git diff --check`. diff --git a/docs/tasks/T002_validate-release-config-references.md b/docs/tasks/T002_validate-release-config-references.md new file mode 100644 index 0000000..12538b0 --- /dev/null +++ b/docs/tasks/T002_validate-release-config-references.md @@ -0,0 +1,50 @@ +# T002 Validate Release Config References + +Status: open + +Public Tracking: pending issue creation + +## Goal + +Add deterministic structural validation that catches repository-owned file +references in released OpenCode configuration when their target is missing from +the generated bundle. + +The current release test checks selected known references but does not validate +the complete configured reference set. + +## Acceptance Criteria + +- `task test` validates every repository-owned path referenced by released + `opencode.json` against the copied bundle, including instruction entries, + plugin entries, and file arguments embedded in MCP command arrays such as + `.opencode/playwright-mcp.json`. +- The validation maps `.opencode/...` runtime paths to bundle-relative paths and + explicitly permits documented non-bundle references such as the + consumer-owned root `INDEX.md`. +- A missing target fails with the configuration value and expected bundle path + in the error message. +- Focused regression coverage proves a valid bundle plus missing-target failures + from a top-level list and an MCP command argument without network access or + Git writes. +- Existing release manifest and `INDEX.md` exclusion assertions continue to + pass. + +## Files + +- `tests/release-copy.sh` +- `tests/` for a focused helper or fixture only if needed +- `Taskfile.yml` only if the test entrypoint needs wiring + +## Non-Goals + +- Do not add a full OpenCode JSON schema validator. +- Do not fetch remote MCP, plugin, action, or package references. +- Do not change runtime configuration merely to make validation simpler. +- Do not build or publish the generated `release` branch. + +## Verification + +- Run the focused valid and missing-target assertions. +- Run `task test`. +- Run `git diff --check`. diff --git a/docs/tasks/T003_audit-mutable-tool-action-version-references.md b/docs/tasks/T003_audit-mutable-tool-action-version-references.md new file mode 100644 index 0000000..6a0916b --- /dev/null +++ b/docs/tasks/T003_audit-mutable-tool-action-version-references.md @@ -0,0 +1,65 @@ +# T003 Audit Mutable Tool And Action Version References + +Status: open + +Public Tracking: pending issue creation + +Contribution Level: intermediate + +Effort: medium + +## Goal + +Audit executable tool, action, and package references that currently resolve +through mutable or unversioned identifiers, then introduce focused reproducible +pins where they improve contributor CI or released workspace stability without +changing runtime behavior. + +Contributor CI actions and Task are pinned to immutable or exact versions, but +released MCP commands still include references such as `@latest` or unversioned +package names. The repository has no complete inventory, documented exception +list, or deterministic check for newly added mutable executable references. + +## Acceptance Criteria + +- A concise inventory covers executable references in + `.github/workflows/ci.yml` and released `opencode.json`, including GitHub + Actions, `npx`, and `uvx` package inputs. +- Every audited reference is either changed to a focused reproducible pin or + recorded as an intentional exception with a concrete compatibility reason. +- Existing immutable GitHub Action SHAs and the exact Task version remain + documented by the audit; package references selected for pinning use exact + versions supported by their upstream tools. +- A deterministic repository test rejects new unreviewed mutable executable + references and verifies the explicit exception set without network access. +- Existing CI, MCP command shape, Playwright browser settings, and release + bundle behavior remain functionally unchanged. +- Consumer-visible pin changes and update implications are recorded in + `README_release.md`; source-only audit detail stays in source documentation. + +## Files + +- `.github/workflows/ci.yml` +- `opencode.json` +- `tests/` for focused deterministic validation +- `Taskfile.yml` only if the existing `task test` entrypoint needs wiring +- `README_release.md` for consumer-visible changes +- A small source audit document under `docs/` only if rationale does not fit the + test allowlist clearly + +## Non-Goals + +- Do not add an automatic dependency updater or broad lockfile system. +- Do not upgrade tools solely because a newer version exists. +- Do not change MCP capabilities, browser behavior, permissions, or provider + configuration. +- Do not require network access during `task test`. +- Do not build or publish `release`, update consuming gitlinks, or edit nested + submodules. + +## Verification + +- Run the focused mutable-reference inventory and exception assertions. +- Parse `.github/workflows/ci.yml` and `opencode.json`. +- Run `task test`. +- Run `git diff --check`. diff --git a/tests/release-copy.sh b/tests/release-copy.sh index 40b9d3e..778bce2 100755 --- a/tests/release-copy.sh +++ b/tests/release-copy.sh @@ -44,6 +44,7 @@ if [ ! -d "${target}" ]; then fi assert_file ".gitignore" +assert_file "LICENSE" assert_file "README.md" assert_file "opencode.json" assert_file "playwright-mcp.json" @@ -62,6 +63,9 @@ assert_absent ".gitmodules" assert_absent ".opencode" assert_absent ".devcontainer" assert_absent ".oc_local" +assert_absent ".github" +assert_absent "CONTRIBUTING.md" +assert_absent "docs" assert_absent "Taskfile.yml" assert_absent "compose.local.yml" assert_absent "README_release.md" @@ -72,6 +76,9 @@ assert_absent "commands/finalize-task.md" assert_absent "commands/work-task.md" assert_absent "rules/task-phases.md" +cmp "LICENSE" "${target}/LICENSE" \ + || fail "release LICENSE content mismatch" + expected_gitignore=$(mktemp /tmp/opencode-release-gitignore.XXXXXX) trap 'rm -f "${expected_gitignore}"' EXIT cat >"${expected_gitignore}" <<'GITIGNORE' From 688d83f30fd1c99b6160f21508ad447cf85fa11f Mon Sep 17 00:00:00 2001 From: jay <dev@codegeist.ai> Date: Sun, 2 Aug 2026 20:21:18 +0000 Subject: [PATCH 2/2] fix(ci): use matching Task setup action Use the go-task action repository for the pinned go-task/setup-task commit. The previous repository and commit combination could not resolve on GitHub Actions. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa92e05..8732d6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: - name: Check out source uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Task - uses: arduino/setup-task@01a4adf9db2d14c1de7a560f09170b6e0df736aa # v2.1.0 + uses: go-task/setup-task@01a4adf9db2d14c1de7a560f09170b6e0df736aa # v2.1.0 with: version: "3.52.0" - name: Run repository tests