fix: vendor per-kind sites in the hub; drop stale blog docs

- collect.py: when a kind points at the shared site root, copy only the
  per-kind subdir (site/lib -> <repo>/lib) instead of the whole site, so
  stray single-site build output never leaks into the hub
- Purge stale collected artifacts (404.html, assets/, search/, sitemaps,
  objects.inv, duplicate mcp/) from every repo dir, matching the cleaned
  source site/ roots
- Refresh collected output from source repos, incl. the khata-app app
- Remove the vendored Blog API docs (config.yml entry + blog/) and its card
This commit is contained in:
2026-10-11 23:12:19 +05:30
parent 74aaf2f53e
commit c5619bc5e8
526 changed files with 10 additions and 104714 deletions

View File

@@ -1,116 +0,0 @@
{
"module": "hexa.check_matches",
"content": {
"path": "hexa.check_matches",
"docstring": "Verify that two hexa representations agree.",
"objects": {
"annotations": {
"name": "annotations",
"kind": "alias",
"path": "hexa.check_matches.annotations",
"signature": "<bound method Alias.signature of Alias('annotations', '__future__.annotations')>",
"docstring": null
},
"Path": {
"name": "Path",
"kind": "alias",
"path": "hexa.check_matches.Path",
"signature": "<bound method Alias.signature of Alias('Path', 'pathlib.Path')>",
"docstring": null
},
"PortNode": {
"name": "PortNode",
"kind": "class",
"path": "hexa.check_matches.PortNode",
"signature": "<bound method Alias.signature of Alias('PortNode', 'hexa.model.PortNode')>",
"docstring": "A node in the hexa port tree.\n\nParameters\n----------\nname : str\n Slot name, e.g. ``\"parser\"``, ``\"amount_balance\"``.\nkind : str\n One of ``\"leaf\"``, ``\"port\"``, or ``\"parent\"``.\n - ``\"leaf\"``: no children (e.g. ``NumberPort``)\n - ``\"port\"``: has children (e.g. ``TransactionParserPort``)\n - ``\"parent\"``: the root of the tree (e.g. ``ExtractionPipeline``)\nport_cls : str\n ABC class name that gives this port its shape, e.g.\n ``\"TransactionParserPort\"``. Every port has a concrete typed shape.\nattributes : dict[str, ConfigValue]\n Annotated attributes: ``name -> type_expr`` for scalars, or a nested\n ``dict`` of sub-attributes (a struct) for grouped/structured values.\nchildren : list[PortNode]\n Nested port slots.\nmethods : dict[str, MethodSpec]\n Abstract methods keyed by method name.",
"members": {
"name": {
"name": "name",
"kind": "attribute",
"path": "hexa.check_matches.PortNode.name",
"signature": "<bound method Alias.signature of Alias('name', 'hexa.model.PortNode.name')>",
"docstring": null
},
"port_cls": {
"name": "port_cls",
"kind": "attribute",
"path": "hexa.check_matches.PortNode.port_cls",
"signature": "<bound method Alias.signature of Alias('port_cls', 'hexa.model.PortNode.port_cls')>",
"docstring": null
},
"kind": {
"name": "kind",
"kind": "attribute",
"path": "hexa.check_matches.PortNode.kind",
"signature": "<bound method Alias.signature of Alias('kind', 'hexa.model.PortNode.kind')>",
"docstring": null
},
"attributes": {
"name": "attributes",
"kind": "attribute",
"path": "hexa.check_matches.PortNode.attributes",
"signature": "<bound method Alias.signature of Alias('attributes', 'hexa.model.PortNode.attributes')>",
"docstring": null
},
"children": {
"name": "children",
"kind": "attribute",
"path": "hexa.check_matches.PortNode.children",
"signature": "<bound method Alias.signature of Alias('children', 'hexa.model.PortNode.children')>",
"docstring": null
},
"methods": {
"name": "methods",
"kind": "attribute",
"path": "hexa.check_matches.PortNode.methods",
"signature": "<bound method Alias.signature of Alias('methods', 'hexa.model.PortNode.methods')>",
"docstring": null
},
"find": {
"name": "find",
"kind": "function",
"path": "hexa.check_matches.PortNode.find",
"signature": "<bound method Alias.signature of Alias('find', 'hexa.model.PortNode.find')>",
"docstring": "Find a direct child by slot name."
},
"walk": {
"name": "walk",
"kind": "function",
"path": "hexa.check_matches.PortNode.walk",
"signature": "<bound method Alias.signature of Alias('walk', 'hexa.model.PortNode.walk')>",
"docstring": "Return all nodes in depth-first order (self first)."
},
"diff": {
"name": "diff",
"kind": "function",
"path": "hexa.check_matches.PortNode.diff",
"signature": "<bound method Alias.signature of Alias('diff', 'hexa.model.PortNode.diff')>",
"docstring": "Return a list of human-readable difference strings.\n\nAn empty list means the trees are equal."
}
}
},
"parse_abc": {
"name": "parse_abc",
"kind": "function",
"path": "hexa.check_matches.parse_abc",
"signature": "<bound method Alias.signature of Alias('parse_abc', 'hexa.parse_abc.parse_abc')>",
"docstring": "Parse an ABC Python module into a :class:`PortNode` tree.\n\nABC classes become port nodes. A nested-struct attribute is expressed as a\n``@dataclass`` annotation on an ABC port (e.g. ``source: ExtractionSource``\nwhere ``ExtractionSource`` is a ``@dataclass``); the dataclass's fields are\nexpanded into a nested ``attributes`` entry.\n\nParameters\n----------\nmodule_or_path : str | Path | Any\n A file path to a ``.py`` file, a module import string, or a loaded module.\n\nReturns\n-------\nPortNode\n The root node of the tree."
},
"parse_yaml": {
"name": "parse_yaml",
"kind": "function",
"path": "hexa.check_matches.parse_yaml",
"signature": "<bound method Alias.signature of Alias('parse_yaml', 'hexa.parse_yaml.parse_yaml')>",
"docstring": "Parse a hexa YAML spec file into a :class:`PortNode` tree.\n\nParameters\n----------\npath : str | Path\n Path to the ``.yaml`` file.\n\nReturns\n-------\nPortNode\n The root node of the parsed tree.\n\nRaises\n------\nValueError\n On structural errors in the YAML."
},
"check_matches": {
"name": "check_matches",
"kind": "function",
"path": "hexa.check_matches.check_matches",
"signature": "<bound method Function.signature of Function('check_matches', 12, 33)>",
"docstring": "Verify two representations agree.\n\nParameters\n----------\npath_a : str | Path\n Path to a .yaml or .py file.\npath_b : str | Path\n Path to a .yaml or .py file.\n\nReturns\n-------\nbool | list[str]\n True if they match exactly, otherwise a list of difference strings."
}
}
}
}