Skip to content

Commit be274f4

Browse files
committed
feat(community): establish contributor foundation
Add 0BSD licensing, contributor guidance, fast pull request CI, and public task specifications. Include the license in the generated devcontainer release bundle.
1 parent fe77410 commit be274f4

16 files changed

Lines changed: 502 additions & 41 deletions

.github/workflows/ci.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# ci.yml - run the fast contributor contract without publishing or heavy images
2+
3+
name: CI
4+
5+
on:
6+
pull_request:
7+
branches:
8+
- main
9+
push:
10+
branches:
11+
- main
12+
13+
permissions:
14+
contents: read
15+
16+
jobs:
17+
check:
18+
name: Check
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Check out source
22+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
23+
- name: Install Task
24+
uses: go-task/setup-task@01a4adf9db2d14c1de7a560f09170b6e0df736aa # v2.1.0
25+
with:
26+
version: 3.52.0
27+
- name: Run contributor checks
28+
run: task check

.oc_local/rules/software-tests.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,19 @@
22

33
Use this rule when making code, script, or workflow changes in this repository.
44

5-
## Full Suite Default
5+
## Normal Check
66

7-
- Run the complete `task tests-run` suite before handing off changes.
8-
- Targeted tests are still useful while iterating, but they do not replace the
9-
final full-suite attempt.
7+
- Run `task check` as the normal deterministic verification before handing off
8+
changes. It covers shell syntax and focused source-to-release contracts
9+
without Docker, QEMU, browser, or Dev Containers builds.
10+
- Keep the focused release fixture in a cleanup-trapped OS temporary directory
11+
and copy only its explicit source inputs. `task check` must not create
12+
`.test-tmp/` or copy ignored workspace state, caches, profiles, or logs.
13+
- Run the complete `task tests-run` suite when changes affect the image, Dev
14+
Containers lifecycle, Docker/Compose behavior, QEMU, browser runtime, or
15+
another integration contract covered only by that suite.
16+
- Targeted tests are still useful while iterating, but they do not replace a
17+
relevant final `task check` or broad-suite attempt.
1018
- Do not run `docker system prune`, `docker builder prune`, or other Docker
1119
cleanup commands automatically before tests. If Docker storage is too tight,
1220
stop and ask for approval before pruning cache, images, containers, or volumes.

CONTRIBUTING.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# Contributing To The Devcontainer Kit
2+
3+
Contributions improve the shared development environment used by Codegeist
4+
repositories. Start with a GitHub Issue when proposing behavior, toolchain, or
5+
workflow changes, and keep pull requests focused on one reviewable outcome.
6+
7+
## Repository Ownership
8+
9+
This repository owns the generic VS Code Dev Containers runtime, its image
10+
toolchain, host-side initialization, shared runtime scripts, release assembly,
11+
tests, and kit-specific documentation.
12+
13+
The `main` branch is the canonical source and contribution target. The
14+
`release` branch is generated from reviewed source by `scripts/release-build.sh`
15+
and contains only the runtime files consumed at `.devcontainer/`. Do not use a
16+
generated `release` checkout, or a consuming repository's `.devcontainer/`
17+
submodule checkout, as an implementation target.
18+
19+
## Contribution Workflow
20+
21+
1. Check the repository's [Issues](https://github.com/codegeist-ai/codegeist-devcontainer-kit/issues)
22+
and [roadmap listing](https://github.com/users/codegeist-ai/projects/1) before
23+
starting overlapping work.
24+
2. Link the Issue to a local task under `docs/tasks/` when the work needs a
25+
resumable specification. Follow the [task guide](docs/tasks/README.md).
26+
3. Make the smallest source change on a branch based on `main`.
27+
4. Run the normal deterministic check:
28+
29+
```bash
30+
task check
31+
```
32+
33+
5. Run `task tests-run` when changing the image, Dev Containers lifecycle,
34+
Docker/Compose behavior, QEMU, browser runtime, or another contract covered
35+
only by the broad integration suite.
36+
6. Open a pull request that links the public Issue and local task, explains the
37+
source and release impact, and records the verification performed.
38+
39+
`task check` validates shell syntax and focused source-to-release contracts. It
40+
is non-interactive, does not build the image or start Docker, QEMU, Dev
41+
Containers, or browsers, and does not publish or modify this repository's Git
42+
history. Its focused release fixture copies only required source inputs into a
43+
cleanup-trapped OS temporary directory, so the check leaves no repo-local test
44+
directory, cache, log, or copied local state behind.
45+
46+
## Extension Boundaries
47+
48+
Keep shared, repository-agnostic runtime behavior in this source repository.
49+
Consuming repositories should use `.codegeist/.local.env`,
50+
`.codegeist/compose.local.yml`, and `.codegeist/Dockerfile` for documented
51+
runtime extensions instead of editing `.devcontainer/`. Project-specific
52+
OpenCode behavior belongs in the consuming repository's `.oc_local/` overlay,
53+
not in its `.opencode/` or `.devcontainer/` submodule.
54+
55+
Do not edit this source repository's nested `.devcontainer/` or `.opencode/`
56+
submodules as part of ordinary kit work.
57+
58+
## Release Publication
59+
60+
Release publication is maintainer-only. Contributors should not run the
61+
release-publishing workflow or push the generated `release` branch. Maintainers
62+
publish only from clean, reviewed `main` after the full release verification
63+
gate documented in `README.md` has passed.
64+
65+
## Shared Policies
66+
67+
Codegeist's account-wide policies apply here and are maintained centrally:
68+
69+
The visible [Codegeist personal account profile](https://github.com/codegeist-ai)
70+
is sourced from
71+
[`codegeist-ai/codegeist-ai`](https://github.com/codegeist-ai/codegeist-ai).
72+
The separate [`codegeist-ai/.github`](https://github.com/codegeist-ai/.github)
73+
repository remains the source for shared community defaults used here and in
74+
other Codegeist repositories.
75+
76+
- [Code of Conduct](https://github.com/codegeist-ai/.github/blob/main/CODE_OF_CONDUCT.md)
77+
- [Security Policy](https://github.com/codegeist-ai/.github/blob/main/SECURITY.md)
78+
- [Support Policy](https://github.com/codegeist-ai/.github/blob/main/SUPPORT.md)
79+
80+
Do not report vulnerabilities in a public Issue; follow the shared Security
81+
Policy.
82+
83+
## License
84+
85+
Contributions are provided under the repository's
86+
[Zero-Clause BSD (`0BSD`) license](LICENSE).

LICENSE

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
BSD Zero Clause License
2+
3+
Copyright (C) 2026 Codegeist contributors
4+
5+
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
6+
7+
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.

README.md

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ Containers workflow with the current Codegeist/planner development toolchain.
77

88
This repository is a reusable devcontainer kit that can be added to other
99
repositories at `.devcontainer/`, either as a Git subtree or as a Git submodule.
10+
The `main` branch is the canonical source and contribution target. The generated
11+
`release` branch is the runtime-only tree intended for consuming
12+
`.devcontainer/` submodules and is not an implementation target.
1013
The source `Dockerfile.base` intentionally carries the full
1114
Codegeist/planner-style toolchain, including Docker CE, Node 24, VS Code,
1215
GitHub CLI, Maven, GraalVM, JBang, Hugo, Nix, PowerShell through `pwsh`, Task
@@ -17,6 +20,17 @@ security scan tools, password-store tooling through `pass`, and related CLI
1720
tools. The release build publishes this file as
1821
`.devcontainer/Dockerfile` for consuming repositories.
1922

23+
Project work is tracked through
24+
[GitHub Issues](https://github.com/codegeist-ai/codegeist-devcontainer-kit/issues),
25+
the [Codegeist roadmap listing](https://github.com/users/codegeist-ai/projects/1),
26+
and resumable local specifications described in the
27+
[task guide](docs/tasks/README.md). See [CONTRIBUTING.md](CONTRIBUTING.md) for the
28+
source workflow and extension boundaries. Codegeist's shared
29+
[Code of Conduct](https://github.com/codegeist-ai/.github/blob/main/CODE_OF_CONDUCT.md),
30+
[Security Policy](https://github.com/codegeist-ai/.github/blob/main/SECURITY.md),
31+
and [Support Policy](https://github.com/codegeist-ai/.github/blob/main/SUPPORT.md)
32+
apply to this repository.
33+
2034
The consuming project should use the standard VS Code flow:
2135

2236
1. Clone the consuming repository.
@@ -373,7 +387,22 @@ If the repository was already cloned without submodules, initialize them later:
373387
git submodule update --init --recursive
374388
```
375389

376-
Run the local test suite from this repository root:
390+
Run the normal fast, deterministic contributor check from this repository root:
391+
392+
```bash
393+
task check
394+
```
395+
396+
This validates shell syntax and the focused source-to-release contract without
397+
building the image, starting Docker, QEMU, Dev Containers, or browsers,
398+
publishing a release, or modifying this repository's Git history. The release
399+
fixture uses a bounded source input list under a cleanup-trapped OS temporary
400+
directory and leaves no `.test-tmp`, cache, log, or copied local state in the
401+
source checkout.
402+
403+
Run the broad local test suite when changing image contents, Dev Containers
404+
lifecycle behavior, Docker/Compose integration, QEMU, browser runtime, or another
405+
contract covered only by integration tests:
377406

378407
```bash
379408
task tests-run
@@ -431,6 +460,7 @@ The release branch tree contains only:
431460
.oc_local.opencode.json.example
432461
Dockerfile
433462
Dockerfile.example
463+
LICENSE
434464
README.md
435465
compose.local.yml.example
436466
devcontainer.json
@@ -443,7 +473,8 @@ scripts/chrome.sh
443473
`scripts/release-build.sh` copies source `Dockerfile.base` into the release tree
444474
as `Dockerfile` and ships `Dockerfile.example` as the on-demand template for root
445475
`.codegeist/Dockerfile`; do not add a tracked root `Dockerfile` to the source
446-
checkout for the kit base image.
476+
checkout for the kit base image. The source and generated runtime trees both ship
477+
the canonical 0BSD `LICENSE`.
447478

448479
## OpenCode Workspace
449480

@@ -1021,3 +1052,13 @@ Prefer:
10211052
- The base image currently keeps the copied Codegeist/planner toolchain intact;
10221053
future work can split generic tools from project-specific features when there
10231054
is a concrete consumer need.
1055+
1056+
The public roadmap listing is maintained at
1057+
<https://github.com/users/codegeist-ai/projects/1>. Contributor-sized work should
1058+
start from a GitHub Issue and, when implementation detail needs durable handoff,
1059+
a linked specification under `docs/tasks/`.
1060+
1061+
## License
1062+
1063+
This repository and its generated runtime release are available under the
1064+
[Zero-Clause BSD (`0BSD`) license](LICENSE).

README_release.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,37 @@ tests, and local AI workflow support. The image toolchain includes PowerShell as
1717
`pwsh` for cross-platform shell and automation work, Task with Bash completion,
1818
shared terminal-capture tools for documentation previews, plus shared QEMU and
1919
security-scan tools for infrastructure checks inside consuming devcontainers.
20+
The runtime tree includes the repository's [`LICENSE`](LICENSE) and is
21+
distributed under the Zero-Clause BSD (`0BSD`) license.
22+
23+
## Project And Contributions
24+
25+
Changes to the kit belong on the source repository's `main` branch, not in this
26+
generated `release` tree or a consuming repository's `.devcontainer/` checkout.
27+
Use the source repository's
28+
[contributor guide](https://github.com/codegeist-ai/codegeist-devcontainer-kit/blob/main/CONTRIBUTING.md),
29+
[GitHub Issues](https://github.com/codegeist-ai/codegeist-devcontainer-kit/issues),
30+
[task guide](https://github.com/codegeist-ai/codegeist-devcontainer-kit/blob/main/docs/tasks/README.md),
31+
and [Codegeist roadmap listing](https://github.com/users/codegeist-ai/projects/1)
32+
to propose and track work.
33+
34+
In a source `main` checkout, run `task check` as the normal fast contributor
35+
check. Run the broader `task tests-run` suite when a change affects the image,
36+
Dev Containers lifecycle, Docker/Compose behavior, QEMU, or browser runtime.
37+
The fast check uses cleanup-trapped OS temporary state and leaves no repo-local
38+
test directory behind. These source tasks are intentionally omitted from the
39+
generated runtime tree.
40+
41+
Codegeist's account-wide
42+
[Code of Conduct](https://github.com/codegeist-ai/.github/blob/main/CODE_OF_CONDUCT.md),
43+
[Security Policy](https://github.com/codegeist-ai/.github/blob/main/SECURITY.md),
44+
and [Support Policy](https://github.com/codegeist-ai/.github/blob/main/SUPPORT.md)
45+
apply without being duplicated in this runtime tree.
46+
47+
## Release Notes
48+
49+
- The generated runtime manifest includes the canonical root `LICENSE`, so the
50+
license travels with every `.devcontainer/` release checkout.
2051

2152
## Consumer Setup
2253

Taskfile.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
# - tests/code-open-test.sh
2020
# - scripts/chrome.sh
2121
# - tests/browser-open-test.sh
22+
# - tests/release-build.sh
2223

2324
version: '3'
2425

@@ -38,6 +39,17 @@ vars:
3839
sh: printf '%s' "${CONTAINER_GID:-${UID:-$(id -u)}}"
3940

4041
tasks:
42+
check:
43+
desc: Run fast deterministic contributor checks
44+
cmds:
45+
- >-
46+
bash -n
47+
"{{.TASKFILE_DIR}}/entrypoint.sh"
48+
"{{.TASKFILE_DIR}}/initialize.sh"
49+
"{{.TASKFILE_DIR}}"/scripts/*.sh
50+
"{{.TASKFILE_DIR}}"/tests/*.sh
51+
- '"{{.TASKFILE_DIR}}/tests/release-build.sh"'
52+
4153
docker-build:
4254
desc: Build the generic devcontainer kit image
4355
cmds:

docs/memory-bank/chat.md

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,18 @@
2323
simultaneous first-time `BRANCH` starts.
2424
- OpenCode work should continue from this repository root in the current
2525
maintenance checkout.
26+
- The repository-local contributor baseline now targets source `main`: 0BSD
27+
licensing, a local contribution guide, Issue-to-task-to-PR linkage, and
28+
read-only CI all use `task check` as the normal fast contract.
29+
- Contributor rollout remains open until the pending public Issues, pull request,
30+
and roadmap/GitHub state are created outside this repository.
2631

2732
## Current State
2833

2934
- Local default branch is `main`.
30-
- `.devcontainer/` and `.opencode/` are checked-out shared submodules in this
31-
development repository. Do not edit them directly during normal project work
32-
unless the task is explicit submodule work.
35+
- `.devcontainer/` and `.opencode/` are configured shared submodules in this
36+
development repository. When initialized, do not edit them directly during
37+
normal project work unless the task is explicit submodule work.
3338
- `.devcontainer` is a runtime-release submodule. Release workflows may update
3439
its gitlink to the latest pushed `origin/release` commit, but should not
3540
automatically commit that parent gitlink after publishing unless the user asks.
@@ -201,9 +206,12 @@
201206
must not open VS Code or start/remove containers.
202207
- Tests should exercise the real Dev Containers lifecycle when behavior depends
203208
on VS Code or the Dev Containers CLI integration.
204-
- Test fixtures now use repo-local ignored temp roots (`.test-tmp/` and
205-
`.browser-smoke-tmp/`) because Docker bind mounts in this workspace cannot rely
206-
on arbitrary `/tmp` paths being visible to the daemon.
209+
- Docker-backed broad-suite fixtures use repo-local ignored temp roots
210+
(`.test-tmp/` and `.browser-smoke-tmp/`) because bind mounts cannot rely on
211+
arbitrary `/tmp` paths being visible to the daemon. The normal `task check`
212+
release fixture does not need Docker: it copies only explicit release source
213+
inputs into cleanup-trapped OS temporary state and leaves no repo-local test
214+
directory behind.
207215
- Browser UI verification uses `tests/browser-ui-cdp.mjs`, a Node 24 Chrome
208216
DevTools Protocol driver invoked by `tests/browser-smoke.sh`. It covers both
209217
headless rendering and the real local VS Code failure shape: a Dev Containers
@@ -222,9 +230,11 @@
222230
insecure. Manual Google sign-in succeeded after launching
223231
`chrome https://accounts.google.com` from the terminal with the updated
224232
launcher. Plain `chrome` now uses workspace-local `.chrome` by default.
225-
- After code, script, or workflow changes, run the complete `task tests-run`
226-
suite before handoff when the environment allows it. If the environment blocks
227-
the full suite, report the blocker and list targeted checks that passed.
233+
- Run `task check` for normal contributor changes. Run the complete
234+
`task tests-run` suite when image, Dev Containers lifecycle, Docker/Compose,
235+
QEMU, browser runtime, or release-relevant integration behavior changes; if
236+
the environment blocks a relevant full suite, report the blocker and targeted
237+
checks that passed.
228238
- Runtime releases are published from clean `main` with `task release-build`;
229239
use `--push` only when the branch should be pushed immediately. This repository
230240
publishes runtime artifacts through the `release` branch only, not through
@@ -344,6 +354,7 @@
344354
## Useful Commands
345355

346356
```bash
357+
task check
347358
task tests-run
348359
task qemu-alpine-smoke
349360
task code-open

docs/tasks/README.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Task Docs
22

33
This directory stores lightweight, resumable task handoff files for this
4-
repository.
4+
repository. GitHub Issues are the public discussion and tracking entrypoint;
5+
local task files retain implementation detail that is useful across sessions.
56

67
## Conventions
78

@@ -11,6 +12,8 @@ repository.
1112
- A task is represented either by a standalone markdown file or by `task.md`
1213
inside a task directory, never both.
1314
- Durable task documentation stays in English.
15+
- New public-facing tasks include a `Public Tracking` field. Use `pending issue
16+
creation` until an Issue exists, then replace it with the Issue URL.
1417

1518
## Status Values
1619

@@ -20,3 +23,20 @@ repository.
2023
- `solved` - implementation and verification are complete.
2124
- `finalized` - solved task has been reviewed for related docs and task state.
2225
- `cancelled` - task is intentionally closed without implementation.
26+
27+
## Issue To Task To Pull Request
28+
29+
1. Open or identify a GitHub Issue for the public problem statement.
30+
2. Create or update the local task specification with the Issue URL in `Public
31+
Tracking`, concrete acceptance criteria, file targets, non-goals, and
32+
verification.
33+
3. Keep task status current as the work is specified, implemented, verified, or
34+
cancelled.
35+
4. Link both the GitHub Issue and local task path from the pull request.
36+
5. Let the pull request close the Issue when the accepted implementation is
37+
merged; update the local task to `solved` or `finalized` in the same change
38+
when appropriate.
39+
40+
A local task may be drafted before public tracking exists, but `pending issue
41+
creation` means the contributor rollout is incomplete rather than privately
42+
tracked forever.

0 commit comments

Comments
 (0)