Add the brief use case UC-005 (Run Project Quality Checks), the actor and
use case in UCD-001, stories US-001.09 and US-001.10, and ADR-0005 with the
inputs, the pinned tools and what a pass and a fail mean, based on a probe
of the runner image. Review and accept them (RC-035 to RC-038) and update
TM-001 and the registry.
Task: MIL-003#2
The sync and publish-wiki scoped workflows embed 200 to 300 lines of Python
in their YAML. Add task 6 to move them to tools/ and run them from a
checkout of this repository, as verified from two organisations, with a
Go/No-Go criterion and O2 in the traceability. Review and accept the
amendment (RC-034) and update TM-001.
Verified on 2026-10-10 with throwaway branches (deleted afterwards):
workflow_call and uses run from the same repository, another repository of
the organisation and a repository of another organisation, so MIL-003 needs
no copied-template fallback. Not tested: a private provider, secrets passed
to a called workflow, and a tag reference. Review it (RC-033) and update
TM-001.
Task: MIL-003#1
S01, standing in for S05 (ADR-0002), approves the minimum Gitea and GitHub
token permissions, recorded with the evidence from the Gitea source and the
GitHub documentation; they are still not tested with a minimal token on the
instance. Confirm the target dates of MIL-001 to MIL-006 and PP-001 (RC-026
to RC-032), update TM-001 and regenerate the Credentials wiki page with its
translations.
Task: MIL-002#4
Add the use case diagram UCD-001, the user stories US-001 and the brief use
cases UC-001 to UC-004 (Synchronize Repository Metadata, Configure Workflow
Credentials, Onboard a Repository, Diagnose a Failed Workflow). Review and
accept them (RC-019 to RC-024) and the PP-001 row that records them
(RC-025), and update TM-001 and the registry.
Task: MIL-002#1
Gitea stores the title "Home da" as Home-da. The publisher compared title
strings, so a file named Home-da.md would have tried to create a page that
already exists. Identify a page by the address Gitea reports (sub_url),
treat a space and a hyphen as the same, and refuse two files that name one
page. Found while preparing the pilot in sqa-qc-checklists, whose wiki has
pages named with spaces.
Task: MIL-006#3
Describe the wiki/.publish marker and the prune word, the per-organisation
TOKEN_FOR_GITEA_WIKI without fallback, and the new messages in the
onboarding, credentials and troubleshooting guides and the README. Add the
capability row and regenerate the five English wiki pages with their Danish
and Bahasa Malaysia translations.
Task: MIL-006#5
Embed the publish script in .gitea/scoped_workflows/publish-wiki.yml and
remove the repository workflow and tools/publish_wiki.py. A repository
publishes only when wiki/.publish exists; the word prune in it is the only
thing that lets the workflow delete pages. The organisation's
TOKEN_FOR_GITEA_WIKI is used with no fallback. This repository opts in with
prune. Tests run the embedded script against a fake Gitea.
Task: MIL-006#2
Task: MIL-006#3
A repository opts in with wiki/.publish; the word prune in it is the only
thing that lets the workflow delete pages. The shared workflow uses the
organisation's TOKEN_FOR_GITEA_WIKI only. Review and accept it (RC-018),
update TM-001 and link the MIL-006 milestone in PP-001.
Add milestone MIL-006 with five tasks: a scoped publish-wiki workflow with
an opt-in rule, piloted in one other repository. Schedule it in PP-001.
The milestone is Proposed; no code starts before it is accepted.
The onboarding guide said delivery to other repositories was not verified.
On 2026-10-10 the sync workflow ran without a copy in repositories of four
organisations, so a repository needs no copy and each organisation needs
its own secrets. Regenerate the Onboarding wiki page and its translations.
Task: MIL-002#2
A working document for the native readers of Danish and Bahasa Malaysia
(MIL-005 task 5): page list with links, ten checks per page, the judgement
calls to look at first, a findings table and an outcome table.
Add review record RC-015, remove JSON from the credential failures of UC
candidate 2 and the answered MIL-001 items from Open Issues, accept PP-001
and update TM-001.
The sync workflow reads secrets.PAT_FOR_GITHUB as clear text and
parse_github_token and parse_gitea_token only check that the value is not
empty. No secret is JSON any more; the wiki publisher follows. Update the
tests, the guides, the README, PP-001 UC candidate 2 and the wiki pages with
their Danish and Bahasa Malaysia translations.
Task: MIL-002#5
ADR-0002: an artifact approved by S01 counts as approved for the other
named reviewers, with the stand-in recorded. ADR-0003: the wiki is published
with a separate TOKEN_FOR_GITEA_WIKI, dot-named titles work. Add review
records RC-013 and RC-014 and update TM-001.
When Gitea answers 401, add the token's length and likely storage mistakes
(masked text, NAME=value, quotes, whitespace) to the message, without any
character of the token, so a wrongly stored secret can be recognised from
the log.
Task: MIL-005#8
The Publish wiki workflow now reads secrets.TOKEN_FOR_GITEA_WIKI ||
secrets.TOKEN_FOR_GITEA, so the existing token can publish the wiki when it
has write:repository. Update the missing-token message, the credentials and
troubleshooting guides, the README, the tests and the affected English
wiki pages with their Danish and Bahasa Malaysia translations.
Task: MIL-005#8
Draft ten translations (Home, Onboarding, Credentials, Troubleshooting,
Capabilities in da and ms) with the source hash header from ADR-0001, a
language switcher on every page and a term list. build_wiki.py --check now
reports missing or stale translations, and tests assert that translations
follow the structure of the English page.
The drafts await review by a native reader (MIL-005 task 5).
Task: MIL-005#4
English pages are generated and have no suffix; translations are named
<Page>.da and <Page>.ms, written by hand in wiki/, reviewed and checked for
staleness through a source hash. Add the ADR type to the registry.
Add tools/publish_wiki.py and the Publish wiki workflow, which make the
Gitea wiki equal wiki/ through the wiki REST API when a change to wiki/ is
merged to main. It needs its own secret TOKEN_FOR_GITEA_WIKI, refuses an
empty source and checks that the English pages are current first.
Document the secret in the credentials and troubleshooting guides and
regenerate the affected wiki pages.
Task: MIL-005#8
AGENTS.md rule 8: a PR that changes a workflow, a guide or the README also
updates the matching wiki pages and lists them in its description. The
wiki is never pushed to by hand.
Add tools/build_wiki.py, which builds the five English wiki pages into
wiki/, rewrites links so they work inside the wiki and reports pages that
differ from their sources. Offline tests cover the conversion and assert
that the committed pages are current.
Task: MIL-005#3
Records the decision for task 2: the page source lives in this repository,
reaches the wiki repository only through a workflow, and the agent never
pushes to it. Adds task 8 for the publishing workflow and a Go/No-Go
criterion that no manual push exists.
Add milestone MIL-005 with seven tasks, schedule it in PP-001, add the wiki
to the Business Case scope and record the wiki languages in the registry.
The milestone is Proposed; no wiki work starts before it is accepted.
Not every Gitea repository has a GitHub push mirror. Zero GitHub mirrors
now ends the run successfully without reading the GitHub secret; several
mirrors still fail. Tests, guides, README, BC-001, PP-001 and MIL-001
are updated to match.
Task: MIL-001#1
Task: MIL-001#5
Sync workflow: every failure is now reported as `ERROR: [category] message`
with the categories configuration, credentials (HTTP 401), permissions
(HTTP 403) and api (other HTTP errors, unreachable service); HTTP 404 is a
configuration error. Before changing anything the workflow checks that the
GitHub token can administer the mirror repository and stops with a
permissions error otherwise. No secret value is printed.
Guides: onboarding (with runner labels, prerequisites and offline runner
symptoms), credentials (minimum permissions, preflight, rotation) and
troubleshooting (every message mapped to a category and a fix). README
capability table updated. MIL-002 records the verification of scoped
workflow support: Gitea 1.27.3 runs the workflow in this repository;
delivery to other repositories is not yet verified.
Task: MIL-002#2
Task: MIL-002#3
Task: MIL-002#4
Task: MIL-002#5
Task: MIL-002#6
Task: MIL-002#7
Refs #9
Refs #10
Refs #11
Refs #12
Refs #13
Refs #14
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Set the owner/reviewer revision of each milestone to Accepted and deprecate
its initial row, as the Product Owner accepted the milestones. No task
content changed.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Restructure the script embedded in the scoped sync workflow into testable
functions, fix the invalid `exit 0` (now a successful run with a visible
warning when Gitea returns an invalid push mirror list) and report errors as
`ERROR: <message>` with exit code 1. Zero, several or malformed GitHub mirrors
still fail.
Add pytest-based offline tests (workflow YAML, embedded Python, credential and
mirror parsing, sync flow against a fake API) that run in a virtual
environment, and a validation workflow that runs them on pull requests and
pushes to main. Remove the manual tests/test_.ps1 probe and the duplicate
src/ copy of the workflow. Update the README and record the decisions for
tasks 1 and 3 in MIL-001.
Task: MIL-001#1
Task: MIL-001#2
Task: MIL-001#3
Task: MIL-001#4
Task: MIL-001#5
Task: MIL-001#6
Refs #1
Refs #2
Refs #3
Refs #4
Refs #5
Refs #6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Adopt the SQA/QC framework as a submodule and plan the project before any
further code: Business Case, Stakeholder Analysis (S01-S05), Project Plan with
use case candidates and prioritisation, and milestones MIL-001..MIL-004
(24 tasks, synced to Gitea as milestones 18-21 and issues #1-#24).
README now separates implemented from planned capabilities, has an English
sequence diagram and points at the scoped workflow. The workflow file moves
out of the repository root and out of .gitea/workflows/; the scoped copy is
unchanged in behaviour here and still contains the known `exit 0` syntax
error, which MIL-001 fixes.
Refs #1
Refs #2
Refs #3
Refs #6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit adds a reusable Gitea workflow that syncs repository
description and topics to a configured GitHub push mirror via the GitHub
API. Also includes README, LICENSE (AGPL-3.0), and the workflow file
itself.