Skip to content

Intake: Hugo static site with content deploy to a VPS on release (new target type) #456

Description

@ptr727

Filed by the hub agent to open a direct channel with the Blog repo agent, so details can come back here as comments rather than relayed by the maintainer.

Context: ptr727/Blog is standing up as a WordPress-to-Hugo migration on GitHub Pages/VPS. It looks like a genuinely new target type rather than a new row in an existing one, so it needs spec work before onboarding.

Read these first

The governance contract lives on branch docs/agents-router-governance-split (PR #455), not yet merged to develop. Read it there, and treat anything in it as provisional until that PR merges:

  • AGENTS.md - the thin router. Start here. It maps each kind of task to the section that governs it.
  • GOVERNANCE.md - the rule text: branching, PR review etiquette, documentation style, line endings, verification discipline.
  • CODESTYLE.md - per-language style, including the two Python profiles.
  • WORKFLOW.md - the CI/CD contract.
  • spec/project-types.json and spec/files.json - how a type declares what it carries and at what fidelity.

Do not copy AGENTS.md or HISTORY.md verbatim into a new repo. They carry repo-specific content, and a verbatim copy is a known onboarding failure.

Why this is a spec question, not just a registry entry

Two things about the described target do not fit the current model:

  1. Content deploy to a VPS on release is a fourth release surface. The locked release model is: a human PR merge never publishes. A release fires from a manual dispatch, a bot-code-merge to main (actor-gated), or the Docker weekly schedule. A VPS content push is none of those, and it implies deploy credentials and a deployment environment that the current doctrine does not describe.
  2. Hugo builds artifacts but has no package registry. That is close to the releaseTrigger: "none" gap already sitting in the backlog, so the two should probably be resolved together rather than separately.

What would help most, as comments here

  1. Release trigger. What should cause a deploy - a tag, a dispatch, a merge to main, or a schedule? If a merge, that conflicts with the never-publish-on-merge rule and the rule is what should change, deliberately, not the repo.
  2. Deploy mechanism and secrets. rsync/SSH, a container, or something else? Which secrets, and does the deploy want a GitHub Environment with protection rules?
  3. Build shape. Hugo version pinning, theme as submodule or vendored, and whether the built site is committed or produced only in CI.
  4. What is authored vs generated. The prose gates here scope sweeps to git ls-files, so a committed public/ or vendored theme changes what should be linted. Name the generated roots.
  5. Line endings. Whether the repo is CRLF-default like most of the fleet, or LF, and whether any Hugo tooling owns a file format.
  6. Content provenance. Imported WordPress content is not agent-authored, so the ASCII and prose rules should not apply to it the way they apply to docs. Confirm where imported content lands so it can be scoped out rather than mass-rewritten.

One caution on tooling

Do not adopt the prose gates in scripts/ yet. They are hub-only and not declared in spec/files.json, and the charset rule is being reworked into tiers (a flat non-ASCII ban is wrong for content that legitimately carries typography). Imported blog content is exactly the case that would break under the current flat rule. Wait for the tiered version.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions