Link-check audit: Profile vs Person resolution
Date: 2026-06-04
File checked: docs/products/model/architecture.md
Section: ## Profile vs Person resolution
Command:
npx --yes markdown-link-check docs/products/model/architecture.md
Raw output
FILE: docs/products/model/architecture.md
[✖] https://github.com/credinvest/cred-dbt/blob/main/docs/identity/README.md
[✖] https://github.com/credinvest/cred-agent-rules/blob/main/rules/0017-profile-person-resolution.md
[✓] https://linear.app/credplatform/issue/COM-37175
[✖] ../../audits/profile-person-resolution-link-check.md
4 links checked.
ERROR: 3 dead links found!
[✖] https://github.com/credinvest/cred-dbt/blob/main/docs/identity/README.md → Status: 404
[✖] https://github.com/credinvest/cred-agent-rules/blob/main/rules/0017-profile-person-resolution.md → Status: 404
[✖] ../../audits/profile-person-resolution-link-check.md → Status: 400
Analysis
| Link | Result | Reason |
|---|---|---|
cred-dbt/docs/identity/README.md |
404 | Dead target — the file does not exist in credinvest/cred-dbt (authenticated gh api contents call also returns 404). The earlier note blaming private-repo auth was wrong. Corrected on 2026-11-02 — see Re-check 2026-11-02. |
cred-agent-rules/rules/0017-profile-person-resolution.md |
404 | Dead target — the file does not exist in credinvest/cred-agent-rules; rule 0017 lives at rules/0017-profile-vs-person.md. The earlier note blaming private-repo auth was wrong. Corrected on 2026-11-02. |
COM-37175 (Linear) |
✓ live | Confirmed reachable. |
../../audits/profile-person-resolution-link-check.md |
400 | Bootstrap order — this file did not exist when the first check ran. A second check (after this file is committed) resolves this. See below. |
Re-check (after audit file exists)
npx --yes markdown-link-check docs/products/model/architecture.md
Actual output (second run, after this file was created):
FILE: docs/products/model/architecture.md
[✖] https://github.com/credinvest/cred-dbt/blob/main/docs/identity/README.md
[✖] https://github.com/credinvest/cred-agent-rules/blob/main/rules/0017-profile-person-resolution.md
[✓] https://linear.app/credplatform/issue/COM-37175
[✓] ../../audits/profile-person-resolution-link-check.md
4 links checked.
ERROR: 2 dead links found!
[✖] https://github.com/credinvest/cred-dbt/blob/main/docs/identity/README.md → Status: 404
[✖] https://github.com/credinvest/cred-agent-rules/blob/main/rules/0017-profile-person-resolution.md → Status: 404
The relative link (../../audits/profile-person-resolution-link-check.md) now resolves ✓.
The two remaining failures were recorded at the time as "expected without auth". That was wrong: both targets did not exist (see Re-check 2026-11-02).
Manual fallback verification for private-repo links
Superseded
The paths below were dead targets, not auth failures. See Re-check 2026-11-02 for the corrected, verified paths.
The GitHub links cannot be verified by an unauthenticated link checker. A reviewer with repository access should confirm each path manually:
- cred-dbt identity models
- Repo:
credinvest/cred-dbt - Expected path:
docs/identity/README.md -
If the path differs, update
docs/products/model/architecture.mdto point to the correct file. -
cred-agent-rules rule 0017
- Repo:
credinvest/cred-agent-rules - Expected path:
rules/0017-profile-person-resolution.md - If DOC-2 (fan-out release) has been marked complete, the rule link should be updated to the published/released location.
Anchor check (pre-edit)
Command run before editing architecture.md:
rg -n "^#+ .*Profile|^#+ .*Person|^#+ .*identity" docs/products/model/architecture.md
Output: (no matches) — no existing Profile, Person, or identity headings were present. No duplicate anchor was created.
Re-check 2026-11-02 (corrected links)
Correction: the 404s recorded in the 2026-06-04 run above were dead targets, not private-repo auth failures. An authenticated gh api contents call returns 404 for both old paths, and gh api "repos/credinvest/<repo>/commits?path=<path>" returns no commits, so neither file has ever existed on main:
| Old (dead) link | Authenticated check |
|---|---|
credinvest/cred-dbt → docs/identity/README.md |
gh: Not Found (HTTP 404) |
credinvest/cred-agent-rules → rules/0017-profile-person-resolution.md |
gh: Not Found (HTTP 404) |
The ### Canonical sources table in docs/products/model/architecture.md now links:
| Source | Link |
|---|---|
| cred-dbt canonical architecture doc | https://github.com/credinvest/cred-dbt/blob/main/docs/architecture/person-profile-resolution.md |
| Agent rule 0017 | https://github.com/credinvest/cred-agent-rules/blob/main/rules/0017-profile-vs-person.md |
| Cleanup decision record (parity audit) | https://github.com/credinvest/cred-dbt/blob/main/docs/audits/profile-person-resolution-parity.md |
| Linear ticket | https://linear.app/credplatform/issue/COM-37175 |
Command:
npx --yes markdown-link-check docs/products/model/architecture.md
Output:
FILE: docs/products/model/architecture.md
[✖] https://github.com/credinvest/cred-dbt/blob/main/docs/architecture/person-profile-resolution.md
[✖] https://github.com/credinvest/cred-agent-rules/blob/main/rules/0017-profile-vs-person.md
[✖] https://github.com/credinvest/cred-dbt/blob/main/docs/audits/profile-person-resolution-parity.md
[✓] https://linear.app/credplatform/issue/COM-37175
[✓] ../../audits/profile-person-resolution-link-check.md
5 links checked.
ERROR: 3 dead links found!
[✖] https://github.com/credinvest/cred-dbt/blob/main/docs/architecture/person-profile-resolution.md → Status: 404
[✖] https://github.com/credinvest/cred-agent-rules/blob/main/rules/0017-profile-vs-person.md → Status: 404
[✖] https://github.com/credinvest/cred-dbt/blob/main/docs/audits/profile-person-resolution-parity.md → Status: 404
These three 404s come from the unauthenticated checker. Both repos are private (gh api repos/credinvest/cred-dbt --jq .private → true, same for cred-agent-rules). Unlike the 2026-06-04 run, the authenticated manual check below confirms each target exists.
Manual verification (authenticated gh api contents calls):
$ gh api repos/credinvest/cred-dbt/contents/docs/architecture/person-profile-resolution.md --jq .path
docs/architecture/person-profile-resolution.md
$ gh api repos/credinvest/cred-agent-rules/contents/rules/0017-profile-vs-person.md --jq .path
rules/0017-profile-vs-person.md
$ gh api repos/credinvest/cred-dbt/contents/docs/audits/profile-person-resolution-parity.md --jq .path
docs/audits/profile-person-resolution-parity.md
| Link | Result |
|---|---|
cred-dbt/docs/architecture/person-profile-resolution.md |
✓ exists (verified via gh api) |
cred-agent-rules/rules/0017-profile-vs-person.md |
✓ exists (verified via gh api) |
cred-dbt/docs/audits/profile-person-resolution-parity.md |
✓ exists (verified via gh api) |
COM-37175 (Linear) |
✓ live |
../../audits/profile-person-resolution-link-check.md |
✓ resolves |
Anchor check: rg -n "^#+ .*Profile|^#+ .*Person|^#+ .*identity" docs/products/model/architecture.md → only 47:## Profile vs Person resolution. The section was edited in place and no duplicate heading was added.
Tree listing cross-check (2026-11-02)
Checked with an authenticated gh api repos/credinvest/<repo>/git/trees/main?recursive=1 listing:
Path on main |
Exists |
|---|---|
cred-dbt/docs/identity/README.md |
✖ no |
cred-dbt/docs/person-resolution.md |
✖ no |
cred-dbt/docs/architecture/person-profile-resolution.md |
✓ yes |
cred-agent-rules/rules/0017-profile-person-resolution.md |
✖ no |
cred-agent-rules/rules/0017-profile-vs-person.md |
✓ yes |
architecture.md links the two paths that exist (plus the parity audit verified above). The cred-model playbook
(docs/agent/playbooks/profile-person-resolution.md, credinvest/cred-model#4581) uses the same two paths.