fix(comm): use JSON (stdlib) for shared_context; update docs
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 24s
Smoke Test / smoke (pull_request) Failing after 18s
Validate Config / YAML Lint (pull_request) Failing after 14s
Validate Config / JSON Validate (pull_request) Successful in 18s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 45s
Validate Config / Python Test Suite (pull_request) Has been skipped
Validate Config / Shell Script Lint (pull_request) Failing after 44s
Validate Config / Cron Syntax Check (pull_request) Successful in 10s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 10s
Validate Config / Playbook Schema Validation (pull_request) Successful in 21s
Architecture Lint / Lint Repository (pull_request) Failing after 17s
PR Checklist / pr-checklist (pull_request) Failing after 3m3s
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 24s
Smoke Test / smoke (pull_request) Failing after 18s
Validate Config / YAML Lint (pull_request) Failing after 14s
Validate Config / JSON Validate (pull_request) Successful in 18s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 45s
Validate Config / Python Test Suite (pull_request) Has been skipped
Validate Config / Shell Script Lint (pull_request) Failing after 44s
Validate Config / Cron Syntax Check (pull_request) Successful in 10s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 10s
Validate Config / Playbook Schema Validation (pull_request) Successful in 21s
Architecture Lint / Lint Repository (pull_request) Failing after 17s
PR Checklist / pr-checklist (pull_request) Failing after 3m3s
Switch from PyYAML dependency to json module for maximum portability. File is now wizards/shared_context.json — same schema, JSON encoding. wizard-summon.py rewritten to use json.loads/dumps (no external dep). Docs updated accordingly.
This commit is contained in:
@@ -4,7 +4,7 @@ Wizard-summon CLI — timmy-config#441
|
||||
|
||||
Usage: wizard-summon.py [--priority P0|P1|P2] "topic" [--deadline ISO8601]
|
||||
|
||||
Creates/updates wizards/shared_context.yaml on Gitea, opens a PR,
|
||||
Creates/updates wizards/shared_context.json on Gitea, opens a PR,
|
||||
and posts structured notice to Telegram broadcast group.
|
||||
|
||||
Exit codes:
|
||||
@@ -30,7 +30,7 @@ REPO_OWNER = "Timmy_Foundation"
|
||||
REPO_NAME = "timmy-config"
|
||||
BRANCH = "step35/441-p1-wizard-to-wizard-communic"
|
||||
BASE_BRANCH = "main"
|
||||
SHARED_CONTEXT_PATH = "wizards/shared_context.yaml"
|
||||
SHARED_CONTEXT_PATH = "wizards/shared_context.json"
|
||||
TELEGRAM_TOKEN_FILE = Path.home() / ".config" / "telegram" / "special_bot"
|
||||
TELEGRAM_CHAT_ID = "-1003664764329" # Timmy Time group
|
||||
|
||||
@@ -101,12 +101,12 @@ def get_current_shared_context() -> dict:
|
||||
raise RuntimeError(f"Failed to fetch {SHARED_CONTEXT_PATH}: HTTP {e.code}") from e
|
||||
|
||||
|
||||
def parse_yaml(content: str) -> dict:
|
||||
def parse_json(content: str) -> dict:
|
||||
import yaml
|
||||
return yaml.safe_load(content) or {}
|
||||
|
||||
|
||||
def dump_yaml(data: dict) -> str:
|
||||
def dump_json(data: dict) -> str:
|
||||
import yaml
|
||||
return yaml.safe_dump(data, sort_keys=False, default_flow_style=False, allow_unicode=True)
|
||||
|
||||
@@ -160,18 +160,18 @@ def main():
|
||||
# Check for already-open active summon
|
||||
current = get_current_shared_context()
|
||||
if current["content"]:
|
||||
current_data = parse_yaml(current["content"])
|
||||
current_data = parse_json(current["content"])
|
||||
active = current_data.get("active_summon", {})
|
||||
if active and active.get("status") in ("open", "acknowledged"):
|
||||
print(f"[blocker] Active summon already open: {active.get('summon_id')} — {active.get('topic')}")
|
||||
print(f" Status: {active.get('status')}, priority: {active.get('priority')}")
|
||||
return 2 # blocked
|
||||
|
||||
summon_id = f"SUM-{datetime.now(timezone.utf).strftime('%Y%m%d-%H%M%S')}"
|
||||
summon_id = f"SUM-{datetime.now(timezone.utc).strftime('%Y%m%d-%H%M%S')}"
|
||||
|
||||
# ── Build new context ──
|
||||
if current["content"]:
|
||||
data = parse_yaml(current["content"])
|
||||
data = parse_json(current["content"])
|
||||
else:
|
||||
data = {
|
||||
"version": "1.0",
|
||||
@@ -193,7 +193,7 @@ def main():
|
||||
}
|
||||
data["updated_at"] = now_iso()
|
||||
|
||||
new_content = dump_yaml(data)
|
||||
new_content = dump_json(data)
|
||||
|
||||
# ── Dry-run ──
|
||||
if args.dry_run:
|
||||
@@ -233,7 +233,7 @@ def main():
|
||||
f"**Summoner:** Alexander\n"
|
||||
f"**Deadline:** {args.deadline or 'not set'}\n\n"
|
||||
f"This PR creates the shared context update that implements wizard-to-wizard "
|
||||
f"communication via `wizards/shared_context.yaml`. Closes #441."
|
||||
f"communication via `wizards/shared_context.json`. Closes #441."
|
||||
)
|
||||
|
||||
pr = gitea_request(
|
||||
@@ -259,7 +259,7 @@ def main():
|
||||
f"*Summoner:* Alexander\n"
|
||||
f"*Summon ID:* `{summon_id}`\n"
|
||||
f"*Gitea PR:* {pr_url}\n\n"
|
||||
f"_All wizards: acknowledge by updating `wizards/shared_context.yaml` with your status._"
|
||||
f"_All wizards: acknowledge by updating `wizards/shared_context.json` with your status._"
|
||||
)
|
||||
|
||||
if telegram_broadcast(telegram_msg):
|
||||
|
||||
Reference in New Issue
Block a user