feat: add addition_method provenance metadata to inventory

This commit is contained in:
Nubenetes Bot
2026-05-28 19:55:47 +02:00
parent 8cacba094a
commit 4cf24af048
7 changed files with 18030 additions and 1 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.
+1
View File
@@ -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