feat(consistency): commit the-custodian daily-triage working-memory notes
Sweep writeback stages memory/working/daily-triage-*.md on the-custodian so activity-core hostPath sink notes reach git without a separate sync job.
This commit is contained in:
parent
508105a302
commit
5289ba02ae
1 changed files with 71 additions and 1 deletions
|
|
@ -1479,6 +1479,14 @@ def _patch_task_status_in_file(
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _git_identity_config() -> list[str]:
|
||||||
|
import os as _os
|
||||||
|
|
||||||
|
name = _os.environ.get("GIT_SYNC_USER_NAME", "custodian-sync")
|
||||||
|
email = _os.environ.get("GIT_SYNC_USER_EMAIL", "custodian-sync@railiance.local")
|
||||||
|
return ["-c", f"user.name={name}", "-c", f"user.email={email}"]
|
||||||
|
|
||||||
|
|
||||||
def _git_commit_writeback(
|
def _git_commit_writeback(
|
||||||
repo_path: str,
|
repo_path: str,
|
||||||
file_path: Path,
|
file_path: Path,
|
||||||
|
|
@ -1508,7 +1516,7 @@ def _git_commit_writeback(
|
||||||
check=True, capture_output=True, env=sync_env,
|
check=True, capture_output=True, env=sync_env,
|
||||||
)
|
)
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
["git", "-C", repo_path, "commit", "-m", msg],
|
["git", "-C", repo_path, *_git_identity_config(), "commit", "-m", msg],
|
||||||
check=True, capture_output=True, env=sync_env,
|
check=True, capture_output=True, env=sync_env,
|
||||||
)
|
)
|
||||||
return True
|
return True
|
||||||
|
|
@ -1529,6 +1537,63 @@ _TASK_STATUS_ICON = {"done": "✓", "cancel": "✗", "progress": "►", "wait":
|
||||||
_OPEN_STATUSES = set(OPEN_TASK_STATUSES)
|
_OPEN_STATUSES = set(OPEN_TASK_STATUSES)
|
||||||
|
|
||||||
|
|
||||||
|
def _commit_working_memory_notes(repo_slug: str, repo_path: str) -> bool:
|
||||||
|
"""Stage and commit activity-core daily-triage working-memory notes.
|
||||||
|
|
||||||
|
Only the-custodian carries the fleet working-memory sink. Notes are
|
||||||
|
repo-relative under memory/working/ and are written by activity-core on
|
||||||
|
Railiance via hostPath into the clone checkout.
|
||||||
|
"""
|
||||||
|
if repo_slug != "the-custodian":
|
||||||
|
return False
|
||||||
|
|
||||||
|
wm_dir = Path(repo_path) / "memory" / "working"
|
||||||
|
if not wm_dir.is_dir():
|
||||||
|
return False
|
||||||
|
|
||||||
|
notes = sorted(wm_dir.glob("daily-triage-*.md"))
|
||||||
|
if not notes:
|
||||||
|
return False
|
||||||
|
|
||||||
|
import os as _os
|
||||||
|
|
||||||
|
sync_env = {**_os.environ, "GIT_CUSTODIAN_SYNC": "1"}
|
||||||
|
rel_paths = [str(note.relative_to(repo_path)) for note in notes]
|
||||||
|
try:
|
||||||
|
subprocess.run(
|
||||||
|
["git", "-C", repo_path, "add", "--", *rel_paths],
|
||||||
|
check=True,
|
||||||
|
capture_output=True,
|
||||||
|
env=sync_env,
|
||||||
|
)
|
||||||
|
staged = subprocess.run(
|
||||||
|
["git", "-C", repo_path, "diff", "--cached", "--quiet"],
|
||||||
|
capture_output=True,
|
||||||
|
env=sync_env,
|
||||||
|
)
|
||||||
|
if staged.returncode == 0:
|
||||||
|
return False
|
||||||
|
from datetime import date as _date
|
||||||
|
|
||||||
|
msg = (
|
||||||
|
"chore(working-memory): sync daily-triage notes from activity-core "
|
||||||
|
f"[auto {_date.today().isoformat()}]"
|
||||||
|
)
|
||||||
|
subprocess.run(
|
||||||
|
["git", "-C", repo_path, *_git_identity_config(), "commit", "-m", msg],
|
||||||
|
check=True,
|
||||||
|
capture_output=True,
|
||||||
|
env=sync_env,
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
print(
|
||||||
|
f"WARN: working-memory commit failed: {e.stderr.decode().strip()}",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def _write_custodian_brief(api_base: str, repo_slug: str, repo_path: str) -> bool:
|
def _write_custodian_brief(api_base: str, repo_slug: str, repo_path: str) -> bool:
|
||||||
"""Generate .custodian-brief.md at the repo root and git-commit if changed.
|
"""Generate .custodian-brief.md at the repo root and git-commit if changed.
|
||||||
|
|
||||||
|
|
@ -2082,6 +2147,11 @@ def fix_repo(
|
||||||
if brief_written:
|
if brief_written:
|
||||||
report.fixes_applied.append("brief: .custodian-brief.md updated")
|
report.fixes_applied.append("brief: .custodian-brief.md updated")
|
||||||
|
|
||||||
|
if repo_path:
|
||||||
|
wm_committed = _commit_working_memory_notes(repo_slug, repo_path)
|
||||||
|
if wm_committed:
|
||||||
|
report.fixes_applied.append("working-memory: daily-triage notes committed")
|
||||||
|
|
||||||
# Push all commits made this run (writebacks + brief) to close the loop.
|
# Push all commits made this run (writebacks + brief) to close the loop.
|
||||||
# This ensures the next run starts with local == remote, making the
|
# This ensures the next run starts with local == remote, making the
|
||||||
# timer idempotent and preventing commit pile-up.
|
# timer idempotent and preventing commit pile-up.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue