Repository navigation
Add source-located graph link and citation references - #12
Conversation
agent-identity: mbp2025.direct.omp.mjwjfku9 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.2.11 agent-runtime: OMP 18.2.11 agent-model: openai-codex/gpt-5.6-sol tooling-profile: dotfiles@2df08b9-dirty
agent-identity: mbp2025.direct.omp.mjwjfku9 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.2.11 agent-runtime: OMP 18.2.11 agent-model: openai-codex/gpt-5.6-sol tooling-profile: dotfiles@2df08b9-dirty
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7c3044cdf1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if digit_count > 0 | ||
| && (found == 0 || !is_word_byte(upper[found - 1])) | ||
| && upper.get(end).is_none_or(|byte| !is_word_byte(*byte)) | ||
| { | ||
| let written = &line[found..end]; | ||
| if let Some(normalized) = normalize_delta_ordinal(&line[digit_start..end]) { | ||
| occurrences.push(OrdinalOccurrence { |
There was a problem hiding this comment.
Exclude delta definitions from ordinal citations
When a delta record uses the documented heading form # DELTA-001: ..., this scan treats the heading as an ordinal_citation; resolution then finds the record itself and emits a spurious resolved reference. This affects every .delta/DELTA-* or 09-delta/DELTA-* document and inflates the reference graph with definitions masquerading as citations, unlike ID definitions, which are explicitly excluded. Skip the defining ordinal occurrence in its companion document.
Useful? React with 👍 / 👎.
| fn is_id_boundary_byte(byte: u8) -> bool { | ||
| byte.is_ascii_uppercase() || byte.is_ascii_digit() || byte == b'_' |
There was a problem hiding this comment.
Require full word boundaries around ID citations
For prose containing identifiers such as parserR01State or R01value, lowercase ASCII letters are not considered boundary-blocking characters, so the embedded R01 is emitted as a normative id_citation and usually reported as dangling. Treat all alphanumeric characters and underscores as word characters on both sides so only standalone A/T/R-style IDs become references.
Useful? React with 👍 / 👎.
Problem
axe.intent.graph.v0preserved file/ID nodes and resolved edges, but consumers could not inspect source-located Markdown-link or normative citation records. That kept link and ID checks on separate regex scanners and made dangling versus ambiguous targets unavailable through the graph contract.Goal
Emit additive
referencesrecords for explicitreq:traces, local Markdown links, A/T/R-style ID citations, and decision/delta ordinal citations. Every record must preserve its source location and written target, reportresolved,ambiguous, ordangling, and expose all mechanically resolved target locations.Decisions
nodesandedgesunchanged;referencesis additive under the existing v0 schema.syntaxvaluesreq_trace,markdown_link,id_citation, andordinal_citationrather than inferring a family from optional fields.requirements.mdor a resolved requirements link. Namespaced IDs resolve by exact normalized ID. This avoids guess-based cross-node edges.Verification
Dotfiles
context/parity smoke (cargo run --quiet -- graph <dotfiles>/context --json):Comparison with the existing scanners:
req:targets as plain citations. Its 324 unique dangling IDs exceed the audit's 203 globally undefined IDs because unqualified cross-scope IDs intentionally remain dangling; 58 cited IDs are ambiguous versus 84 duplicate-defined IDs, since uncited duplicates do not create reference records.req:examples remain visible asreq_tracerecords.Complexity
The new parser/resolver module centralizes source indexing, repository-relative path normalization, definition/companion indexes, and family-specific resolution. Those pieces are shared across every reference family; no new runtime dependency was added.
Concerns
The Markdown extractor intentionally follows the corpus's existing inline-link grammar so its migration surface stays comparable to
vrs-link-check. It can therefore retain the same regex-shaped false positives until the corpus or grammar is tightened.Friction & bottlenecks
ccselected GCC on macOS and could not link-liconv; the successful test run selected Xcode clang explicitly.Follow-ups
None.
References
schickling/dotfiles/context/vrs/16-enforcement/spec.mdvrs-link-check,vrs-id-check, andrequirement-id-auditPosted on behalf of @schickling
agent_identitysessionagent_personaagent_supervisoragent_toolagent_tool_versionagent_runtimeagent_modelworktreetooling_profile