diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6b7f9e3 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 + +[*.py] +indent_size = 4 + +[*.md] +trim_trailing_whitespace = false diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..ccf8948 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @NikaSir diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..ca79ca5 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c7a332d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +__pycache__/ +*.py[cod] +.venv/ +.pytest_cache/ +.DS_Store diff --git a/.nikas-repository-contract-source.json b/.nikas-repository-contract-source.json index e539e6e..8d35190 100644 --- a/.nikas-repository-contract-source.json +++ b/.nikas-repository-contract-source.json @@ -3,6 +3,6 @@ "canonical_repository": "NikaSir/ha-contract-generated-ui", "canonical_path": "docs/NIKAS_REPOSITORY_CONTRACT.md", "local_path": "NIKAS_REPOSITORY_CONTRACT.md", - "sha256": "ea0f62f74e6880bc5d9de2199232a5e4c561ef4ba6c2d12039affed2e78f5dcc", - "canonical_revision": "78150ef18514ace061ba60fbd509e05f4810ba05" + "sha256": "106f5fa7b799dcca09357055610b7b7736cdd6a4dd19886c9d6e15db16841b05", + "canonical_revision": "0cf8e7c19f2db1b0eccbbf30465f167c15858c24" } diff --git a/BETA_RELEASE_ADOPTION.md b/BETA_RELEASE_ADOPTION.md new file mode 100644 index 0000000..f204e9c --- /dev/null +++ b/BETA_RELEASE_ADOPTION.md @@ -0,0 +1,7 @@ +# Beta release adoption record + +The accepted adoption record is maintained in the canonical knowledge base: +[BETA_RELEASE_ADOPTION.md at 0cf8e7c](https://github.com/NikaSir/ha-contract-generated-ui/blob/0cf8e7c19f2db1b0eccbbf30465f167c15858c24/docs/BETA_RELEASE_ADOPTION.md). + +It distinguishes the approved beta direction from delivery mechanisms already implemented. +This compatibility link accompanies the repository-contract mirror pinned to the same revision. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9c9a18e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +## 2026-09-14 + +- Added repository ownership, weekly GitHub Actions dependency updates and editor/cache defaults. +- Documented publication of this standards repository and the scoped exception for release-driven HACS integrations. +- Refreshed the repository-contract mirror from its reviewed canonical commit. +- Aligned the recommended merge settings with the squash-only fleet profile. + +Earlier changes remain available in the reviewed Git history; this maintenance entry does not introduce a product version or Release. diff --git a/NIKAS_HACS_PUBLICATION_CONTRACT.md b/NIKAS_HACS_PUBLICATION_CONTRACT.md new file mode 100644 index 0000000..a0ea4b2 --- /dev/null +++ b/NIKAS_HACS_PUBLICATION_CONTRACT.md @@ -0,0 +1,6 @@ +# HACS publication contract + +The publication contract is maintained at +[docs/NIKAS_HACS_PUBLICATION_CONTRACT.md](docs/NIKAS_HACS_PUBLICATION_CONTRACT.md). + +This compatibility link keeps references from the root repository-contract mirror usable. diff --git a/NIKAS_REPOSITORY_CONTRACT.md b/NIKAS_REPOSITORY_CONTRACT.md index 2941cd1..e9e6901 100644 --- a/NIKAS_REPOSITORY_CONTRACT.md +++ b/NIKAS_REPOSITORY_CONTRACT.md @@ -187,9 +187,21 @@ a document or CI file does not itself configure GitHub branch protection; settings need separate readback verification. Do not remove an existing required check to make a migration mergeable. -NikaS publication remains reviewed commits/PRs and `main` through HACS where -applicable. GitHub Releases and automatic release tags are not created. Existing -historical publication objects are not deleted as part of tooling adoption. +NikaS accepted code remains traceable through reviewed commits/PRs and `main`. +The main-only delivery model creates no GitHub Releases or automatic tags. +Release-driven HACS integrations follow the +[HACS Publication Contract](NIKAS_HACS_PUBLICATION_CONTRACT.md): they may publish +matching Releases manually or with declared automation. A Release is not proof +that the user has installed or accepted the version. Existing publication +objects and the previous stable version remain available for rollback. + +The factual profile records the channel implemented at `source_revision`: +`github_releases` declares release publication; `automatic_tags` separately +declares repository automation that creates release/tag objects. Manual release +publication does not require an automatic workflow. Recognized release/tag +mutations in workflows still fail inspection when automation is not declared. +Approved channel transitions are tracked separately until implemented; see the +[beta adoption record](BETA_RELEASE_ADOPTION.md). ## 10. Adoption sequence and completion diff --git a/REPOSITORY_STANDARD.md b/REPOSITORY_STANDARD.md index 84d938f..66e9ef5 100644 --- a/REPOSITORY_STANDARD.md +++ b/REPOSITORY_STANDARD.md @@ -13,7 +13,7 @@ Recommended repository settings: - Enable **Squash merging**. - Disable ordinary merge commits unless a project has a documented reason to keep them. -- Rebase merging may remain disabled for a simpler, single-history policy. +- Disable rebase merging for the common squash-only profile. - Automatically delete head branches after merge. The squash commit title should describe the delivered change, not the internal iteration history. @@ -68,13 +68,19 @@ Every maintained project repository should have: - `.gitignore` - `docs/RELEASES.md` +An existing workflow with an equivalent role may keep its filename (for example, +`validate.yml` or `standards-checks.yml`). Preserve its required check names; +do not create a duplicate workflow only to match the example path above. + Home Assistant repositories add HACS, Hassfest and artifact validation only when the real `custom_components//` implementation is present. ## Publication -- Automatic release tags are neither created nor required. Any existing historical tag remains immutable and is not an update channel. -- NikaS panel and integration changes are delivered through committed, reviewed branches and pull requests. -- GitHub Releases are not created for this workflow. +- Reviewed branches, pull requests and `main` remain the source of accepted code. +- The default main-only workflow creates neither GitHub Releases nor automatic release tags. It applies only where the project's documented delivery channel supports that model. +- **HACS exception:** repositories whose HACS delivery depends on release versions follow the [NikaS HACS Publication Contract](docs/NIKAS_HACS_PUBLICATION_CONTRACT.md). Matching Releases/tags are permitted and required for that channel. A merge alone does not prove that a version was delivered. +- Each integration records its actual channel, release automation and any beta/stable acceptance process in `docs/RELEASES.md`. An approved transition is recorded separately from automation already implemented and delivery verified on the target installation. +- Existing published Releases/tags and the previous stable version remain available for traceability and rollback. - Built/versioned artifacts remain traceable to their source commit and are validated before merge. - Existing project version lineage is preserved during GitHub migration. - A migration/bootstrap commit is not itself a functional product publication. diff --git a/docs/RELEASES.md b/docs/RELEASES.md new file mode 100644 index 0000000..b07837b --- /dev/null +++ b/docs/RELEASES.md @@ -0,0 +1,21 @@ +# Standards publication policy + +This repository publishes shared contribution defaults and reviewed mirrors of +NikaS contracts. Its publication record is the protected `main` branch and merged +pull requests. It does not produce an installable Home Assistant integration or +publish GitHub Releases or automatic release tags. + +Before merging, the required `validate` job checks the UI-standard mirror and +the revision-pinned repository contract. A mirror update must identify its +reviewed canonical commit and update its digest together with the document. +Adding a standard here does not configure another repository's GitHub settings +or certify its runtime behavior. + +The [repository standard](../REPOSITORY_STANDARD.md) defines the default profile. +The [HACS publication contract](NIKAS_HACS_PUBLICATION_CONTRACT.md) applies to +consumer integrations with a release-driven update channel. Their Releases, +beta/stable decisions and user acceptance belong to those projects; this +repository's own main-only policy does not prohibit them. + +Changes are recorded in [CHANGELOG.md](../CHANGELOG.md). Rollback uses a reviewed +revert; published history and historical tags remain intact.