diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..fa2c0ce5 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,22 @@ +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + groups: + python-dependencies: + patterns: + - "*" + open-pull-requests-limit: 5 + reviewers: + - "inafev" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" + groups: + action-updates: + patterns: + - "*" diff --git a/.github/workflows/intelligent_link_cleaner.yml b/.github/workflows/intelligent_link_cleaner.yml index 0b92dd8b..4200f742 100644 --- a/.github/workflows/intelligent_link_cleaner.yml +++ b/.github/workflows/intelligent_link_cleaner.yml @@ -61,3 +61,21 @@ jobs: PYTHONUNBUFFERED: 1 run: | python src/intelligent_health_checker.py + + - name: Open Triage Issue for High-Value Links + if: always() + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + if [ -f triage_report.md ]; then + ISSUE_TITLE="🚨 Manual Triage Required: High-Value Links Failing ($(date +'%Y-%m-%d'))" + # Check if an open issue with the same title already exists to avoid duplicates + EXISTING_ISSUE=$(gh issue list --search "$ISSUE_TITLE" --state open --json number --jq '.[0].number') + + if [ -z "$EXISTING_ISSUE" ]; then + gh issue create --title "$ISSUE_TITLE" --body-file triage_report.md --label "triage, automated-report" + else + echo "A triage issue already exists (#$EXISTING_ISSUE). Updating with new report..." + gh issue comment $EXISTING_ISSUE --body-file triage_report.md + fi + fi diff --git a/GEMINI.md b/GEMINI.md index 4910c4e0..3a7f14f1 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -259,6 +259,10 @@ The bot must rotate between profiles to avoid detection: - **Playwright Caching**: Integrated `actions/cache` for Playwright binaries to reduce curation/cleaning setup time by >70%. - **Metric Consolidation**: Integrated `README.md` metric synchronization directly into the `V2 Agentic Builder` workflow to reduce redundant maintenance commits on the `develop` branch. - **O'Reilly Learning Flow**: Refined the O'Reilly-style technical hierarchy in the V2 portal to ensure a logical knowledge progression from foundations to advanced internals. + - **Platinum Maintenance & Security (May 2026)**: + - **Automated Triage System**: The health monitoring engine MUST open/update a GitHub Issue whenever high-value resources (`review_required`) fail validation. This ensures visibility for manual rescue attempts. + - **OpenGraph Social Cards**: The V2 Portal MUST generate dynamic social sharing cards for every page using the `social` plugin to maximize ecosystem engagement. + - **Dependency Guard (Dependabot)**: Automated monitoring of Python and GitHub Action dependencies is mandatory. Any security vulnerability MUST be addressed via prioritized bot-generated PRs. - **AI and Artificial Intelligence Dimension**: Renamed from "Intelligent Control Plane" for better industry alignment. - **Zero-to-Hero Grouping**: Implemented complexity-based levels (Fundamentals to Architect) for high-density learning paths. diff --git a/README.md b/README.md index 2991f76a..7cc2a919 100644 --- a/README.md +++ b/README.md @@ -248,6 +248,9 @@ The autonomy of Nubenetes is powered by a modern, resilient tech stack that ensu | **Optimization** | Adaptive AI Tiering | Dynamic model selection (Pro/Flash) and Global rate limiting. | | **CI/CD Hardening** | Concurrency & [skip ci] | Prevention of race conditions and recursive trigger loops. | | **Performance** | Playwright Caching | Setup optimization (reduces initialization time by >70%). | +| **Security** | Dependabot | Automated vulnerability monitoring for Python and CI Actions. | +| **Engagement** | Social Cards (OG) | Dynamic OpenGraph image generation for the V2 Portal. | +| **Maintenance** | Automated Triage | GitHub Issue generation for failing high-value resources. | | **Automation** | Python 3.11 | Core logic for parsing, gitops, and reporting. | | **Discovery** | Twikit and Playwright | Autonomous scraping and account rotation. | | **Resilience** | Identity Rotation | Evasion of anti-bot blocks using multiple profiles. | diff --git a/src/intelligent_health_checker.py b/src/intelligent_health_checker.py index 8ec3dce6..8737a562 100644 --- a/src/intelligent_health_checker.py +++ b/src/intelligent_health_checker.py @@ -271,6 +271,22 @@ class IntelligentLinkCleaner: report = SafetyGuard().generate_audit_report() metrics = {"total_extracted": len(self.link_registry), "full_report": self.full_report_metrics, "end_date": datetime.now().isoformat()} if final_payload: self.git_controller.apply_multi_file_changes(final_payload, metrics, safety_report=report) + + # --- AUTOMATED TRIAGE REPORT GENERATION --- + triage_links = [] + for url, meta in self.inventory.items(): + if meta.get('status') == 'review_required': + triage_links.append({"url": url, "stars": meta.get('stars', 0), "desc": meta.get('description', 'N/A')}) + + if triage_links: + # Sort by stars (impact) DESC + triage_links.sort(key=lambda x: x['stars'], reverse=True) + with open("triage_report.md", "w") as f: + f.write(f"### 🚨 Manual Triage Required ({len(triage_links)} High-Value Links)\n\n") + f.write("The following resources were flagged for manual review because they failed health checks but are considered high-value assets.\n\n") + f.write("| Impact | Resource | Description |\n| :---: | :--- | :--- |\n") + for item in triage_links: + f.write(f"| {'🌟'*item['stars']} | {item['url']} | {item['desc']} |\n") async def prune_orphaned_metadata(self): valid_map = {} diff --git a/v2-mkdocs.yml b/v2-mkdocs.yml index 06b6ab86..2154d021 100644 --- a/v2-mkdocs.yml +++ b/v2-mkdocs.yml @@ -45,6 +45,14 @@ theme: - content.action.edit - toc.integrate +plugins: + - search + - social: + cards: true + cards_layout_options: + background_color: "#263238" + font_family: "Inter" + extra: social: - icon: fontawesome/brands/github