Merge pull request #287 from nubenetes/develop

feat: add addition_method provenance metadata to inventory
This commit is contained in:
Inaki
2026-05-28 19:56:27 +02:00
committed by GitHub
7 changed files with 18035 additions and 6 deletions
+10
View File
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [[2.3.34]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.34) - 2026-05-28
### Added
- **Link Provenance Tracking**: Added `addition_method` metadata attribute to `data/inventory.yaml` to differentiate between manually curated and automatically ingested links.
- **Database Migration**: Migrated all 18,004 existing database entries to have `addition_method: manual` by default.
- **Workflow & Optimizer Integration**: Programmed `src/agentic_curator.py` to mark automatically ingested resources as `automatic`, and updated `src/v2_optimizer.py` to default new V1 Markdown source resources to `manual`.
### Changed
- **Documentation & Memory Systems**: Added documentation for `addition_method` in `README.md`, `GEMINI.md`, and `src/memory/health_learning.json`.
## [[2.3.32]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.32) - 2026-05-28
### Changed
+1
View File
@@ -55,6 +55,7 @@ This file contains the accumulated instructions and long-term vision for the aut
* `source_provenance`: Identifies the origin of the discovery (Twitter, RSS, Manual).
* `social_preview_url`: OpenGraph/Social images to enrich the V2 visual experience.
* `mentions_count`: Tracks resource popularity/rediscovery frequency.
* `addition_method`: Tracks the resource addition origin ('manual' or 'automatic') to facilitate scaling metrics.
- **Persistence (MANDATORY)**: Every AI agent and workflow MUST load this file at startup, update it, and INJECT the modified YAML into the final PR payload if any change is detected. Discarding the database during a workflow run is a CRITICAL FAILURE.
- **Exhaustive Initialization**: The system supports a `FORCE_FULL_CHECK` environment variable to bypass all caches (e.g., 21-day health cache) and force a full re-validation and re-enrichment of the entire 17k+ link archive.
- **No Trusted Bypassing**: All domains, including high-trust ones (GitHub, Google, AWS), MUST be verified for link validity. Trusted status only grants a lower priority for aggressive scraper rotation, not a bypass for existence checks.
+6 -5
View File
@@ -140,7 +140,7 @@ Additionally, as of May 2026, Nubenetes has reached the **Platinum Operational T
| :--- | :--- |
| **Total Technical Resources (Links)** | **18004+** |
| **Specialized MD Pages** | **161** |
| **Total Commits** | **5632+** |
| **Total Commits** | **5634+** |
| **Primary AI Engine** | **Google Gemini (Agentic)** |
<!-- HEART_STATS_END -->
@@ -178,7 +178,7 @@ The growth of Nubenetes reflects the acceleration of the Cloud Native ecosystem.
| 6 | 2023 | 30 | 123 | Maintenance & Refinement |
| 7 | 2024 | 53 | 218 | Curation Strategy Pivot |
| 8 | 2025 | 5 | 20 | Stability & Research Phase |
| 9 | 2026 | 2073 | 8,561 | **Agentic AI Surge** (May 2026 Inception) |
| 9 | 2026 | 2075 | 8,569 | **Agentic AI Surge** (May 2026 Inception) |
<!-- ANNUAL_GROWTH_END -->
<!-- ANNUAL_CHART_START -->
@@ -194,8 +194,8 @@ xychart-beta
title "Nubenetes Annual Growth Metrics (20182026)"
x-axis ["2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026"]
y-axis "Volume (Commits / Estimated New Refs)" 0 --> 9000
bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 8561]
bar [350, 142, 2046, 531, 402, 30, 53, 5, 2073]
bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 8569]
bar [350, 142, 2046, 531, 402, 30, 53, 5, 2075]
```
<!-- ANNUAL_CHART_END -->
@@ -204,7 +204,7 @@ xychart-beta
| Month | Commits | Est. New Refs | Status |
| :--- | :---: | :---: | :--- |
| 2026-04 | 25 | 103 | Active Curation |
| 2026-05 | 2048 | 8,458 | **Agentic Inception (Gemini Era)** |
| 2026-05 | 2050 | 8,466 | **Agentic Inception (Gemini Era)** |
<!-- MONTHLY_SURGE_END -->
### 2.4. Content Distribution and Semantic Clustering
@@ -447,6 +447,7 @@ To embrace the diverse global Cloud Native community while maintaining internati
* `hierarchy`: Persistent, **recursive technical classification** (list of up to 10 levels) for O'Reilly-style grouping.
* `content_hash` / `health_score`: Advanced fields for content drift detection and reliability tracking.
* `source_provenance` / `social_preview_url`: Data for origin tracing and V2 visual enrichment.
* `addition_method`: Origin type of the resource addition ('manual' or 'automatic') to support growth and scaling metrics.
- **Separation of Concerns (Data vs. UI)**:
* **The Database (Source of Truth)**: Holds raw data, enabling future features like language-based filtering or statistics without re-processing links.
* **The Portal (Visual Rendering)**: The `V2VisionEngine` dynamically converts the metadata into visual UI tags (e.g., `[SPANISH CONTENT]`, `[ARCHITECT LEVEL]`).
+18004
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -165,7 +165,8 @@ async def evaluate_extracted_assets(raw_assets: List[Dict]) -> Dict[str, Dict]:
"reputation_status": "Vetted" if not data.get("reputation_penalty") else "Suspicious",
"reputation_summary": data.get("reputation_summary", ""),
"source_provenance": d["asset"].get("source_type", "Social"), "social_preview_url": d["rich_meta"].get("og_image", ""),
"category": primary_cat, "status": "online", "last_checked": datetime.now().timestamp(), **d["gh_meta"]
"category": primary_cat, "status": "online", "last_checked": datetime.now().timestamp(),
"addition_method": "automatic", **d["gh_meta"]
}
if "youtube.com" in url or "youtu.be" in url:
title_desc = f"{data['title']} {data['desc']}".lower()
+8
View File
@@ -8,5 +8,13 @@
"src/reorganize_mosaic.py",
"src/v2_optimizer.py"
]
},
"addition_method_tracking": {
"field": "addition_method",
"values": ["manual", "automatic"],
"rules": {
"manual": "Assigned to all pre-existing entries and any new entries discovered by the V2 Optimizer from V1 Markdown source files (assumed manually added).",
"automatic": "Assigned to resources ingested automatically via curation workflows from X/Twitter, RSS, or GitHub trending."
}
}
}
+4
View File
@@ -392,6 +392,8 @@ class V2VisionEngine:
norm_url = normalize_url(item["url"])
self.inventory[norm_url] = {k:v for k,v in item.items() if k not in ["url", "title", "original_file", "is_special", "aliases"]}
self.inventory[norm_url]["title"] = item["title"]
if "addition_method" not in self.inventory[norm_url]:
self.inventory[norm_url]["addition_method"] = "manual"
except Exception:
for l in batch: analyst_results.append(l)
@@ -501,6 +503,8 @@ class V2VisionEngine:
# Persist to inventory
self.inventory[norm_url] = {k:v for k,v in item.items() if k not in ["url", "title", "original_file", "is_special", "aliases"]}
self.inventory[norm_url]["title"] = item["title"]
if "addition_method" not in self.inventory[norm_url]:
self.inventory[norm_url]["addition_method"] = "manual"
if p_id not in project_registry or item.get("stars", 0) > project_registry[p_id].get("stars", 0):
if p_id in project_registry and project_registry[p_id].get("is_special"): item["is_special"] = True