Skip to content

Add operational workflow model for live-config repos - #287

Merged
ptr727 merged 4 commits into
developfrom
feature/operational-workflow-model
Jul 13, 2026
Merged

Add operational workflow model for live-config repos#287
ptr727 merged 4 commits into
developfrom
feature/operational-workflow-model

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Summary

Introduces a second, first-class branching/workflow model - operational - alongside the default release model, selected per repo by a new registry workflowModel field (release | operational, default release).

Operational repos (live-service config: Vantage-Config, ESPHome-Config, HomeAutomation, HomeAssistant-Config) commit configuration directly to develop (no feature branch) and promote a known-good snapshot to main via an occasional PR.

  • Only the develop ruleset differs: new repo-config/operational/develop.json allows direct signed pushes (deletion + non_fast_forward + required_signatures only). main.json is shared, so the promotion PR still enforces the required lint check - a broken config can never reach main.
  • develop = live edits with advisory CI on push; main = known-good snapshot with CI enforced on the promotion.
  • CI is lint/validation only (editorconfig/EOL plus domain linters - HA/ESPHome config validation, firmware build - no unit tests).
  • Still cut GitHub releases, but only by manual workflow_dispatch (releaseTrigger: dispatch-only), never automatically.

Changes

  • registry: workflowModel enum + property + default; four operational repos marked (workflowModel, groundTruthBranch, dispatch-only release, github-release publish); validate.py enforces the enum.
  • repo-config: operational/develop.json variant; configure.sh selects the develop ruleset from the repo's workflowModel (override via 2nd arg).
  • spec/project-types.json: branch-model audit is model-aware; adds the operational lint-CI expectation.
  • docs: AGENTS.md, WORKFLOW.md, repo-config/README.md, README.md document both models; cspell allows esphome/hass.

Verification

python3 spec/validate.py passes (21 cataloged clean; rejects an invalid workflowModel); bash -n configure.sh clean; configure.sh model resolution verified for all repos; markdownlint + cspell + editorconfig-checker green.

Follow-up (separate, per-repo rollout)

Bringing the four repos up to the operational baseline (missing files, lint+domain CI, version.json + publish-release.yml, apply rulesets) is a separate live-repo effort, starting with ESPHome-Config end-to-end.

🤖 Generated with Claude Code

Introduce a second, first-class branching/workflow model alongside the
default release model, selected per repo by a new registry `workflowModel`
field (release | operational; default release).
Operational repos (live-service config: Vantage-Config, ESPHome-Config,
HomeAutomation, HomeAssistant-Config) commit configuration directly to
`develop` (no feature branch) and promote a known-good snapshot to `main`
via an occasional PR. Only the `develop` ruleset differs: a new
repo-config/operational/develop.json allows direct signed pushes
(deletion + non_fast_forward + required_signatures only), while main.json
is shared - so the promotion PR still enforces the required lint check and
a broken config can never reach `main`. develop = live edits with advisory
CI on push; main = known-good snapshot with CI enforced on the promotion.
CI for operational repos is lint/validation only (editorconfig/EOL plus
domain linters - Home Assistant or ESPHome config validation, a firmware
build - no unit tests). They still cut GitHub releases, but only by manual
workflow_dispatch (releaseTrigger: dispatch-only), never automatically.
Changes:
- registry: workflowModel enum + property + default; mark the four
operational repos (workflowModel, groundTruthBranch, dispatch-only
release, github-release publish); validate.py enforces the enum.
- repo-config: operational/develop.json variant; configure.sh selects the
develop ruleset from the repo's workflowModel (override via 2nd arg).
- spec/project-types.json: branch-model audit is model-aware; add the
operational lint-CI expectation.
- docs: AGENTS.md, WORKFLOW.md, repo-config/README.md, README.md document
both models; cspell allows esphome/hass.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings July 13, 2026 15:05

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a second, first-class workflow model (operational) to the fleet governance so “live config” repositories can commit directly to develop (advisory CI) while still gating develop -> main promotions via the shared main ruleset and required PR check, with publishing restricted to manual dispatch-only releases.

Changes:

  • Introduce and document the workflowModel registry field (release default, operational new) and mark the initial operational repos accordingly.
  • Add an operational develop ruleset payload and teach repo-config/configure.sh to select the develop ruleset by workflow model.
  • Make the audit/spec docs model-aware and extend spelling allowlist for operational-domain terms.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
WORKFLOW.mdDocuments the new operational workflow model and how it maps onto existing guarantees/scenarios.
spec/validate.pyAdds validation for per-repo workflowModel values (and should also validate the defaults).
spec/project-types.jsonUpdates branch-model audit assertions to be workflow-model-aware and adds an operational lint-CI intent check.
repo-config/README.mdDocuments the model-specific develop ruleset and updated configure.sh usage.
repo-config/operational/develop.jsonAdds the operational develop ruleset payload for direct signed pushes.
repo-config/configure.shSelects the develop ruleset based on the repo’s workflowModel (or an override argument).
registry/repos.schema.jsonExtends the registry schema to include workflowModel.
registry/repos.jsonAdds defaults.workflowModel and marks specific repos as operational + dispatch-only release + GitHub release publish.
README.mdUpdates “How This Repo Operates” branching summary to mention both workflow models.
cspell.jsonAdds esphome and hass to the word list.
AGENTS.mdDocuments the operational model in Branching Model / Release Model governance text.

Comment threadrepo-config/configure.sh
Comment threadspec/validate.py
…igure.sh fallback
- spec/validate.py: validate repos.json defaults.workflowModel (configure.sh
falls back to it, so an invalid default would break the apply while every
per-repo entry still validated OK).
- repo-config/configure.sh: add an explicit shell default so $model is never
empty even if the jq lookup fails; document the fallback chain.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings July 13, 2026 15:12

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

WORKFLOW.md:287

  • This section still uses an inline Markdown link and WORKFLOW.md currently lacks reference definitions for the new links. To follow the repo's reference-style-link convention (AGENTS.md "Documentation Style Conventions"), switch the inline link to a reference label and add link definitions under the existing "" block (also enabling the earlier Branch Model section to reference repo-config/README.md consistently).
- **Operational (workflow model, not a build target).** A `workflowModel: operational` repo layers a direct-commit `develop` onto the **source-only** release shape (above). Two workflows: (1) a **lint/validation** PR workflow feeding the required `Check pull request workflow status job` - the generic linters (editorconfig/EOL, markdownlint, cspell, actionlint) plus a domain validator (Home Assistant `hass --script check_config`, `esphome config`, a firmware build), **no unit tests**; its triggers differ from the `release` template - `push` to `develop` (advisory feedback on direct commits) plus `pull_request` to `main` (the enforced promotion gate) plus `workflow_dispatch`. (2) the standard **source-only publisher** on `workflow_dispatch` only (`releaseTrigger: dispatch-only`): NBGV + `version.json` own the tag, and a manual dispatch cuts a GitHub release (tag + source zip + README + LICENSE, `expect_release_assets: false`). Applicable scenarios: S1 (validation) on the promotion PR, plus the source-only release set - S7 (tag-only release), S8 (dispatch guard), S9 (no-op republish), S10 (classification). N/A: the auto-publish paths (S5/S6 bot-push and schedule - operational repos have neither) and every build/registry scenario. See the branch-model note in Section 3 and [AGENTS.md "Branching Model"](./AGENTS.md#branching-model).
<!-- Workflow -->
[workflows]: ./.github/workflows/
<!-- Repo -->
[codestyle]: ./CODESTYLE.md

Comment threadWORKFLOW.md Outdated
Convert the operational-model inline links to reference-style per AGENTS.md
"Documentation Style Conventions" (WORKFLOW.md is not an agent-instruction
file); add agents-branching-model and repo-config-readme definitions under
the Repo group, alphabetized.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings July 13, 2026 15:18

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Comment threadrepo-config/configure.sh
…e.sh
Distinguish a repo simply absent from the registry (jq falls back through
defaults.workflowModel to release, exit 0) from a genuine jq/parse failure
on a malformed registry (now exits 1 instead of silently applying the
release ruleset). A missing registry file still defaults to release, with a
warning; an explicit arg 2 always wins.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings July 13, 2026 15:24
@ptr727
ptr727 merged commit 5136b56 into developJul 13, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/operational-workflow-model branch July 13, 2026 15:28

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Comment threadregistry/repos.json
Comment on lines 214 to 220
"name": "HomeAssistant-Config",
"url": "https://github.com/ptr727/HomeAssistant-Config",
"status": "cataloged",
"types": ["source-only"],
"groundTruthBranch": "master",
"groundTruthBranch": "main",
"workflowModel": "operational",
"hasDevelop": true,
ptr727 added a commit that referenced this pull request Jul 13, 2026
…epos (#292)
Promote the current `develop` snapshot to `main`.
Adds the **operational** workflow model and its supporting rules/tooling
(PRs #287-#291):
- **#287** operational `workflowModel` (direct-to-`develop` live-config
repos; shared `main` ruleset; dispatch-only releases; model-aware
`configure.sh`).
- **#288** per-repo `lineEndings` field (operational repos follow the
consuming app's platform; validated).
- **#289** mixed-consumer EOL guidance (prefer splitting by platform);
dropped the standalone Vantage-Config catalog entry (later re-added,
recreated single-platform).
- **#290** renamed `HomeAutomation` -> `HomeAutomation-Config`; EOL
guidance leads with the split-preferred approach.
- **#291** CODESTYLE.md defers line-ending governance to AGENTS.md (was
hardcoding CRLF, contradicting `lf` operational repos).
Applied end-to-end to ESPHome-Config, HomeAutomation-Config,
HomeAssistant-Config (lf) and the recreated Vantage-Config (crlf).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for freeto 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

@ptr727