Skip to content

feat: add --linkouts/-lo to build-kg for EdgeLinkouts edge deep links - #216

Merged
SkyeAv merged 1 commit into
mainfrom
feat/edge-linkouts
Oct 14, 2026
Merged

SkyeAv merged 1 commit into
mainfrom
feat/edge-linkouts

Conversation

@SkyeAv

@SkyeAv SkyeAv commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Adds an opt-in --linkouts/-lo flag on build-kg that appends DAKP's EdgeLinkouts record URL template to the graph's own infores entry on every emitted edge, so linkouts.skyelanegoetz.com can deep-link each edge without hand-authoring provenance.override.sources.

Flag wiring

  • CLI: --linkouts, -lo on build-kg (src/tablassert/cli.py), threaded build_kg -> build_pipeline -> build_graph_pipeline -> the Tcode dict, the same path --head/--release/--qc take.
  • Emission: EDGE_LINKOUT_URL_TEMPLATE = "https://linkouts.skyelanegoetz.com/edges/{edge_id}" (src/tablassert/lib.py) is appended to the primary sources entry (resource_id = rig.source_info.infores_id) after the section's declared source.url values.
  • Resolution: {edge_id} rides the op list unresolved and is substituted per-edge by the existing post-dedup sweep (_resolve_edge_id_placeholders), so no new resolution code and no id-ordering hazard.

Semantics and safety

  • Override stays author-controlled: sections declaring provenance.override (any form) are never touched; DAKP hand-writes the same template into override.sources, and an injected second URL would duplicate it.
  • Default off is inert: without the flag the op list is unchanged (pinned by test_tcode_collect_omits_edge_linkout_by_default).
  • Cache isolation: --linkouts builds cache under their own .linkouts store suffix so a cached full build can never quick-exit a linkouts build (or vice versa), matching the .head/.release/.qc contract.
  • RIG unaffected: sources is a CORE_EDGE_FIELD, so the RIG's per-edge-type summaries don't change.

Docs

  • docs/cli.md: --linkouts, -lo row in the build-kg flag table (docs-coverage gated).

Testing

  • uv run pytest tests/test_lib.py -q -k 'linkout or store_path' -> 4 passed
  • uv run pytest tests/test_e2e_smoke.py -q -> 8 passed, including the new real-redb smoke asserting every edge's primary entry is ["https://example.com/data.tsv", "https://linkouts.skyelanegoetz.com/edges/<its own id>"] with no {edge_id} placeholder left in the file
  • uv run pytest tests/test_cli_help_friendly.py tests/test_docs_cli_coverage.py tests/test_docs_source_of_truth.py -q -> 216 passed
  • make check: exit 0 (ruff, ruff format, pyright, pytest 1730 passed, 52 skipped pre-existing environmental skips, cargo test, clippy -D warnings)

Deferred

  • network-marked corpus sweeps were not run; the gate suite stayed offline, same as prior PRs.

…eep links

The flag appends https://linkouts.skyelanegoetz.com/edges/{edge_id} to the
graph-infores primary sources entry of every emitted edge; the existing
post-dedup sweep resolves {edge_id} to each edge's final id, so the
linkouts.skyelanegoetz.com EdgeLinkouts app can deep-link every edge the way
DAKP's hand-authored override.sources does. Sections declaring
provenance.override stay author-controlled, default-off emission is
unchanged, and the mode caches under its own .linkouts store suffix.
@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c1604e99-6a77-4171-b035-9bb6c0262c99
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@SkyeAv SkyeAv changed the title feat/edge linkouts feat: add --linkouts/-lo to build-kg for EdgeLinkouts edge deep links Oct 14, 2026
@SkyeAv
SkyeAv merged commit a40afff into main Oct 14, 2026
5 checks passed
SkyeAv added a commit that referenced this pull request Oct 14, 2026
Cut 20.0.0 and bump the package version in pyproject.toml, CITATION.cff,
and uv.lock.

Major: two breaking changes and one feature ship since 19.7.0. The
experimental agent pipeline, the GEPA prompt-optimization surface, and
the distillation dataset export/weigh surface are removed, including
the `tablassert agent` / `distill-export` / `distill-weigh` commands,
the `--optimize` flag family, the `[agent]`/`[optimize]`/`[distill]`
extras, and the agent-only error codes (#215). The QC embedding stage
now runs RenaissanceComputing's Babel-fine-tuned SapBERT checkpoint
with its own `.tablassert/sapbert-babel/` cache dir (#214). `build-kg`
gains the opt-in `--linkouts`/`-lo` flag for EdgeLinkouts edge deep
links (#216).

Changelog:
- Versioned the 20.0.0 section with Breaking Changes and Added entries,
  PR links, and a migration note for the removed surfaces.

Docs: CHANGELOG.md, CITATION.cff, and pyproject.toml only; the merged
PRs carried their own docs updates.

Testing:
- make check -> exit 0 (ruff check, ruff format --check, pyright,
  cargo fmt, cargo test, clippy -D warnings)
- uv run pytest -> 1209 passed, 1 skipped in 21.28s
- uv lock --check -> resolved, in sync
- docs guards -> 192 passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant