import subprocess,re,json,collections,csv
from pathlib import Path
O=Path(__file__).resolve().parent;root=O.parents[1]
files=subprocess.check_output(['git','-c','core.quotepath=false','ls-files'],cwd=root,text=True).splitlines()
def group(p):
 parts=p.split('/');match=re.search(r'(VWCG-\d+|IDACHF-\d+)',p)
 if match:return match[1]
 if parts[0].startswith('work_'):
  if parts[1] in ['manual','videos'] and len(parts)>2:return '/'.join(parts[:3])
  if parts[1] in ['deployment-records','deployment','deployment-preparation','deployment-packages','qa','worklog']:return parts[0]+'/'+parts[1]
  return '/'.join(parts[:2])
 if parts[0]=='work':return '/'.join(parts[:2])
 if parts[0].startswith('product_'):return '/'.join(parts[:2])
 if parts[0]=='modules':
  for i,x in enumerate(parts):
   if re.match(r'2026[-_]?[0-9]{2}[-_]?[0-9]{2}',x):return '/'.join(parts[:i+1])
  return '/'.join(parts[:min(len(parts)-1,6)])
 if parts[0]=='operation-manuals':return '/'.join(parts[:min(len(parts)-1,3)])
 return '/'.join(parts[:-1])
patterns={
 '技术方案':r'technical[-_](?:design|plan)|技术方案|architecture[-_]?(?:design|plan)|ArchitectureDesign|(?:integration|implementation)[-_]plan',
 '需求分析':r'^(?:prd|requirements?|requirement[-_](?:analysis|spec)|requirementspec|use[-_]cases?)(?:[-_.]|$)|需求分析|需求规格|需求说明|产品需求|功能需求|业务需求|UC-',
 '原型设计':r'prototype|原型',
 '软件开发':r'implementation[-_](?:evidence|verification)|development[-_]summary|开发总结|实现记录',
 '交付说明':r'(?:^manual(?:\.md|/)|[/-]manual\.md$|operations[-_]manual|(?:deployment|installation|deployment-complete|complete-deployment)[-_](?:guide|manual)|部署手册|部署操作手册|部署步骤|操作手册|用户手册|操作说明|安装说明|部署说明|deployment-sop)'
}
res={c:{} for c in patterns}
for p in files:
 if not p.startswith(('work/','work_','product_','modules/','operation-manuals/')):continue
 if re.search(r'/source[s-]?|/raw[/-]|/archive/|/history/|/backup|legacy[-_]|/skills?/|/references/|/templates?/|/transcripts/|/codex-conversation-archive/|/team-learning/|/docs/superpowers/',p,re.I):continue
 ext=Path(p).suffix.lower();stem=Path(p).name
 if ext not in ['.md','.html']:continue
 for cat,pat in patterns.items():
  target=p if cat in ['原型设计','交付说明'] else stem
  if not re.search(pat,target,re.I):continue
  if cat=='原型设计':
   if ext!='.html' or re.search(r'plan|review|workflow|skill|gallery|audit|指南|说明|评审',stem,re.I):continue
  elif ext!='.md':continue
  text=(root/p).read_text(errors='replace')
  if len(text.strip())<350:continue
  title=next((x.lstrip('# ').strip() for x in text.splitlines() if x.startswith('# ')),stem)
  if cat=='原型设计':
   m=re.search(r'<title>(.*?)</title>',text,re.S);title=re.sub('<[^>]+>','',m[1]) if m else stem
  g=group(p);res[cat].setdefault(g,[]).append({'path':p,'title':title,'characters':len(text)})
(O/'candidate-groups.json').write_text(json.dumps(res,ensure_ascii=False,indent=2)+'\n')
for cat,groups in res.items():
 print(cat,len(groups))
 for g,fs in groups.items():print(g+' | '+fs[0]['title'][:85]+' | '+str(len(fs)))
