feat(classifier): add multilingual ECP inherence classifier POC

This commit is contained in:
2026-08-20 00:51:02 -03:00
parent d371b81aa4
commit 67cc40f91a
175 changed files with 30399 additions and 703 deletions
+4
View File
@@ -13,6 +13,10 @@ env/
venv/
.venv/
ENV/
.pytest_cache/
.coverage
htmlcov/
out/
# Node
node_modules/
+215
View File
@@ -0,0 +1,215 @@
#!/usr/bin/env python3
"""Main CLI entrypoint for Multilingual NLP Entity Inherence Classifier (POC)."""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
from src import __version__
from src.models import ECPSnapshot, ClassificationError, ErrorCode
from src.classifier import InherenceClassifier
# Ensure UTF-8 output streams across all platforms
if hasattr(sys.stdout, "reconfigure"):
try:
sys.stdout.reconfigure(encoding="utf-8")
except Exception:
pass
if hasattr(sys.stderr, "reconfigure"):
try:
sys.stderr.reconfigure(encoding="utf-8")
except Exception:
pass
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
parser = argparse.ArgumentParser(
prog="classify.py",
description="Multilingual NLP Entity Inherence Classifier (POC)",
)
parser.add_argument(
"--ecp",
type=str,
required=True,
help="Path to the ECP Snapshot JSON file",
)
parser.add_argument(
"--content",
type=str,
required=True,
help="Path to the Markdown content file",
)
parser.add_argument(
"--output",
"-o",
type=str,
default=None,
help="Path to write the output JSON (default: prints to stdout)",
)
parser.add_argument(
"--enable-embeddings",
action="store_true",
default=False,
help="Enable optional Tier 2 vector embeddings adapter (default: false)",
)
parser.add_argument(
"--enable-llm",
action="store_true",
default=False,
help="Enable optional Tier 3 LLM fallback adapter (default: false)",
)
parser.add_argument(
"--version",
"-v",
action="version",
version=f"%(prog)s {__version__}",
)
return parser.parse_args(argv)
def emit_error(
error_code: ErrorCode,
message: str,
details: dict | None = None,
output_path: str | None = None,
) -> int:
err = ClassificationError(
error_code=error_code,
message=message,
details=details or {},
)
err_json = err.to_json_str(indent=2)
if output_path:
try:
out_file = Path(output_path)
out_file.parent.mkdir(parents=True, exist_ok=True)
out_file.write_text(err_json, encoding="utf-8")
except Exception:
pass
sys.stderr.write(err_json + "\n")
return 1
def main(argv: list[str] | None = None) -> int:
try:
args = parse_args(argv)
except SystemExit as e:
return int(e.code)
ecp_path = Path(args.ecp)
content_path = Path(args.content)
# 1. Validate ECP file existence and readability
if not ecp_path.is_file():
return emit_error(
ErrorCode.INVALID_ECP_JSON,
f"ECP snapshot file not found: '{args.ecp}'",
{"path": str(args.ecp)},
output_path=args.output,
)
try:
ecp_raw = ecp_path.read_text(encoding="utf-8")
except Exception as e:
return emit_error(
ErrorCode.INVALID_ECP_JSON,
f"Failed to read ECP file: {e}",
{"path": str(args.ecp), "error": str(e)},
output_path=args.output,
)
try:
ecp = ECPSnapshot.from_json_str(ecp_raw)
except ValueError as e:
error_msg = str(e)
if "Missing required field" in error_msg:
return emit_error(
ErrorCode.MISSING_REQUIRED_FIELD,
error_msg,
{"path": str(args.ecp)},
output_path=args.output,
)
return emit_error(
ErrorCode.INVALID_ECP_JSON,
error_msg,
{"path": str(args.ecp)},
output_path=args.output,
)
# 2. Validate Content file existence and readability
if not content_path.is_file():
return emit_error(
ErrorCode.INVALID_MARKDOWN,
f"Content markdown file not found: '{args.content}'",
{"path": str(args.content)},
output_path=args.output,
)
try:
content_raw = content_path.read_text(encoding="utf-8")
except Exception as e:
return emit_error(
ErrorCode.INVALID_MARKDOWN,
f"Failed to read content file: {e}",
{"path": str(args.content), "error": str(e)},
output_path=args.output,
)
if not content_raw or len(content_raw.strip()) < 5:
return emit_error(
ErrorCode.EMPTY_CONTENT,
"Content file is empty or contains insufficient text (minimum 5 non-whitespace characters required)",
{"path": str(args.content), "length": len(content_raw.strip()) if content_raw else 0},
output_path=args.output,
)
# 3. Execute Classification
classifier = InherenceClassifier(
enable_embeddings=args.enable_embeddings,
enable_llm=args.enable_llm,
)
try:
result = classifier.classify(ecp, content_raw)
except ValueError as e:
return emit_error(
ErrorCode.INVALID_MARKDOWN,
str(e),
{"path": str(args.content)},
output_path=args.output,
)
except Exception as e:
return emit_error(
ErrorCode.INVALID_MARKDOWN,
f"Classification processing error: {e}",
{"error": str(e)},
output_path=args.output,
)
result_json = result.to_json_str(indent=2)
# 4. Output results
if args.output:
try:
out_file = Path(args.output)
out_file.parent.mkdir(parents=True, exist_ok=True)
out_file.write_text(result_json, encoding="utf-8")
except Exception as e:
return emit_error(
ErrorCode.INVALID_MARKDOWN,
f"Failed to write output file: {e}",
{"output_path": str(args.output), "error": str(e)},
)
else:
sys.stdout.write(result_json + "\n")
return 0
if __name__ == "__main__":
sys.exit(main())
+7
View File
@@ -0,0 +1,7 @@
# Batteriezellproduktion für europäische Elektrofahrzeuge
Der schwedische Batteriehersteller **Northvolt** hat den Bau seiner neuen Produktionslinie für Lithium-Ionen-Zellen erfolgreich vorangetrieben.
Die neuen Batteriezellen sind speziell für die Anforderungen der europäischen Fahrzeugproduktion konzipiert und sollen ab dem kommenden Quartal in großen Stückzahlen an führende Automobilkonzerne geliefert werden.
Mit dieser Partnerschaft soll die Abhängigkeit von asiatischen Zulieferern deutlich reduziert werden.
+7
View File
@@ -0,0 +1,7 @@
# Petrobras bate recorde histórico de produção no pré-sal
A **Petrobras** anunciou nesta semana que atingiu um novo patamar histórico de produção na camada **pré-sal** da Bacia de Santos.
A companhia destacou que os investimentos contínuos em tecnologia de extração offshore e novas plataformas flutuantes impulsionaram o volume de barris de petróleo extraídos por dia.
A diretoria da estatal ressaltou o compromisso com a eficiência operacional e a sustentabilidade no setor energético.
+5
View File
@@ -0,0 +1,5 @@
# Reflexiones sobre el debate político y la diplomacia regional
Durante la extensa reunión celebrada en el palacio de gobierno, el tema de las tarifas comerciales se convirtió en una verdadera manzana de la discordia entre las diferentes delegaciones parlamentarias.
A pesar de las tensiones iniciales, los representantes acordaron continuar las conversaciones la próxima semana en un clima más distendido.
+35
View File
@@ -0,0 +1,35 @@
{
"target_entity_id": "ent_apple",
"target_name": "Apple",
"aliases": [
"Apple Inc.",
"Apple Computer",
"Apple"
],
"domain": "Consumer Electronics & Technology",
"anchors": [
"iPhone",
"MacBook",
"iOS",
"tecnología",
"dispositivos móviles",
"silicio"
],
"negative_anchors": [
"manzana de la discordia",
"receta de tarta de manzana",
"huerto de manzanas"
],
"graph_version": "1.0.0",
"related_entities": [
{
"entity_id": "ent_foxconn",
"name": "Foxconn",
"aliases": ["Hon Hai Precision Industry"],
"relation_type": "MANUFACTURER_FOR",
"weight": 0.8,
"scope": "manufacturing",
"confidence": 0.9
}
]
}
+34
View File
@@ -0,0 +1,34 @@
{
"target_entity_id": "ent_petrobras",
"target_name": "Petrobras",
"aliases": [
"Petróleo Brasileiro S.A.",
"Petrobras",
"Petrobrás"
],
"domain": "Oil & Gas",
"anchors": [
"pré-sal",
"refinaria",
"combustíveis",
"petróleo",
"exploração offshore",
"bacia de santos"
],
"negative_anchors": [
"posto de combustíveis pirata",
"lavagem clandestina"
],
"graph_version": "1.0.0",
"related_entities": [
{
"entity_id": "ent_transpetro",
"name": "Transpetro",
"aliases": ["Petrobras Transporte S.A."],
"relation_type": "SUBSIDIARY_OF",
"weight": 0.85,
"scope": "logistics",
"confidence": 1.0
}
]
}
+34
View File
@@ -0,0 +1,34 @@
{
"target_entity_id": "ent_volkswagen",
"target_name": "Volkswagen",
"aliases": [
"Volkswagen AG",
"VW",
"Volkswagen Group",
"Volkswagen Konzern"
],
"domain": "Automotive & Electric Vehicles",
"anchors": [
"Elektrofahrzeuge",
"Batteriezellen",
"Automobilhersteller",
"Modellpalette",
"Fahrzeugproduktion"
],
"negative_anchors": [
"Spielzeugautos",
"Modellautosammlung"
],
"graph_version": "1.0.0",
"related_entities": [
{
"entity_id": "ent_northvolt",
"name": "Northvolt",
"aliases": ["Northvolt AB"],
"relation_type": "SUPPLIER_OF",
"weight": 0.85,
"scope": "battery_supply",
"confidence": 0.95
}
]
}
+82 -1
View File
@@ -1 +1,82 @@
{"0": "Task Planning", "1": "Convergence Workflow", "2": "SpecKit Utilities", "3": "Graphify Commands", "4": "Specification Analysis", "5": "Analysis Detection", "6": "Feature Specification Template", "7": "Graphify Rules", "8": "Implementation Planning", "9": "Feature Specification", "10": "Task Generation", "11": "Project Constitution", "12": "Constitution Template", "13": "Graphify Exports", "14": "Ponytail Configuration", "15": "Implementation Planning Template", "16": "Ponytail Help", "17": "Checklist Generation", "18": "Clarification Workflow", "19": "Implementation Workflow", "20": "Graph Query", "21": "Constitution Workflow", "22": "Feature Branch Creation", "23": "Ponytail Audit", "24": "Ponytail Metrics", "25": "Ponytail Review", "26": "Task Issue Conversion", "27": "Checklist Template", "28": "Graphify Watch Mode", "29": "Graphify Hooks", "30": "Graphify Updates", "31": "Ponytail Debt", "32": "Repository Merge", "33": "Media Transcription", "34": "Extraction Specification", "35": "Prerequisite Checks", "36": "Template Resolution", "37": "Plan Setup", "38": "Task Setup", "39": "Graphify Workflows"}
{
"0": "Task Planning",
"1": "Convergence Workflow",
"2": "SpecKit Utilities",
"3": "Graphify Commands",
"4": "speckit-analyze/SKILL.md",
"5": "Tasks: Multilingual NLP Entity Inherence Classifier (POC)",
"6": "Feature Specification Template",
"7": "Graphify Rules",
"8": "Implementation Planning",
"9": "Feature Specification",
"10": "Task Generation",
"11": "Project Constitution",
"12": "Constitution Template",
"13": "Graphify Exports",
"14": "Ponytail Configuration",
"15": "Implementation Planning Template",
"16": "Ponytail Help",
"17": "Checklist Generation",
"18": "Clarification Workflow",
"19": "Implementation Workflow",
"20": "Graph Query",
"21": "Constitution Workflow",
"22": "Feature Branch Creation",
"23": "Ponytail Audit",
"24": "Ponytail Metrics",
"25": "Ponytail Review",
"26": "Task Issue Conversion",
"27": "Checklist Template",
"28": "Graphify Watch Mode",
"29": "Graphify Hooks",
"30": "Graphify Updates",
"31": "Ponytail Debt",
"32": "Repository Merge",
"33": "Media Transcription",
"34": "Extraction Specification",
"35": "Prerequisite Checks",
"36": "Template Resolution",
"37": "Plan Setup",
"38": "Task Setup",
"39": "Graphify Workflows",
"40": "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)",
"41": "1. Technical Decisions & Tradeoffs",
"42": "1. Input Schemas",
"43": "2. Basic CLI Usage Examples",
"44": "2. Standard Streams & Exit Codes",
"45": "ECPSnapshot",
"46": "test_models.py",
"47": "detect_language",
"48": "main",
"49": "content_northvolt_de.md",
"50": "content_presal_pt.md",
"51": "content_tangential_es.md",
"52": "adapters/__init__.py",
"53": "src/__init__.py",
"54": "de/contextual.md",
"55": "de/direct.md",
"56": "de/not_related.md",
"57": "de/tangential.md",
"58": "en/contextual.md",
"59": "en/direct.md",
"60": "en/not_related.md",
"61": "en/tangential.md",
"62": "es/contextual.md",
"63": "es/direct.md",
"64": "es/not_related.md",
"65": "es/tangential.md",
"66": "fr/contextual.md",
"67": "fr/direct.md",
"68": "fr/not_related.md",
"69": "fr/tangential.md",
"70": "it/contextual.md",
"71": "it/direct.md",
"72": "it/not_related.md",
"73": "it/tangential.md",
"74": "pt/contextual.md",
"75": "pt/direct.md",
"76": "pt/not_related.md",
"77": "pt/tangential.md",
"78": "tests/__init__.py",
"79": "text-nlp-classifier"
}
+1 -1
View File
@@ -1 +1 @@
{"0": "36bdb6f09c457f7c", "1": "8c5bf6244cf710c6", "2": "efbcc9c62a3ee78b", "3": "8599153989b07faa", "4": "38e871314ace14da", "5": "8261391869fcaafd", "6": "80f79e9e2011a3e3", "7": "4654167fd211d027", "8": "50acfa00fe353440", "9": "c6d2f770737823f1", "10": "44f2ca451aea24be", "11": "feaac5ab67a8c17a", "12": "b71bd92e5edbf2e0", "13": "219d65ba6d2689e4", "14": "8e30bb8112fd02d1", "15": "03906ab80b99db85", "16": "5d51c60ba1bc2be0", "17": "a1da914f522dcd21", "18": "fbad840891b90569", "19": "0686ff2d6fe29fb3", "20": "060baa9e1924b465", "21": "a5c8f2c3080b8243", "22": "0d76852f1d29eeb1", "23": "6ff68619f2d72924", "24": "3da11675eee7ec46", "25": "a6696589e9556f97", "26": "6c752999e8a4d4b6", "27": "2d4e13ea2111d750", "28": "4b60cb0ee1ac186a", "29": "f56fbca9bb8235ec", "30": "c7beed940704509f", "31": "38be2d254fb31ae8", "32": "ee5596fcf7e7c0b3", "33": "e4d4e0a440bc599f", "34": "c897e49c001acdae", "35": "3aad272a2cf5d495", "36": "0a197439d306b956", "37": "f43acf5c8b1329af", "38": "6775efafc9b33338", "39": "8176a164778526f9"}
{"0": "36bdb6f09c457f7c", "1": "8c5bf6244cf710c6", "2": "efbcc9c62a3ee78b", "3": "8599153989b07faa", "4": "b5952a1f7fee9f20", "5": "b493e66e33005daa", "6": "80f79e9e2011a3e3", "7": "4654167fd211d027", "8": "50acfa00fe353440", "9": "c6d2f770737823f1", "10": "44f2ca451aea24be", "11": "feaac5ab67a8c17a", "12": "b71bd92e5edbf2e0", "13": "219d65ba6d2689e4", "14": "8e30bb8112fd02d1", "15": "03906ab80b99db85", "16": "5d51c60ba1bc2be0", "17": "a1da914f522dcd21", "18": "fbad840891b90569", "19": "0686ff2d6fe29fb3", "20": "060baa9e1924b465", "21": "a5c8f2c3080b8243", "22": "0d76852f1d29eeb1", "23": "6ff68619f2d72924", "24": "3da11675eee7ec46", "25": "a6696589e9556f97", "26": "6c752999e8a4d4b6", "27": "2d4e13ea2111d750", "28": "4b60cb0ee1ac186a", "29": "f56fbca9bb8235ec", "30": "c7beed940704509f", "31": "38be2d254fb31ae8", "32": "ee5596fcf7e7c0b3", "33": "e4d4e0a440bc599f", "34": "c897e49c001acdae", "35": "3aad272a2cf5d495", "36": "0a197439d306b956", "37": "f43acf5c8b1329af", "38": "6775efafc9b33338", "39": "8176a164778526f9", "40": "6aa00d5a83295f11", "41": "0322ff824966a4d8", "42": "784c9e3d336a7f53", "43": "4b8bb6c3f7b64856", "44": "18c0ff3e6225bcb2", "45": "635b0327b73603cf", "46": "aebae10575e16ffb", "47": "7f0025cb1cabb27d", "48": "cbb35e88e6b7e1ac", "49": "0d0f9f015921feef", "50": "8d0c81e5ca23e9a6", "51": "f79963571b9c15ee", "52": "5935824c825606cb", "53": "9685f9cbe158e50b", "54": "3d5ab759f350bc79", "55": "d549f24931a990e9", "56": "3cc031dcb648797c", "57": "a0ab88e6c629251d", "58": "76bd6412e2a22ecd", "59": "54827845564490c9", "60": "0a9736c416c0c6b9", "61": "77358620ac528153", "62": "3b0c585df09df48a", "63": "7e78cd3b28828c20", "64": "1c0c958231735f61", "65": "60b0f81225f62f69", "66": "920754c65cc94b88", "67": "df911472140a9b94", "68": "8e17bc11bcea91b9", "69": "7e905b75e4f28b95", "70": "a28424eca5d36c55", "71": "2cdb53d5b6051ab6", "72": "e42fbd3dc744e730", "73": "7fe2cac980de160c", "74": "2b1343a6a9db1487", "75": "54a1bb232f1d4ceb", "76": "442ba11d31ec0e0a", "77": "852a25b8b95bf8d1", "78": "1810ab370b9cd608", "79": "0fc5dca02a3f02f6"}
@@ -0,0 +1,516 @@
{
"communities": {
"0": [
"specify_templates_tasks_template",
"specify_templates_tasks_template_dependencies_execution_order",
"specify_templates_tasks_template_format_id_p_story_description",
"specify_templates_tasks_template_implementation_for_user_story_1",
"specify_templates_tasks_template_implementation_for_user_story_2",
"specify_templates_tasks_template_implementation_for_user_story_3",
"specify_templates_tasks_template_implementation_strategy",
"specify_templates_tasks_template_incremental_delivery",
"specify_templates_tasks_template_mvp_first_user_story_1_only",
"specify_templates_tasks_template_notes",
"specify_templates_tasks_template_parallel_example_user_story_1",
"specify_templates_tasks_template_parallel_opportunities",
"specify_templates_tasks_template_parallel_team_strategy",
"specify_templates_tasks_template_path_conventions",
"specify_templates_tasks_template_phase_1_setup_shared_infrastructure",
"specify_templates_tasks_template_phase_2_foundational_blocking_prerequisites",
"specify_templates_tasks_template_phase_3_user_story_1_title_priority_p1_mvp",
"specify_templates_tasks_template_phase_4_user_story_2_title_priority_p2",
"specify_templates_tasks_template_phase_5_user_story_3_title_priority_p3",
"specify_templates_tasks_template_phase_dependencies",
"specify_templates_tasks_template_phase_n_polish_cross_cutting_concerns",
"specify_templates_tasks_template_tasks_feature_name",
"specify_templates_tasks_template_tests_for_user_story_1_optional_only_if_tests_requested",
"specify_templates_tasks_template_tests_for_user_story_2_optional_only_if_tests_requested",
"specify_templates_tasks_template_tests_for_user_story_3_optional_only_if_tests_requested",
"specify_templates_tasks_template_user_story_dependencies",
"specify_templates_tasks_template_within_each_user_story"
],
"1": [
"agents_skills_speckit_converge_skill",
"agents_skills_speckit_converge_skill_1_initialize_convergence_context",
"agents_skills_speckit_converge_skill_2_load_artifacts_progressive_disclosure",
"agents_skills_speckit_converge_skill_3_build_the_intent_inventory",
"agents_skills_speckit_converge_skill_4_assess_the_codebase_and_classify_findings",
"agents_skills_speckit_converge_skill_5_assign_severity",
"agents_skills_speckit_converge_skill_6_present_the_in_session_findings_summary",
"agents_skills_speckit_converge_skill_7_append_convergence_tasks_or_report_converged",
"agents_skills_speckit_converge_skill_8_provide_next_actions_handoff",
"agents_skills_speckit_converge_skill_9_check_for_extension_hooks",
"agents_skills_speckit_converge_skill_convergence_findings",
"agents_skills_speckit_converge_skill_execution_steps",
"agents_skills_speckit_converge_skill_goal",
"agents_skills_speckit_converge_skill_operating_constraints",
"agents_skills_speckit_converge_skill_pre_execution_checks",
"agents_skills_speckit_converge_skill_user_input"
],
"2": [
"specify_scripts_powershell_common",
"specify_scripts_powershell_common_find_specifyroot",
"specify_scripts_powershell_common_format_speckitcommand",
"specify_scripts_powershell_common_get_currentbranch",
"specify_scripts_powershell_common_get_featurepathsenv",
"specify_scripts_powershell_common_get_invokeseparator",
"specify_scripts_powershell_common_get_normalizedpriority",
"specify_scripts_powershell_common_get_python3command",
"specify_scripts_powershell_common_get_reporoot",
"specify_scripts_powershell_common_get_sortedextensionids",
"specify_scripts_powershell_common_resolve_specifyinitdir",
"specify_scripts_powershell_common_resolve_template",
"specify_scripts_powershell_common_resolve_templatecontent",
"specify_scripts_powershell_common_save_featurejson",
"specify_scripts_powershell_common_test_dirhasfiles",
"specify_scripts_powershell_common_test_fileexists"
],
"3": [
"agents_skills_graphify_skill",
"agents_skills_graphify_skill_for_graphify_add_and_watch",
"agents_skills_graphify_skill_for_graphify_query",
"agents_skills_graphify_skill_for_the_commit_hook_and_native_claude_md_integration",
"agents_skills_graphify_skill_for_update_and_cluster_only",
"agents_skills_graphify_skill_graphify",
"agents_skills_graphify_skill_honesty_rules",
"agents_skills_graphify_skill_interpreter_guard_for_subcommands",
"agents_skills_graphify_skill_part_a_structural_extraction_for_code_files",
"agents_skills_graphify_skill_part_b_semantic_extraction_parallel_subagents",
"agents_skills_graphify_skill_part_c_merge_ast_semantic_into_final_extraction",
"agents_skills_graphify_skill_step_0_github_repos_and_multi_path_merge_only_if_a_url_or_several_paths",
"agents_skills_graphify_skill_step_1_ensure_graphify_is_installed",
"agents_skills_graphify_skill_step_2_5_video_and_audio_only_if_video_files_detected",
"agents_skills_graphify_skill_step_2_detect_files",
"agents_skills_graphify_skill_step_3_extract_entities_and_relationships",
"agents_skills_graphify_skill_step_4_5_graph_health_check_read_only_integrity_gate",
"agents_skills_graphify_skill_step_4_build_graph_cluster_analyze_generate_outputs",
"agents_skills_graphify_skill_step_5_label_communities",
"agents_skills_graphify_skill_step_6_generate_obsidian_vault_opt_in_html",
"agents_skills_graphify_skill_step_9_save_manifest_update_cost_tracker_clean_up_and_report",
"agents_skills_graphify_skill_steps_6b_8_wiki_neo4j_falkordb_svg_graphml_mcp_benchmark_only_on_their_flags",
"agents_skills_graphify_skill_usage",
"agents_skills_graphify_skill_what_graphify_is_for",
"agents_skills_graphify_skill_what_you_must_do_when_invoked"
],
"4": [
"agents_skills_speckit_analyze_skill",
"agents_skills_speckit_analyze_skill_7_provide_next_actions",
"agents_skills_speckit_analyze_skill_8_offer_remediation",
"agents_skills_speckit_analyze_skill_9_check_for_extension_hooks",
"agents_skills_speckit_analyze_skill_analysis_guidelines",
"agents_skills_speckit_analyze_skill_context",
"agents_skills_speckit_analyze_skill_context_efficiency",
"agents_skills_speckit_analyze_skill_goal",
"agents_skills_speckit_analyze_skill_operating_constraints",
"agents_skills_speckit_analyze_skill_operating_principles",
"agents_skills_speckit_analyze_skill_pre_execution_checks",
"agents_skills_speckit_analyze_skill_specification_analysis_report",
"agents_skills_speckit_analyze_skill_user_input"
],
"5": [
"agents_skills_speckit_analyze_skill_1_initialize_analysis_context",
"agents_skills_speckit_analyze_skill_2_load_artifacts_progressive_disclosure",
"agents_skills_speckit_analyze_skill_3_build_semantic_models",
"agents_skills_speckit_analyze_skill_4_detection_passes_token_efficient_analysis",
"agents_skills_speckit_analyze_skill_5_severity_assignment",
"agents_skills_speckit_analyze_skill_6_produce_compact_analysis_report",
"agents_skills_speckit_analyze_skill_a_duplication_detection",
"agents_skills_speckit_analyze_skill_b_ambiguity_detection",
"agents_skills_speckit_analyze_skill_c_underspecification",
"agents_skills_speckit_analyze_skill_d_constitution_alignment",
"agents_skills_speckit_analyze_skill_e_coverage_gaps",
"agents_skills_speckit_analyze_skill_execution_steps",
"agents_skills_speckit_analyze_skill_f_inconsistency"
],
"6": [
"specify_templates_spec_template",
"specify_templates_spec_template_assumptions",
"specify_templates_spec_template_edge_cases",
"specify_templates_spec_template_feature_specification_feature_name",
"specify_templates_spec_template_functional_requirements",
"specify_templates_spec_template_key_entities_include_if_feature_involves_data",
"specify_templates_spec_template_measurable_outcomes",
"specify_templates_spec_template_requirements_mandatory",
"specify_templates_spec_template_success_criteria_mandatory",
"specify_templates_spec_template_user_scenarios_testing_mandatory",
"specify_templates_spec_template_user_story_1_brief_title_priority_p1",
"specify_templates_spec_template_user_story_2_brief_title_priority_p2",
"specify_templates_spec_template_user_story_3_brief_title_priority_p3"
],
"7": [
"agents_rules_graphify",
"agents_rules_graphify_graphify"
],
"8": [
"agents_skills_speckit_plan_skill",
"agents_skills_speckit_plan_skill_completion_report",
"agents_skills_speckit_plan_skill_done_when",
"agents_skills_speckit_plan_skill_key_rules",
"agents_skills_speckit_plan_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_plan_skill_outline",
"agents_skills_speckit_plan_skill_phase_0_outline_research",
"agents_skills_speckit_plan_skill_phase_1_design_contracts",
"agents_skills_speckit_plan_skill_phases",
"agents_skills_speckit_plan_skill_pre_execution_checks",
"agents_skills_speckit_plan_skill_user_input"
],
"9": [
"agents_skills_speckit_specify_skill",
"agents_skills_speckit_specify_skill_completion_report",
"agents_skills_speckit_specify_skill_done_when",
"agents_skills_speckit_specify_skill_for_ai_generation",
"agents_skills_speckit_specify_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_specify_skill_outline",
"agents_skills_speckit_specify_skill_pre_execution_checks",
"agents_skills_speckit_specify_skill_quick_guidelines",
"agents_skills_speckit_specify_skill_section_requirements",
"agents_skills_speckit_specify_skill_success_criteria_guidelines",
"agents_skills_speckit_specify_skill_user_input"
],
"10": [
"agents_skills_speckit_tasks_skill",
"agents_skills_speckit_tasks_skill_checklist_format_required",
"agents_skills_speckit_tasks_skill_completion_report",
"agents_skills_speckit_tasks_skill_done_when",
"agents_skills_speckit_tasks_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_tasks_skill_outline",
"agents_skills_speckit_tasks_skill_phase_structure",
"agents_skills_speckit_tasks_skill_pre_execution_checks",
"agents_skills_speckit_tasks_skill_task_generation_rules",
"agents_skills_speckit_tasks_skill_task_organization",
"agents_skills_speckit_tasks_skill_user_input"
],
"11": [
"specify_memory_constitution",
"specify_memory_constitution_core_principles",
"specify_memory_constitution_governance",
"specify_memory_constitution_principle_1_name",
"specify_memory_constitution_principle_2_name",
"specify_memory_constitution_principle_3_name",
"specify_memory_constitution_principle_4_name",
"specify_memory_constitution_principle_5_name",
"specify_memory_constitution_project_name_constitution",
"specify_memory_constitution_section_2_name",
"specify_memory_constitution_section_3_name"
],
"12": [
"specify_templates_constitution_template",
"specify_templates_constitution_template_core_principles",
"specify_templates_constitution_template_governance",
"specify_templates_constitution_template_principle_1_name",
"specify_templates_constitution_template_principle_2_name",
"specify_templates_constitution_template_principle_3_name",
"specify_templates_constitution_template_principle_4_name",
"specify_templates_constitution_template_principle_5_name",
"specify_templates_constitution_template_project_name_constitution",
"specify_templates_constitution_template_section_2_name",
"specify_templates_constitution_template_section_3_name"
],
"13": [
"agents_skills_graphify_references_exports",
"agents_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
"agents_skills_graphify_references_exports_step_6b_wiki_only_if_wiki_flag",
"agents_skills_graphify_references_exports_step_7_neo4j_export_only_if_neo4j_or_neo4j_push_flag",
"agents_skills_graphify_references_exports_step_7a_falkordb_export_only_if_falkordb_or_falkordb_push_flag",
"agents_skills_graphify_references_exports_step_7b_svg_export_only_if_svg_flag",
"agents_skills_graphify_references_exports_step_7c_graphml_export_only_if_graphml_flag",
"agents_skills_graphify_references_exports_step_7d_mcp_server_only_if_mcp_flag",
"agents_skills_graphify_references_exports_step_8_token_reduction_benchmark_only_if_total_words_5000"
],
"14": [
"agents_skills_ponytail_skill",
"agents_skills_ponytail_skill_boundaries",
"agents_skills_ponytail_skill_intensity",
"agents_skills_ponytail_skill_output",
"agents_skills_ponytail_skill_persistence",
"agents_skills_ponytail_skill_ponytail",
"agents_skills_ponytail_skill_rules",
"agents_skills_ponytail_skill_the_ladder",
"agents_skills_ponytail_skill_when_not_to_be_lazy"
],
"15": [
"specify_templates_plan_template",
"specify_templates_plan_template_complexity_tracking",
"specify_templates_plan_template_constitution_check",
"specify_templates_plan_template_documentation_this_feature",
"specify_templates_plan_template_implementation_plan_feature",
"specify_templates_plan_template_project_structure",
"specify_templates_plan_template_source_code_repository_root",
"specify_templates_plan_template_summary",
"specify_templates_plan_template_technical_context"
],
"16": [
"agents_skills_ponytail_help_skill",
"agents_skills_ponytail_help_skill_configure_default_mode",
"agents_skills_ponytail_help_skill_deactivate",
"agents_skills_ponytail_help_skill_levels",
"agents_skills_ponytail_help_skill_more",
"agents_skills_ponytail_help_skill_ponytail_help",
"agents_skills_ponytail_help_skill_skills",
"agents_skills_ponytail_help_skill_update"
],
"17": [
"agents_skills_speckit_checklist_skill",
"agents_skills_speckit_checklist_skill_anti_examples_what_not_to_do",
"agents_skills_speckit_checklist_skill_checklist_purpose_unit_tests_for_english",
"agents_skills_speckit_checklist_skill_example_checklist_types_sample_items",
"agents_skills_speckit_checklist_skill_execution_steps",
"agents_skills_speckit_checklist_skill_post_execution_checks",
"agents_skills_speckit_checklist_skill_pre_execution_checks",
"agents_skills_speckit_checklist_skill_user_input"
],
"18": [
"agents_skills_speckit_clarify_skill",
"agents_skills_speckit_clarify_skill_completion_report",
"agents_skills_speckit_clarify_skill_done_when",
"agents_skills_speckit_clarify_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_clarify_skill_outline",
"agents_skills_speckit_clarify_skill_pre_execution_checks",
"agents_skills_speckit_clarify_skill_user_input"
],
"19": [
"agents_skills_speckit_implement_skill",
"agents_skills_speckit_implement_skill_completion_report",
"agents_skills_speckit_implement_skill_done_when",
"agents_skills_speckit_implement_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_implement_skill_outline",
"agents_skills_speckit_implement_skill_pre_execution_checks",
"agents_skills_speckit_implement_skill_user_input"
],
"20": [
"agents_skills_graphify_references_query",
"agents_skills_graphify_references_query_for_graphify_explain",
"agents_skills_graphify_references_query_for_graphify_path",
"agents_skills_graphify_references_query_graphify_reference_query_path_explain",
"agents_skills_graphify_references_query_step_0_constrained_query_expansion_required_before_traversal",
"agents_skills_graphify_references_query_step_1_traversal"
],
"21": [
"agents_skills_speckit_constitution_skill",
"agents_skills_speckit_constitution_skill_outline",
"agents_skills_speckit_constitution_skill_post_execution_checks",
"agents_skills_speckit_constitution_skill_pre_execution_checks",
"agents_skills_speckit_constitution_skill_scope_guard",
"agents_skills_speckit_constitution_skill_user_input"
],
"22": [
"specify_scripts_powershell_create_new_feature",
"specify_scripts_powershell_create_new_feature_convertto_cleanbranchname",
"specify_scripts_powershell_create_new_feature_get_branchname",
"specify_scripts_powershell_create_new_feature_get_fittedbranchname",
"specify_scripts_powershell_create_new_feature_get_highestnumberfromspecs",
"specify_scripts_powershell_create_new_feature_test_specprefixinuse"
],
"23": [
"agents_skills_ponytail_audit_skill",
"agents_skills_ponytail_audit_skill_boundaries",
"agents_skills_ponytail_audit_skill_hunt",
"agents_skills_ponytail_audit_skill_output",
"agents_skills_ponytail_audit_skill_tags"
],
"24": [
"agents_skills_ponytail_gain_skill",
"agents_skills_ponytail_gain_skill_boundaries",
"agents_skills_ponytail_gain_skill_honesty_boundary",
"agents_skills_ponytail_gain_skill_ponytail_gain",
"agents_skills_ponytail_gain_skill_scoreboard"
],
"25": [
"agents_skills_ponytail_review_skill",
"agents_skills_ponytail_review_skill_boundaries",
"agents_skills_ponytail_review_skill_examples",
"agents_skills_ponytail_review_skill_format",
"agents_skills_ponytail_review_skill_scoring"
],
"26": [
"agents_skills_speckit_taskstoissues_skill",
"agents_skills_speckit_taskstoissues_skill_outline",
"agents_skills_speckit_taskstoissues_skill_post_execution_checks",
"agents_skills_speckit_taskstoissues_skill_pre_execution_checks",
"agents_skills_speckit_taskstoissues_skill_user_input"
],
"27": [
"specify_templates_checklist_template",
"specify_templates_checklist_template_category_1",
"specify_templates_checklist_template_category_2",
"specify_templates_checklist_template_checklist_type_checklist_feature_name",
"specify_templates_checklist_template_notes"
],
"28": [
"agents_skills_graphify_references_add_watch",
"agents_skills_graphify_references_add_watch_for_graphify_add",
"agents_skills_graphify_references_add_watch_for_watch",
"agents_skills_graphify_references_add_watch_graphify_reference_add_a_url_and_watch_a_folder"
],
"29": [
"agents_skills_graphify_references_hooks",
"agents_skills_graphify_references_hooks_for_git_commit_hook",
"agents_skills_graphify_references_hooks_for_native_claude_md_integration",
"agents_skills_graphify_references_hooks_graphify_reference_commit_hook_and_native_claude_md_integration"
],
"30": [
"agents_skills_graphify_references_update",
"agents_skills_graphify_references_update_for_cluster_only",
"agents_skills_graphify_references_update_for_update_incremental_re_extraction",
"agents_skills_graphify_references_update_graphify_reference_incremental_update_and_cluster_only"
],
"31": [
"agents_skills_ponytail_debt_skill",
"agents_skills_ponytail_debt_skill_boundaries",
"agents_skills_ponytail_debt_skill_output",
"agents_skills_ponytail_debt_skill_scan"
],
"32": [
"agents_skills_graphify_references_github_and_merge",
"agents_skills_graphify_references_github_and_merge_graphify_reference_github_clone_and_cross_repo_merge",
"agents_skills_graphify_references_github_and_merge_step_0_clone_github_repo_s_only_if_a_github_url_was_given"
],
"33": [
"agents_skills_graphify_references_transcribe",
"agents_skills_graphify_references_transcribe_graphify_reference_transcribe_video_and_audio",
"agents_skills_graphify_references_transcribe_step_2_5_transcribe_video_audio_files_only_if_video_files_detected"
],
"34": [
"agents_skills_graphify_references_extraction_spec",
"agents_skills_graphify_references_extraction_spec_graphify_reference_extraction_subagent_prompt"
],
"35": [
"specify_scripts_powershell_check_prerequisites"
],
"36": [
"specify_scripts_powershell_resolve_template"
],
"37": [
"specify_scripts_powershell_setup_plan"
],
"38": [
"specify_scripts_powershell_setup_tasks"
],
"39": [
"agents_workflows_graphify",
"agents_workflows_graphify_workflow_graphify"
]
},
"cohesion": {
"0": 0.07407407407407407,
"1": 0.125,
"2": 0.225,
"3": 0.08,
"4": 0.15384615384615385,
"5": 0.15384615384615385,
"6": 0.15384615384615385,
"7": 1.0,
"8": 0.18181818181818182,
"9": 0.18181818181818182,
"10": 0.18181818181818182,
"11": 0.18181818181818182,
"12": 0.18181818181818182,
"13": 0.2222222222222222,
"14": 0.2222222222222222,
"15": 0.2222222222222222,
"16": 0.25,
"17": 0.25,
"18": 0.2857142857142857,
"19": 0.2857142857142857,
"20": 0.3333333333333333,
"21": 0.3333333333333333,
"22": 0.4,
"23": 0.4,
"24": 0.4,
"25": 0.4,
"26": 0.4,
"27": 0.4,
"28": 0.5,
"29": 0.5,
"30": 0.5,
"31": 0.5,
"32": 0.6666666666666666,
"33": 0.6666666666666666,
"34": 1.0,
"35": 1.0,
"36": 1.0,
"37": 1.0,
"38": 1.0,
"39": 1.0
},
"gods": [
{
"id": "specify_templates_tasks_template_tasks_feature_name",
"label": "Tasks: [FEATURE NAME]",
"degree": 13
},
{
"id": "agents_skills_graphify_skill_what_you_must_do_when_invoked",
"label": "What You Must Do When Invoked",
"degree": 12
},
{
"id": "agents_skills_graphify_skill_graphify",
"label": "/graphify",
"degree": 10
},
{
"id": "agents_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
"label": "graphify reference: extra exports and benchmark",
"degree": 8
},
{
"id": "agents_skills_ponytail_skill_ponytail",
"label": "Ponytail",
"degree": 8
},
{
"id": "agents_skills_speckit_converge_skill_execution_steps",
"label": "Execution Steps",
"degree": 7
},
{
"id": "agents_skills_ponytail_help_skill_ponytail_help",
"label": "Ponytail Help",
"degree": 7
},
{
"id": "agents_skills_speckit_analyze_skill_4_detection_passes_token_efficient_analysis",
"label": "4. Detection Passes (Token-Efficient Analysis)",
"degree": 7
},
{
"id": "agents_skills_speckit_analyze_skill_execution_steps",
"label": "Execution Steps",
"degree": 7
},
{
"id": "specify_memory_constitution_core_principles",
"label": "Core Principles",
"degree": 6
}
],
"surprises": [],
"questions": [
{
"type": "bridge_node",
"question": "Why does `Execution Steps` connect `Analysis Detection` to `Specification Analysis`?",
"why": "High betweenness centrality (0.004) - this node is a cross-community bridge."
},
{
"type": "isolated_nodes",
"question": "What connects `Format: `[ID] [P?] [Story] Description``, `Implementation for User Story 1`, `Implementation for User Story 2` to the rest of the system?",
"why": "212 weakly-connected nodes found - possible documentation gaps or missing edges."
},
{
"type": "low_cohesion",
"question": "Should `Task Planning` be split into smaller, more focused modules?",
"why": "Cohesion score 0.07407407407407407 - nodes in this community are weakly interconnected."
},
{
"type": "low_cohesion",
"question": "Should `Convergence Workflow` be split into smaller, more focused modules?",
"why": "Cohesion score 0.125 - nodes in this community are weakly interconnected."
},
{
"type": "low_cohesion",
"question": "Should `Graphify Commands` be split into smaller, more focused modules?",
"why": "Cohesion score 0.08 - nodes in this community are weakly interconnected."
}
]
}
+43 -38
View File
@@ -1,42 +1,47 @@
{
"0": "Tasks: [FEATURE NAME]",
"1": "Execution Steps",
"2": "common.ps1",
"3": "What You Must Do When Invoked",
"0": "Task Planning",
"1": "Convergence Workflow",
"2": "SpecKit Utilities",
"3": "Graphify Commands",
"4": "speckit-analyze/SKILL.md",
"5": "4. Detection Passes (Token-Efficient Analysis)",
"6": "Feature Specification: [FEATURE NAME]",
"7": "rules/graphify.md",
"8": "speckit-plan/SKILL.md",
"9": "speckit-specify/SKILL.md",
"10": "speckit-tasks/SKILL.md",
"11": "Core Principles",
"12": "Core Principles",
"13": "graphify reference: extra exports and benchmark",
"14": "Ponytail",
"15": "Implementation Plan: [FEATURE]",
"5": "Implementation Plan: Multilingual NLP Entity Inherence Classifier (POC)",
"6": "Feature Specification Template",
"7": "Graphify Rules",
"8": "Implementation Planning",
"9": "Feature Specification",
"10": "Task Generation",
"11": "Project Constitution",
"12": "Constitution Template",
"13": "Graphify Exports",
"14": "Ponytail Configuration",
"15": "Implementation Planning Template",
"16": "Ponytail Help",
"17": "speckit-checklist/SKILL.md",
"18": "speckit-clarify/SKILL.md",
"19": "speckit-implement/SKILL.md",
"20": "graphify reference: query, path, explain",
"21": "speckit-constitution/SKILL.md",
"22": "create-new-feature.ps1",
"23": "ponytail-audit/SKILL.md",
"24": "Ponytail Gain",
"25": "ponytail-review/SKILL.md",
"26": "speckit-taskstoissues/SKILL.md",
"27": "[CHECKLIST TYPE] Checklist: [FEATURE NAME]",
"28": "graphify reference: add a URL and watch a folder",
"29": "graphify reference: commit hook and native CLAUDE.md integration",
"30": "graphify reference: incremental update and cluster-only",
"31": "ponytail-debt/SKILL.md",
"32": "graphify reference: GitHub clone and cross-repo merge",
"33": "graphify reference: transcribe video and audio",
"34": "extraction-spec.md",
"35": "check-prerequisites.ps1",
"36": "resolve-template.ps1",
"37": "setup-plan.ps1",
"38": "setup-tasks.ps1",
"39": "workflows/graphify.md"
"17": "Checklist Generation",
"18": "Clarification Workflow",
"19": "Implementation Workflow",
"20": "Graph Query",
"21": "Constitution Workflow",
"22": "Feature Branch Creation",
"23": "Ponytail Audit",
"24": "Ponytail Metrics",
"25": "Ponytail Review",
"26": "Task Issue Conversion",
"27": "Checklist Template",
"28": "Graphify Watch Mode",
"29": "Graphify Hooks",
"30": "Graphify Updates",
"31": "Ponytail Debt",
"32": "Repository Merge",
"33": "Media Transcription",
"34": "Extraction Specification",
"35": "Prerequisite Checks",
"36": "Template Resolution",
"37": "Plan Setup",
"38": "Task Setup",
"39": "Graphify Workflows",
"40": "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)",
"41": "1. Technical Decisions & Tradeoffs",
"42": "1. Input Schemas",
"43": "2. Basic CLI Usage Examples",
"44": "2. Standard Streams & Exit Codes"
}
+110 -76
View File
@@ -1,51 +1,61 @@
# Graph Report - TextNLPClassifierApp (2026-08-19)
## Corpus Check
- 45 files · ~42,078 words
- 52 files · ~46,168 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 310 nodes · 284 edges · 40 communities (34 shown, 6 thin omitted)
- 372 nodes · 341 edges · 45 communities (39 shown, 6 thin omitted)
- Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `d371b81a`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation)
- Tasks: [FEATURE NAME]
- Execution Steps
- common.ps1
- What You Must Do When Invoked
- Task Planning
- Convergence Workflow
- SpecKit Utilities
- Graphify Commands
- speckit-analyze/SKILL.md
- 4. Detection Passes (Token-Efficient Analysis)
- Feature Specification: [FEATURE NAME]
- rules/graphify.md
- speckit-plan/SKILL.md
- speckit-specify/SKILL.md
- speckit-tasks/SKILL.md
- Core Principles
- Core Principles
- graphify reference: extra exports and benchmark
- Ponytail
- Implementation Plan: [FEATURE]
- Implementation Plan: Multilingual NLP Entity Inherence Classifier (POC)
- Feature Specification Template
- Graphify Rules
- Implementation Planning
- Feature Specification
- Task Generation
- Project Constitution
- Constitution Template
- Graphify Exports
- Ponytail Configuration
- Implementation Planning Template
- Ponytail Help
- speckit-checklist/SKILL.md
- speckit-clarify/SKILL.md
- speckit-implement/SKILL.md
- graphify reference: query, path, explain
- speckit-constitution/SKILL.md
- create-new-feature.ps1
- ponytail-audit/SKILL.md
- Ponytail Gain
- ponytail-review/SKILL.md
- speckit-taskstoissues/SKILL.md
- [CHECKLIST TYPE] Checklist: [FEATURE NAME]
- graphify reference: add a URL and watch a folder
- graphify reference: commit hook and native CLAUDE.md integration
- graphify reference: incremental update and cluster-only
- ponytail-debt/SKILL.md
- graphify reference: GitHub clone and cross-repo merge
- graphify reference: transcribe video and audio
- extraction-spec.md
- workflows/graphify.md
- Checklist Generation
- Clarification Workflow
- Implementation Workflow
- Graph Query
- Constitution Workflow
- Feature Branch Creation
- Ponytail Audit
- Ponytail Metrics
- Ponytail Review
- Task Issue Conversion
- Checklist Template
- Graphify Watch Mode
- Graphify Hooks
- Graphify Updates
- Ponytail Debt
- Repository Merge
- Media Transcription
- Extraction Specification
- Graphify Workflows
- Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)
- 1. Technical Decisions & Tradeoffs
- 1. Input Schemas
- 2. Basic CLI Usage Examples
- 2. Standard Streams & Exit Codes
## God Nodes (most connected - your core abstractions)
1. `Tasks: [FEATURE NAME]` - 13 edges
@@ -65,65 +75,65 @@
## Import Cycles
- None detected.
## Communities (40 total, 6 thin omitted)
## Communities (45 total, 6 thin omitted)
### Community 0 - "Tasks: [FEATURE NAME]"
### Community 0 - "Task Planning"
Cohesion: 0.07
Nodes (26): Dependencies & Execution Order, Format: `[ID] [P?] [Story] Description`, Implementation for User Story 1, Implementation for User Story 2, Implementation for User Story 3, Implementation Strategy, Incremental Delivery, MVP First (User Story 1 Only) (+18 more)
### Community 1 - "Execution Steps"
### Community 1 - "Convergence Workflow"
Cohesion: 0.12
Nodes (15): 1. Initialize Convergence Context, 2. Load Artifacts (Progressive Disclosure), 3. Build the Intent Inventory, 4. Assess the Codebase and Classify Findings, 5. Assign Severity, 6. Present the In-Session Findings Summary, 7. Append Convergence Tasks (or report converged), 8. Provide Next Actions (Handoff) (+7 more)
### Community 2 - "common.ps1"
### Community 2 - "SpecKit Utilities"
Cohesion: 0.23
Nodes (13): Find-SpecifyRoot(), Format-SpecKitCommand(), Get-CurrentBranch(), Get-FeaturePathsEnv(), Get-InvokeSeparator(), Get-NormalizedPriority(), Get-Python3Command(), Get-RepoRoot() (+5 more)
### Community 3 - "What You Must Do When Invoked"
### Community 3 - "Graphify Commands"
Cohesion: 0.08
Nodes (24): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+16 more)
### Community 4 - "speckit-analyze/SKILL.md"
Cohesion: 0.15
Nodes (12): 7. Provide Next Actions, 8. Offer Remediation, 9. Check for extension hooks, Analysis Guidelines, Context, Context Efficiency, Goal, Operating Constraints (+4 more)
Cohesion: 0.08
Nodes (25): 1. Initialize Analysis Context, 2. Load Artifacts (Progressive Disclosure), 3. Build Semantic Models, 4. Detection Passes (Token-Efficient Analysis), 5. Severity Assignment, 6. Produce Compact Analysis Report, 7. Provide Next Actions, 8. Offer Remediation (+17 more)
### Community 5 - "4. Detection Passes (Token-Efficient Analysis)"
Cohesion: 0.15
Nodes (13): 1. Initialize Analysis Context, 2. Load Artifacts (Progressive Disclosure), 3. Build Semantic Models, 4. Detection Passes (Token-Efficient Analysis), 5. Severity Assignment, 6. Produce Compact Analysis Report, A. Duplication Detection, B. Ambiguity Detection (+5 more)
### Community 5 - "Implementation Plan: Multilingual NLP Entity Inherence Classifier (POC)"
Cohesion: 0.12
Nodes (13): Content Quality, Feature Readiness, Notes, Requirement Completeness, Specification Quality Checklist: Multilingual NLP Entity Inherence Classifier, Complexity Tracking, Constitution Check, Documentation (this feature) (+5 more)
### Community 6 - "Feature Specification: [FEATURE NAME]"
### Community 6 - "Feature Specification Template"
Cohesion: 0.15
Nodes (12): Assumptions, Edge Cases, Feature Specification: [FEATURE NAME], Functional Requirements, Key Entities *(include if feature involves data)*, Measurable Outcomes, Requirements *(mandatory)*, Success Criteria *(mandatory)* (+4 more)
### Community 8 - "speckit-plan/SKILL.md"
### Community 8 - "Implementation Planning"
Cohesion: 0.18
Nodes (10): Completion Report, Done When, Key rules, Mandatory Post-Execution Hooks, Outline, Phase 0: Outline & Research, Phase 1: Design & Contracts, Phases (+2 more)
### Community 9 - "speckit-specify/SKILL.md"
### Community 9 - "Feature Specification"
Cohesion: 0.18
Nodes (10): Completion Report, Done When, For AI Generation, Mandatory Post-Execution Hooks, Outline, Pre-Execution Checks, Quick Guidelines, Section Requirements (+2 more)
### Community 10 - "speckit-tasks/SKILL.md"
### Community 10 - "Task Generation"
Cohesion: 0.18
Nodes (10): Checklist Format (REQUIRED), Completion Report, Done When, Mandatory Post-Execution Hooks, Outline, Phase Structure, Pre-Execution Checks, Task Generation Rules (+2 more)
### Community 11 - "Core Principles"
### Community 11 - "Project Constitution"
Cohesion: 0.18
Nodes (10): Core Principles, Governance, [PRINCIPLE_1_NAME], [PRINCIPLE_2_NAME], [PRINCIPLE_3_NAME], [PRINCIPLE_4_NAME], [PRINCIPLE_5_NAME], [PROJECT_NAME] Constitution (+2 more)
### Community 12 - "Core Principles"
### Community 12 - "Constitution Template"
Cohesion: 0.18
Nodes (10): Core Principles, Governance, [PRINCIPLE_1_NAME], [PRINCIPLE_2_NAME], [PRINCIPLE_3_NAME], [PRINCIPLE_4_NAME], [PRINCIPLE_5_NAME], [PROJECT_NAME] Constitution (+2 more)
### Community 13 - "graphify reference: extra exports and benchmark"
### Community 13 - "Graphify Exports"
Cohesion: 0.22
Nodes (8): graphify reference: extra exports and benchmark, Step 6b - Wiki (only if --wiki flag), Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag), Step 7a - FalkorDB export (only if --falkordb or --falkordb-push flag), Step 7b - SVG export (only if --svg flag), Step 7c - GraphML export (only if --graphml flag), Step 7d - MCP server (only if --mcp flag), Step 8 - Token reduction benchmark (only if total_words > 5000)
### Community 14 - "Ponytail"
### Community 14 - "Ponytail Configuration"
Cohesion: 0.22
Nodes (8): Boundaries, Intensity, Output, Persistence, Ponytail, Rules, The ladder, When NOT to be lazy
### Community 15 - "Implementation Plan: [FEATURE]"
### Community 15 - "Implementation Planning Template"
Cohesion: 0.22
Nodes (8): Complexity Tracking, Constitution Check, Documentation (this feature), Implementation Plan: [FEATURE], Project Structure, Source Code (repository root), Summary, Technical Context
@@ -131,77 +141,101 @@ Nodes (8): Complexity Tracking, Constitution Check, Documentation (this feature)
Cohesion: 0.25
Nodes (7): Configure Default Mode, Deactivate, Levels, More, Ponytail Help, Skills, Update
### Community 17 - "speckit-checklist/SKILL.md"
### Community 17 - "Checklist Generation"
Cohesion: 0.25
Nodes (7): Anti-Examples: What NOT To Do, Checklist Purpose: "Unit Tests for English", Example Checklist Types & Sample Items, Execution Steps, Post-Execution Checks, Pre-Execution Checks, User Input
### Community 18 - "speckit-clarify/SKILL.md"
### Community 18 - "Clarification Workflow"
Cohesion: 0.29
Nodes (6): Completion Report, Done When, Mandatory Post-Execution Hooks, Outline, Pre-Execution Checks, User Input
### Community 19 - "speckit-implement/SKILL.md"
### Community 19 - "Implementation Workflow"
Cohesion: 0.29
Nodes (6): Completion Report, Done When, Mandatory Post-Execution Hooks, Outline, Pre-Execution Checks, User Input
### Community 20 - "graphify reference: query, path, explain"
### Community 20 - "Graph Query"
Cohesion: 0.33
Nodes (5): For /graphify explain, For /graphify path, graphify reference: query, path, explain, Step 0 — Constrained query expansion (REQUIRED before traversal), Step 1 — Traversal
### Community 21 - "speckit-constitution/SKILL.md"
### Community 21 - "Constitution Workflow"
Cohesion: 0.33
Nodes (5): Outline, Post-Execution Checks, Pre-Execution Checks, Scope Guard, User Input
### Community 23 - "ponytail-audit/SKILL.md"
### Community 23 - "Ponytail Audit"
Cohesion: 0.40
Nodes (4): Boundaries, Hunt, Output, Tags
### Community 24 - "Ponytail Gain"
### Community 24 - "Ponytail Metrics"
Cohesion: 0.40
Nodes (4): Boundaries, Honesty boundary, Ponytail Gain, Scoreboard
### Community 25 - "ponytail-review/SKILL.md"
### Community 25 - "Ponytail Review"
Cohesion: 0.40
Nodes (4): Boundaries, Examples, Format, Scoring
### Community 26 - "speckit-taskstoissues/SKILL.md"
### Community 26 - "Task Issue Conversion"
Cohesion: 0.40
Nodes (4): Outline, Post-Execution Checks, Pre-Execution Checks, User Input
### Community 27 - "[CHECKLIST TYPE] Checklist: [FEATURE NAME]"
### Community 27 - "Checklist Template"
Cohesion: 0.40
Nodes (4): [Category 1], [Category 2], [CHECKLIST TYPE] Checklist: [FEATURE NAME], Notes
### Community 28 - "graphify reference: add a URL and watch a folder"
### Community 28 - "Graphify Watch Mode"
Cohesion: 0.50
Nodes (3): For /graphify add, For --watch, graphify reference: add a URL and watch a folder
### Community 29 - "graphify reference: commit hook and native CLAUDE.md integration"
### Community 29 - "Graphify Hooks"
Cohesion: 0.50
Nodes (3): For git commit hook, For native CLAUDE.md integration, graphify reference: commit hook and native CLAUDE.md integration
### Community 30 - "graphify reference: incremental update and cluster-only"
### Community 30 - "Graphify Updates"
Cohesion: 0.50
Nodes (3): For --cluster-only, For --update (incremental re-extraction), graphify reference: incremental update and cluster-only
### Community 31 - "ponytail-debt/SKILL.md"
### Community 31 - "Ponytail Debt"
Cohesion: 0.50
Nodes (3): Boundaries, Output, Scan
### Community 40 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)"
Cohesion: 0.14
Nodes (14): Assumptions, Assumptions & Scope, Clarifications, Explicit Out of Scope (POC), Feature Specification: Multilingual NLP Entity Inherence Classifier (POC), Functional Requirements, Key Entities *(data models & domain entities)*, Measurable Outcomes (+6 more)
### Community 41 - "1. Technical Decisions & Tradeoffs"
Cohesion: 0.22
Nodes (8): 1. Technical Decisions & Tradeoffs, 2. Standardized Error Handling Strategy, Decision 1: Execution Engine & CLI Architecture, Decision 2: Multilingual Language Detection & Normalization (Tier 1 Core), Decision 3: Materialized ECP Snapshot Contract & Matching Logic, Decision 4: Tier 2 (Embeddings) & Tier 3 (LLM) Optional Adapters, Decision 5: Controlled 24-Case POC Benchmark Suite, Technical Research & Architecture Decisions (POC)
### Community 42 - "1. Input Schemas"
Cohesion: 0.25
Nodes (7): 1.1 ECP Snapshot Schema (`snapshot.json`), 1.2 Content Item Schema (`content.md`), 1. Input Schemas, 2.1 Classification Success Result Schema (`result.json`), 2.2 Error Result Schema, 2. Output Schemas, Data Models & Schemas (POC)
### Community 43 - "2. Basic CLI Usage Examples"
Cohesion: 0.25
Nodes (7): 1. Prerequisites & Installation, 2.1 Direct Inherence (Portuguese), 2.2 Contextual Inherence via Graph Snapshot (German), 2.3 Tangential Mention (Spanish), 2. Basic CLI Usage Examples, 3. Running the Controlled 24-Case Benchmark, Quickstart & Validation Guide (POC)
### Community 44 - "2. Standard Streams & Exit Codes"
Cohesion: 0.29
Nodes (6): 1.1 Arguments & Options, 1. Command Line Interface, 2.1 Exit Codes, 2.2 Standard Output (`stdout`) / Standard Error (`stderr`), 2. Standard Streams & Exit Codes, CLI Contract & Interface Specification (POC)
## Knowledge Gaps
- **212 isolated node(s):** `graphify`, `Usage`, `What graphify is for`, `Step 0 - GitHub repos and multi-path merge (only if a URL or several paths)`, `Step 1 - Ensure graphify is installed` (+207 more)
- **248 isolated node(s):** `graphify`, `Usage`, `What graphify is for`, `Step 0 - GitHub repos and multi-path merge (only if a URL or several paths)`, `Step 1 - Ensure graphify is installed` (+243 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **6 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `Execution Steps` connect `4. Detection Passes (Token-Efficient Analysis)` to `speckit-analyze/SKILL.md`?**
- **Why does `Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)` connect `Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)` to `Implementation Plan: Multilingual NLP Entity Inherence Classifier (POC)`?**
_High betweenness centrality (0.004) - this node is a cross-community bridge._
- **What connects `graphify`, `Usage`, `What graphify is for` to the rest of the system?**
_212 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `Tasks: [FEATURE NAME]` be split into smaller, more focused modules?**
_248 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `Task Planning` be split into smaller, more focused modules?**
_Cohesion score 0.07407407407407407 - nodes in this community are weakly interconnected._
- **Should `Execution Steps` be split into smaller, more focused modules?**
- **Should `Convergence Workflow` be split into smaller, more focused modules?**
_Cohesion score 0.125 - nodes in this community are weakly interconnected._
- **Should `What You Must Do When Invoked` be split into smaller, more focused modules?**
_Cohesion score 0.08 - nodes in this community are weakly interconnected._
- **Should `Graphify Commands` be split into smaller, more focused modules?**
_Cohesion score 0.08 - nodes in this community are weakly interconnected._
- **Should `speckit-analyze/SKILL.md` be split into smaller, more focused modules?**
_Cohesion score 0.07692307692307693 - nodes in this community are weakly interconnected._
- **Should `Implementation Plan: Multilingual NLP Entity Inherence Classifier (POC)` be split into smaller, more focused modules?**
_Cohesion score 0.125 - nodes in this community are weakly interconnected._
File diff suppressed because it is too large Load Diff
+42
View File
@@ -238,5 +238,47 @@
"seen": 1787189352.7449548,
"ast_hash": "a831cf3669f1e6ab85d8a80ebe655f99",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/checklists/requirements.md": {
"mtime": 1787193985.655018,
"seen": 1787194003.0704188,
"ast_hash": "13e007d6da3f275d34b1f67fda546b81",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/spec.md": {
"mtime": 1787193971.9050775,
"seen": 1787194003.0704212,
"ast_hash": "171361c07b725cd65229fda42af1752f",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/contracts/cli-contract.md": {
"mtime": 1787194605.824187,
"seen": 1787194638.8537047,
"ast_hash": "c4fdb88a5e3269fb10689a2940b9616f",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/data-model.md": {
"mtime": 1787194591.677816,
"seen": 1787194638.853709,
"ast_hash": "7ccdd584024c65f16364444e9df4d860",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/plan.md": {
"mtime": 1787194627.9709117,
"seen": 1787194638.8537104,
"ast_hash": "851ca9151f0b8ed11078c0173c26e5a2",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/quickstart.md": {
"mtime": 1787194615.8456347,
"seen": 1787194638.8537116,
"ast_hash": "47578d1d83a5a112a389992f2c0fb4a1",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/research.md": {
"mtime": 1787194581.004019,
"seen": 1787194638.8537128,
"ast_hash": "159b7eec565d477f15f2c683c082e40d",
"semantic_hash": ""
}
}
@@ -0,0 +1,516 @@
{
"communities": {
"0": [
"specify_templates_tasks_template",
"specify_templates_tasks_template_dependencies_execution_order",
"specify_templates_tasks_template_format_id_p_story_description",
"specify_templates_tasks_template_implementation_for_user_story_1",
"specify_templates_tasks_template_implementation_for_user_story_2",
"specify_templates_tasks_template_implementation_for_user_story_3",
"specify_templates_tasks_template_implementation_strategy",
"specify_templates_tasks_template_incremental_delivery",
"specify_templates_tasks_template_mvp_first_user_story_1_only",
"specify_templates_tasks_template_notes",
"specify_templates_tasks_template_parallel_example_user_story_1",
"specify_templates_tasks_template_parallel_opportunities",
"specify_templates_tasks_template_parallel_team_strategy",
"specify_templates_tasks_template_path_conventions",
"specify_templates_tasks_template_phase_1_setup_shared_infrastructure",
"specify_templates_tasks_template_phase_2_foundational_blocking_prerequisites",
"specify_templates_tasks_template_phase_3_user_story_1_title_priority_p1_mvp",
"specify_templates_tasks_template_phase_4_user_story_2_title_priority_p2",
"specify_templates_tasks_template_phase_5_user_story_3_title_priority_p3",
"specify_templates_tasks_template_phase_dependencies",
"specify_templates_tasks_template_phase_n_polish_cross_cutting_concerns",
"specify_templates_tasks_template_tasks_feature_name",
"specify_templates_tasks_template_tests_for_user_story_1_optional_only_if_tests_requested",
"specify_templates_tasks_template_tests_for_user_story_2_optional_only_if_tests_requested",
"specify_templates_tasks_template_tests_for_user_story_3_optional_only_if_tests_requested",
"specify_templates_tasks_template_user_story_dependencies",
"specify_templates_tasks_template_within_each_user_story"
],
"1": [
"agents_skills_speckit_converge_skill",
"agents_skills_speckit_converge_skill_1_initialize_convergence_context",
"agents_skills_speckit_converge_skill_2_load_artifacts_progressive_disclosure",
"agents_skills_speckit_converge_skill_3_build_the_intent_inventory",
"agents_skills_speckit_converge_skill_4_assess_the_codebase_and_classify_findings",
"agents_skills_speckit_converge_skill_5_assign_severity",
"agents_skills_speckit_converge_skill_6_present_the_in_session_findings_summary",
"agents_skills_speckit_converge_skill_7_append_convergence_tasks_or_report_converged",
"agents_skills_speckit_converge_skill_8_provide_next_actions_handoff",
"agents_skills_speckit_converge_skill_9_check_for_extension_hooks",
"agents_skills_speckit_converge_skill_convergence_findings",
"agents_skills_speckit_converge_skill_execution_steps",
"agents_skills_speckit_converge_skill_goal",
"agents_skills_speckit_converge_skill_operating_constraints",
"agents_skills_speckit_converge_skill_pre_execution_checks",
"agents_skills_speckit_converge_skill_user_input"
],
"2": [
"specify_scripts_powershell_common",
"specify_scripts_powershell_common_find_specifyroot",
"specify_scripts_powershell_common_format_speckitcommand",
"specify_scripts_powershell_common_get_currentbranch",
"specify_scripts_powershell_common_get_featurepathsenv",
"specify_scripts_powershell_common_get_invokeseparator",
"specify_scripts_powershell_common_get_normalizedpriority",
"specify_scripts_powershell_common_get_python3command",
"specify_scripts_powershell_common_get_reporoot",
"specify_scripts_powershell_common_get_sortedextensionids",
"specify_scripts_powershell_common_resolve_specifyinitdir",
"specify_scripts_powershell_common_resolve_template",
"specify_scripts_powershell_common_resolve_templatecontent",
"specify_scripts_powershell_common_save_featurejson",
"specify_scripts_powershell_common_test_dirhasfiles",
"specify_scripts_powershell_common_test_fileexists"
],
"3": [
"agents_skills_graphify_skill",
"agents_skills_graphify_skill_for_graphify_add_and_watch",
"agents_skills_graphify_skill_for_graphify_query",
"agents_skills_graphify_skill_for_the_commit_hook_and_native_claude_md_integration",
"agents_skills_graphify_skill_for_update_and_cluster_only",
"agents_skills_graphify_skill_graphify",
"agents_skills_graphify_skill_honesty_rules",
"agents_skills_graphify_skill_interpreter_guard_for_subcommands",
"agents_skills_graphify_skill_part_a_structural_extraction_for_code_files",
"agents_skills_graphify_skill_part_b_semantic_extraction_parallel_subagents",
"agents_skills_graphify_skill_part_c_merge_ast_semantic_into_final_extraction",
"agents_skills_graphify_skill_step_0_github_repos_and_multi_path_merge_only_if_a_url_or_several_paths",
"agents_skills_graphify_skill_step_1_ensure_graphify_is_installed",
"agents_skills_graphify_skill_step_2_5_video_and_audio_only_if_video_files_detected",
"agents_skills_graphify_skill_step_2_detect_files",
"agents_skills_graphify_skill_step_3_extract_entities_and_relationships",
"agents_skills_graphify_skill_step_4_5_graph_health_check_read_only_integrity_gate",
"agents_skills_graphify_skill_step_4_build_graph_cluster_analyze_generate_outputs",
"agents_skills_graphify_skill_step_5_label_communities",
"agents_skills_graphify_skill_step_6_generate_obsidian_vault_opt_in_html",
"agents_skills_graphify_skill_step_9_save_manifest_update_cost_tracker_clean_up_and_report",
"agents_skills_graphify_skill_steps_6b_8_wiki_neo4j_falkordb_svg_graphml_mcp_benchmark_only_on_their_flags",
"agents_skills_graphify_skill_usage",
"agents_skills_graphify_skill_what_graphify_is_for",
"agents_skills_graphify_skill_what_you_must_do_when_invoked"
],
"4": [
"agents_skills_speckit_analyze_skill",
"agents_skills_speckit_analyze_skill_7_provide_next_actions",
"agents_skills_speckit_analyze_skill_8_offer_remediation",
"agents_skills_speckit_analyze_skill_9_check_for_extension_hooks",
"agents_skills_speckit_analyze_skill_analysis_guidelines",
"agents_skills_speckit_analyze_skill_context",
"agents_skills_speckit_analyze_skill_context_efficiency",
"agents_skills_speckit_analyze_skill_goal",
"agents_skills_speckit_analyze_skill_operating_constraints",
"agents_skills_speckit_analyze_skill_operating_principles",
"agents_skills_speckit_analyze_skill_pre_execution_checks",
"agents_skills_speckit_analyze_skill_specification_analysis_report",
"agents_skills_speckit_analyze_skill_user_input"
],
"5": [
"agents_skills_speckit_analyze_skill_1_initialize_analysis_context",
"agents_skills_speckit_analyze_skill_2_load_artifacts_progressive_disclosure",
"agents_skills_speckit_analyze_skill_3_build_semantic_models",
"agents_skills_speckit_analyze_skill_4_detection_passes_token_efficient_analysis",
"agents_skills_speckit_analyze_skill_5_severity_assignment",
"agents_skills_speckit_analyze_skill_6_produce_compact_analysis_report",
"agents_skills_speckit_analyze_skill_a_duplication_detection",
"agents_skills_speckit_analyze_skill_b_ambiguity_detection",
"agents_skills_speckit_analyze_skill_c_underspecification",
"agents_skills_speckit_analyze_skill_d_constitution_alignment",
"agents_skills_speckit_analyze_skill_e_coverage_gaps",
"agents_skills_speckit_analyze_skill_execution_steps",
"agents_skills_speckit_analyze_skill_f_inconsistency"
],
"6": [
"specify_templates_spec_template",
"specify_templates_spec_template_assumptions",
"specify_templates_spec_template_edge_cases",
"specify_templates_spec_template_feature_specification_feature_name",
"specify_templates_spec_template_functional_requirements",
"specify_templates_spec_template_key_entities_include_if_feature_involves_data",
"specify_templates_spec_template_measurable_outcomes",
"specify_templates_spec_template_requirements_mandatory",
"specify_templates_spec_template_success_criteria_mandatory",
"specify_templates_spec_template_user_scenarios_testing_mandatory",
"specify_templates_spec_template_user_story_1_brief_title_priority_p1",
"specify_templates_spec_template_user_story_2_brief_title_priority_p2",
"specify_templates_spec_template_user_story_3_brief_title_priority_p3"
],
"7": [
"agents_rules_graphify",
"agents_rules_graphify_graphify"
],
"8": [
"agents_skills_speckit_plan_skill",
"agents_skills_speckit_plan_skill_completion_report",
"agents_skills_speckit_plan_skill_done_when",
"agents_skills_speckit_plan_skill_key_rules",
"agents_skills_speckit_plan_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_plan_skill_outline",
"agents_skills_speckit_plan_skill_phase_0_outline_research",
"agents_skills_speckit_plan_skill_phase_1_design_contracts",
"agents_skills_speckit_plan_skill_phases",
"agents_skills_speckit_plan_skill_pre_execution_checks",
"agents_skills_speckit_plan_skill_user_input"
],
"9": [
"agents_skills_speckit_specify_skill",
"agents_skills_speckit_specify_skill_completion_report",
"agents_skills_speckit_specify_skill_done_when",
"agents_skills_speckit_specify_skill_for_ai_generation",
"agents_skills_speckit_specify_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_specify_skill_outline",
"agents_skills_speckit_specify_skill_pre_execution_checks",
"agents_skills_speckit_specify_skill_quick_guidelines",
"agents_skills_speckit_specify_skill_section_requirements",
"agents_skills_speckit_specify_skill_success_criteria_guidelines",
"agents_skills_speckit_specify_skill_user_input"
],
"10": [
"agents_skills_speckit_tasks_skill",
"agents_skills_speckit_tasks_skill_checklist_format_required",
"agents_skills_speckit_tasks_skill_completion_report",
"agents_skills_speckit_tasks_skill_done_when",
"agents_skills_speckit_tasks_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_tasks_skill_outline",
"agents_skills_speckit_tasks_skill_phase_structure",
"agents_skills_speckit_tasks_skill_pre_execution_checks",
"agents_skills_speckit_tasks_skill_task_generation_rules",
"agents_skills_speckit_tasks_skill_task_organization",
"agents_skills_speckit_tasks_skill_user_input"
],
"11": [
"specify_memory_constitution",
"specify_memory_constitution_core_principles",
"specify_memory_constitution_governance",
"specify_memory_constitution_principle_1_name",
"specify_memory_constitution_principle_2_name",
"specify_memory_constitution_principle_3_name",
"specify_memory_constitution_principle_4_name",
"specify_memory_constitution_principle_5_name",
"specify_memory_constitution_project_name_constitution",
"specify_memory_constitution_section_2_name",
"specify_memory_constitution_section_3_name"
],
"12": [
"specify_templates_constitution_template",
"specify_templates_constitution_template_core_principles",
"specify_templates_constitution_template_governance",
"specify_templates_constitution_template_principle_1_name",
"specify_templates_constitution_template_principle_2_name",
"specify_templates_constitution_template_principle_3_name",
"specify_templates_constitution_template_principle_4_name",
"specify_templates_constitution_template_principle_5_name",
"specify_templates_constitution_template_project_name_constitution",
"specify_templates_constitution_template_section_2_name",
"specify_templates_constitution_template_section_3_name"
],
"13": [
"agents_skills_graphify_references_exports",
"agents_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
"agents_skills_graphify_references_exports_step_6b_wiki_only_if_wiki_flag",
"agents_skills_graphify_references_exports_step_7_neo4j_export_only_if_neo4j_or_neo4j_push_flag",
"agents_skills_graphify_references_exports_step_7a_falkordb_export_only_if_falkordb_or_falkordb_push_flag",
"agents_skills_graphify_references_exports_step_7b_svg_export_only_if_svg_flag",
"agents_skills_graphify_references_exports_step_7c_graphml_export_only_if_graphml_flag",
"agents_skills_graphify_references_exports_step_7d_mcp_server_only_if_mcp_flag",
"agents_skills_graphify_references_exports_step_8_token_reduction_benchmark_only_if_total_words_5000"
],
"14": [
"agents_skills_ponytail_skill",
"agents_skills_ponytail_skill_boundaries",
"agents_skills_ponytail_skill_intensity",
"agents_skills_ponytail_skill_output",
"agents_skills_ponytail_skill_persistence",
"agents_skills_ponytail_skill_ponytail",
"agents_skills_ponytail_skill_rules",
"agents_skills_ponytail_skill_the_ladder",
"agents_skills_ponytail_skill_when_not_to_be_lazy"
],
"15": [
"specify_templates_plan_template",
"specify_templates_plan_template_complexity_tracking",
"specify_templates_plan_template_constitution_check",
"specify_templates_plan_template_documentation_this_feature",
"specify_templates_plan_template_implementation_plan_feature",
"specify_templates_plan_template_project_structure",
"specify_templates_plan_template_source_code_repository_root",
"specify_templates_plan_template_summary",
"specify_templates_plan_template_technical_context"
],
"16": [
"agents_skills_ponytail_help_skill",
"agents_skills_ponytail_help_skill_configure_default_mode",
"agents_skills_ponytail_help_skill_deactivate",
"agents_skills_ponytail_help_skill_levels",
"agents_skills_ponytail_help_skill_more",
"agents_skills_ponytail_help_skill_ponytail_help",
"agents_skills_ponytail_help_skill_skills",
"agents_skills_ponytail_help_skill_update"
],
"17": [
"agents_skills_speckit_checklist_skill",
"agents_skills_speckit_checklist_skill_anti_examples_what_not_to_do",
"agents_skills_speckit_checklist_skill_checklist_purpose_unit_tests_for_english",
"agents_skills_speckit_checklist_skill_example_checklist_types_sample_items",
"agents_skills_speckit_checklist_skill_execution_steps",
"agents_skills_speckit_checklist_skill_post_execution_checks",
"agents_skills_speckit_checklist_skill_pre_execution_checks",
"agents_skills_speckit_checklist_skill_user_input"
],
"18": [
"agents_skills_speckit_clarify_skill",
"agents_skills_speckit_clarify_skill_completion_report",
"agents_skills_speckit_clarify_skill_done_when",
"agents_skills_speckit_clarify_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_clarify_skill_outline",
"agents_skills_speckit_clarify_skill_pre_execution_checks",
"agents_skills_speckit_clarify_skill_user_input"
],
"19": [
"agents_skills_speckit_implement_skill",
"agents_skills_speckit_implement_skill_completion_report",
"agents_skills_speckit_implement_skill_done_when",
"agents_skills_speckit_implement_skill_mandatory_post_execution_hooks",
"agents_skills_speckit_implement_skill_outline",
"agents_skills_speckit_implement_skill_pre_execution_checks",
"agents_skills_speckit_implement_skill_user_input"
],
"20": [
"agents_skills_graphify_references_query",
"agents_skills_graphify_references_query_for_graphify_explain",
"agents_skills_graphify_references_query_for_graphify_path",
"agents_skills_graphify_references_query_graphify_reference_query_path_explain",
"agents_skills_graphify_references_query_step_0_constrained_query_expansion_required_before_traversal",
"agents_skills_graphify_references_query_step_1_traversal"
],
"21": [
"agents_skills_speckit_constitution_skill",
"agents_skills_speckit_constitution_skill_outline",
"agents_skills_speckit_constitution_skill_post_execution_checks",
"agents_skills_speckit_constitution_skill_pre_execution_checks",
"agents_skills_speckit_constitution_skill_scope_guard",
"agents_skills_speckit_constitution_skill_user_input"
],
"22": [
"specify_scripts_powershell_create_new_feature",
"specify_scripts_powershell_create_new_feature_convertto_cleanbranchname",
"specify_scripts_powershell_create_new_feature_get_branchname",
"specify_scripts_powershell_create_new_feature_get_fittedbranchname",
"specify_scripts_powershell_create_new_feature_get_highestnumberfromspecs",
"specify_scripts_powershell_create_new_feature_test_specprefixinuse"
],
"23": [
"agents_skills_ponytail_audit_skill",
"agents_skills_ponytail_audit_skill_boundaries",
"agents_skills_ponytail_audit_skill_hunt",
"agents_skills_ponytail_audit_skill_output",
"agents_skills_ponytail_audit_skill_tags"
],
"24": [
"agents_skills_ponytail_gain_skill",
"agents_skills_ponytail_gain_skill_boundaries",
"agents_skills_ponytail_gain_skill_honesty_boundary",
"agents_skills_ponytail_gain_skill_ponytail_gain",
"agents_skills_ponytail_gain_skill_scoreboard"
],
"25": [
"agents_skills_ponytail_review_skill",
"agents_skills_ponytail_review_skill_boundaries",
"agents_skills_ponytail_review_skill_examples",
"agents_skills_ponytail_review_skill_format",
"agents_skills_ponytail_review_skill_scoring"
],
"26": [
"agents_skills_speckit_taskstoissues_skill",
"agents_skills_speckit_taskstoissues_skill_outline",
"agents_skills_speckit_taskstoissues_skill_post_execution_checks",
"agents_skills_speckit_taskstoissues_skill_pre_execution_checks",
"agents_skills_speckit_taskstoissues_skill_user_input"
],
"27": [
"specify_templates_checklist_template",
"specify_templates_checklist_template_category_1",
"specify_templates_checklist_template_category_2",
"specify_templates_checklist_template_checklist_type_checklist_feature_name",
"specify_templates_checklist_template_notes"
],
"28": [
"agents_skills_graphify_references_add_watch",
"agents_skills_graphify_references_add_watch_for_graphify_add",
"agents_skills_graphify_references_add_watch_for_watch",
"agents_skills_graphify_references_add_watch_graphify_reference_add_a_url_and_watch_a_folder"
],
"29": [
"agents_skills_graphify_references_hooks",
"agents_skills_graphify_references_hooks_for_git_commit_hook",
"agents_skills_graphify_references_hooks_for_native_claude_md_integration",
"agents_skills_graphify_references_hooks_graphify_reference_commit_hook_and_native_claude_md_integration"
],
"30": [
"agents_skills_graphify_references_update",
"agents_skills_graphify_references_update_for_cluster_only",
"agents_skills_graphify_references_update_for_update_incremental_re_extraction",
"agents_skills_graphify_references_update_graphify_reference_incremental_update_and_cluster_only"
],
"31": [
"agents_skills_ponytail_debt_skill",
"agents_skills_ponytail_debt_skill_boundaries",
"agents_skills_ponytail_debt_skill_output",
"agents_skills_ponytail_debt_skill_scan"
],
"32": [
"agents_skills_graphify_references_github_and_merge",
"agents_skills_graphify_references_github_and_merge_graphify_reference_github_clone_and_cross_repo_merge",
"agents_skills_graphify_references_github_and_merge_step_0_clone_github_repo_s_only_if_a_github_url_was_given"
],
"33": [
"agents_skills_graphify_references_transcribe",
"agents_skills_graphify_references_transcribe_graphify_reference_transcribe_video_and_audio",
"agents_skills_graphify_references_transcribe_step_2_5_transcribe_video_audio_files_only_if_video_files_detected"
],
"34": [
"agents_skills_graphify_references_extraction_spec",
"agents_skills_graphify_references_extraction_spec_graphify_reference_extraction_subagent_prompt"
],
"35": [
"specify_scripts_powershell_check_prerequisites"
],
"36": [
"specify_scripts_powershell_resolve_template"
],
"37": [
"specify_scripts_powershell_setup_plan"
],
"38": [
"specify_scripts_powershell_setup_tasks"
],
"39": [
"agents_workflows_graphify",
"agents_workflows_graphify_workflow_graphify"
]
},
"cohesion": {
"0": 0.07407407407407407,
"1": 0.125,
"2": 0.225,
"3": 0.08,
"4": 0.15384615384615385,
"5": 0.15384615384615385,
"6": 0.15384615384615385,
"7": 1.0,
"8": 0.18181818181818182,
"9": 0.18181818181818182,
"10": 0.18181818181818182,
"11": 0.18181818181818182,
"12": 0.18181818181818182,
"13": 0.2222222222222222,
"14": 0.2222222222222222,
"15": 0.2222222222222222,
"16": 0.25,
"17": 0.25,
"18": 0.2857142857142857,
"19": 0.2857142857142857,
"20": 0.3333333333333333,
"21": 0.3333333333333333,
"22": 0.4,
"23": 0.4,
"24": 0.4,
"25": 0.4,
"26": 0.4,
"27": 0.4,
"28": 0.5,
"29": 0.5,
"30": 0.5,
"31": 0.5,
"32": 0.6666666666666666,
"33": 0.6666666666666666,
"34": 1.0,
"35": 1.0,
"36": 1.0,
"37": 1.0,
"38": 1.0,
"39": 1.0
},
"gods": [
{
"id": "specify_templates_tasks_template_tasks_feature_name",
"label": "Tasks: [FEATURE NAME]",
"degree": 13
},
{
"id": "agents_skills_graphify_skill_what_you_must_do_when_invoked",
"label": "What You Must Do When Invoked",
"degree": 12
},
{
"id": "agents_skills_graphify_skill_graphify",
"label": "/graphify",
"degree": 10
},
{
"id": "agents_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
"label": "graphify reference: extra exports and benchmark",
"degree": 8
},
{
"id": "agents_skills_ponytail_skill_ponytail",
"label": "Ponytail",
"degree": 8
},
{
"id": "agents_skills_speckit_converge_skill_execution_steps",
"label": "Execution Steps",
"degree": 7
},
{
"id": "agents_skills_ponytail_help_skill_ponytail_help",
"label": "Ponytail Help",
"degree": 7
},
{
"id": "agents_skills_speckit_analyze_skill_4_detection_passes_token_efficient_analysis",
"label": "4. Detection Passes (Token-Efficient Analysis)",
"degree": 7
},
{
"id": "agents_skills_speckit_analyze_skill_execution_steps",
"label": "Execution Steps",
"degree": 7
},
{
"id": "specify_memory_constitution_core_principles",
"label": "Core Principles",
"degree": 6
}
],
"surprises": [],
"questions": [
{
"type": "bridge_node",
"question": "Why does `Execution Steps` connect `Analysis Detection` to `Specification Analysis`?",
"why": "High betweenness centrality (0.004) - this node is a cross-community bridge."
},
{
"type": "isolated_nodes",
"question": "What connects `Format: `[ID] [P?] [Story] Description``, `Implementation for User Story 1`, `Implementation for User Story 2` to the rest of the system?",
"why": "212 weakly-connected nodes found - possible documentation gaps or missing edges."
},
{
"type": "low_cohesion",
"question": "Should `Task Planning` be split into smaller, more focused modules?",
"why": "Cohesion score 0.07407407407407407 - nodes in this community are weakly interconnected."
},
{
"type": "low_cohesion",
"question": "Should `Convergence Workflow` be split into smaller, more focused modules?",
"why": "Cohesion score 0.125 - nodes in this community are weakly interconnected."
},
{
"type": "low_cohesion",
"question": "Should `Graphify Commands` be split into smaller, more focused modules?",
"why": "Cohesion score 0.08 - nodes in this community are weakly interconnected."
}
]
}
@@ -0,0 +1,82 @@
{
"0": "Task Planning",
"1": "Convergence Workflow",
"2": "SpecKit Utilities",
"3": "Graphify Commands",
"4": "speckit-analyze/SKILL.md",
"5": "Tasks: Multilingual NLP Entity Inherence Classifier (POC)",
"6": "Feature Specification Template",
"7": "Graphify Rules",
"8": "Implementation Planning",
"9": "Feature Specification",
"10": "Task Generation",
"11": "Project Constitution",
"12": "Constitution Template",
"13": "Graphify Exports",
"14": "Ponytail Configuration",
"15": "Implementation Planning Template",
"16": "Ponytail Help",
"17": "Checklist Generation",
"18": "Clarification Workflow",
"19": "Implementation Workflow",
"20": "Graph Query",
"21": "Constitution Workflow",
"22": "Feature Branch Creation",
"23": "Ponytail Audit",
"24": "Ponytail Metrics",
"25": "Ponytail Review",
"26": "Task Issue Conversion",
"27": "Checklist Template",
"28": "Graphify Watch Mode",
"29": "Graphify Hooks",
"30": "Graphify Updates",
"31": "Ponytail Debt",
"32": "Repository Merge",
"33": "Media Transcription",
"34": "Extraction Specification",
"35": "Prerequisite Checks",
"36": "Template Resolution",
"37": "Plan Setup",
"38": "Task Setup",
"39": "Graphify Workflows",
"40": "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)",
"41": "1. Technical Decisions & Tradeoffs",
"42": "1. Input Schemas",
"43": "2. Basic CLI Usage Examples",
"44": "2. Standard Streams & Exit Codes",
"45": "ECPSnapshot",
"46": "classifier.py",
"47": "detect_language",
"48": "main",
"49": "content_northvolt_de.md",
"50": "content_presal_pt.md",
"51": "content_tangential_es.md",
"52": "adapters/__init__.py",
"53": "src/__init__.py",
"54": "de/contextual.md",
"55": "de/direct.md",
"56": "de/not_related.md",
"57": "de/tangential.md",
"58": "en/contextual.md",
"59": "en/direct.md",
"60": "en/not_related.md",
"61": "en/tangential.md",
"62": "es/contextual.md",
"63": "es/direct.md",
"64": "es/not_related.md",
"65": "es/tangential.md",
"66": "fr/contextual.md",
"67": "fr/direct.md",
"68": "fr/not_related.md",
"69": "fr/tangential.md",
"70": "it/contextual.md",
"71": "it/direct.md",
"72": "it/not_related.md",
"73": "it/tangential.md",
"74": "pt/contextual.md",
"75": "pt/direct.md",
"76": "pt/not_related.md",
"77": "pt/tangential.md",
"78": "tests/__init__.py",
"79": "text-nlp-classifier"
}
+301
View File
@@ -0,0 +1,301 @@
# Graph Report - TextNLPClassifierApp (2026-08-20)
## Corpus Check
- 132 files · ~53,988 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 579 nodes · 674 edges · 80 communities (43 shown, 37 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 28 edges (avg confidence: 0.95)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `d371b81a`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation)
- Task Planning
- Convergence Workflow
- SpecKit Utilities
- Graphify Commands
- speckit-analyze/SKILL.md
- Tasks: Multilingual NLP Entity Inherence Classifier (POC)
- Feature Specification Template
- Graphify Rules
- Implementation Planning
- Feature Specification
- Task Generation
- Project Constitution
- Constitution Template
- Graphify Exports
- Ponytail Configuration
- Implementation Planning Template
- Ponytail Help
- Checklist Generation
- Clarification Workflow
- Implementation Workflow
- Graph Query
- Constitution Workflow
- Feature Branch Creation
- Ponytail Audit
- Ponytail Metrics
- Ponytail Review
- Task Issue Conversion
- Checklist Template
- Graphify Watch Mode
- Graphify Hooks
- Graphify Updates
- Ponytail Debt
- Repository Merge
- Media Transcription
- Extraction Specification
- Graphify Workflows
- Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)
- 1. Technical Decisions & Tradeoffs
- 1. Input Schemas
- 2. Basic CLI Usage Examples
- 2. Standard Streams & Exit Codes
- ECPSnapshot
- classifier.py
- detect_language
- main
- content_northvolt_de.md
- content_presal_pt.md
- content_tangential_es.md
- adapters/__init__.py
- src/__init__.py
- de/contextual.md
- de/direct.md
- de/not_related.md
- de/tangential.md
- en/contextual.md
- en/direct.md
- en/not_related.md
- en/tangential.md
- es/contextual.md
- es/direct.md
- es/not_related.md
- es/tangential.md
- fr/contextual.md
- fr/direct.md
- fr/not_related.md
- fr/tangential.md
- it/contextual.md
- it/direct.md
- it/not_related.md
- it/tangential.md
- pt/contextual.md
- pt/direct.md
- pt/not_related.md
- pt/tangential.md
- tests/__init__.py
- text-nlp-classifier
## God Nodes (most connected - your core abstractions)
1. `ECPSnapshot` - 27 edges
2. `InherenceClassifier` - 21 edges
3. `ClassificationResult` - 17 edges
4. `LocalEmbeddingsAdapter` - 14 edges
5. `LLMFallbackAdapter` - 14 edges
6. `detect_language()` - 14 edges
7. `DecisionCategory` - 14 edges
8. `main()` - 13 edges
9. `Tasks: [FEATURE NAME]` - 13 edges
10. `BaseNLPAdapter` - 12 edges
## Surprising Connections (you probably didn't know these)
- `main()` --uses--> `ECPSnapshot` [INFERRED]
classify.py → src/models.py
- `main()` --uses--> `ErrorCode` [INFERRED]
classify.py → src/models.py
- `test_classification_result_serialization()` --uses--> `DecisionCategory` [INFERRED]
tests/test_models.py → src/models.py
- `petrobras_ecp()` --uses--> `ECPSnapshot` [INFERRED]
tests/test_classifier.py → src/models.py
- `emit_error()` --uses--> `ErrorCode` [INFERRED]
classify.py → src/models.py
## Import Cycles
- None detected.
## Communities (80 total, 37 thin omitted)
### Community 0 - "Task Planning"
Cohesion: 0.07
Nodes (26): Dependencies & Execution Order, Format: `[ID] [P?] [Story] Description`, Implementation for User Story 1, Implementation for User Story 2, Implementation for User Story 3, Implementation Strategy, Incremental Delivery, MVP First (User Story 1 Only) (+18 more)
### Community 1 - "Convergence Workflow"
Cohesion: 0.12
Nodes (15): 1. Initialize Convergence Context, 2. Load Artifacts (Progressive Disclosure), 3. Build the Intent Inventory, 4. Assess the Codebase and Classify Findings, 5. Assign Severity, 6. Present the In-Session Findings Summary, 7. Append Convergence Tasks (or report converged), 8. Provide Next Actions (Handoff) (+7 more)
### Community 2 - "SpecKit Utilities"
Cohesion: 0.23
Nodes (13): Find-SpecifyRoot(), Format-SpecKitCommand(), Get-CurrentBranch(), Get-FeaturePathsEnv(), Get-InvokeSeparator(), Get-NormalizedPriority(), Get-Python3Command(), Get-RepoRoot() (+5 more)
### Community 3 - "Graphify Commands"
Cohesion: 0.08
Nodes (24): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+16 more)
### Community 4 - "speckit-analyze/SKILL.md"
Cohesion: 0.08
Nodes (25): 1. Initialize Analysis Context, 2. Load Artifacts (Progressive Disclosure), 3. Build Semantic Models, 4. Detection Passes (Token-Efficient Analysis), 5. Severity Assignment, 6. Produce Compact Analysis Report, 7. Provide Next Actions, 8. Offer Remediation (+17 more)
### Community 5 - "Tasks: Multilingual NLP Entity Inherence Classifier (POC)"
Cohesion: 0.06
Nodes (33): 1. Requirement Completeness & Scope Boundaries, 2. Requirement Clarity & Decision Semantics, 3. Requirement Consistency & Alignment, 4. Acceptance Criteria & Measurability, 5. Scenario & Edge Case Coverage, Notes, POC Readiness & Requirements Quality Checklist: Multilingual NLP Entity Inherence Classifier, Content Quality (+25 more)
### Community 6 - "Feature Specification Template"
Cohesion: 0.15
Nodes (12): Assumptions, Edge Cases, Feature Specification: [FEATURE NAME], Functional Requirements, Key Entities *(include if feature involves data)*, Measurable Outcomes, Requirements *(mandatory)*, Success Criteria *(mandatory)* (+4 more)
### Community 8 - "Implementation Planning"
Cohesion: 0.18
Nodes (10): Completion Report, Done When, Key rules, Mandatory Post-Execution Hooks, Outline, Phase 0: Outline & Research, Phase 1: Design & Contracts, Phases (+2 more)
### Community 9 - "Feature Specification"
Cohesion: 0.18
Nodes (10): Completion Report, Done When, For AI Generation, Mandatory Post-Execution Hooks, Outline, Pre-Execution Checks, Quick Guidelines, Section Requirements (+2 more)
### Community 10 - "Task Generation"
Cohesion: 0.18
Nodes (10): Checklist Format (REQUIRED), Completion Report, Done When, Mandatory Post-Execution Hooks, Outline, Phase Structure, Pre-Execution Checks, Task Generation Rules (+2 more)
### Community 11 - "Project Constitution"
Cohesion: 0.18
Nodes (10): Core Principles, Governance, [PRINCIPLE_1_NAME], [PRINCIPLE_2_NAME], [PRINCIPLE_3_NAME], [PRINCIPLE_4_NAME], [PRINCIPLE_5_NAME], [PROJECT_NAME] Constitution (+2 more)
### Community 12 - "Constitution Template"
Cohesion: 0.18
Nodes (10): Core Principles, Governance, [PRINCIPLE_1_NAME], [PRINCIPLE_2_NAME], [PRINCIPLE_3_NAME], [PRINCIPLE_4_NAME], [PRINCIPLE_5_NAME], [PROJECT_NAME] Constitution (+2 more)
### Community 13 - "Graphify Exports"
Cohesion: 0.22
Nodes (8): graphify reference: extra exports and benchmark, Step 6b - Wiki (only if --wiki flag), Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag), Step 7a - FalkorDB export (only if --falkordb or --falkordb-push flag), Step 7b - SVG export (only if --svg flag), Step 7c - GraphML export (only if --graphml flag), Step 7d - MCP server (only if --mcp flag), Step 8 - Token reduction benchmark (only if total_words > 5000)
### Community 14 - "Ponytail Configuration"
Cohesion: 0.22
Nodes (8): Boundaries, Intensity, Output, Persistence, Ponytail, Rules, The ladder, When NOT to be lazy
### Community 15 - "Implementation Planning Template"
Cohesion: 0.22
Nodes (8): Complexity Tracking, Constitution Check, Documentation (this feature), Implementation Plan: [FEATURE], Project Structure, Source Code (repository root), Summary, Technical Context
### Community 16 - "Ponytail Help"
Cohesion: 0.25
Nodes (7): Configure Default Mode, Deactivate, Levels, More, Ponytail Help, Skills, Update
### Community 17 - "Checklist Generation"
Cohesion: 0.25
Nodes (7): Anti-Examples: What NOT To Do, Checklist Purpose: "Unit Tests for English", Example Checklist Types & Sample Items, Execution Steps, Post-Execution Checks, Pre-Execution Checks, User Input
### Community 18 - "Clarification Workflow"
Cohesion: 0.29
Nodes (6): Completion Report, Done When, Mandatory Post-Execution Hooks, Outline, Pre-Execution Checks, User Input
### Community 19 - "Implementation Workflow"
Cohesion: 0.29
Nodes (6): Completion Report, Done When, Mandatory Post-Execution Hooks, Outline, Pre-Execution Checks, User Input
### Community 20 - "Graph Query"
Cohesion: 0.33
Nodes (5): For /graphify explain, For /graphify path, graphify reference: query, path, explain, Step 0 — Constrained query expansion (REQUIRED before traversal), Step 1 — Traversal
### Community 21 - "Constitution Workflow"
Cohesion: 0.33
Nodes (5): Outline, Post-Execution Checks, Pre-Execution Checks, Scope Guard, User Input
### Community 23 - "Ponytail Audit"
Cohesion: 0.40
Nodes (4): Boundaries, Hunt, Output, Tags
### Community 24 - "Ponytail Metrics"
Cohesion: 0.40
Nodes (4): Boundaries, Honesty boundary, Ponytail Gain, Scoreboard
### Community 25 - "Ponytail Review"
Cohesion: 0.40
Nodes (4): Boundaries, Examples, Format, Scoring
### Community 26 - "Task Issue Conversion"
Cohesion: 0.40
Nodes (4): Outline, Post-Execution Checks, Pre-Execution Checks, User Input
### Community 27 - "Checklist Template"
Cohesion: 0.40
Nodes (4): [Category 1], [Category 2], [CHECKLIST TYPE] Checklist: [FEATURE NAME], Notes
### Community 28 - "Graphify Watch Mode"
Cohesion: 0.50
Nodes (3): For /graphify add, For --watch, graphify reference: add a URL and watch a folder
### Community 29 - "Graphify Hooks"
Cohesion: 0.50
Nodes (3): For git commit hook, For native CLAUDE.md integration, graphify reference: commit hook and native CLAUDE.md integration
### Community 30 - "Graphify Updates"
Cohesion: 0.50
Nodes (3): For --cluster-only, For --update (incremental re-extraction), graphify reference: incremental update and cluster-only
### Community 31 - "Ponytail Debt"
Cohesion: 0.50
Nodes (3): Boundaries, Output, Scan
### Community 40 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)"
Cohesion: 0.14
Nodes (14): Assumptions, Assumptions & Scope, Clarifications, Explicit Out of Scope (POC), Feature Specification: Multilingual NLP Entity Inherence Classifier (POC), Functional Requirements, Key Entities *(data models & domain entities)*, Measurable Outcomes (+6 more)
### Community 41 - "1. Technical Decisions & Tradeoffs"
Cohesion: 0.22
Nodes (8): 1. Technical Decisions & Tradeoffs, 2. Standardized Error Handling Strategy, Decision 1: Execution Engine & CLI Architecture, Decision 2: Multilingual Language Detection & Normalization (Tier 1 Core), Decision 3: Materialized ECP Snapshot Contract & Matching Logic, Decision 4: Tier 2 (Embeddings) & Tier 3 (LLM) Optional Adapters, Decision 5: Controlled 24-Case POC Benchmark Suite, Technical Research & Architecture Decisions (POC)
### Community 42 - "1. Input Schemas"
Cohesion: 0.25
Nodes (7): 1.1 ECP Snapshot Schema (`snapshot.json`), 1.2 Content Item Schema (`content.md`), 1. Input Schemas, 2.1 Classification Success Result Schema (`result.json`), 2.2 Error Result Schema, 2. Output Schemas, Data Models & Schemas (POC)
### Community 43 - "2. Basic CLI Usage Examples"
Cohesion: 0.25
Nodes (7): 1. Prerequisites & Installation, 2.1 Direct Inherence (Portuguese), 2.2 Contextual Inherence via Graph Snapshot (German), 2.3 Tangential Mention (Spanish), 2. Basic CLI Usage Examples, 3. Running the Controlled 24-Case Benchmark, Quickstart & Validation Guide (POC)
### Community 44 - "2. Standard Streams & Exit Codes"
Cohesion: 0.29
Nodes (6): 1.1 Arguments & Options, 1. Command Line Interface, 2.1 Exit Codes, 2.2 Standard Output (`stdout`) / Standard Error (`stderr`), 2. Standard Streams & Exit Codes, CLI Contract & Interface Specification (POC)
### Community 45 - "ECPSnapshot"
Cohesion: 0.07
Nodes (26): ABC, Any, parametrize, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms. (+18 more)
### Community 46 - "classifier.py"
Cohesion: 0.09
Nodes (39): emit_error(), Enum, count_phrase_occurrences(), InherenceClassifier, match_phrase_in_text(), Core deterministic classification engine (Tier 1 core)., Check if a normalized phrase appears in normalized text with word boundary…, Count occurrences of a phrase in text. (+31 more)
### Community 47 - "detect_language"
Cohesion: 0.19
Nodes (16): detect_language(), extract_words(), normalize_text(), Lightweight multilingual language detection and text normalization., Normalize text by converting to lowercase and stripping combining diacritical…, Tokenize text into lowercase alphanumeric words., Detect the ISO-639-1 language code of text among supported languages (pt, en,…, Unit tests for language detection and text normalization. (+8 more)
### Community 48 - "main"
Cohesion: 0.31
Nodes (9): main(), parse_args(), Namespace, CLI execution tests covering flags, arguments, stdout, and error handling., test_cli_empty_content_file(), test_cli_missing_ecp_file(), test_cli_missing_required_ecp_field(), test_cli_output_file() (+1 more)
## Knowledge Gaps
- **291 isolated node(s):** `text-nlp-classifier`, `MatchedGraphEntity`, `graphify`, `Usage`, `What graphify is for` (+286 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **37 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `ECPSnapshot` connect `ECPSnapshot` to `main`, `classifier.py`?**
_High betweenness centrality (0.011) - this node is a cross-community bridge._
- **Why does `detect_language()` connect `detect_language` to `classifier.py`?**
_High betweenness centrality (0.007) - this node is a cross-community bridge._
- **Why does `InherenceClassifier` connect `classifier.py` to `main`, `ECPSnapshot`?**
_High betweenness centrality (0.006) - this node is a cross-community bridge._
- **Are the 10 inferred relationships involving `ECPSnapshot` (e.g. with `main()` and `BaseNLPAdapter`) actually correct?**
_`ECPSnapshot` has 10 INFERRED edges - model-reasoned connections that need verification._
- **Are the 6 inferred relationships involving `InherenceClassifier` (e.g. with `LocalEmbeddingsAdapter` and `LLMFallbackAdapter`) actually correct?**
_`InherenceClassifier` has 6 INFERRED edges - model-reasoned connections that need verification._
- **Are the 4 inferred relationships involving `ClassificationResult` (e.g. with `BaseNLPAdapter` and `LocalEmbeddingsAdapter`) actually correct?**
_`ClassificationResult` has 4 INFERRED edges - model-reasoned connections that need verification._
- **Are the 3 inferred relationships involving `LocalEmbeddingsAdapter` (e.g. with `ClassificationResult` and `ECPSnapshot`) actually correct?**
_`LocalEmbeddingsAdapter` has 3 INFERRED edges - model-reasoned connections that need verification._
File diff suppressed because it is too large Load Diff
+572
View File
@@ -0,0 +1,572 @@
{
".specify/scripts/powershell/check-prerequisites.ps1": {
"mtime": 1787189272.2023797,
"seen": 1787189326.0933716,
"ast_hash": "ab9d4c9d5772d28c6b2150b1f53ac638",
"semantic_hash": ""
},
".specify/scripts/powershell/common.ps1": {
"mtime": 1787189272.20638,
"seen": 1787189326.0933838,
"ast_hash": "6d1dc2322173d3cd13a3633d61324293",
"semantic_hash": ""
},
".specify/scripts/powershell/create-new-feature.ps1": {
"mtime": 1787189272.211369,
"seen": 1787189326.0933893,
"ast_hash": "fad051375e6dcd47030cc49188472fe1",
"semantic_hash": ""
},
".specify/scripts/powershell/resolve-template.ps1": {
"mtime": 1787189272.2143798,
"seen": 1787189326.0933924,
"ast_hash": "645ad018c6297df6e23949ac3e915749",
"semantic_hash": ""
},
".specify/scripts/powershell/setup-plan.ps1": {
"mtime": 1787189272.2183795,
"seen": 1787189326.0933957,
"ast_hash": "02abf0794256a7423782adc760f0e0ca",
"semantic_hash": ""
},
".specify/scripts/powershell/setup-tasks.ps1": {
"mtime": 1787189272.22138,
"seen": 1787189326.093398,
"ast_hash": "9aa2f52ce7abece8476845b1f21a0ced",
"semantic_hash": ""
},
".agents/skills/graphify/SKILL.md": {
"mtime": 1787189375.57439,
"seen": 1787189383.8494325,
"ast_hash": "1656a8a8e4a05bbe69f32cd15de81e87",
"semantic_hash": ""
},
".agents/skills/graphify/references/add-watch.md": {
"mtime": 1787176247.1083012,
"seen": 1787189352.7428358,
"ast_hash": "d59d027fe449f06aa03905a01184e779",
"semantic_hash": ""
},
".agents/skills/graphify/references/exports.md": {
"mtime": 1787176247.109326,
"seen": 1787189352.742837,
"ast_hash": "9da2a2152e60a22f07f05fed5158f287",
"semantic_hash": ""
},
".agents/skills/graphify/references/extraction-spec.md": {
"mtime": 1787176247.109326,
"seen": 1787189352.7428386,
"ast_hash": "42fef56a01698118f7fd722acdadea34",
"semantic_hash": ""
},
".agents/skills/graphify/references/github-and-merge.md": {
"mtime": 1787176247.1118312,
"seen": 1787189352.7428403,
"ast_hash": "cde13df085e4c492aeb7ba298a996d0d",
"semantic_hash": ""
},
".agents/skills/graphify/references/hooks.md": {
"mtime": 1787176247.1128435,
"seen": 1787189352.7428415,
"ast_hash": "3f545db6ce646650bb9de588f5512a27",
"semantic_hash": ""
},
".agents/skills/graphify/references/query.md": {
"mtime": 1787176247.1138976,
"seen": 1787189352.742843,
"ast_hash": "3c46f8ad006874260614ed8657d02307",
"semantic_hash": ""
},
".agents/skills/graphify/references/transcribe.md": {
"mtime": 1787176247.1138976,
"seen": 1787189352.7428443,
"ast_hash": "67b6a5fa6c0974e18f60db9f8932fbd8",
"semantic_hash": ""
},
".agents/skills/graphify/references/update.md": {
"mtime": 1787176247.11542,
"seen": 1787189352.7428463,
"ast_hash": "9378bd03d56baaf78bd738ab3848f142",
"semantic_hash": ""
},
".agents/skills/ponytail-audit/SKILL.md": {
"mtime": 1786995804.1528327,
"seen": 1787189326.0934196,
"ast_hash": "741076540e91247a0bace7b89c27ac6b",
"semantic_hash": ""
},
".agents/skills/ponytail-debt/SKILL.md": {
"mtime": 1786995804.1528327,
"seen": 1787189326.0934212,
"ast_hash": "19c1eef33c9b109abb5805a762a545c8",
"semantic_hash": ""
},
".agents/skills/ponytail-gain/SKILL.md": {
"mtime": 1786995804.1542277,
"seen": 1787189326.0934231,
"ast_hash": "8f9cd980326238785d2fc23a9cfddc96",
"semantic_hash": ""
},
".agents/skills/ponytail-help/SKILL.md": {
"mtime": 1786995804.1542277,
"seen": 1787189326.0934246,
"ast_hash": "25b3214341fdc2f0805d2f8a5da6fefd",
"semantic_hash": ""
},
".agents/skills/ponytail-review/SKILL.md": {
"mtime": 1786995804.1552386,
"seen": 1787189326.0934267,
"ast_hash": "52f93e973047baa9a906c6dc5879a4a6",
"semantic_hash": ""
},
".agents/skills/ponytail/SKILL.md": {
"mtime": 1786995804.1562397,
"seen": 1787189326.0934284,
"ast_hash": "33f013ce03c8c66a6002ef941a433b81",
"semantic_hash": ""
},
".agents/skills/speckit-analyze/SKILL.md": {
"mtime": 1787189272.133064,
"seen": 1787189326.0934305,
"ast_hash": "d0496db1f414b10bb0c8d57d5009f378",
"semantic_hash": ""
},
".agents/skills/speckit-checklist/SKILL.md": {
"mtime": 1787189272.1603796,
"seen": 1787189326.0934336,
"ast_hash": "94a6ee97b010344e446c25798ad7779b",
"semantic_hash": ""
},
".agents/skills/speckit-clarify/SKILL.md": {
"mtime": 1787189272.137533,
"seen": 1787189326.0934358,
"ast_hash": "9ed49f88546289c1f40df65c485ace1a",
"semantic_hash": ""
},
".agents/skills/speckit-constitution/SKILL.md": {
"mtime": 1787189272.1413815,
"seen": 1787189326.0934374,
"ast_hash": "146185078e43d2e95014fda5b36f7461",
"semantic_hash": ""
},
".agents/skills/speckit-converge/SKILL.md": {
"mtime": 1787189272.1503813,
"seen": 1787189326.0934393,
"ast_hash": "6857bd3f30fc0c52352a450a8c2c0591",
"semantic_hash": ""
},
".agents/skills/speckit-implement/SKILL.md": {
"mtime": 1787189272.146373,
"seen": 1787189326.0934412,
"ast_hash": "562d500cddb51ca6d5f23971f7539341",
"semantic_hash": ""
},
".agents/skills/speckit-plan/SKILL.md": {
"mtime": 1787189272.15438,
"seen": 1787189326.0934432,
"ast_hash": "aba2d03c1b88c8f928ac22f7e3d75a25",
"semantic_hash": ""
},
".agents/skills/speckit-specify/SKILL.md": {
"mtime": 1787189272.165381,
"seen": 1787189326.093445,
"ast_hash": "a9dd8232755de1ac099f67ae212978b9",
"semantic_hash": ""
},
".agents/skills/speckit-tasks/SKILL.md": {
"mtime": 1787189272.1693797,
"seen": 1787189326.0934472,
"ast_hash": "faba87885d7a9309af89e1ad27d08e10",
"semantic_hash": ""
},
".agents/skills/speckit-taskstoissues/SKILL.md": {
"mtime": 1787189272.172365,
"seen": 1787189326.093449,
"ast_hash": "b99619d8bd31aac390a0ff96943d165c",
"semantic_hash": ""
},
".specify/memory/constitution.md": {
"mtime": 1787189272.25438,
"seen": 1787189326.0934513,
"ast_hash": "dcefb6b60e7cb3db2e966977b6f02f18",
"semantic_hash": ""
},
".specify/templates/checklist-template.md": {
"mtime": 1787189272.2233796,
"seen": 1787189326.0934534,
"ast_hash": "5af23404f7e1314e93fab2bcfcfa5c23",
"semantic_hash": ""
},
".specify/templates/constitution-template.md": {
"mtime": 1787189272.2263799,
"seen": 1787189326.093455,
"ast_hash": "dcefb6b60e7cb3db2e966977b6f02f18",
"semantic_hash": ""
},
".specify/templates/plan-template.md": {
"mtime": 1787189272.2293687,
"seen": 1787189326.0934572,
"ast_hash": "311db0670c3d19d2f5b781de97529b79",
"semantic_hash": ""
},
".specify/templates/spec-template.md": {
"mtime": 1787189272.2313685,
"seen": 1787189326.0934594,
"ast_hash": "45ac8538bc1220324c9f0d610145b53f",
"semantic_hash": ""
},
".specify/templates/tasks-template.md": {
"mtime": 1787189272.2343798,
"seen": 1787189326.0934615,
"ast_hash": "f8b4f62d384defa0a559bdbbaacb0540",
"semantic_hash": ""
},
".specify/workflows/speckit/workflow.yml": {
"mtime": 1787160407.4626267,
"seen": 1787189326.0934637,
"ast_hash": "06fd89e478bb8e0e668917a5f02f9055",
"semantic_hash": ""
},
".agents/rules/graphify.md": {
"mtime": 1787189347.4441817,
"seen": 1787189352.7428298,
"ast_hash": "a0e4d192b9e2e17256124dbfc8e24e6a",
"semantic_hash": ""
},
".agents/workflows/graphify.md": {
"mtime": 1787189347.4441817,
"seen": 1787189352.7449548,
"ast_hash": "a831cf3669f1e6ab85d8a80ebe655f99",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/checklists/requirements.md": {
"mtime": 1787193985.655018,
"seen": 1787194003.0704188,
"ast_hash": "13e007d6da3f275d34b1f67fda546b81",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/spec.md": {
"mtime": 1787194850.5106893,
"seen": 1787194931.113662,
"ast_hash": "41587427964956662ffb8f0dffea1027",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/contracts/cli-contract.md": {
"mtime": 1787194605.824187,
"seen": 1787194638.8537047,
"ast_hash": "c4fdb88a5e3269fb10689a2940b9616f",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/data-model.md": {
"mtime": 1787194591.677816,
"seen": 1787194638.853709,
"ast_hash": "7ccdd584024c65f16364444e9df4d860",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/plan.md": {
"mtime": 1787194897.8541067,
"seen": 1787194931.1135547,
"ast_hash": "edcaea62d445dbb073ff30166115788e",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/quickstart.md": {
"mtime": 1787194877.439851,
"seen": 1787194931.113557,
"ast_hash": "d630b7592e1ee761f1d36cfd0079771d",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/research.md": {
"mtime": 1787194581.004019,
"seen": 1787194638.8537128,
"ast_hash": "159b7eec565d477f15f2c683c082e40d",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/tasks.md": {
"mtime": 1787196452.595599,
"seen": 1787196463.1030743,
"ast_hash": "132f38dcd33d45eec9a8ca22ec4de880",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/checklists/poc-readiness.md": {
"mtime": 1787195218.2475252,
"seen": 1787195225.042909,
"ast_hash": "f8488016a8e749938d2086d34999a91c",
"semantic_hash": ""
},
"classify.py": {
"mtime": 1787195933.7872643,
"seen": 1787196463.095295,
"ast_hash": "5fa90ecfb87bdf15ee99165a3be7c63b",
"semantic_hash": ""
},
"pyproject.toml": {
"mtime": 1787195827.3305018,
"seen": 1787196463.0953014,
"ast_hash": "f2503e96d08f5a4e41b13352e81709c6",
"semantic_hash": ""
},
"src/__init__.py": {
"mtime": 1787195832.559486,
"seen": 1787196463.0953057,
"ast_hash": "13284e9b9f10de535dba5f461ecd7c7c",
"semantic_hash": ""
},
"src/adapters/__init__.py": {
"mtime": 1787195842.2716768,
"seen": 1787196463.0953088,
"ast_hash": "541577ed019347ac3864002f85c116f1",
"semantic_hash": ""
},
"src/adapters/base.py": {
"mtime": 1787196396.6199949,
"seen": 1787196463.0953116,
"ast_hash": "40dc6e175c8708467748c1f42a0e064a",
"semantic_hash": ""
},
"src/adapters/embeddings.py": {
"mtime": 1787196402.7484262,
"seen": 1787196463.0953145,
"ast_hash": "0444823bb05720d4c4ca1662a00b2c01",
"semantic_hash": ""
},
"src/adapters/llm.py": {
"mtime": 1787196408.180451,
"seen": 1787196463.0953166,
"ast_hash": "3d95d98625df3fcd343f2fecb78707c5",
"semantic_hash": ""
},
"src/classifier.py": {
"mtime": 1787196413.3774571,
"seen": 1787196463.095319,
"ast_hash": "d7bab620ae29badf0d3779fab44552bc",
"semantic_hash": ""
},
"src/language.py": {
"mtime": 1787196384.5545745,
"seen": 1787196463.0953217,
"ast_hash": "985619013e58a7f55af2e955817f223c",
"semantic_hash": ""
},
"src/models.py": {
"mtime": 1787195855.3266282,
"seen": 1787196463.0953236,
"ast_hash": "ce73bfe85eb54f907e2052c80636ecaf",
"semantic_hash": ""
},
"src/parser.py": {
"mtime": 1787195873.9119804,
"seen": 1787196463.0953257,
"ast_hash": "0a1d64ee7088b266125af071f85f3826",
"semantic_hash": ""
},
"tests/__init__.py": {
"mtime": 1787195847.5186412,
"seen": 1787196463.095328,
"ast_hash": "42d67f813e6eeac2ffca24fe6206aa9b",
"semantic_hash": ""
},
"tests/test_adapters.py": {
"mtime": 1787196418.6328156,
"seen": 1787196463.09533,
"ast_hash": "5caf95327ea030dbcc37a99bd9052ebd",
"semantic_hash": ""
},
"tests/test_benchmark_24.py": {
"mtime": 1787196325.5409796,
"seen": 1787196463.0953324,
"ast_hash": "487d30d6de2dee529fa91b86a1d62c0a",
"semantic_hash": ""
},
"tests/test_classifier.py": {
"mtime": 1787196364.7195728,
"seen": 1787196463.0953343,
"ast_hash": "4350a5b11a08d12ccb85a3f332d71e87",
"semantic_hash": ""
},
"tests/test_cli.py": {
"mtime": 1787195939.567137,
"seen": 1787196463.0953364,
"ast_hash": "90b0131d43cfc64a76e499c7a65d95de",
"semantic_hash": ""
},
"tests/test_language.py": {
"mtime": 1787195891.3329668,
"seen": 1787196463.0953388,
"ast_hash": "66191b43fcd7aef47c07cd20d5a8f03c",
"semantic_hash": ""
},
"tests/test_models.py": {
"mtime": 1787195886.5009987,
"seen": 1787196463.095341,
"ast_hash": "1fd725c8ca0f52e52f56c7223e9574d0",
"semantic_hash": ""
},
"examples/content_northvolt_de.md": {
"mtime": 1787195963.813741,
"seen": 1787196463.1020777,
"ast_hash": "9033a8bdde7f2caba952eb0f50af8ba6",
"semantic_hash": ""
},
"examples/content_presal_pt.md": {
"mtime": 1787195950.0247998,
"seen": 1787196463.10208,
"ast_hash": "d08c26af041b833fbc9e6673aec4ee80",
"semantic_hash": ""
},
"examples/content_tangential_es.md": {
"mtime": 1787195975.5271506,
"seen": 1787196463.1020815,
"ast_hash": "55f37cf83b54926e1f5751a4ba6335a9",
"semantic_hash": ""
},
"requirements.txt": {
"mtime": 1787195817.4782183,
"seen": 1787196463.1020837,
"ast_hash": "5612073a1e7034d7c25765379baa5da4",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/de/contextual.md": {
"mtime": 1787196180.7794595,
"seen": 1787196463.103077,
"ast_hash": "1e78706552a34512ac2a2b772ec2ecd1",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/de/direct.md": {
"mtime": 1787196169.5728126,
"seen": 1787196463.1030784,
"ast_hash": "25f60b38e35c96356d7ecbabdd6de545",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/de/not_related.md": {
"mtime": 1787196204.0937815,
"seen": 1787196463.1030807,
"ast_hash": "6d6165d5279cda9cde833a6aa2d71164",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/de/tangential.md": {
"mtime": 1787196193.1870873,
"seen": 1787196463.1030822,
"ast_hash": "3f5ddf01ca728aa2d0116882604718cf",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/en/contextual.md": {
"mtime": 1787196066.4274058,
"seen": 1787196463.1030838,
"ast_hash": "89114901dc8579adafa4fb503afbc761",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/en/direct.md": {
"mtime": 1787196054.1496131,
"seen": 1787196463.1030855,
"ast_hash": "dd15e4f08c2757ee499da0bea578c04c",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/en/not_related.md": {
"mtime": 1787196350.3334656,
"seen": 1787196463.103087,
"ast_hash": "9e2c91a29282eac5d4c21c38bef9767e",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/en/tangential.md": {
"mtime": 1787196082.7302663,
"seen": 1787196463.1030884,
"ast_hash": "fe681417b697406ea16e0e78f2df8ce4",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/es/contextual.md": {
"mtime": 1787196129.959492,
"seen": 1787196463.1030898,
"ast_hash": "8668670e9a018ba879fb256dbe5bd2fa",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/es/direct.md": {
"mtime": 1787196118.6405888,
"seen": 1787196463.103091,
"ast_hash": "d01aa9c2cda827336558b993098fa4a1",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/es/not_related.md": {
"mtime": 1787196152.6110358,
"seen": 1787196463.1030927,
"ast_hash": "720215fd2a9ec45f745564869b20a19d",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/es/tangential.md": {
"mtime": 1787196141.436479,
"seen": 1787196463.1030943,
"ast_hash": "ef16422876c7925ea0b2631483468f12",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/fr/contextual.md": {
"mtime": 1787196288.4152596,
"seen": 1787196463.1030955,
"ast_hash": "bf01dc91dc0a8abe21eca424fb44d0c4",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/fr/direct.md": {
"mtime": 1787196277.0201283,
"seen": 1787196463.1030967,
"ast_hash": "772cc74cec96c666c7e348f600720e14",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/fr/not_related.md": {
"mtime": 1787196312.47212,
"seen": 1787196463.1030984,
"ast_hash": "da5869eda42812d47e82a4cabf77f984",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/fr/tangential.md": {
"mtime": 1787196301.2256103,
"seen": 1787196463.103103,
"ast_hash": "6926ee30a0f12424c3c4f6691daeb1fd",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/it/contextual.md": {
"mtime": 1787196234.462201,
"seen": 1787196463.1031046,
"ast_hash": "53dfa9859257d99d54b3479702abbd11",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/it/direct.md": {
"mtime": 1787196221.6644733,
"seen": 1787196463.1031058,
"ast_hash": "493cbc253516b219d6b0d745bf6c750f",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/it/not_related.md": {
"mtime": 1787196259.3629923,
"seen": 1787196463.1031072,
"ast_hash": "3fbc57bc9b9c78af4b6eb93343cc4634",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/it/tangential.md": {
"mtime": 1787196245.9183564,
"seen": 1787196463.1031086,
"ast_hash": "43f800646fc2a4060528e7ef851e8d77",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/pt/contextual.md": {
"mtime": 1787196014.2010715,
"seen": 1787196463.10311,
"ast_hash": "2e5b837c09ac05daae5007235e2a85b5",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/pt/direct.md": {
"mtime": 1787196003.236562,
"seen": 1787196463.1031117,
"ast_hash": "f7e5ca68966f5e2b805fde6d46b90f7e",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/pt/not_related.md": {
"mtime": 1787196036.7240841,
"seen": 1787196463.103113,
"ast_hash": "980a58ca0db93f8dbb6c43e1c9108baf",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/pt/tangential.md": {
"mtime": 1787196024.9788618,
"seen": 1787196463.1031141,
"ast_hash": "e05ab20a5190cfb5b9d41da64d5273cf",
"semantic_hash": ""
}
}
+132 -37
View File
@@ -1,20 +1,26 @@
# Graph Report - TextNLPClassifierApp (2026-08-19)
# Graph Report - TextNLPClassifierApp (2026-08-20)
## Corpus Check
- cluster-only mode — file stats not available
- 133 files · ~54,759 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 310 nodes · 284 edges · 40 communities (34 shown, 6 thin omitted)
- Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS
- Token cost: 1,734 input · 302 output
- 595 nodes · 704 edges · 80 communities (43 shown, 37 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 31 edges (avg confidence: 0.95)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `d371b81a`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation)
- Task Planning
- Convergence Workflow
- SpecKit Utilities
- Graphify Commands
- Specification Analysis
- Analysis Detection
- speckit-analyze/SKILL.md
- Tasks: Multilingual NLP Entity Inherence Classifier (POC)
- Feature Specification Template
- Graphify Rules
- Implementation Planning
@@ -45,26 +51,75 @@
- Media Transcription
- Extraction Specification
- Graphify Workflows
- Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)
- 1. Technical Decisions & Tradeoffs
- 1. Input Schemas
- 2. Basic CLI Usage Examples
- 2. Standard Streams & Exit Codes
- ECPSnapshot
- test_models.py
- detect_language
- main
- content_northvolt_de.md
- content_presal_pt.md
- content_tangential_es.md
- adapters/__init__.py
- src/__init__.py
- de/contextual.md
- de/direct.md
- de/not_related.md
- de/tangential.md
- en/contextual.md
- en/direct.md
- en/not_related.md
- en/tangential.md
- es/contextual.md
- es/direct.md
- es/not_related.md
- es/tangential.md
- fr/contextual.md
- fr/direct.md
- fr/not_related.md
- fr/tangential.md
- it/contextual.md
- it/direct.md
- it/not_related.md
- it/tangential.md
- pt/contextual.md
- pt/direct.md
- pt/not_related.md
- pt/tangential.md
- tests/__init__.py
- text-nlp-classifier
## God Nodes (most connected - your core abstractions)
1. `Tasks: [FEATURE NAME]` - 13 edges
2. `What You Must Do When Invoked` - 12 edges
3. `/graphify` - 10 edges
4. `graphify reference: extra exports and benchmark` - 8 edges
5. `Ponytail` - 8 edges
6. `Execution Steps` - 7 edges
7. `Ponytail Help` - 7 edges
8. `4. Detection Passes (Token-Efficient Analysis)` - 7 edges
9. `Execution Steps` - 7 edges
10. `Core Principles` - 6 edges
1. `ECPSnapshot` - 31 edges
2. `InherenceClassifier` - 25 edges
3. `DecisionCategory` - 18 edges
4. `ClassificationResult` - 17 edges
5. `LocalEmbeddingsAdapter` - 14 edges
6. `LLMFallbackAdapter` - 14 edges
7. `detect_language()` - 14 edges
8. `main()` - 13 edges
9. `Tasks: [FEATURE NAME]` - 13 edges
10. `BaseNLPAdapter` - 12 edges
## Surprising Connections (you probably didn't know these)
- None detected - all connections are within the same source files.
- `emit_error()` --uses--> `ErrorCode` [INFERRED]
classify.py → src/models.py
- `main()` --uses--> `ECPSnapshot` [INFERRED]
classify.py → src/models.py
- `main()` --uses--> `ErrorCode` [INFERRED]
classify.py → src/models.py
- `test_classification_error_serialization()` --uses--> `ErrorCode` [INFERRED]
tests/test_models.py → src/models.py
- `test_ecp_snapshot_defaults()` --uses--> `ECPSnapshot` [INFERRED]
tests/test_models.py → src/models.py
## Import Cycles
- None detected.
## Communities (40 total, 6 thin omitted)
## Communities (80 total, 37 thin omitted)
### Community 0 - "Task Planning"
Cohesion: 0.07
@@ -82,13 +137,13 @@ Nodes (13): Find-SpecifyRoot(), Format-SpecKitCommand(), Get-CurrentBranch(), Ge
Cohesion: 0.08
Nodes (24): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+16 more)
### Community 4 - "Specification Analysis"
Cohesion: 0.15
Nodes (12): 7. Provide Next Actions, 8. Offer Remediation, 9. Check for extension hooks, Analysis Guidelines, Context, Context Efficiency, Goal, Operating Constraints (+4 more)
### Community 4 - "speckit-analyze/SKILL.md"
Cohesion: 0.08
Nodes (25): 1. Initialize Analysis Context, 2. Load Artifacts (Progressive Disclosure), 3. Build Semantic Models, 4. Detection Passes (Token-Efficient Analysis), 5. Severity Assignment, 6. Produce Compact Analysis Report, 7. Provide Next Actions, 8. Offer Remediation (+17 more)
### Community 5 - "Analysis Detection"
Cohesion: 0.15
Nodes (13): 1. Initialize Analysis Context, 2. Load Artifacts (Progressive Disclosure), 3. Build Semantic Models, 4. Detection Passes (Token-Efficient Analysis), 5. Severity Assignment, 6. Produce Compact Analysis Report, A. Duplication Detection, B. Ambiguity Detection (+5 more)
### Community 5 - "Tasks: Multilingual NLP Entity Inherence Classifier (POC)"
Cohesion: 0.06
Nodes (33): 1. Requirement Completeness & Scope Boundaries, 2. Requirement Clarity & Decision Semantics, 3. Requirement Consistency & Alignment, 4. Acceptance Criteria & Measurability, 5. Scenario & Edge Case Coverage, Notes, POC Readiness & Requirements Quality Checklist: Multilingual NLP Entity Inherence Classifier, Content Quality (+25 more)
### Community 6 - "Feature Specification Template"
Cohesion: 0.15
@@ -186,21 +241,61 @@ Nodes (3): For --cluster-only, For --update (incremental re-extraction), graphif
Cohesion: 0.50
Nodes (3): Boundaries, Output, Scan
### Community 40 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)"
Cohesion: 0.14
Nodes (14): Assumptions, Assumptions & Scope, Clarifications, Explicit Out of Scope (POC), Feature Specification: Multilingual NLP Entity Inherence Classifier (POC), Functional Requirements, Key Entities *(data models & domain entities)*, Measurable Outcomes (+6 more)
### Community 41 - "1. Technical Decisions & Tradeoffs"
Cohesion: 0.22
Nodes (8): 1. Technical Decisions & Tradeoffs, 2. Standardized Error Handling Strategy, Decision 1: Execution Engine & CLI Architecture, Decision 2: Multilingual Language Detection & Normalization (Tier 1 Core), Decision 3: Materialized ECP Snapshot Contract & Matching Logic, Decision 4: Tier 2 (Embeddings) & Tier 3 (LLM) Optional Adapters, Decision 5: Controlled 24-Case POC Benchmark Suite, Technical Research & Architecture Decisions (POC)
### Community 42 - "1. Input Schemas"
Cohesion: 0.25
Nodes (7): 1.1 ECP Snapshot Schema (`snapshot.json`), 1.2 Content Item Schema (`content.md`), 1. Input Schemas, 2.1 Classification Success Result Schema (`result.json`), 2.2 Error Result Schema, 2. Output Schemas, Data Models & Schemas (POC)
### Community 43 - "2. Basic CLI Usage Examples"
Cohesion: 0.25
Nodes (7): 1. Prerequisites & Installation, 2.1 Direct Inherence (Portuguese), 2.2 Contextual Inherence via Graph Snapshot (German), 2.3 Tangential Mention (Spanish), 2. Basic CLI Usage Examples, 3. Running the Controlled 24-Case Benchmark, Quickstart & Validation Guide (POC)
### Community 44 - "2. Standard Streams & Exit Codes"
Cohesion: 0.29
Nodes (6): 1.1 Arguments & Options, 1. Command Line Interface, 2.1 Exit Codes, 2.2 Standard Output (`stdout`) / Standard Error (`stderr`), 2. Standard Streams & Exit Codes, CLI Contract & Interface Specification (POC)
### Community 45 - "ECPSnapshot"
Cohesion: 0.05
Nodes (63): ABC, Enum, parametrize, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms. (+55 more)
### Community 46 - "test_models.py"
Cohesion: 0.12
Nodes (17): Any, emit_error(), ClassificationError, extract_evidence_snippets(), extract_sentences(), Markdown content parser and excerpt extraction utilities., Remove markdown syntax markers (headers, bold, italics, links, code blocks) to…, Split text into individual sentences. (+9 more)
### Community 47 - "detect_language"
Cohesion: 0.19
Nodes (16): detect_language(), extract_words(), normalize_text(), Lightweight multilingual language detection and text normalization., Normalize text by converting to lowercase and stripping combining diacritical…, Tokenize text into lowercase alphanumeric words., Detect the ISO-639-1 language code of text among supported languages (pt, en,…, Unit tests for language detection and text normalization. (+8 more)
### Community 48 - "main"
Cohesion: 0.31
Nodes (9): main(), parse_args(), Namespace, CLI execution tests covering flags, arguments, stdout, and error handling., test_cli_empty_content_file(), test_cli_missing_ecp_file(), test_cli_missing_required_ecp_field(), test_cli_output_file() (+1 more)
## Knowledge Gaps
- **212 isolated node(s):** `Format: `[ID] [P?] [Story] Description``, `Implementation for User Story 1`, `Implementation for User Story 2`, `Implementation for User Story 3`, `Incremental Delivery` (+207 more)
- **291 isolated node(s):** `text-nlp-classifier`, `MatchedGraphEntity`, `graphify`, `Usage`, `What graphify is for` (+286 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **6 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **37 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `Execution Steps` connect `Analysis Detection` to `Specification Analysis`?**
_High betweenness centrality (0.004) - this node is a cross-community bridge._
- **What connects `Format: `[ID] [P?] [Story] Description``, `Implementation for User Story 1`, `Implementation for User Story 2` to the rest of the system?**
_212 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `Task Planning` be split into smaller, more focused modules?**
_Cohesion score 0.07407407407407407 - nodes in this community are weakly interconnected._
- **Should `Convergence Workflow` be split into smaller, more focused modules?**
_Cohesion score 0.125 - nodes in this community are weakly interconnected._
- **Should `Graphify Commands` be split into smaller, more focused modules?**
_Cohesion score 0.08 - nodes in this community are weakly interconnected._
- **Why does `ECPSnapshot` connect `ECPSnapshot` to `main`, `test_models.py`?**
_High betweenness centrality (0.015) - this node is a cross-community bridge._
- **Why does `InherenceClassifier` connect `ECPSnapshot` to `main`?**
_High betweenness centrality (0.008) - this node is a cross-community bridge._
- **Why does `detect_language()` connect `detect_language` to `ECPSnapshot`?**
_High betweenness centrality (0.007) - this node is a cross-community bridge._
- **Are the 10 inferred relationships involving `ECPSnapshot` (e.g. with `main()` and `BaseNLPAdapter`) actually correct?**
_`ECPSnapshot` has 10 INFERRED edges - model-reasoned connections that need verification._
- **Are the 6 inferred relationships involving `InherenceClassifier` (e.g. with `LocalEmbeddingsAdapter` and `LLMFallbackAdapter`) actually correct?**
_`InherenceClassifier` has 6 INFERRED edges - model-reasoned connections that need verification._
- **Are the 10 inferred relationships involving `DecisionCategory` (e.g. with `InherenceClassifier` and `test_adversarial_apple_fruit_recipe()`) actually correct?**
_`DecisionCategory` has 10 INFERRED edges - model-reasoned connections that need verification._
- **Are the 4 inferred relationships involving `ClassificationResult` (e.g. with `BaseNLPAdapter` and `LocalEmbeddingsAdapter`) actually correct?**
_`ClassificationResult` has 4 INFERRED edges - model-reasoned connections that need verification._
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_it_contextual_md", "label": "contextual.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/it/contextual.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_it_contextual_innovazione_negli_impianti_frenanti", "label": "Innovazione negli Impianti Frenanti", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/it/contextual.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_it_contextual_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_it_contextual_innovazione_negli_impianti_frenanti", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/it/contextual.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_pt_direct_md", "label": "direct.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/pt/direct.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_pt_direct_produ\u00e7\u00e3o_de_petr\u00f3leo_no_brasil", "label": "Produ\u00e7\u00e3o de Petr\u00f3leo no Brasil", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/pt/direct.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_pt_direct_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_pt_direct_produ\u00e7\u00e3o_de_petr\u00f3leo_no_brasil", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/pt/direct.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_es_not_related_md", "label": "not_related.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/es/not_related.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_es_not_related_turismo_en_la_costa_norte", "label": "Turismo en la Costa Norte", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/es/not_related.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_es_not_related_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_es_not_related_turismo_en_la_costa_norte", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/es/not_related.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_en_contextual_md", "label": "contextual.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/en/contextual.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_en_contextual_electronics_assembly_expansion", "label": "Electronics Assembly Expansion", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/en/contextual.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_en_contextual_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_en_contextual_electronics_assembly_expansion", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/en/contextual.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_md", "label": "requirements.md", "file_type": "document", "node_kind": "page", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "label": "Specification Quality Checklist: Multilingual NLP Entity Inherence Classifier", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_content_quality", "label": "Content Quality", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_requirement_completeness", "label": "Requirement Completeness", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L14"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_feature_readiness", "label": "Feature Readiness", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L25"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_notes", "label": "Notes", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L32"}], "edges": [{"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_md", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_md", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L5", "weight": 1.0, "target_file": "$graphify-root$/specs/001-multilingual-entity-classifier/spec.md"}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_content_quality", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_requirement_completeness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_feature_readiness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L32", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_md", "label": "requirements.md", "file_type": "document", "node_kind": "page", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "label": "Specification Quality Checklist: Multilingual NLP Entity Inherence Classifier", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_content_quality", "label": "Content Quality", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_requirement_completeness", "label": "Requirement Completeness", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L14"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_feature_readiness", "label": "Feature Readiness", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L25"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_notes", "label": "Notes", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L32"}], "edges": [{"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_md", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_md", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L5", "weight": 1.0, "target_file": "$graphify-root$/specs/001-multilingual-entity-classifier/spec.md"}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_content_quality", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_requirement_completeness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_feature_readiness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L32", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_init_py", "label": "__init__.py", "file_type": "code", "source_file": "tests/__init__.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_init_rationale_1", "label": "Test package for Multilingual NLP Entity Inherence Classifier.", "file_type": "rationale", "source_file": "tests/__init__.py", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_init_rationale_1", "target": "$graphify-root$_tests_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_en_not_related_md", "label": "not_related.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/en/not_related.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_en_not_related_classic_apple_pie_baking_guide", "label": "Classic Apple Pie Baking Guide", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/en/not_related.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_en_not_related_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_en_not_related_classic_apple_pie_baking_guide", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/en/not_related.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_pt_not_related_md", "label": "not_related.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/pt/not_related.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_pt_not_related_dicas_de_jardinagem", "label": "Dicas de Jardinagem", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/pt/not_related.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_pt_not_related_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_pt_not_related_dicas_de_jardinagem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/pt/not_related.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_es_tangential_md", "label": "tangential.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/es/tangential.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_es_tangential_gu\u00eda_cultural_de_la_ciudad", "label": "Gu\u00eda Cultural de la Ciudad", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/es/tangential.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_es_tangential_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_es_tangential_gu\u00eda_cultural_de_la_ciudad", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/es/tangential.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_fr_not_related_md", "label": "not_related.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/fr/not_related.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_fr_not_related_recette_traditionnelle_de_la_quiche_lorraine", "label": "Recette Traditionnelle de la Quiche Lorraine", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/fr/not_related.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_fr_not_related_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_fr_not_related_recette_traditionnelle_de_la_quiche_lorraine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/fr/not_related.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_de_not_related_md", "label": "not_related.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/de/not_related.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_de_not_related_backrezept_f\u00fcr_apfelstrudel", "label": "Backrezept f\u00fcr Apfelstrudel", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/de/not_related.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_de_not_related_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_de_not_related_backrezept_f\u00fcr_apfelstrudel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/de/not_related.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_examples_content_northvolt_de_md", "label": "content_northvolt_de.md", "file_type": "document", "node_kind": "page", "source_file": "examples/content_northvolt_de.md", "source_location": "L1"}, {"id": "$graphify-root$_examples_content_northvolt_de_batteriezellproduktion_f\u00fcr_europ\u00e4ische_elektrofahrzeuge", "label": "Batteriezellproduktion f\u00fcr europ\u00e4ische Elektrofahrzeuge", "file_type": "document", "node_kind": "heading", "source_file": "examples/content_northvolt_de.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_examples_content_northvolt_de_md", "target": "$graphify-root$_examples_content_northvolt_de_batteriezellproduktion_f\u00fcr_europ\u00e4ische_elektrofahrzeuge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "examples/content_northvolt_de.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_de_direct_md", "label": "direct.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/de/direct.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_de_direct_investitionsoffensive_in_wolfsburg", "label": "Investitionsoffensive in Wolfsburg", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/de/direct.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_de_direct_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_de_direct_investitionsoffensive_in_wolfsburg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/de/direct.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_pt_tangential_md", "label": "tangential.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/pt/tangential.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_pt_tangential_turismo_no_rio_de_janeiro", "label": "Turismo no Rio de Janeiro", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/pt/tangential.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_pt_tangential_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_pt_tangential_turismo_no_rio_de_janeiro", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/pt/tangential.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_en_tangential_md", "label": "tangential.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/en/tangential.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_en_tangential_morning_city_walk", "label": "Morning City Walk", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/en/tangential.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_en_tangential_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_en_tangential_morning_city_walk", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/en/tangential.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_fr_tangential_md", "label": "tangential.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/fr/tangential.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_fr_tangential_promenade_dans_paris", "label": "Promenade dans Paris", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/fr/tangential.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_fr_tangential_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_fr_tangential_promenade_dans_paris", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/fr/tangential.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_src_init_py", "label": "__init__.py", "file_type": "code", "source_file": "src/__init__.py", "source_location": "L1"}, {"id": "$graphify-root$_src_init_rationale_1", "label": "Multilingual NLP Entity Inherence Classifier package.", "file_type": "rationale", "source_file": "src/__init__.py", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_src_init_rationale_1", "target": "$graphify-root$_src_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_de_tangential_md", "label": "tangential.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/de/tangential.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_de_tangential_reisebericht_aus_niedersachsen", "label": "Reisebericht aus Niedersachsen", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/de/tangential.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_de_tangential_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_de_tangential_reisebericht_aus_niedersachsen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/de/tangential.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_md", "label": "cli-contract.md", "file_type": "document", "node_kind": "page", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_cli_contract_interface_specification_poc", "label": "CLI Contract & Interface Specification (POC)", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_1_command_line_interface", "label": "1. Command Line Interface", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L8"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_1_1_arguments_options", "label": "1.1 Arguments & Options", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L14"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_2_standard_streams_exit_codes", "label": "2. Standard Streams & Exit Codes", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L28"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_2_1_exit_codes", "label": "2.1 Exit Codes", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L30"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_2_2_standard_output_stdout_standard_error_stderr", "label": "2.2 Standard Output (`stdout`) / Standard Error (`stderr`)", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L35"}], "edges": [{"source": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_md", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_cli_contract_interface_specification_poc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_cli_contract_interface_specification_poc", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_1_command_line_interface", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_1_command_line_interface", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_1_1_arguments_options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_cli_contract_interface_specification_poc", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_2_standard_streams_exit_codes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L28", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_2_standard_streams_exit_codes", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_2_1_exit_codes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_2_standard_streams_exit_codes", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_contracts_cli_contract_2_2_standard_output_stdout_standard_error_stderr", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/contracts/cli-contract.md", "source_location": "L35", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_fr_contextual_md", "label": "contextual.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/fr/contextual.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_fr_contextual_batteries_industrielles_de_pointe", "label": "Batteries Industrielles de Pointe", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/fr/contextual.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_fr_contextual_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_fr_contextual_batteries_industrielles_de_pointe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/fr/contextual.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_md", "label": "requirements.md", "file_type": "document", "node_kind": "page", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "label": "Specification Quality Checklist: Multilingual NLP Entity Inherence Classifier", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_content_quality", "label": "Content Quality", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_requirement_completeness", "label": "Requirement Completeness", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L14"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_feature_readiness", "label": "Feature Readiness", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L25"}, {"id": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_notes", "label": "Notes", "file_type": "document", "node_kind": "heading", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L32"}], "edges": [{"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_md", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_md", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L5", "weight": 1.0, "target_file": "$graphify-root$/specs/001-multilingual-entity-classifier/spec.md"}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_content_quality", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_requirement_completeness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_feature_readiness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_specification_quality_checklist_multilingual_nlp_entity_inherence_classifier", "target": "$graphify-root$_specs_001_multilingual_entity_classifier_checklists_requirements_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/001-multilingual-entity-classifier/checklists/requirements.md", "source_location": "L32", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_it_tangential_md", "label": "tangential.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/it/tangential.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_it_tangential_passeggiata_pomeridiana_a_modena", "label": "Passeggiata Pomeridiana a Modena", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/it/tangential.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_it_tangential_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_it_tangential_passeggiata_pomeridiana_a_modena", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/it/tangential.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_de_contextual_md", "label": "contextual.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/de/contextual.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_de_contextual_batteriefabrik_in_europa", "label": "Batteriefabrik in Europa", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/de/contextual.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_de_contextual_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_de_contextual_batteriefabrik_in_europa", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/de/contextual.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_it_not_related_md", "label": "not_related.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/it/not_related.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_it_not_related_ricetta_tradizionale_del_risotto", "label": "Ricetta Tradizionale del Risotto", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/it/not_related.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_it_not_related_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_it_not_related_ricetta_tradizionale_del_risotto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/it/not_related.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_en_direct_md", "label": "direct.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/en/direct.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_en_direct_apple_unveils_next_generation_iphone", "label": "Apple Unveils Next-Generation iPhone", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/en/direct.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_en_direct_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_en_direct_apple_unveils_next_generation_iphone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/en/direct.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "pkg_text_nlp_classifier", "label": "text-nlp-classifier", "file_type": "code", "type": "package", "ecosystem": "python", "source_file": "pyproject.toml", "source_location": "L1", "version": "0.1.0"}], "edges": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_examples_content_tangential_es_md", "label": "content_tangential_es.md", "file_type": "document", "node_kind": "page", "source_file": "examples/content_tangential_es.md", "source_location": "L1"}, {"id": "$graphify-root$_examples_content_tangential_es_reflexiones_sobre_el_debate_pol\u00edtico_y_la_diplomacia_regional", "label": "Reflexiones sobre el debate pol\u00edtico y la diplomacia regional", "file_type": "document", "node_kind": "heading", "source_file": "examples/content_tangential_es.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_examples_content_tangential_es_md", "target": "$graphify-root$_examples_content_tangential_es_reflexiones_sobre_el_debate_pol\u00edtico_y_la_diplomacia_regional", "relation": "contains", "confidence": "EXTRACTED", "source_file": "examples/content_tangential_es.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_es_contextual_md", "label": "contextual.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/es/contextual.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_es_contextual_nuevas_soluciones_de_pagos_electr\u00f3nicos", "label": "Nuevas Soluciones de Pagos Electr\u00f3nicos", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/es/contextual.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_es_contextual_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_es_contextual_nuevas_soluciones_de_pagos_electr\u00f3nicos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/es/contextual.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_it_direct_md", "label": "direct.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/it/direct.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_it_direct_nuova_monoposto_a_maranello", "label": "Nuova Monoposto a Maranello", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/it/direct.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_it_direct_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_it_direct_nuova_monoposto_a_maranello", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/it/direct.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_pt_contextual_md", "label": "contextual.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/pt/contextual.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_pt_contextual_log\u00edstica_de_derivados", "label": "Log\u00edstica de Derivados", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/pt/contextual.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_pt_contextual_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_pt_contextual_log\u00edstica_de_derivados", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/pt/contextual.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_examples_content_presal_pt_md", "label": "content_presal_pt.md", "file_type": "document", "node_kind": "page", "source_file": "examples/content_presal_pt.md", "source_location": "L1"}, {"id": "$graphify-root$_examples_content_presal_pt_petrobras_bate_recorde_hist\u00f3rico_de_produ\u00e7\u00e3o_no_pr\u00e9_sal", "label": "Petrobras bate recorde hist\u00f3rico de produ\u00e7\u00e3o no pr\u00e9-sal", "file_type": "document", "node_kind": "heading", "source_file": "examples/content_presal_pt.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_examples_content_presal_pt_md", "target": "$graphify-root$_examples_content_presal_pt_petrobras_bate_recorde_hist\u00f3rico_de_produ\u00e7\u00e3o_no_pr\u00e9_sal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "examples/content_presal_pt.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_fr_direct_md", "label": "direct.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/fr/direct.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_fr_direct_d\u00e9veloppement_\u00e9nerg\u00e9tique_en_france", "label": "D\u00e9veloppement \u00c9nerg\u00e9tique en France", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/fr/direct.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_fr_direct_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_fr_direct_d\u00e9veloppement_\u00e9nerg\u00e9tique_en_france", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/fr/direct.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_src_adapters_init_py", "label": "__init__.py", "file_type": "code", "source_file": "src/adapters/__init__.py", "source_location": "L1"}, {"id": "$graphify-root$_src_adapters_init_rationale_1", "label": "Adapters package for optional vector embeddings and LLM providers.", "file_type": "rationale", "source_file": "src/adapters/__init__.py", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_src_adapters_init_rationale_1", "target": "$graphify-root$_src_adapters_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_tests_fixtures_benchmark_24_es_direct_md", "label": "direct.md", "file_type": "document", "node_kind": "page", "source_file": "tests/fixtures/benchmark_24/es/direct.md", "source_location": "L1"}, {"id": "$graphify-root$_tests_fixtures_benchmark_24_es_direct_expansi\u00f3n_de_servicios_financieros_en_espa\u00f1a", "label": "Expansi\u00f3n de Servicios Financieros en Espa\u00f1a", "file_type": "document", "node_kind": "heading", "source_file": "tests/fixtures/benchmark_24/es/direct.md", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_tests_fixtures_benchmark_24_es_direct_md", "target": "$graphify-root$_tests_fixtures_benchmark_24_es_direct_expansi\u00f3n_de_servicios_financieros_en_espa\u00f1a", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/fixtures/benchmark_24/es/direct.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+8281 -138
View File
File diff suppressed because it is too large Load Diff
+336
View File
@@ -238,5 +238,341 @@
"seen": 1787189352.7449548,
"ast_hash": "a831cf3669f1e6ab85d8a80ebe655f99",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/checklists/requirements.md": {
"mtime": 1787193985.655018,
"seen": 1787194003.0704188,
"ast_hash": "13e007d6da3f275d34b1f67fda546b81",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/spec.md": {
"mtime": 1787194850.5106893,
"seen": 1787194931.113662,
"ast_hash": "41587427964956662ffb8f0dffea1027",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/contracts/cli-contract.md": {
"mtime": 1787194605.824187,
"seen": 1787194638.8537047,
"ast_hash": "c4fdb88a5e3269fb10689a2940b9616f",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/data-model.md": {
"mtime": 1787194591.677816,
"seen": 1787194638.853709,
"ast_hash": "7ccdd584024c65f16364444e9df4d860",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/plan.md": {
"mtime": 1787194897.8541067,
"seen": 1787194931.1135547,
"ast_hash": "edcaea62d445dbb073ff30166115788e",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/quickstart.md": {
"mtime": 1787194877.439851,
"seen": 1787194931.113557,
"ast_hash": "d630b7592e1ee761f1d36cfd0079771d",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/research.md": {
"mtime": 1787194581.004019,
"seen": 1787194638.8537128,
"ast_hash": "159b7eec565d477f15f2c683c082e40d",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/tasks.md": {
"mtime": 1787196452.595599,
"seen": 1787196463.1030743,
"ast_hash": "132f38dcd33d45eec9a8ca22ec4de880",
"semantic_hash": ""
},
"specs/001-multilingual-entity-classifier/checklists/poc-readiness.md": {
"mtime": 1787195218.2475252,
"seen": 1787195225.042909,
"ast_hash": "f8488016a8e749938d2086d34999a91c",
"semantic_hash": ""
},
"classify.py": {
"mtime": 1787197110.3753626,
"seen": 1787197159.9828603,
"ast_hash": "d09a35a5e25d42f6ecc537d5b67bef8e",
"semantic_hash": ""
},
"pyproject.toml": {
"mtime": 1787195827.3305018,
"seen": 1787196463.0953014,
"ast_hash": "f2503e96d08f5a4e41b13352e81709c6",
"semantic_hash": ""
},
"src/__init__.py": {
"mtime": 1787195832.559486,
"seen": 1787196463.0953057,
"ast_hash": "13284e9b9f10de535dba5f461ecd7c7c",
"semantic_hash": ""
},
"src/adapters/__init__.py": {
"mtime": 1787195842.2716768,
"seen": 1787196463.0953088,
"ast_hash": "541577ed019347ac3864002f85c116f1",
"semantic_hash": ""
},
"src/adapters/base.py": {
"mtime": 1787196396.6199949,
"seen": 1787196463.0953116,
"ast_hash": "40dc6e175c8708467748c1f42a0e064a",
"semantic_hash": ""
},
"src/adapters/embeddings.py": {
"mtime": 1787196402.7484262,
"seen": 1787196463.0953145,
"ast_hash": "0444823bb05720d4c4ca1662a00b2c01",
"semantic_hash": ""
},
"src/adapters/llm.py": {
"mtime": 1787196408.180451,
"seen": 1787196463.0953166,
"ast_hash": "3d95d98625df3fcd343f2fecb78707c5",
"semantic_hash": ""
},
"src/classifier.py": {
"mtime": 1787197085.0250447,
"seen": 1787197159.985785,
"ast_hash": "a2e70f968109d213fdab0ae81ac819ff",
"semantic_hash": ""
},
"src/language.py": {
"mtime": 1787196384.5545745,
"seen": 1787196463.0953217,
"ast_hash": "985619013e58a7f55af2e955817f223c",
"semantic_hash": ""
},
"src/models.py": {
"mtime": 1787195855.3266282,
"seen": 1787196463.0953236,
"ast_hash": "ce73bfe85eb54f907e2052c80636ecaf",
"semantic_hash": ""
},
"src/parser.py": {
"mtime": 1787195873.9119804,
"seen": 1787196463.0953257,
"ast_hash": "0a1d64ee7088b266125af071f85f3826",
"semantic_hash": ""
},
"tests/__init__.py": {
"mtime": 1787195847.5186412,
"seen": 1787196463.095328,
"ast_hash": "42d67f813e6eeac2ffca24fe6206aa9b",
"semantic_hash": ""
},
"tests/test_adapters.py": {
"mtime": 1787196418.6328156,
"seen": 1787196463.09533,
"ast_hash": "5caf95327ea030dbcc37a99bd9052ebd",
"semantic_hash": ""
},
"tests/test_benchmark_24.py": {
"mtime": 1787196325.5409796,
"seen": 1787196463.0953324,
"ast_hash": "487d30d6de2dee529fa91b86a1d62c0a",
"semantic_hash": ""
},
"tests/test_classifier.py": {
"mtime": 1787196364.7195728,
"seen": 1787196463.0953343,
"ast_hash": "4350a5b11a08d12ccb85a3f332d71e87",
"semantic_hash": ""
},
"tests/test_cli.py": {
"mtime": 1787195939.567137,
"seen": 1787196463.0953364,
"ast_hash": "90b0131d43cfc64a76e499c7a65d95de",
"semantic_hash": ""
},
"tests/test_language.py": {
"mtime": 1787195891.3329668,
"seen": 1787196463.0953388,
"ast_hash": "66191b43fcd7aef47c07cd20d5a8f03c",
"semantic_hash": ""
},
"tests/test_models.py": {
"mtime": 1787195886.5009987,
"seen": 1787196463.095341,
"ast_hash": "1fd725c8ca0f52e52f56c7223e9574d0",
"semantic_hash": ""
},
"examples/content_northvolt_de.md": {
"mtime": 1787195963.813741,
"seen": 1787196463.1020777,
"ast_hash": "9033a8bdde7f2caba952eb0f50af8ba6",
"semantic_hash": ""
},
"examples/content_presal_pt.md": {
"mtime": 1787195950.0247998,
"seen": 1787196463.10208,
"ast_hash": "d08c26af041b833fbc9e6673aec4ee80",
"semantic_hash": ""
},
"examples/content_tangential_es.md": {
"mtime": 1787195975.5271506,
"seen": 1787196463.1020815,
"ast_hash": "55f37cf83b54926e1f5751a4ba6335a9",
"semantic_hash": ""
},
"requirements.txt": {
"mtime": 1787195817.4782183,
"seen": 1787196463.1020837,
"ast_hash": "5612073a1e7034d7c25765379baa5da4",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/de/contextual.md": {
"mtime": 1787196180.7794595,
"seen": 1787196463.103077,
"ast_hash": "1e78706552a34512ac2a2b772ec2ecd1",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/de/direct.md": {
"mtime": 1787196169.5728126,
"seen": 1787196463.1030784,
"ast_hash": "25f60b38e35c96356d7ecbabdd6de545",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/de/not_related.md": {
"mtime": 1787196204.0937815,
"seen": 1787196463.1030807,
"ast_hash": "6d6165d5279cda9cde833a6aa2d71164",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/de/tangential.md": {
"mtime": 1787196193.1870873,
"seen": 1787196463.1030822,
"ast_hash": "3f5ddf01ca728aa2d0116882604718cf",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/en/contextual.md": {
"mtime": 1787196066.4274058,
"seen": 1787196463.1030838,
"ast_hash": "89114901dc8579adafa4fb503afbc761",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/en/direct.md": {
"mtime": 1787196054.1496131,
"seen": 1787196463.1030855,
"ast_hash": "dd15e4f08c2757ee499da0bea578c04c",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/en/not_related.md": {
"mtime": 1787196350.3334656,
"seen": 1787196463.103087,
"ast_hash": "9e2c91a29282eac5d4c21c38bef9767e",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/en/tangential.md": {
"mtime": 1787196082.7302663,
"seen": 1787196463.1030884,
"ast_hash": "fe681417b697406ea16e0e78f2df8ce4",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/es/contextual.md": {
"mtime": 1787196129.959492,
"seen": 1787196463.1030898,
"ast_hash": "8668670e9a018ba879fb256dbe5bd2fa",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/es/direct.md": {
"mtime": 1787196118.6405888,
"seen": 1787196463.103091,
"ast_hash": "d01aa9c2cda827336558b993098fa4a1",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/es/not_related.md": {
"mtime": 1787196152.6110358,
"seen": 1787196463.1030927,
"ast_hash": "720215fd2a9ec45f745564869b20a19d",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/es/tangential.md": {
"mtime": 1787196141.436479,
"seen": 1787196463.1030943,
"ast_hash": "ef16422876c7925ea0b2631483468f12",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/fr/contextual.md": {
"mtime": 1787196288.4152596,
"seen": 1787196463.1030955,
"ast_hash": "bf01dc91dc0a8abe21eca424fb44d0c4",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/fr/direct.md": {
"mtime": 1787196277.0201283,
"seen": 1787196463.1030967,
"ast_hash": "772cc74cec96c666c7e348f600720e14",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/fr/not_related.md": {
"mtime": 1787196312.47212,
"seen": 1787196463.1030984,
"ast_hash": "da5869eda42812d47e82a4cabf77f984",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/fr/tangential.md": {
"mtime": 1787196301.2256103,
"seen": 1787196463.103103,
"ast_hash": "6926ee30a0f12424c3c4f6691daeb1fd",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/it/contextual.md": {
"mtime": 1787196234.462201,
"seen": 1787196463.1031046,
"ast_hash": "53dfa9859257d99d54b3479702abbd11",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/it/direct.md": {
"mtime": 1787196221.6644733,
"seen": 1787196463.1031058,
"ast_hash": "493cbc253516b219d6b0d745bf6c750f",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/it/not_related.md": {
"mtime": 1787196259.3629923,
"seen": 1787196463.1031072,
"ast_hash": "3fbc57bc9b9c78af4b6eb93343cc4634",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/it/tangential.md": {
"mtime": 1787196245.9183564,
"seen": 1787196463.1031086,
"ast_hash": "43f800646fc2a4060528e7ef851e8d77",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/pt/contextual.md": {
"mtime": 1787196014.2010715,
"seen": 1787196463.10311,
"ast_hash": "2e5b837c09ac05daae5007235e2a85b5",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/pt/direct.md": {
"mtime": 1787196003.236562,
"seen": 1787196463.1031117,
"ast_hash": "f7e5ca68966f5e2b805fde6d46b90f7e",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/pt/not_related.md": {
"mtime": 1787196036.7240841,
"seen": 1787196463.103113,
"ast_hash": "980a58ca0db93f8dbb6c43e1c9108baf",
"semantic_hash": ""
},
"tests/fixtures/benchmark_24/pt/tangential.md": {
"mtime": 1787196024.9788618,
"seen": 1787196463.1031141,
"ast_hash": "e05ab20a5190cfb5b9d41da64d5273cf",
"semantic_hash": ""
},
"tests/test_adversarial.py": {
"mtime": 1787197141.2340336,
"seen": 1787197159.9881344,
"ast_hash": "5e8daf517ee32c261617d96264ef0473",
"semantic_hash": ""
}
}
+22
View File
@@ -0,0 +1,22 @@
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "text-nlp-classifier"
version = "0.1.0"
description = "Multilingual NLP Entity Inherence Classifier (POC)"
readme = "README.md"
requires-python = ">=3.10"
dependencies = []
[project.optional-dependencies]
test = [
"pytest>=7.0.0",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
+5
View File
@@ -0,0 +1,5 @@
pytest>=7.0.0
# Optional Tier 2 / Tier 3 dependencies (not required for POC core execution)
# sentence-transformers>=2.2.0
# httpx>=0.24.0
# openai>=1.0.0
@@ -0,0 +1,61 @@
# POC Readiness & Requirements Quality Checklist: Multilingual NLP Entity Inherence Classifier
**Purpose**: Validate requirement quality, clarity, and completeness for the POC implementation before code execution
**Created**: 2026-08-20
**Feature**: [spec.md](../spec.md) | [plan.md](../plan.md)
**Note**: This custom checklist is generated by the `/speckit-checklist` command based on feature context and requirements.
**Review Ownership**: This checklist is a reviewer-owned requirements-quality review artifact. Mark an item `[x]` only when the reviewer determines the requirements-quality criterion is satisfied.
**Marker Semantics**: `[x]` means the criterion has been reviewed and satisfied for requirements quality. It does not mean implementation work is complete.
---
## 1. Requirement Completeness & Scope Boundaries
- [x] CHK001 Are the required and optional fields of the ECP Snapshot explicitly specified with defaults? [Completeness, Spec §FR-003]
- [x] CHK002 Is the CLI execution contract completely specified with argument names, flags, and file path requirements? [Completeness, Spec §FR-002]
- [x] CHK003 Are explicit out-of-scope boundaries (no REST API, no live Neo4j, no worker queues) clearly stated to prevent scope creep? [Scope, Spec §Assumptions & Scope]
- [x] CHK004 Is the behavior for missing `--output` (printing to stdout) explicitly defined? [Completeness, Spec §FR-002]
---
## 2. Requirement Clarity & Decision Semantics
- [x] CHK005 Are the 4 decision categories (`DIRECT_INHERENT`, `CONTEXTUAL_INHERENT`, `TANGENTIAL`, `NOT_RELATED`) defined with unambiguous conditions? [Clarity, Spec §FR-005]
- [x] CHK006 Is the deterministic derivation rule for `is_inherent` (`true` for DIRECT/CONTEXTUAL, `false` for TANGENTIAL/NOT_RELATED) mathematically unambiguous? [Clarity, Spec §FR-006]
- [x] CHK007 Is the 3-tier hybrid execution order explicitly defined such that clear cases never invoke Tier 2/Tier 3? [Clarity, Spec §FR-004]
- [x] CHK008 Are all standardized error codes (`invalid_ecp_json`, `invalid_markdown`, `unsupported_language`, `empty_content`, `missing_required_field`) enumerated? [Clarity, Spec §FR-008]
---
## 3. Requirement Consistency & Alignment
- [x] CHK009 Do the example filenames in `spec.md`, `plan.md`, `quickstart.md`, and `tasks.md` align consistently without discrepancies? [Consistency, Plan §Project Structure]
- [x] CHK010 Is the benchmark test file name (`tests/test_benchmark_24.py`) consistent across all documentation artifacts? [Consistency, Quickstart §3]
- [x] CHK011 Are dependencies strictly limited to `pytest` without mandatory external AI/cloud packages? [Consistency, Plan §Technical Context]
---
## 4. Acceptance Criteria & Measurability
- [x] CHK012 Is the POC benchmark suite quantified with an explicit test count (24 cases = 6 languages × 4 decision types)? [Measurability, Spec §SC-002]
- [x] CHK013 Is the accuracy target (≥ 90% precision) bounded specifically to the controlled 24-case benchmark suite? [Measurability, Spec §SC-002]
- [x] CHK014 Is the execution latency target (< 200ms for Tier 1) testable and quantified? [Measurability, Spec §SC-004]
---
## 5. Scenario & Edge Case Coverage
- [x] CHK015 Are requirements specified for malformed Markdown or empty content files? [Edge Cases, Spec §FR-008]
- [x] CHK016 Are requirements specified for corrupted JSON or missing required ECP fields? [Edge Cases, Spec §FR-008]
- [x] CHK017 Are negative anchor suppression rules specified for homonym disambiguation? [Coverage, Spec §FR-005]
- [x] CHK018 Are graph snapshot relationship matches (weight, scope, relation_type) accounted for in contextual inherence decisions? [Coverage, Spec §FR-003, §FR-005]
---
## Notes
- Mark items `[x]` only after review confirms the requirement-quality criterion is satisfied.
- Leave items unchecked when they still require clarification, correction, or reviewer evaluation.
- `/speckit-implement` reads checklist checkbox state as a gate and must not modify markers.
- `checklists/requirements.md` has a separate built-in lifecycle maintained by `/speckit-specify` and `/speckit-clarify`.
@@ -0,0 +1,40 @@
# Specification Quality Checklist: Multilingual NLP Entity Inherence Classifier
**Purpose**: Validate specification completeness and quality before proceeding to planning
**Created**: 2026-08-19
**Feature**: [spec.md](../spec.md)
## Content Quality
- [x] No implementation details (languages, frameworks, APIs)
- [x] Focused on user value and business needs
- [x] Written for non-technical stakeholders
- [x] All mandatory sections completed
## Requirement Completeness
- [x] No [NEEDS CLARIFICATION] markers remain
- [x] Requirements are testable and unambiguous
- [x] Success criteria are measurable
- [x] Success criteria are technology-agnostic (no implementation details)
- [x] All acceptance scenarios are defined
- [x] Edge cases are identified
- [x] Scope is clearly bounded
- [x] Dependencies and assumptions identified
## Feature Readiness
- [x] All functional requirements have clear acceptance criteria
- [x] User scenarios cover primary flows
- [x] Feature meets measurable outcomes defined in Success Criteria
- [x] No implementation details leak into specification
## Notes
- Initial requirements documented from user audio brief and refined with POC constraints.
- ECP defined as Entity Context Profile with materialized JSON snapshots.
- Tier 1 (deterministic rules) defined as mandatory core; Tier 2 (embeddings) and Tier 3 (LLM) defined as optional/configurable (LLM off by default, no API key required).
- Decision rules explicitly codified for all 4 categories and derived `is_inherent` boolean.
- Success criteria scoped to a controlled 24-case POC benchmark suite (6 languages × 4 decision types).
- Structured error codes defined (`invalid_ecp_json`, `invalid_markdown`, `unsupported_language`, `empty_content`, `missing_required_field`).
- Explicit out-of-scope declarations enforced (No REST API, No package publishing, No queues/workers, No runtime DB/Neo4j).
@@ -0,0 +1,42 @@
# CLI Contract & Interface Specification (POC)
**Feature**: `001-multilingual-entity-classifier`
**Status**: Completed
---
## 1. Command Line Interface
```bash
python classify.py --ecp <path-to-ecp.json> --content <path-to-content.md> [--output <path-to-result.json>] [--enable-embeddings] [--enable-llm]
```
### 1.1 Arguments & Options
| Parameter | Type | Required | Description |
|---|---|---|---|
| `--ecp` | Path (`string`) | **Yes** | Absolute or relative path to the ECP Snapshot JSON file |
| `--content` | Path (`string`) | **Yes** | Absolute or relative path to the Markdown content file |
| `--output`, `-o` | Path (`string`) | No | Destination path to write result JSON. If omitted, prints JSON to `stdout`. |
| `--enable-embeddings` | Flag (`bool`) | No | Enables Tier 2 local multilingual vector similarity adapter (default: false). |
| `--enable-llm` | Flag (`bool`) | No | Enables Tier 3 LLM fallback adapter for ambiguous cases (default: false). |
| `--version`, `-v` | Flag (`bool`) | No | Displays version and exits. |
| `--help`, `-h` | Flag (`bool`) | No | Displays help message. |
---
## 2. Standard Streams & Exit Codes
### 2.1 Exit Codes
- `0`: Success (classification completed normally, result JSON written to file or stdout).
- `1`: Validation / Processing Error (invalid arguments, malformed input, missing fields, structured error JSON printed to stderr or output file).
### 2.2 Standard Output (`stdout`) / Standard Error (`stderr`)
- If `--output` is provided:
- Success result is saved to the specified file.
- On error, error JSON is written to the output file (if accessible) and emitted to `stderr`.
- If `--output` is NOT provided:
- On success: formatted JSON is printed directly to `stdout`.
- On error: structured error JSON is printed to `stderr`.
@@ -0,0 +1,205 @@
# Data Models & Schemas (POC)
**Feature**: `001-multilingual-entity-classifier`
**Status**: Completed
---
## 1. Input Schemas
### 1.1 ECP Snapshot Schema (`snapshot.json`)
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ECPSnapshot",
"type": "object",
"required": [
"target_entity_id",
"target_name",
"aliases",
"domain",
"anchors"
],
"properties": {
"target_entity_id": {
"type": "string",
"description": "Unique identifier of the entity"
},
"target_name": {
"type": "string",
"description": "Canonical name of the entity"
},
"aliases": {
"type": "array",
"items": { "type": "string" },
"description": "Multilingual aliases, acronyms, and trade names"
},
"domain": {
"type": "string",
"description": "Primary industry, category, or domain of the entity"
},
"anchors": {
"type": "array",
"items": { "type": "string" },
"description": "Key domain concepts, topics, and contextual keywords"
},
"negative_anchors": {
"type": "array",
"items": { "type": "string" },
"default": [],
"description": "Homonym disambiguators or exclusion terms"
},
"graph_version": {
"type": "string",
"default": "1.0.0",
"description": "Version timestamp or hash of the source graph"
},
"related_entities": {
"type": "array",
"default": [],
"items": {
"type": "object",
"required": ["entity_id", "name", "relation_type", "weight"],
"properties": {
"entity_id": { "type": "string" },
"name": { "type": "string" },
"aliases": { "type": "array", "items": { "type": "string" }, "default": [] },
"relation_type": { "type": "string" },
"weight": { "type": "number", "minimum": 0.0, "maximum": 1.0 },
"scope": { "type": "string", "default": "general" },
"confidence": { "type": "number", "minimum": 0.0, "maximum": 1.0, "default": 1.0 }
}
}
}
}
}
```
### 1.2 Content Item Schema (`content.md`)
- **Format**: Plain Markdown document (`.md` or `.txt`).
- **Validation Rules**:
- Must not be empty (minimum 5 non-whitespace characters).
- Must contain readable text in UTF-8 encoding.
---
## 2. Output Schemas
### 2.1 Classification Success Result Schema (`result.json`)
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ClassificationResult",
"type": "object",
"required": [
"decision",
"is_inherent",
"confidence",
"detected_language",
"matched_anchors",
"negative_matches",
"graph_matches",
"evidence",
"rationale",
"warnings"
],
"properties": {
"decision": {
"type": "string",
"enum": [
"DIRECT_INHERENT",
"CONTEXTUAL_INHERENT",
"TANGENTIAL",
"NOT_RELATED"
]
},
"is_inherent": {
"type": "boolean",
"description": "Derived: true if DIRECT_INHERENT or CONTEXTUAL_INHERENT; false if TANGENTIAL or NOT_RELATED"
},
"confidence": {
"type": "number",
"minimum": 0.0,
"maximum": 1.0,
"description": "Normalized confidence score of the classification"
},
"detected_language": {
"type": "string",
"description": "Detected ISO-639-1 code (pt, en, es, de, it, fr, etc.)"
},
"matched_anchors": {
"type": "array",
"items": { "type": "string" },
"description": "Entity aliases and direct anchors identified in text"
},
"negative_matches": {
"type": "array",
"items": { "type": "string" },
"description": "Negative anchors found in text"
},
"graph_matches": {
"type": "array",
"items": {
"type": "object",
"properties": {
"entity_id": { "type": "string" },
"name": { "type": "string" },
"relation_type": { "type": "string" },
"weight": { "type": "number" }
}
},
"description": "Related entities from snapshot matched in text"
},
"evidence": {
"type": "array",
"items": { "type": "string" },
"description": "Extracted textual snippets from Markdown justifying the decision"
},
"rationale": {
"type": "string",
"description": "Concise explanation of the classification verdict"
},
"warnings": {
"type": "array",
"items": { "type": "string" },
"description": "Non-fatal warnings encountered during processing"
}
}
}
```
### 2.2 Error Result Schema
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ClassificationError",
"type": "object",
"required": [
"error_code",
"message",
"details"
],
"properties": {
"error_code": {
"type": "string",
"enum": [
"invalid_ecp_json",
"invalid_markdown",
"unsupported_language",
"empty_content",
"missing_required_field"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object"
}
}
}
```
@@ -0,0 +1,128 @@
# Implementation Plan: Multilingual NLP Entity Inherence Classifier (POC)
**Branch**: `001-multilingual-entity-classifier` | **Date**: 2026-08-19 | **Spec**: [spec.md](./spec.md)
**Input**: Feature specification from `specs/001-multilingual-entity-classifier/spec.md`
---
## Summary
Implement a lightweight, standalone Python CLI tool (`classify.py`) that evaluates whether a Markdown document is inherent to a target entity defined by an Entity Context Profile (ECP Snapshot JSON). The architecture implements a Tier 1 deterministic matching engine for 6 core languages (PT, EN, ES, DE, IT, FR), with clean optional adapter hooks for Tier 2 (embeddings) and Tier 3 (LLM fallback), fully validated against a controlled 24-case benchmark suite.
---
## Technical Context
**Language/Version**: Python 3.10+ (standard library for Tier 1 core execution).
**Primary Dependencies**:
- Core: standard library (`json`, `re`, `argparse`, `pathlib`, `typing`).
- Testing & Validation (mandatory): `pytest>=7.0` (only required dependency in `requirements.txt`).
- Optional (Tier 2 / Tier 3 adapters): `sentence-transformers`, `httpx` / `openai` (strictly optional, disabled by default).
**Storage**: None (file-in / file-out via CLI, no database).
**Testing**: `pytest` running unit tests and the 24-case controlled benchmark suite (`6 languages × 4 decision types`) via `tests/test_benchmark_24.py`.
**Target Platform**: Cross-platform (Windows / Linux / macOS).
**Project Type**: Standalone CLI script & modular core library (`classify.py` + `src/`).
**Performance Goals**: < 200ms execution time for Tier 1 deterministic evaluation on documents < 2,000 words.
**Constraints**:
- Zero mandatory external network calls or cloud API keys required to execute the POC or pass tests.
- Zero server/API dependencies (no FastAPI, no workers, no queues).
- Decoupled from live graph databases (consumes pre-materialized ECP JSON snapshots).
**Scale/Scope**: POC scope with minimum 24 explicit benchmark test fixtures.
---
## Constitution Check
*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.*
| Principle / Gate | Status | Notes |
|---|---|---|
| **I. Library / Script First** | **PASS** | Standalone Python module structure, easily importable and script-callable. |
| **II. CLI Interface** | **PASS** | Clean standard CLI: `python classify.py --ecp <json> --content <md> --output <json>`, supports file paths and stdout output. |
| **III. Test-First (TDD)** | **PASS** | 24-case controlled benchmark matrix defined before code implementation. |
| **IV. Simplicity & YAGNI** | **PASS** | No premature REST API, no DB, no worker queues, no heavy frameworks. |
---
## Project Structure
### Documentation (this feature)
```text
specs/001-multilingual-entity-classifier/
├── spec.md # Feature specification
├── plan.md # Implementation plan (this file)
├── research.md # Technical research & decisions
├── data-model.md # Schemas & data contracts
├── quickstart.md # Validation & usage guide
├── checklists/
│ └── requirements.md # Quality checklist
├── contracts/
│ └── cli-contract.md # CLI input/output contract
└── tasks.md # Implementation tasks (/speckit-tasks command)
```
### Source Code (repository root)
```text
classify.py # Main CLI entrypoint script
src/
├── __init__.py
├── models.py # Dataclasses & schema validators (ECPSnapshot, Result, Error)
├── language.py # Lightweight multilingual detector & normalizer (6 languages)
├── parser.py # Markdown content parser & excerpt extractor
├── classifier.py # Core classification engine & decision logic (Tier 1 core)
└── adapters/
├── __init__.py
├── base.py # Base abstract adapter interfaces
├── embeddings.py # Optional Tier 2 embeddings adapter (disabled by default)
└── llm.py # Optional Tier 3 LLM fallback adapter (disabled by default)
examples/
├── ecp_petrobras.json # Example ECP Snapshot (PT)
├── ecp_volkswagen.json # Example ECP Snapshot (DE)
├── ecp_apple.json # Example ECP Snapshot (ES/EN)
├── content_presal_pt.md # Example Markdown Content (PT)
├── content_northvolt_de.md # Example Markdown Content (DE)
└── content_tangential_es.md # Example Markdown Content (ES)
tests/
├── __init__.py
├── test_cli.py # CLI argument parsing, flags, file I/O, stdout emission, exit codes
├── test_models.py # ECP snapshot parsing and structured error handling
├── test_language.py # Language detection and text normalization tests
├── test_classifier.py # Unit tests for decision rules (DIRECT, CONTEXTUAL, TANGENTIAL, NOT_RELATED)
├── test_benchmark_24.py # Controlled 24-case benchmark runner (6 languages x 4 decisions)
└── fixtures/
└── benchmark_24/ # 24 paired test cases (ecp_*.json + content_*.md + expected_*.json)
├── pt/
├── en/
├── es/
├── de/
├── it/
└── fr/
```
**Structure Decision**: Single modular project with root CLI `classify.py` and clear separation of models, language normalization, deterministic classification, and optional adapter stubs under `src/`.
---
## Complexity Tracking
> No constitution violations detected. Design enforces absolute simplicity and strict POC constraints.
| Component | Choice | Simpler Alternative Rejected Because |
|---|---|---|
| CLI vs REST API | Standalone CLI | REST API adds unnecessary network latency, FastAPI dependencies, and server management for a POC. |
| Deterministic Core vs Pure LLM | Deterministic Tier 1 Core | Pure LLM is expensive, non-deterministic, slow, and requires mandatory external API keys. |
| In-Memory Snapshot vs Live Graph Query | Materialized JSON Snapshot | Live Neo4j queries couple classifier runtime to external infrastructure and break test reproducibility. |

Some files were not shown because too many files have changed in this diff Show More