Skip to content

πŸ› Fix feature store, reword command help, and run CI on PRs - #25

Merged
bdsoha merged 3 commits into
mainfrom
fix/docs-audit
Nov 6, 2026
Merged

bdsoha merged 3 commits into
mainfrom
fix/docs-audit

Conversation

@bdsoha

@bdsoha bdsoha commented Nov 6, 2026

Copy link
Copy Markdown
Member

Description

Three fixes found by the ws-docs audit of 2026-11-06, one commit each.

feature store asks for a manifest the store no longer serves

Bug. ws-cli feature store requests <store>/artifacts/manifest.json. ws-feature-store stopped writing that file in ef56274 (2026-03-09). Every store image since v2026.03 serves a single manifest.json at its root. It lists APT packages and artifacts together as packages, one entry per architecture. Against ghcr.io/kloudkit/ws-feature-store:v2026.11, the ws-cli baked into workspace v0.6.0 (2217c04) fails with Failed to fetch store manifest: feature store returned status 404. On that image /artifacts/manifest.json returns 404 and /manifest.json returns 200. Only v2026.02 still has the old file, and it predates the artifacts/<name>/<arch> paths that the v0.6.0 features download, so there is no fallback for it.

Change. Fetch <store>/manifest.json, decode packages, and list each artifact once with its version, as before. APT packages are still not listed. New test: internals/features/store_test.go.

Verified. With the old path, the new tests fail with feature store returned status 404; with the fix they pass. A build of this branch, run against the v2026.11 image, lists 15 artifacts (bun through terraform) and Built: 2026-11-01T05:18:23Z.

Command help that feeds the docs reads as internal notes

Bug. These are the descriptions and examples that commands.yaml carries to the command reference on ws.kloudkit.com:

  • They held 34 em dashes on 30 lines, and code-server once.
  • Nine clip and editor descriptions said "over the workspace IPC socket".
  • Every example called ws, which is a function of interactive zsh only. In the v0.6.0 image, type ws finds nothing in bash or in zsh -c, so the show example $(ws show ip node --raw) fails in a script.
  • The feature example and --skip-extensions said "VSCode".
  • feature new and template show had indented lines. The docs generator renders descriptions as a blockquote, so the feature new command line showed as prose.
  • The feature description said --root points at your own features under ~/.ws/features.d. In fact featureDirs reads ~/.ws/features.d by default, and --root replaces the whole search.

Change. Reworded in the Go sources and regenerated commands.yaml:

  • The descriptions now say what each command does for you, with no em dashes.
  • The examples call ws-cli, and "VS Code" is spelled out.
  • The feature new command line moved into its example.
  • template show is one sentence.

No flag, argument or behavior changed.

Verified. commands.yaml no longer holds an em or en dash, code-server, "IPC" or "socket", "VSCode", or a bare ws in an example. Rendering it with ws-docs' scripts/generate-commands.mjs (origin/main) shows the feature new example as a sh block and template show as one sentence. go test ./... passes, including TestCommandsManifestMatchesCommittedFile. So do go vet ./... and the pre-commit hooks.

CI never runs for a pull request from a fork

Bug. ci.yaml ran on push only.

Change. Limit push to main and add pull_request, so a branch in this repository is checked once, through its pull request. No job in this workflow publishes anything, and sync-commands.yaml, which does publish, already runs only on pushes to main. ws-cli has no tags, so no tag-triggered run is lost.

Verified. actionlint 1.7.12 and the pre-commit hooks pass. Pushing this branch started no run; opening this pull request starts one pull_request run.

Not changed

  • The editor description and its ws-cli editor terminal example name download, reveal and terminal. These commands exist on main (since: next) but not in the 2217c04 that v0.6.0 bakes, so the text is right for main. The docs show it before a release because ws-meta syncs commands.yaml from ws-cli main, not from the commit a release bakes.
  • Runtime hints (ws feature install <name>, ws template show <name>), the editor notify stdin error and the SSH error keep their wording. They print in a terminal and do not reach the docs.

How to test this PR

From a workspace terminal, which provides /etc/workspace/env.reference.yaml:

go test ./...

docker run -d --name fs -p 127.0.0.1:18081:80 ghcr.io/kloudkit/ws-feature-store:v2026.11
WS_FEATURES_STORE_URL=http://127.0.0.1:18081 go run . feature store

The feature store stopped writing `artifacts/manifest.json` in March
2026 (ws-feature-store `ef56274`). It now serves one `manifest.json` at
its root that lists APT packages and artifacts as `packages`, one entry
per architecture. `feature store` still asked for the old path and got
a 404 from every store image since `v2026.03`.

Fetch `<store>/manifest.json`, decode `packages`, and list each
artifact once with its version, as before.
The descriptions feed the command reference on ws.kloudkit.com.

- Drop the em dashes and "over the workspace IPC socket", and name the
  editor instead of "VS Code / code-server".
- Use `ws-cli` in every example: `ws` is a function of interactive zsh
  only, so it fails in bash and in scripts.
- Spell "VS Code" in the `feature` example and `--skip-extensions`.
- Move the `feature new` command line into its example, and drop the
  indent in `template show`, since the docs render descriptions as a
  blockquote.
- Say that features in ~/.ws/features.d load by default and that
  `--root` replaces the search, as `featureDirs` does.

Regenerate `commands.yaml`.
CI ran on `push` only, so a pull request from a fork got no checks.
Run it on `pull_request`, and limit `push` to `main` so a branch in
this repository is not checked twice. No job in this workflow
publishes; `sync-commands.yaml` already runs only on `main`.
@bdsoha
bdsoha merged commit 7438ab3 into main Nov 6, 2026
3 checks passed
@bdsoha
bdsoha deleted the fix/docs-audit branch November 6, 2026 08:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant