config: keyproxy mpk refs, loop daemon knobs, redmine status map, gitea section

mpk: key refs resolve through the ukrrs/mopac-keyproxy hop ([keyproxy]
url + token_ref, POST /v1/resolve, short in-memory cache); env:/file:/
literal: refs keep working untouched, so the harness runs with or
without keyproxy up. [loop] gains poll_interval_secs + state_dir for the
self-host daemon; [redmine.status_map] (quoted TOML keys) drives status
transitions; [gitea] carries the optional REPORT-commit step, off by
default. All hosts live in harness.toml, none in code.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
This commit is contained in:
2026-08-28 22:05:41 -05:00
parent 86c39c8fc5
commit c869ac1b06
6 changed files with 596 additions and 9 deletions
+9 -1
View File
@@ -221,7 +221,15 @@ func parseKeyValue(m TOMLDoc, text string, no int) error {
return fmt.Errorf("harness.toml:%d: expected key = value, got %q", no, text)
}
key := strings.TrimSpace(text[:eq])
if !isBareKey(key) {
if strings.HasPrefix(key, `"`) {
// Quoted key (e.g. `"In Progress" = "Done"` in a status map):
// the key must be exactly one quoted string.
q, err := parseStringValue(key, no)
if err != nil {
return fmt.Errorf("harness.toml:%d: invalid quoted key: %w", no, err)
}
key = q
} else if !isBareKey(key) {
return fmt.Errorf("harness.toml:%d: invalid key %q", no, key)
}
valStr := strings.TrimSpace(text[eq+1:])