Skip to content

chore: apply charmhub review feedback - #34

Merged
danielvnguyen merged 1 commit into
mainfrom
chore/address-charmhub-listing-review-feedback
Sep 11, 2026
Merged

danielvnguyen merged 1 commit into
mainfrom
chore/address-charmhub-listing-review-feedback

Conversation

@danielvnguyen

Copy link
Copy Markdown
Collaborator

What this PR does

Applies feedback provided from canonical/charmhub-listing-review#185

  1.  SECURITY.md: copied from canonical/is-charms-template-repo, covers what qualifies as a security issue and how to report one via GitHub private security advisories.
  2.  charmcraft.yaml : added title: bingo — Canonical Pastebin, links.issues, links.source, links.contact (Matrix channel).
  3. index.html: updated title tag to match charm title
  4.  README.md: dropped  --resource app-image=<oci-image>  from the deploy command to match the tutorial's --channel 1/stable (the resource has a default revision in the store).
  5.  LICENSE: fixed  Copyright 2026 Ubuntu  →  Copyright 2026 Canonical Ltd.  to match source file headers.

- add SECURITY.md
- charmcraft.yaml: added issues, source, contact, title fields
- index.html: updated title tag to match charm title
- README.md: dropped `--resource app-image=<oci-image>`
- LICENSE: fixed copyright
@danielvnguyen danielvnguyen self-assigned this Sep 10, 2026
@danielvnguyen
danielvnguyen requested a review from a team as a code owner September 10, 2026 21:32
@danielvnguyen
danielvnguyen requested review from cardenasse and srbouffard and removed request for a team September 10, 2026 21:32
@danielvnguyen
danielvnguyen merged commit 73b4d5d into main Sep 11, 2026
11 checks passed
@danielvnguyen
danielvnguyen deleted the chore/address-charmhub-listing-review-feedback branch September 11, 2026 00:05
minulo added a commit to canonical/gopkg-charmed that referenced this pull request Sep 11, 2026
…g review pattern

Mirrors the structure of canonical/bingo#34 (Charmhub listing review
feedback) for this repository:

1. CONTRIBUTING.md: added, following bingo's, adapted to this project:
   contact channels, code of conduct, security reporting, the
   release-note artifact process this repository actually uses (there
   is no changelog file), submissions, AI disclosure, CLA and signed
   commits, and pointers to the CI-tested contribution guides in the
   documentation instead of duplicating them.
2. charmcraft.yaml: source and issues now use the repository's direct
   URL (the canonical/gopkg URL redirects), contact gains the public
   Matrix channel, title is a plain string, and the guidance comment
   links the current charmcraft.yaml reference. The documentation link
   stays on the README until the published docs are publicly reachable.
3. SECURITY.md and LICENSE were checked against the template and the
   source headers: already consistent, no change.
4. Pull request template: the contributing-guide link points at
   CONTRIBUTING.md, the checklist no longer names a docs/changelog.md
   that does not exist, and the change-artifact template path is fixed.
5. Documentation home page: the community section no longer claims
   governance and contribution guides live in root files that did not
   exist; it links the actual files and pages.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
minulo added a commit to canonical/gopkg-charmed that referenced this pull request Sep 15, 2026
…g review pattern

Mirrors the structure of canonical/bingo#34 (Charmhub listing review
feedback) for this repository:

1. CONTRIBUTING.md: added, following bingo's, adapted to this project:
   contact channels, code of conduct, security reporting, the
   release-note artifact process this repository actually uses (there
   is no changelog file), submissions, AI disclosure, CLA and signed
   commits, and pointers to the CI-tested contribution guides in the
   documentation instead of duplicating them.
2. charmcraft.yaml: source and issues now use the repository's direct
   URL (the canonical/gopkg URL redirects), contact gains the public
   Matrix channel, title is a plain string, and the guidance comment
   links the current charmcraft.yaml reference. The documentation link
   stays on the README until the published docs are publicly reachable.
3. SECURITY.md and LICENSE were checked against the template and the
   source headers: already consistent, no change.
4. Pull request template: the contributing-guide link points at
   CONTRIBUTING.md, the checklist no longer names a docs/changelog.md
   that does not exist, and the change-artifact template path is fixed.
5. Documentation home page: the community section no longer claims
   governance and contribution guides live in root files that did not
   exist; it links the actual files and pages.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
minulo added a commit to canonical/gopkg-charmed that referenced this pull request Sep 17, 2026
* Adapting the documentation framework from Sphinx

* Update .readthedocs.yaml

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update docs/conf.py

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Update docs/conf.py

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Update docs/conf.py

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Update docs/conf.py

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* docs: address onboarding review feedback

* docs: support workflow Python version

* Trimmed gitignore, added sphinxcontrib.mermaid to extenstion and pinned the mermaid package

* Apply batched suggestions from code review

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Adding overwrite_links.js machanism

* Get rid of the unused snap and add Juju

* Updating wordlist for all 3 layers

* Apply review suggestions for the Canonical domain publishing setup

Implements erinecon's outstanding suggestions on PR #25:

- set the project slug to juju/docs/gopkg-charm
- point html_baseurl at the Canonical domain for the built version
- name the sitemap doc-sitemap.xml so it does not collide with the
  site's own sitemap once published there
- update the Juju intersphinx target to the juju-cli 3.6 docs
- use the project's actual RTD hostname in overwrite_links.js

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Updating the CI/CD to be more specific to the repo

* Updating tests so that they are more intuitive and less redundant

* Updating the checkout-removed-urls and add a release note

* ci(docs): switch to operator-workflows docs_rtd reusable workflow

* docs(index): reword sections to satisfy Vale spellcheck

* Deleted CLA check

* Drop the display name on the release-note compliance job

Branch protection on main now requires the check run the upstream
reusable workflow actually produces, 'check-change-artifacts /
check-release-note-artifact'. The 'name: Validate release note policy'
override on this branch renamed that check run to 'Validate release
note policy / check-release-note-artifact', so the required check was
never reported and the pull request stayed blocked on 'Expected'. With
the override gone the file is identical to main.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Updating the docs with actual content

* Update .pre-commit-config.yaml

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Fix documentation spellcheck wordlist

Co-authored-by: minulo <292215651+minulo@users.noreply.github.com>

* Updating the tutorial integration test

* Update app/charm/tests/integration/run_full_local_suite.sh

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Updating tests so that they are more intuitive and less redundant

* Updating tutorial smoke tests so that the integration test doesn't use stale builds

* Update docs/index.rst

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* docs(conf): apply repo-specific Sphinx title override in content layer

* ci: rely on upstream release-note compliance status

* Added the publish-facing documentation set and aligned documentation policy checks

* Updated docs so that users will not have a migraine over broken tutorial

* Changed documentation to remove edge cases. Waiting on tutorial garentees. Uploading for multiple testing at once

* Changing the tutorial integration test and update the document

* Changing the tutorial integration test and fixed failing URL checks

* Documentation ready for public facing. All workflow tested

* Fixing spellcheck

* Extend tutorial documentation test timeout

Co-authored-by: minulo <292215651+minulo@users.noreply.github.com>

* Removed skill

* Update contributing document

* Update so that the documentation now contains only the correct language for Prerequiste sections

* Update the language so that it is not meta

* Fixing tests that are tied with the documentation update

* Extend registry rollout wait and add docs-test failure diagnostics

The MicroK8s registry deployment consistently needs more than 5 minutes
to become available on GitHub-hosted runners: four addon images pull
concurrently on 4 vCPUs and the registry additionally waits for the
hostpath provisioner to bind its PVC. Integration tests only touch the
registry ~15 minutes after enable (behind the artifact build wait),
which is why they pass while every documentation run has timed out.

- Raise the registry rollout wait from 5m to 15m in all four guides,
  matching the 15m the docs already use for juju wait-for.
- Print cluster and host state (pods, registry describes, PVCs, node
  conditions, events, containerd journal, disk) when a docs session
  fails, so a CI log names the real blocker instead of a bare timeout.
- Raise the spread task kill-timeouts to 60m for the longer waits.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Bump MicroK8s to 1.36-strict/stable across docs and concierge

The docs-test diagnostics revealed why the registry deployment never
becomes ready on GitHub-hosted runners: under MicroK8s 1.31-strict
(core20 base, containerd 1.6), every non-root system container
(CoreDNS, ingress controller, calico-kube-controllers) dies ~30ms
after start on the runners' 6.17 azure kernel, crash-looping forever,
while root/privileged pods run fine. Local VMs pass on kernel 6.8,
which is why the guides validated locally.

The correlation confirms it: the integration suite went red on the
commit that pinned concierge to 1.31-strict and is green on commits
where concierge computes the newest strict channel. Pin docs, README,
reference, and concierge to that channel (1.36-strict/stable) so
readers and both CI suites use the same, runner-proven MicroK8s.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Allow LXD bridge traffic past Docker's firewall in docs-test prepare

With MicroK8s fixed, the docs jobs reached rockcraft pack for the first
time on GitHub runners and failed with 'A network related operation
failed in a context of no network access': the runners ship Docker,
whose iptables FORWARD policy drops traffic from the LXD instances the
craft tools build in. Insert the same guarded DOCKER-USER accept rules
for lxdbr0 that charm-ci's build-artifacts workflow uses. On machines
without Docker - any reader's fresh VM - the guard makes this a no-op,
so the tests still execute only what the guides say.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Wait for MicroK8s readiness before enabling add-ons

The tutorial docs-test job caught a startup race: running
'microk8s enable' seconds after 'snap install microk8s' crashes with a
Python traceback when the API server is not serving yet, because
enable queries cluster state first. The guides enabled add-ons first
and only then ran 'microk8s status --wait-ready'. Wait for readiness
before enabling (and keep the post-enable wait), in the setup guide,
the deploy how-to, and the README quickstart.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Retry the final go-import check until the new hostname is served

Both docs-test jobs now execute the guides end to end and failed only
on the very last command: the go-import query immediately after
'juju config gopkg-charmed hostname=staging.example.com'. The charm
applies config through an in-place pebble restart, so the application
barely leaves active status - the juju wait-for guard returns at once
and the old hostname can still be served for a few seconds. The
tutorial even told readers to 'run the request again' manually.

Replace the single query with a retry-until-match loop (two-minute
cap) in the tutorial and the hostname how-to, so both readers and CI
survive the propagation window.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Add CONTRIBUTING.md and align charm metadata with the Charmhub listing review pattern

Mirrors the structure of canonical/bingo#34 (Charmhub listing review
feedback) for this repository:

1. CONTRIBUTING.md: added, following bingo's, adapted to this project:
   contact channels, code of conduct, security reporting, the
   release-note artifact process this repository actually uses (there
   is no changelog file), submissions, AI disclosure, CLA and signed
   commits, and pointers to the CI-tested contribution guides in the
   documentation instead of duplicating them.
2. charmcraft.yaml: source and issues now use the repository's direct
   URL (the canonical/gopkg URL redirects), contact gains the public
   Matrix channel, title is a plain string, and the guidance comment
   links the current charmcraft.yaml reference. The documentation link
   stays on the README until the published docs are publicly reachable.
3. SECURITY.md and LICENSE were checked against the template and the
   source headers: already consistent, no change.
4. Pull request template: the contributing-guide link points at
   CONTRIBUTING.md, the checklist no longer names a docs/changelog.md
   that does not exist, and the change-artifact template path is fixed.
5. Documentation home page: the community section no longer claims
   governance and contribution guides live in root files that did not
   exist; it links the actual files and pages.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Replace redirecting links with their final URLs

Every external link in the reader-facing files was checked; these
returned a redirect and now point at the destination directly:

- juju.is and microk8s.io marketing hosts -> canonical.com/juju and
  canonical.com/microk8s
- documentation.ubuntu.com/juju/3.6/... -> canonical.com/juju/docs/juju-cli/3.6/...
  (home page, bug-report issue template, repo-compliance.md)
- charmcraft/stable/... -> charmcraft/4/... (home page, explanation)
- documentation.ubuntu.com/nginx-ingress-integrator-charm/ ->
  canonical.com/juju/docs/nginx-ingress-integrator-charm/latest/
- github.com/canonical/gopkg/pull/N -> github.com/canonical/gopkg-charmed/pull/N
  in the release-note artifacts

Left alone on purpose: comment-only links in conf.py and
.readthedocs.yaml (scaffold files owned by the lower stack layers) and
the vendored charm libraries under app/charm/lib, which are fetched
verbatim.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Remove the deploy-locally how-to guide and rechain its documentation test

The guide was a strict subset of the tutorial (same commands, no
verification), so it duplicated content without adding anything
(PR #27 review thread on docs/how-to/deploy-locally-with-microk8s.rst).

- Delete the page; redirect its URL to the tutorial in
  docs/redirects.txt so the removed-URL check stays green.
- Drop the how-to guide index entry and the tutorial's read-next link.
- The hostname how-to no longer carries a Prerequisites section; it
  states that it assumes the deployment the tutorial leaves behind.
- The how-to-configure-hostname documentation test now chains the
  setup guide, the tutorial, and the hostname how-to, which is exactly
  the reader path; the expansion still yields two login sessions with
  one bootstrap and one add-model.
- Update the CI reference page and one explanation sentence that
  mentioned the removed guide.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Make the setup guide's requirements authoritative and its pathway single

Applies the review threads on docs/how-to/set-up-a-local-linux-environment.rst:

- State the hardware requirements plainly (AMD64 or ARM64 workstation,
  4 CPU cores, 8 GB of RAM, 50 GB of disk) instead of describing them as
  a tested profile with caveats; the 4 GB memory finding moves to the
  troubleshooting page.
- Present Multipass as the one pathway on Linux, macOS, and Windows, with
  a native Ubuntu 24.04 LTS host as the only exception, rather than a
  macOS-specific note.
- Drop the step numbers from section titles.
- Write AMD64 and ARM64 in prose without code formatting; command output
  values stay lowercase and code-formatted.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Move ingress procedures into a how-to guide and compact the troubleshooting page

Applies the review threads on docs/explanation/ingress.rst,
docs/reference/charm-configuration.rst and
docs/how-to/troubleshoot-deployment.rst:

- New how-to guide 'Configure ingress' takes the procedural sections
  that were hidden in the explanation page: routing hostname and paths,
  matching the workload hostname, verifying routing, production DNS,
  and HTTPS. It assumes the deployment the tutorial leaves behind, so
  its executable blocks are idempotent and it joins the hostname
  documentation test chain; the TLS block with placeholder paths is
  marked SPREAD SKIP. Both upstream integrator references are linked.
- The explanation page keeps only concepts (what ingress solves, the
  components, the integration, why the guides pin the hostname, the two
  hostname settings, where TLS terminates) and links the how-to guide.
- The troubleshooting page uses one-line Symptom and Cause entries,
  absorbs the ingress failure modes (404, wrong application, 502/503,
  unresolved hostname, certificate errors) without duplicating the two
  entries it already had, gains the insufficient-memory cause for
  Pending pods, and no longer pastes 'newgrp' followed by another
  command, which the README warns against: logging out and back in is
  the fix, newgrp is an interactive-only alternative.
- The configuration reference lists the single 'hostname' option only,
  without a back-to-back header, and points at the ingress how-to and
  the integrator's configuration reference for ingress settings; the
  set and inspect steps live in the hostname how-to guide.
- Section titles in the hostname how-to use the infinitive form.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Restructure the home page to the standard layout and move its deep content to Explanation

Applies the review thread on docs/index.rst (follow the standard
documentation home page structure) and on
docs/explanation/juju-charms-and-rocks.rst (trim upstream duplication):

- The home page now carries only what the standard structure asks for:
  what the charm is, what it does, the need it meets, and who it is for;
  an 'In this documentation' card grid; how the documentation is
  organized (Diátaxis); and 'Project and community' with the same real
  targets the sibling bingo charm uses (code of conduct, security
  policy, contributing, Discourse support, the Charmhub Matrix room,
  the issue tracker).
- The sections about Go modules, why gopkg.in exists, what the service
  does (with its diagram) and the go-get query move verbatim into a new
  explanation page, 'How gopkg.in serves stable import paths', linked
  from the Explanation index and the home page cards.
- 'What the charm adds' merges into the 'What is a charm?' section of
  the concepts page, which also drops its command summary block and
  compresses the Juju glossary into one paragraph, relying on the
  linked upstream documentation for depth.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Restructure the tutorial: unnumbered sections, 'What you'll do', prerequisites

Applies the review threads on docs/tutorials/deploy-and-verify-on-kubernetes.rst:

- Section titles lose their step numbers; a numbered 'What you'll do'
  list at the top gives the overview instead, matching the tutorial
  pattern used across the documentation portfolio.
- The 'confirm architecture' section is gone: the prerequisites now
  state that an AMD64 or ARM64 workstation is required, and every
  later command already derives the architecture itself.
- AMD64 and ARM64 are written in prose without code formatting.

The teardown section requested in the same review is deliberately not
added yet: the hostname documentation test runs the how-to guides right
after the tutorial on the same machine, so the clean-up commands need a
SPREAD SKIP decision first (tracked in the local review plan).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Polish the reference, integration-suite, and contribute pages per review

Reference:
- platforms-and-prerequisites: product name in the description; one
  sentence for the supported architectures; the tools listed with the
  snap channels the guides install and the versions the documentation
  tests last verified (no invented minimums); a detail-oriented lead-in
  for the add-ons; the Juju model constraints section removed as it
  duplicated upstream and the tutorial.
- ci-workflows: the two sections describing the same workflow merged
  into one with both intents; the origin and linkage sections rewritten
  as prose; the trigger list now includes application source changes
  and the chain description matches the current tests.

How-to:
- run-full-juju-integration-suite-locally: the 'what this guide
  validates' material folds into the introduction, the macOS note moves
  into the prerequisites, the standalone architecture check goes, the
  PermissionError note links the troubleshooting page instead of
  repeating it, and the section titles become 'Run the suite with one
  command' and 'Run the suite manually'. The manual path also waits for
  MicroK8s readiness before enabling add-ons and enables dns, matching
  the tested guides.

Contribute:
- improve-documentation: a single target label (the old file path is
  still redirected); improve-code: fix the indentation of one command
  in the Go checks block; index: the suggested description and no
  section header on a page this short.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Retry the registry readiness check after the add-on rollout

The first full run of the rechained documentation test failed on the
setup guide's add-on block: 'kubectl rollout status deployment/registry'
reported success and the immediately following
'curl http://127.0.0.1:32000/v2/' was refused. On a fast MicroK8s start
the registry pod becomes available a few seconds before kube-proxy
programs the NodePort, so the check raced ahead of the service. Readers
on fast machines hit the same window.

The registry check now retries for up to a minute
(--retry 30 --retry-delay 2 --retry-all-errors), the same form the
hostname how-to already uses for its health check, everywhere the
sequence appears: the setup guide, the tutorial prerequisites, the
troubleshooting fix block and the manual integration-suite path.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Retry the rock and charm builds in CI when the Ubuntu archive is unreachable

The documentation test for the hostname how-to failed twice in a row on
the tutorial's build step after the registry check was fixed: once with
'Failed to update packages' (apt-get exit 100) while rockcraft prepared
its base instance, once with chisel's 'cannot talk to archive:
archive.ubuntu.com ... context deadline exceeded'. The tutorial test ran
the identical command on the same commit and passed both times, so the
cause is transient reachability of the Ubuntu archive from the LXD build
instances on GitHub runners, not the guide.

The tutorial now marks the two pack commands SPREAD SKIP and supplies
the same commands in an invisible SPREAD block that reruns a failed pack
up to three times, thirty seconds apart, as the contribute guide
prescribes for a finite CI alternative. The reader-facing block is
unchanged apart from a note that a build failing with a network error
should simply be run again.

A failed pack takes about ten minutes to time out and a green tutorial
job has taken forty minutes on a slow runner, so two retries could
exceed the tasks' 60-minute kill-timeout; both tasks now allow 90.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Widen the build retry window and the documentation tasks' kill-timeout

The first run of the build retry showed two things. Chisel gives up on a
slow archive far sooner than apt does (its metadata client times out
after 30 seconds, apt's after 120), and once the parts are cached a
failed 'rockcraft pack' returns in about a minute, so three attempts
thirty seconds apart only cover four minutes of archive trouble. The
loop now makes five attempts a minute apart, covering roughly ten.

The same run also showed how long a degraded runner network makes an
otherwise green job: 'charmcraft pack' alone took an hour and the
tutorial job finished at 76 minutes with a single build retry. Both
tasks now allow 120 minutes; every step inside still has its own
bounded timeout, so this only changes how long a truly stuck run holds
a runner.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Point the build instances at the Azure archive mirror on GitHub runners

Every documentation test failure since the registry fix has been the
same thing: chisel inside the rockcraft build instance cannot fetch
InRelease from archive.ubuntu.com before its 30-second metadata timeout,
and on a bad day five attempts a minute apart are not enough. apt in the
same instance usually succeeds because it waits 120 seconds, and the
runner itself never notices because its own apt is configured for the
azure.archive.ubuntu.com mirror, which answers in well under a second
and serves requests for either Host name.

The tasks' prepare step now resolves archive.ubuntu.com and
security.ubuntu.com to that mirror in the runner's /etc/hosts. LXD's
dnsmasq forwards container lookups to the host resolver, which answers
from /etc/hosts, so the build instances that rockcraft and charmcraft
launch inherit the mirror without any change to the guides. The step is
guarded on the runner's own apt-mirrors.txt naming the Azure mirror, so
it is a no-op on a reader's machine, in the same spirit as the
DOCKER-USER rules above it.

The failure diagnostics now also print how archive.ubuntu.com resolves
and how long its InRelease takes to fetch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Add a clean-up section to the tutorial and run it only at the end of a chain

The tutorial now ends by destroying the model it created and, for
readers who are done, the controller and the Multipass VM. The two Juju
commands are visible and tested; the VM deletion is SPREAD SKIP like the
other Multipass steps.

The documentation tests chain pages on one machine, and the hostname
test continues from the tutorial's deployment into two how-to guides, so
the clean-up must not run there. The tutorial marks the start of its
clean-up with a new sentinel, '# spread-teardown', from an invisible
SPREAD block, and run-docs.sh drops the sentinel and everything after it
from every page except the last one in the chain. The tutorial test
therefore tears down what it built, and the how-to test keeps the
deployment; its expanded script is unchanged.

The contribute and CI reference pages describe the sentinel, and the two
how-to guides now say they continue from the tutorial's deployment steps
rather than from its end.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Run the documentation Makefile from docs/ and name Diátaxis on the contribute page

The contribute page told readers to run 'make -C docs ...' from the
repository root, which departs from the Sphinx starter pack convention of
working inside docs/ and makes every later command longer. Its commands
now change into docs/ once and call make directly, as the review
suggested for each block.

The page also claimed the documentation could be built on Linux or macOS,
which read as a platform restriction; it now states what the build
actually needs (Git, Make, and Python) and what it does not (the
deployment tools). The layout section names Diátaxis and links to it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Focus the Juju, charms, and rocks page on this project's architecture

The page repeated material that the Rockcraft, Charmcraft, and Juju
documentation already own: the OCI image standard, what 'rockcraft pack'
and 'charmcraft pack' do, the Twelve-Factor methodology, a Juju glossary,
and a generic account of which tool is responsible for what. Following
the review's worked example for the rock section, each section now says
what the piece is for gopkg-charmed, what it contains, and where it lives
in the repository, and defers everything else to upstream.

The upstream links are now intersphinx cross-references, with Charmcraft
and Rockcraft added to intersphinx_mapping next to Juju, so a change to
an upstream URL is a one-line fix in conf.py.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Title the how-to guides 'How to ...' and keep the navigation entries short

Following the review's convention for how-to guides, every how-to page
title now starts with 'How to', and the how-to toctree carries explicit
short entries without those two words, so the left-hand navigation does
not repeat them. The hostname guide is titled 'How to configure hostname':
verifying the go-import metadata is how the goal is checked, not a second
goal, so it leaves the title and the navigation entry, and the tutorial's
'What to read next' link matches.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* updating according to the comments

* Trim upstream duplication from the gopkg.in and ingress explanations

The gopkg.in page opened with a primer on Go modules, restated the
version rules that the gopkg.in page itself documents, and explained
Go's repository discovery protocol ('?go-get=1'); none of that is ours
to maintain. It now says what the service does for this deployment, why
the import paths still matter, and the two facts an operator needs (the
workload reaches GitHub, and the advertised hostname must be the public
one), and links to the Go documentation and the gopkg.in page for the
rest. A deployment's own front page redirects to that page.

The ingress page described Kubernetes Services, Ingress resources,
ingress controllers, and TLS termination in general terms that the
Kubernetes documentation owns. It keeps the request diagram and the
parts specific to this deployment: what the Go framework extension
creates, what the integrator turns into an Ingress resource, the two
hostname settings, and why the guides pin the hostname. The ingress
how-to no longer repeats the TLS explanation and points to it instead.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Run the documentation tests weekly on Saturday, alongside the integration tests

* Keep contributor process off the release-notes index

The public release-notes page told readers to follow the HAProxy
release-notes naming convention and where the change artifacts live in
the repository. Both are contributor process, not release information.
The naming rule for rendered release pages now sits in CONTRIBUTING.md
next to the artifact workflow it belongs to, without the reference to
another project.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Restore the status publisher for the release-note compliance check

Branch protection on main requires the status context 'Check for
release notes artifact / check-change-artifacts /
check-release-note-artifact'. The upstream reusable workflow reports its
result as a check run under its own job name, never under that context,
so the job that publishes the context as a commit status is the only
thing that satisfies the rule. Commit 6ac277e removed it on this branch,
which left the required check waiting forever and the pull request
blocked even though every job passed. This restores the file exactly as
it is on main.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Make the release-notes automation runnable

The 'Create release notes' workflow calls canonical/release-notes-automation
with inputs that did not exist in the repository: no common.yaml, and a
template whose output the script would have written as Markdown under an
.rst name. The script also matches release artifacts to change artifacts
by the upstream 'pr####.yaml' naming, which the artifacts here did not
follow, and the release-artifact template had a typo ('workload_with_version::')
that produced the wrong key.

Now: common.yaml carries the charm name, channel, and visibility setting;
the template is Markdown, as the script produces, and renders a MyST
anchor, an HTML meta description, and review notes as comments instead of
placeholder text; the change artifacts follow the pr####.yaml convention;
the release-artifact template gains the release number the anchor needs;
and CONTRIBUTING.md documents both the per-PR artifact and how a release
is cut. Verified by rendering a release page with the upstream script
from the existing artifacts and building it with Sphinx.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* State the architecture command's output in lowercase code

'dpkg --print-architecture' prints 'amd64' or 'arm64'. The setup guide
described that output in capitals after the prose-styling pass; command
output keeps its literal form in code formatting, as the same review
thread noted.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Record the verified tool versions and the artifacts' own version pins

The platforms reference answers the review's question about minimum
versions with the two things that are actually known: the versions the
documentation tests last passed with (updated to Charmcraft 4.4.2 and
now including the Go snap), and the floors the artifacts themselves
declare - the ubuntu@24.04 base, Go 1.21 in go.mod, and the ops and
paas-charm ranges in the charm's requirements.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Explain the setup guide's steps and drop its repeated checks

Address the review of the environment guide on PR #27: say what running the
steps on a workstation instead of a VM does (sudo installs, group changes,
a cluster listening on ports 80, 443 and 32000) and why a VM helps beyond
non-Ubuntu hosts; introduce the tool list with what each tool is for and
point at the reference for channels and versions; separate the group
membership commands from the installs; state what a successful check looks
like instead of "must exit successfully", and move the newgrp caveat into a
note that explains the new shell; name the four MicroK8s add-ons and their
purpose, and split enabling them from verifying them; describe every output
of the final check and remove the checks the reader already ran; reference
the Multipass install guide through intersphinx; call the next step a
step-by-step tutorial.

The executed command sequence is unchanged apart from the removed repeats
and the command -v lines merged into one.

Assisted by Claude.

* Teach the why behind each tutorial step

Address the review of the tutorial on PR #27. Orient the prerequisites on
what the reader has after the setup guide and state the success criteria of
every readiness check. Explain what the experimental-extension variables opt
into, what the local registry is and why the tag check fails without a push,
how the rock and the charm relate, what a Juju model and the architecture
constraint are for, and why an ingress integrator is deployed from Charmhub
alongside the local charm; deploy and integrate in separate steps. Set,
rather than choose, the ingress hostname, explain why example.com needs no
DNS record, name INGRESS_HOST in the lead-in to the integrator configuration
and describe what service-hostname, path-routes and rewrite-enabled do.
Move the status check into the verification section with --relations and a
real transcript, restate the --resolve pinning after the first request, and
rename the configuration section to "Update the hostname" with an
explanation of what the option controls.

Only one executed command was added, juju status --relations; the sample
output is fenced so the documentation test does not run it.

Assisted by Claude.

* Say who deploys what on the home page and drop a duplicate link

Juju deploys the charm and the charm runs the rock; the previous sentence
had the charm deploying the rock. Remove the contributing-guide bullet
from the governance list, which repeats the link in the section above and
in "Get involved".

Assisted by Claude.

* Trim the generic Juju definitions from the architecture page

Keep the mapping of this deployment onto Juju's controller, model,
applications and units, and leave what a namespace or a pod is to the Juju
documentation the cross-references already point at.

Assisted by Claude.

* Fixing nits

* Fixing nits

* Fixing tests

* Apply batched suggestions from code review

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Update docs/explanation/gopkg-service.rst

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Apply batched suggestions from code review

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Apply the remaining review suggestions on the tutorial and how-to guides

Six threads asked for concrete changes that the batched suggestions had
not yet picked up:

- The home page dropped the paragraph on why published import paths keep
  needing the service. It reads as reference material on a landing page,
  and the explanation already makes the same point.
- The tutorial links the NGINX ingress integrator to its Charmhub page,
  shows the sample 'juju status' output with the terminal directive
  instead of a text code block, and points at the two Go framework
  extensions that built the rock and the charm.
- The setup guide splits 'exit' and 'multipass shell' into separate
  blocks, because they run in different places and copying them together
  only runs the first, and lists the four MicroK8s add-ons instead of
  describing them in one sentence.
- The integration-suite guide gives each step its own block so a reader
  can copy one at a time.

The terminal directive exposes its content to Vale, unlike a code block,
so the sample output is wrapped in 'vale off' and 'vale on': the
controller name and the cloud name in it are literal output, not prose.

Verified that the commands the documentation tests execute are unchanged:
'opcli tutorial expand' produces byte-identical output for the setup
guide and the tutorial, and differs only by two removed blank lines for
the integration-suite guide.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Say what reaches the ingress controller instead of opening with "This"

The paragraph began "This works because...", leaving the reader to guess
whether it explained the pinned hostname, the Host header, or the address
curl connects to. It explains the address: the sentence before it covers
why the request must carry the hostname, and this one covers why
127.0.0.1 is somewhere the controller answers.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Apply the review suggestions I had missed on three more pages

A paginated read of the review turned up seven threads beyond the first
hundred, on pages the earlier pass never looked at.

The hostname how-to now stands on its own. A Prerequisites section states
what the guide needs, a deployed and integrated pair of applications with
the integrator's service-hostname exported as INGRESS_HOST, instead of
leaving the reader to infer it from the tutorial. The introduction says
which setting is which: service-hostname decides what reaches the
application, hostname is what the workload advertises. The wait step warns
that the in-place restart takes a couple of minutes, the generic
'juju config gopkg-charmed' becomes 'juju config gopkg-charmed hostname',
and the two verification sections are one.

The troubleshooting guide names the commands that show a pod stuck in
Pending, rather than describing the symptom without saying where to see
it, and its Symptom, Cause, and Fix labels are bold.

The CI reference presents the documentation test's behavior as three
paragraphs, grouped by when it runs, how it runs, and what it runs.

The only command the documentation tests execute differently is the
'juju config' one above, which prints the option's value.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Erin Conley <erin.conley@canonical.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: minulo <292215651+minulo@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants