chore: initialize OpenSpec - #33
Conversation
`openspec init --tools claude,codex` (CLI 1.10.0), schema `spec-driven`.
What lands where:
openspec/config.yaml committed — schema + project context
openspec/{specs,changes} committed structure; empty today
.agents/skills/ committed — six Codex-facing skills
.claude/{skills,commands/opsx} NOT committed — `.claude/` is already
gitignored here, so the Claude Code wiring
stays local, which is what we want for a
public repo whose agent config is personal
Nothing was written to CLAUDE.md — this version of OpenSpec ships
skills and slash commands rather than appending an instruction block,
so the existing "project-internal docs" gitignore stance is untouched.
The `context:` block in config.yaml is the part worth reading. OpenSpec
feeds it to whichever agent generates artifacts, and since CLAUDE.md is
gitignored as project-internal, this committed file is the right home
for the shareable subset: crate layout, the libopenconnect/Rust
division of labour, the error-handling and no-`unwrap` rules, and the
_refs/ read-only rule.
It also records three things that have actually cost time here, so the
next person (or agent) does not rediscover them:
- bins/opc-gui is outside the workspace, so `cargo build --workspace`
and `cargo fmt --all` do not reach it, and it cannot build on Linux
at all (eframe without x11/wayland).
- CI is ubuntu-only; the macOS and Windows compilers are first
exercised during a release, on a `v*` tag push.
- gp-route and gp-dns backends are cfg-gated per OS, so a change to
one needs checking against all three targets.
Verified: `openspec doctor` reports the root ok, `openspec list` and
`openspec list --specs` run clean, and config.yaml parses as YAML.
No `.gitkeep` files — checked that OpenSpec behaves identically with
the empty directories absent, as they would be in a fresh clone.
Note for whoever runs Codex here: `.codex` in the repo root is an empty
read-only file (a session marker from other tooling), so `openspec init`
could not probe `.codex/prompts` and logged ENOTDIR. It is harmless —
Codex reads `.agents/skills/`, and OpenSpec skipped the prompts step by
design — but the file will keep producing that warning until it is
removed.
99c5c83 to
5b75006
Compare
|
Merging without a CI run, deliberately, and recording why. GitHub Actions is in a major outage (githubstatus.com component This PR changes Ran CI's checks locally in its place, on this branch, aarch64 Linux:
Rebased onto |
openspec init --tools claude,codex(CLI 1.10.0), schemaspec-driven.What lands where
openspec/config.yamlopenspec/{specs,changes}.agents/skills/(6).claude/skills/,.claude/commands/opsx/.claude/is already gitignored hereThe Claude Code wiring staying local is deliberate — this is a public repo and the per-user agent config is personal. Codex reads
.agents/skills/, which is tool-agnostic in location and worth sharing.Nothing was written to
CLAUDE.md. This version of OpenSpec ships skills and slash commands rather than appending an instruction block, so the existing "project-internal docs that should not be public" gitignore stance is untouched.The part worth reading
openspec/config.yaml'scontext:block. OpenSpec feeds it to whichever agent generates artifacts, and sinceCLAUDE.mdis gitignored as project-internal, this committed file is the right home for the shareable subset: crate layout, the libopenconnect-owns-the-tunnel / Rust-owns-everything-else split, theanyhowvsthiserrorand no-unwrap-in-libraries rules, and the_refs/read-only rule.It also records three things that have actually cost time in this repo, so they do not get rediscovered:
bins/opc-guiis outside the workspace.cargo build --workspaceandcargo fmt --alldo not reach it, and it cannot build on Linux at all (eframewithoutx11/wayland→ winit refuses). This is what killed thev0.2.0-alpha.21release.v*tag push.gp-route/gp-dnsbackends arecfg-gated per OS, so a change to one needs checking against all three targets.Verification
openspec doctor→ root okopenspec list/openspec list --specs→ cleanconfig.yamlparses as YAML; all 12 generated skills have valid frontmatter; all six/opsx:*commands carry descriptionsNo
.gitkeepfiles: I checked that OpenSpec behaves identically withopenspec/specsandopenspec/changes/archiveabsent, as they would be in a fresh clone, so committing placeholders would be clutter.One wrinkle for Codex users
.codexin the repo root is an empty, read-only file — a session marker dropped by other tooling, and already gitignored.openspec inittherefore could not probe.codex/promptsand logged:Harmless: Codex reads
.agents/skills/, and OpenSpec skipped the prompts step by design (Commands skipped for: codex (uses skills)). But the warning will recur on everyopenspec updateuntil that file is removed. Left alone here since another tool owns it.Getting started
/opsx:propose "your idea"$openspec-propose "your idea"