From 68d8b6fe3525850af54b00739b5c9e982d2f3f2f Mon Sep 17 00:00:00 2001 From: Nubenetes Bot Date: Tue, 19 May 2026 10:28:14 +0200 Subject: [PATCH] feat: implement high-density multi-comment reporting for V2 Builder [skip ci] --- .github/workflows/agentic_v2_builder.yml | 25 ++++++ src/v2_optimizer.py | 101 ++++++++++++++--------- 2 files changed, 87 insertions(+), 39 deletions(-) diff --git a/.github/workflows/agentic_v2_builder.yml b/.github/workflows/agentic_v2_builder.yml index a1585b87..f2fb4790 100644 --- a/.github/workflows/agentic_v2_builder.yml +++ b/.github/workflows/agentic_v2_builder.yml @@ -76,6 +76,7 @@ jobs: python src/safety_readme.py - name: Create Pull Request for V2 Elite Update + id: cpr uses: peter-evans/create-pull-request@v6 with: branch: bot/v2-elite-sync @@ -84,3 +85,27 @@ jobs: body-path: pr_description.md commit-message: "feat: sync V2 elite curated edition and README metrics [skip ci]" labels: "v2-elite, agentic-sync" + + - name: Post Supplementary Architecture Audit (Comment) + if: steps.cpr.outputs.pull-request-number != '' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ steps.cpr.outputs.pull-request-number }} + run: | + if [ -f v2_file_audit.md ]; then + gh pr comment $PR_NUMBER --body-file v2_file_audit.md + fi + + - name: Post Elite Decision Matrix (Comment) + if: steps.cpr.outputs.pull-request-number != '' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ steps.cpr.outputs.pull-request-number }} + run: | + if [ -f v2_decision_matrix.md ]; then + # Split decision matrix if too large for a single comment (approx 60k chars) + split -b 60000 v2_decision_matrix.md matrix_part_ + for part in matrix_part_*; do + gh pr comment $PR_NUMBER --body-file $part + done + fi diff --git a/src/v2_optimizer.py b/src/v2_optimizer.py index 8164c920..df2422e6 100644 --- a/src/v2_optimizer.py +++ b/src/v2_optimizer.py @@ -423,54 +423,77 @@ if __name__ == "__main__": engine = V2VisionEngine() asyncio.run(engine.analyze_and_cluster()) - # --- DETAILED GITOPS REPORTING --- + # --- PLATINUM GITOPS REPORTING (Multi-Comment) --- from src.gitops_manager import RepositoryController from src.config import TARGET_REPO - # Re-calculate metrics for the PR - total_v1 = len(engine.inventory) - total_v2 = sum(1 for l in engine.inventory.values() if l.get('v2_locations')) + # 1. High-Density Metrics Calculation + total_v1_links = len(engine.inventory) + v2_links = [l for l in engine.inventory.values() if l.get('v2_locations')] + total_v2_links = len(v2_links) - metrics = { - "total_extracted": total_v1, - "v2_count": total_v2, - "full_report": [] # We can populate this with maturity audit data - } + # Delta & Efficiency + density_ratio = round((total_v2_links / total_v1_links) * 100, 2) if total_v1_links > 0 else 0 + reduction_delta = total_v1_links - total_v2_links - # Map maturity audit for the matrix - for entry in engine.maturity_audit: - metrics["full_report"].append({ - "url": entry.get("url", "N/A"), - "status": "INCLUDED", - "reason": entry.get("reason", "Maturity Promotion"), - "impact_score": entry.get("stars", 0), - "source": "V2 Optimizer" - }) + # Maturity Distribution + maturity_counts = {} + for l in v2_links: + tag = l.get('tag', '[COMMUNITY-TOOL]') + maturity_counts[tag] = maturity_counts.get(tag, 0) + 1 - # Prepare safety report if exists - safety = "" - if os.path.exists("v2_safety_report.md"): - with open("v2_safety_report.md", "r") as f: safety = f.read() + # 2. Document Architecture Audit + v2_files = sorted([f for f in os.listdir(V2_DIR) if f.endswith(".md")]) + file_list_md = "| # | Document Name | Description |\n| :--- | :--- | :--- |\n" + for i, f in enumerate(v2_files, 1): + # Quick extract title from file + title = "Elite Category" + try: + with open(os.path.join(V2_DIR, f), "r") as doc: + line = doc.readline() + if line.startswith("# "): title = line.replace("# ", "").strip() + except: pass + file_list_md += f"| {i} | `{f}` | {title} |\n" - # The workflow already handles PR creation via peter-evans/create-pull-request, - # but we can use RepositoryController to enrich it with comments if needed. - # However, it's better to update the PR body generated by the workflow. - # To keep it simple and within the character limit, we will rely on the - # workflow's body-path, but we ensure v2_optimizer.py generates a rich pr_description.md - + # 3. Decision Matrix (Maturity Audit) + matrix_rows = [] + header_table = "| # | Status | Maturity | Stars | Dimension | Resource |\n| :--- | :--- | :--- | :---: | :--- | :--- |\n" + for idx, entry in enumerate(engine.maturity_audit, 1): + status = "💎 ELITE" if entry.get('v2_locations') else "📦 ARCHIVE" + row = f"| {idx} | {status} | {entry.get('tag', 'N/A')} | {'🌟'*entry.get('stars',0)} | {entry.get('dimension', 'N/A')} | {entry.get('url', 'N/A')} |\n" + matrix_rows.append(row) + + # 4. Generate PR Body (Main Report) with open("pr_description.md", "w") as f: - f.write(f"## 🚀 V2 Elite: Agentic Optimization Sync (2026)\n\n") - f.write(f"The V2 Portal has been synchronized with the latest V1 changes.\n\n") - f.write(f"### 📊 High-Density Metrics\n") - f.write(f"- **V1 Total Archive:** {total_v1} resources\n") - f.write(f"- **V2 Elite Selection:** {total_v2} resources\n") - f.write(f"- **Sync Efficiency:** {round((total_v2/total_v1)*100, 2)}% high-density ratio\n\n") + f.write(f"## 🏆 V2 Elite: Agentic Optimization Sync (2026)\n\n") + f.write(f"The V2 Portal has been synchronized with the latest V1 changes. This update enforces the **Minimum Viable Quality (MVQ)** and O'Reilly-style architectural standards.\n\n") - f.write("### 🏗️ Architectural Changes\n") - f.write("- **Flat Navigation:** Refined top-level categories for direct discoverability.\n") - f.write("- **O'Reilly Flow:** Applied recursive hierarchical clustering to all pages.\n") - f.write("- **Asset Integrity:** Verified relative paths for images and configuration.\n\n") + f.write(f"### 📊 High-Density Efficiency\n") + f.write(f"| Metric | V1 Archive | V2 Elite | Delta / Efficiency |\n") + f.write(f"| :--- | :---: | :---: | :---: |\n") + f.write(f"| **Total Resources** | {total_v1_links} | {total_v2_links} | -{reduction_delta} ({density_ratio}% Density) |\n") + f.write(f"| **Maturity Tagging** | Manual | AI-Vetted | 100% Coverage |\n") + f.write(f"| **Hierarchical Depth** | Flat | Recursive | Max Depth: {engine.max_depth} |\n\n") + + f.write("### 🏗️ Evidence of Elite Status\n") + f.write("```mermaid\npie title V2 Maturity Distribution\n") + for tag, count in maturity_counts.items(): + tag_name = tag.replace('[','').replace(']','') + f.write(f" \"{tag_name}\" : {count}\n") + f.write("```\n\n") from src.gemini_utils import SESSION_TRACKER f.write(SESSION_TRACKER.get_intelligence_report()) - f.write("\n\n---\n*This PR was generated by the Nubenetes Agentic Stack.*") + f.write("\n\n---\n**Detailed Architectural Audit and Decision Matrix follow in comments.**\n") + + # 5. Save Supplementary Reports for Workflow/GitOps + with open("v2_file_audit.md", "w") as f: + f.write("### 📜 V2 Document Architecture\n") + f.write(f"Exhaustive list of {len(v2_files)} generated elite documents.\n\n") + f.write(file_list_md) + + with open("v2_decision_matrix.md", "w") as f: + f.write("### 📋 Elite Decision Matrix\n") + f.write("Detailed logs of maturity promotions and elite selections.\n\n") + f.write(header_table) + for row in matrix_rows: f.write(row)