Skip to content

Add v0.2.0 documentation and update website for release - #6

Merged
smintz merged 11 commits into
mainfrom
claude/website-v0.2.0-release-3pcl3p
Sep 14, 2026
Merged

smintz merged 11 commits into
mainfrom
claude/website-v0.2.0-release-3pcl3p

Conversation

@smintz

@smintz smintz commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

This PR adds comprehensive documentation for protoconf v0.2.0 and updates the website to reflect the new release.

Summary

Adds new documentation pages covering v0.2.0 features, updates existing docs with v0.2.0 changes, and configures the Docusaurus site to support versioned documentation with v0.2.0 as the current version and v0.1.7 as a legacy version.

Key Changes

New Documentation Pages:

  • docs/cli-reference.mdx - Complete CLI configuration reference for all commands (agent, serve, compile, insert, mutate, mod) with flags, environment variables, defaults, and descriptions
  • docs/whats-new-0.2.0.mdx - Feature overview and upgrade guide from v0.1.7, highlighting breaking changes in configuration precedence and telemetry defaults
  • docs/production/kubernetes.mdx - Guide for running protoconf on Kubernetes using the new ConfigMaps backend
  • docs/production/rollouts.mdx - Documentation for staged rollouts feature with examples and observability
  • docs/production/observability.mdx - Prometheus metrics and OpenTelemetry configuration guide
  • docs/advanced-usage/modules.mdx - Remote module dependency management with CONFIGSPACE and protoconf.lock
  • docs/advanced-usage/formatting.mdx - protoconf fmt usage and CI integration
  • blog/2026-09-03-protoconf-0-2-0.mdx - Release announcement blog post

Updated Documentation:

  • docs/consume-config-updates.mdx - Added GetConfig RPC and HTTP endpoint documentation, updated service definition with v0.2.0 changes
  • docs/validation.mdx - Added protovalidate constraints in proto files alongside existing Starlark validators
  • docs/getting-started.mdx - Added container image installation, updated sidebar position
  • docs/production/running-in-production.mdx - Added ConfigMaps backend reference
  • docs/production/inserting-configurations.mdx - Updated to mention ConfigMaps backend

Site Configuration:

  • Updated docusaurus.config.js to set v0.2.0 as current version and v0.1.7 as legacy version
  • Added versions.json to track versioned documentation
  • Updated homepage link to point to v0.2.0 docs
  • Adjusted sidebar positions across documentation hierarchy
  • Updated homepage buttons with version-specific links

Minor Updates:

  • Fixed typo in versions.json filename (was vesrions.json)
  • Updated MDX React dependency to v3.0.0
  • Added flex-wrap and gap to homepage button styling
  • Updated README.md Docusaurus reference

https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8

smintz and others added 2 commits September 3, 2026 02:52
Cut the docs version and document everything v0.2.0 adds over v0.1.7.

Versioning:
- Rename vesrions.json to versions.json. The typo meant Docusaurus never
  loaded versioned_docs/, so the archived 0.1.7 tree was dead weight and the
  version dropdown had nothing to switch to.
- Snapshot the current docs as version-0.1.7 and move "current" to v0.2.0,
  served at /docs/0.2.0. Point the homepage and footer links at it.

New pages:
- What's New in v0.2.0, including the two upgrade-affecting changes (config
  precedence, telemetry now opt-in).
- Remote Modules: CONFIGSPACE, protoconf.lock, protoconf mod, @repo// loads.
- Staged Rollouts: ConfigRollout/RolloutStage, channel and percentile
  targeting, cooldowns and expiry.
- Running on Kubernetes: the configmaps backend, RBAC, key-to-ConfigMap
  mapping.
- Observability: Prometheus metrics, opt-in OTel, structured logging.
- Formatting Starlark Sources: protoconf fmt.
- CLI Configuration Reference: precedence, and the flag/env pair for every
  option on every component.

Updated pages:
- consume-config-updates: current service definition, GetConfig, and the
  plain-HTTP GET /v1/config/... endpoint.
- validation: protovalidate constraints alongside the Starlark validators.
- getting-started: install options, fmt, devserver, next steps; fix the
  missing duration.proto import and the materialized_config path.
- running-in-production: configmaps, correct -http-address default (:4380,
  was documented as :9143), rollout/otel/log flags.
- inserting-configurations, production-architecture: configmaps, metadata,
  rollouts.

Also bump @mdx-js/react to ^3.0.0. Docusaurus 3 needs it; on v1 the theme's
Heading component never loaded, so no page had anchor links and every build
reported its own headings as broken anchors. Both are gone now.

Add the v0.2.0 release announcement to the blog.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8
The post had no truncate marker, so the index rendered its entire body —
now directly under the v0.2.0 announcement, which does truncate. Adds the
marker after the opening paragraph; the post's own page is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
www-protoconf-dev 55381a6 Commit Preview URL

Branch Preview URL
Sep 14 2026, 07:40 AM

smintz commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Workers Builds: www-protoconf-dev is failing, and it isn't this PR's

Standing down on this check rather than pushing a fix, because the failure is a project-configuration issue rather than something in this branch. The evidence:

  • It fails instantly. started_at and completed_at on the check run are both 03:15:45 — zero seconds. It never reached an install or build step, so nothing in the diff was exercised.
  • It didn't run on the first push. The check is absent on 32e1689 (03:53 UTC) and appears on 24088bc (03:15 UTC), so the Cloudflare Git integration was connected between the two.
  • The only change between those commits is two lines in blog/2023-05-16-new-site.mdx — a {/* truncate */} marker in a Markdown post. There's no mechanism by which that breaks a Workers build.
  • The repo has no Workers configuration. No wrangler.toml or wrangler.jsonc, no Workers entrypoint, and no static-assets binding anywhere in the tree. This repo currently deploys through .github/workflows/deploy.yml to GitHub Pages, with CNAME carrying the custom domain.

Test deployment — the GitHub Actions check that actually builds this site with yarn install --frozen-lockfile && yarn build — is the one that validates this branch, and it passed on the previous head.

What would fix it, if the intent is to move hosting to Cloudflare: the Workers project needs a build command of yarn build, an output directory of build, and a wrangler.jsonc declaring the static assets, roughly:

{
  "name": "www-protoconf-dev",
  "compatibility_date": "2026-09-03",
  "assets": { "directory": "./build", "not_found_handling": "404-page" }
}

I've deliberately not pushed that. Choosing between GitHub Pages and Cloudflare Workers — and what happens to CNAME, the existing Pages deploy workflow, and the custom domain — is a hosting decision for a maintainer, and I have no Cloudflare access to verify such a config would actually deploy. Adding it blind would widen a docs PR into a hosting migration.

I also can't re-run this check: it's posted by the Cloudflare app rather than GitHub Actions, so the usual re-run isn't available to me. Happy to add the config in a separate PR if you want to go the Workers route, or this check can be made non-blocking until the project is configured.


Generated by Claude Code

smintz commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Correction to the timestamp in my comment above: the first push (32e1689) was at 02:53 UTC, not 03:53 — I typed it wrong, which made the ordering read backwards. The sequence is 32e1689 at 02:53 with no Workers check, then 24088bc at 03:15 where it appears and fails in 0s. The conclusion is unchanged.


Generated by Claude Code

The Workers project www-protoconf-dev is connected to this repo but has
nothing to deploy — there is no wrangler config and no entrypoint — so every
build failed immediately (0s, before install or build).

Adds wrangler.jsonc serving the Docusaurus output as static assets, with no
Worker script:
- html_handling "drop-trailing-slash" to match docusaurus.config.js's
  trailingSlash: false, so /docs/intro is served from docs/intro.html and
  there is one canonical URL per page.
- not_found_handling "404-page" so Docusaurus's own build/404.html is served.

Pins wrangler as a devDependency so the deploy command uses a known version
rather than whatever npx resolves. Verified with `wrangler deploy --dry-run`,
which reads all 267 files from build/.

The build itself is configured in the Cloudflare dashboard, not here, and
still needs: build command `yarn build`, deploy command `npx wrangler deploy`.

Leaves the GitHub Pages workflow and CNAME in place. They should come out
only once a Cloudflare deploy is confirmed working, so the live site is not
left without a publisher in between.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8

smintz commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Update: config pushed, and it did not fix the Workers build

Superseding part of my earlier comment. At the maintainer's request I pushed wrangler.jsonc in 784f193 (static assets from ./build, drop-trailing-slash to match trailingSlash: false, not_found_handling: "404-page"), verified locally with wrangler deploy --dry-run reading all 267 built files.

The build failed again on 784f193, again in 0 seconds (started_at and completed_at both 03:25:01) — identical to the failure before the config existed.

That result corrects my earlier diagnosis. I attributed the failure to the missing wrangler.jsonc; adding it changed nothing, so the missing config was not the proximate cause. A 0-second failure means the build ends before repo content is read at all, which puts the problem in the Cloudflare project's own configuration rather than in this branch.

I can't narrow it further from here. The check run exposes no log text to GitHub — output.text is empty and everything lives behind the dashboard, which I have no access to. The remaining candidates all sit on the Cloudflare side: no build command configured on the project, an incomplete Git-integration setup, or an account-level block on Workers Builds.

What would settle it: open the build log`` and read the error. If it names something fixable in the repo, I'll fix it.

wrangler.jsonc is still correct and needed for the migration regardless, so it stays. The GitHub Pages workflow and CNAME remain in place, so the live site is unaffected either way.


Generated by Claude Code

smintz and others added 8 commits September 3, 2026 03:28
784f193 pinned wrangler as a devDependency. wrangler 4 requires Node >=22
and both workflows pin node-version 18, so `yarn install --frozen-lockfile`
failed on the engines check:

  error wrangler@4.128.0: The engine "node" is incompatible with this module.
  Expected version ">=22.0.0". Got "18.20.8"

It passed locally only because this machine runs Node 22 — the frozen-lockfile
check was run under the wrong Node, which is what let it through.

Cloudflare's build image supplies wrangler for `npx wrangler deploy`, so the
dependency was never needed. wrangler.jsonc is unaffected and still drives the
deploy; a note there records why wrangler must not be added back unless the
workflows move to Node 22 first.

Reproduced the failure and verified the fix under Node 18.20.8, matching CI:
`yarn install --frozen-lockfile` then `yarn build`, both clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8
763533c regenerated yarn.lock, which moved @docusaurus/core from 3.1.1 to
3.10.2 (both satisfy the ^3.0.0 range in package.json). Docusaurus 3.10
requires Node >=20, but both workflows pinned node-version 18, so
`yarn install --frozen-lockfile` failed the engines check:

  error @docusaurus/core@3.10.2: The engine "node" is incompatible with this
  module. Expected version ">=20.0". Got "18.20.8"

Bumps both workflows to Node 22 — current LTS, and above the >=20 floor with
room to spare. deploy.yml needs it too: it runs the same install and would
fail identically on main after merge.

Also corrects `engines.node`, which claimed >=16.14 while the dependency tree
has required >=20 since the lockfile regeneration.

Verified by reproducing the failure under Node 18.20.8 (matching CI), then
running `yarn install --frozen-lockfile` and `yarn build` clean under Node 22.
Checked the Docusaurus 3.1.1 -> 3.10.2 jump for fallout: no broken links or
anchors, and the rendered pages are unchanged. It emits one new deprecation
warning, for `onBrokenMarkdownLinks` being removed in Docusaurus v4, which is
left alone as a separate concern.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8
6d6bb03 migrated the repo to Yarn Berry: it added "packageManager":
"yarn@4.18.0", .yarnrc.yml (nodeLinker: node-modules) and a Berry-format
lockfile. The workflows were still installing with the runner's bundled Yarn
1, which refuses to run at all once packageManager is set:

  error This project's package.json defines "packageManager": "yarn@4.18.0".
  However the current global version of Yarn is 1.22.22.

Enables Corepack before actions/setup-node, so setup-node's yarn cache
detection resolves Yarn 4 rather than Yarn 1, and switches the install to
--immutable, the Berry equivalent of --frozen-lockfile. (Yarn 4 still accepts
--frozen-lockfile but warns YN0050 that it is deprecated; the corepack step is
what actually unbreaks the job.)

Also stops tracking .yarn/install-state.gz. It is a local install cache Yarn
rewrites on every install -- it already came back modified here after a single
`yarn install` -- so committing it churns ~1.8MB of binary per install. Yarn's
own guidance is to ignore it, so .gitignore now carries the standard Berry
block.

Verified with Yarn 4.18.0: `yarn install --immutable` resolves the committed
lockfile cleanly and `yarn build` succeeds with no broken links or anchors.
Confirmed first that the pre-fix command fails exactly as CI reported.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8
`curl -s https://protoconf.dev/install | sh` is now the installation method
the docs lead with, in place of "download a release and put it on your PATH".

static/install is copied verbatim into the build by Docusaurus, so it is
served at /install with no build step. It resolves the latest release (via
GitHub's /releases/latest redirect, which has no API rate limit), downloads
the archive for the detected platform, verifies it against the checksums.txt
published with the release, and installs the binary into /usr/local/bin, or
~/.local/bin when that is not writable. --version/--dir flags and the
PROTOCONF_VERSION/PROTOCONF_INSTALL_DIR environment variables override both.

static/_headers serves the extensionless file as text/plain on Cloudflare so
it can be read in a browser before it is run.

The one-liner uses `curl -s` without -L, so the apex domain has to serve the
site rather than redirect to www; that requirement is written down in
README.md next to the script.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8
The script now takes the package as its one positional argument, defaulting
to `protoconf`:

    curl -s https://protoconf.dev/install | sh -s -- protoconf-terraform

Everything except the release repository, the platform matrix and the docs
link is shared, so a new package is one case in select_package(). The two
matrices already differ — protoconf publishes a linux/386 build and
protoconf-terraform does not — so the platform check now asks what the
selected package actually publishes instead of hardcoding one exception.

The Terraform integration page leads with the script and keeps Homebrew and
the releases page as alternatives; Getting Started points at the package
argument from the protoconf install section.

Verified against both packages: protoconf v0.2.0-rc3 and protoconf-terraform
v0.1.6 and v0.1.5 install and run, positionally, through the environment
variables and under dash through a pipe. Unknown packages, a second package
and unknown flags all fail with a message rather than a download.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8
…ntation

The page illustrated the idea with invented APIs — a four-field Component
message, `load("platform_engineering.v1/component.star", ...)`, and a
`finops.TaggingPolicy` that exists nowhere. smintz/platform-engineering is a
working platform built on protoconf, so the page now describes that one: the
real platform.v1.Component (including the configs map of Any, which is what
lets one message carry every team's output), hooks and the four markers,
drivers as the unit of technology choice, objectives rendered by a monitoring
driver, and the CI pipeline derived from what each Terraform state reads.

Every snippet is trimmed from a file in that repository rather than written
for the page. The stakeholder sections are kept — they are the use case — but
each now points at the mechanism that actually serves it, and the security and
FinOps sections use the primitives the platform has (a defaults macro,
labels + SelectComponents, per-component state) instead of inventing modules.

Adds links to the modules, validation, protobuf-any, multiple-outputs and
output-formats pages, which the workspace layout depends on, and a closing
section on running the reference stack and the OpenTelemetry demo example.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvFenuqwiFW5vS3kf1Ezo8
@smintz
smintz merged commit c1eb6ca into main Sep 14, 2026
3 checks passed
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.

2 participants