11#!/usr/bin/env python3
22"""Publish a private guideline entity to the public directory.
33
4- - Reads source from .evolve/entities/guideline/{filename}
5- - Copies to .evolve/public/guideline/{filename}
4+ - Moves source from .evolve/entities/guideline/{filename}
5+ - to .evolve/public/guideline/{filename}
66- Updates frontmatter: visibility=public, owner={user}, published_at={now}
77- Appends to audit.log
88"""
99
1010import argparse
1111import datetime
1212import os
13+ import re
1314import sys
1415from pathlib import Path
1516
1617# Add lib to path
1718sys .path .insert (0 , str (Path (__file__ ).resolve ().parent .parent .parent .parent / "lib" ))
1819from entity_io import markdown_to_entity , entity_to_markdown
1920from audit import append as audit_append
21+ from config import load_config
22+
23+
24+ def _resolve_source (cfg , user_arg ):
25+ """Derive a source label from config or fallback to user arg."""
26+ remote = cfg .get ("public_repo" , {})
27+ if isinstance (remote , dict ):
28+ remote = remote .get ("remote" , "" )
29+ if remote :
30+ # Extract user/repo from SSH or HTTPS remote URLs
31+ m = re .search (r"[:/]([^/:]+/[^/]+?)(?:\.git)?$" , remote )
32+ if m :
33+ return m .group (1 )
34+ identity = cfg .get ("identity" , {})
35+ if isinstance (identity , dict ) and identity .get ("user" ):
36+ return identity ["user" ]
37+ return user_arg
2038
2139
2240def main ():
@@ -46,6 +64,10 @@ def main():
4664 if args .user :
4765 entity ["owner" ] = args .user
4866 entity ["published_at" ] = datetime .datetime .utcnow ().strftime ("%Y-%m-%dT%H:%M:%SZ" )
67+ cfg = load_config (str (evolve_dir .resolve ().parent ))
68+ source = _resolve_source (cfg , args .user )
69+ if source :
70+ entity ["source" ] = source
4971
5072 # Write to public directory
5173 dest_dir = evolve_dir / "public" / "guideline"
@@ -58,6 +80,7 @@ def main():
5880
5981 content = entity_to_markdown (entity )
6082 dest_path .write_text (content , encoding = "utf-8" )
83+ src_path .unlink ()
6184
6285 # Audit log
6386 audit_append (
0 commit comments