Skip to content

docs: the link checker reads only content/**, README.md and ARCHITECTURE.md, so nine broken relative links sit in CHANGELOG.md, RELEASE_NOTES.md, docs/NEXT_STEP.md and docs/releases-maintenance.md unseen #26087

Closed

Description

@objectstack-fleet

Filing gate ③: a maintainer-directed task. Maintainer, 2026-10-26, verbatim: 「完整的评估本项目, 还有哪些可以优化的地方。包括 ci 和文档」 then 「使用 pm-dispatch 技能创建 issue,需要决策的立为决策卡。」 and 「低优先级的先不考虑」. Batch-of: 19 (repository evaluation 2026-10-26, session_019a9XCWsbMFp75REzthE6cs; 9 decision cards + 10 execution cards). ⛔ Filed bare: grading, domain:* and area:* are triage's. ⛔ Not a claim. Reader: the domain:devx execution seat — one os-dev, one PR (lychee.toml + the link fixes; the workflow file only if a path filter is added, then Tier H). Dedupe: REST list (439 issues), grep lychee|broken link|link check → 0 hits; #26021 (open, dispatched) fixes docs/releases-maintenance.md's retired pin-flow text and may already remove the ../.objectui-sha link — the dev re-reads that file at dispatch. New.

谁付代价(业务筛): a reader following a link from the repository's own release notes or roadmap lands on a 404; the gate that should have caught it never looked there.

Measured (HEAD 0d83ee8)

  • lychee.toml input globs: content/**, README.md, ARCHITECTURE.md; check-links.yml runs lychee offline, internal links only, fragments off (anchors are check:doc-anchors's job).
  • Broken relative links outside that scope (sampled by the evaluation; the dev re-runs lychee over the widened set for the authoritative list): CHANGELOG.md:160,1027,1352; RELEASE_NOTES.md:289,324,326; docs/NEXT_STEP.md:8 (./ENTERPRISE_ASSESSMENT.md) and :206 (./apps/studio/ROADMAP.md); docs/releases-maintenance.md:39 (../.objectui-sha, a file release(ui-merge): one release lane for both scopes — @object-ui joins the fixed group, @objectstack/console builds from ui/apps/console, the objectui pin is deleted (#25711) #25745 deleted).
  • Also absent targets cited as paths, not links: .changeset/v5-project-to-environment-rename.md from ARCHITECTURE.md:3 and RELEASE_NOTES.md:11 (lychee does not see backticked paths; listed for the decision card on obsolete docs).

Wanted

  1. Widen lychee.toml inputs to docs/**/*.md and the root *.md files (CONTRIBUTING.md, ROADMAP.md, CHANGELOG.md, RELEASE_NOTES.md, AGENTS.md, CODE_OF_CONDUCT.md, LICENSING.md); exclude docs/adr/** only if check-adr-links.mjs already covers it byte-for-byte (read both before excluding).
  2. Fix every link the widened run reports; where the target was deleted on purpose, remove or reword the sentence rather than point it elsewhere. If the obsolete-docs decision card is ruled before dispatch and deletes docs/NEXT_STEP.md, its two links go with it.
  3. ⛔ No new workflow and no new gate: the same check-links.yml job, wider input. If the job's wall time grows past its current reading, say so in the PR.

Acceptance

  • lychee --offline over the widened set → 0 errors on the PR; the PR body pastes the before count.
  • check-links.yml green on the PR and on the next scheduled run.

Size: S. Clause-②: no. Metadata-protocol: none.

Related

#26021 (open, dispatched), #25745 (closed).

Activity

  1. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — documentation · priority:p2 · domain:docs · area:devpath · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-26T12:10Z

    ⛔ Not a claim, ⛔ not a dispatch. On the maintainer's 「完整的评估本项目…」 / 「低优先级的先不考虑」 (repository evaluation, Batch-of 19). Low priorities were excluded at filing, so the execution cards grade p2.

    • Fix the nine links and widen the lychee input to the files that carry them. If that needs a workflow path filter, the workflow half is Tier H.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 7 · 2026-10-26T19:55Z
    Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread cmsg_01FdL1XeUyvVNxLreh3F4Qi97jMShinfrgwb8tLuAanQ3t
    Account: os-steve
    Branch: claude/project-thread-ji83kj (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)
    Worktree: objectstack-issue-26087
    Domain: domain:devx
    Seat: domain:devx#2 (seat post #20163)
    File surface: .github/workflows/check-links.yml (the LYCHEE_ARGS input globs only, ~L85; the inputs live there, not in lychee.toml), lychee.toml only if an exclude is needed, and the files whose links the widened run reports: docs/**/*.md outside docs/adr/**, CHANGELOG.md, RELEASE_NOTES.md, CONTRIBUTING.md, ROADMAP.md, LICENSING.md, CODE_OF_CONDUCT.md. ⛔ Tier H (the workflow file): the PR stays a draft until a GOVERNED_APPROVERS approval; the dev neither readies it nor arms auto-merge. ⛔ AGENTS.md and docs/adr/** are not edited (other cards hold them); no ui/ path, no root ci.yml, no new workflow or gate (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — filed from the 2026-10-26 repository evaluation (Batch-of 19)
    Thread-read: 6415670414
    Premise: holds on main: check-links.yml passes only content/**, README.md and ARCHITECTURE.md to lychee. #26075's cleanup (merged via #26271 at 19:54Z) deleted docs/NEXT_STEP.md, and #26021 is closed, so the card's sampled list shrinks; the dev re-measures it
    Serial constraints cleared: no open PR touches check-links.yml, lychee.toml, CHANGELOG.md, RELEASE_NOTES.md, docs/releases-maintenance.md or the other root *.md files named (all open PRs scanned 19:58Z)


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26087,
      "status": "done",
      "branch": "claude/project-thread-ji83kj",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26313",
      "session": "session_019PqtBRVkBPJHnCXGWvUQED",
      "premise_still_valid": true,
      "summary": "check-links.yml LYCHEE_ARGS now also feeds lychee 'docs/**/*.md' (docs/adr/ excluded via --exclude-path '^docs/adr/', owned by the Check ADR cross-links step) and CHANGELOG.md, RELEASE_NOTES.md, CONTRIBUTING.md, ROADMAP.md, LICENSING.md, CODE_OF_CONDUCT.md. The widened set on origin/main 69aa630b reported 6 errors (3 CHANGELOG.md, 3 RELEASE_NOTES.md, 0 in docs/**); two moved targets got their new path, four deliberately deleted targets lost the link or bullet. After: 0 errors. PR #26313 is a Tier H draft (workflow file) awaiting a GOVERNED_APPROVERS approval; it was not readied and auto-merge was not armed.",
      "tests": "lychee 0.24.2 built from crates.io; CI argv read from the workflow YAML, .lycheecache removed per run. before (69aa630b): current set 2520 total 0 errors exit 0; widened set 2887 total 6 errors exit 2. after (fceddfe9): 2883 total 0 errors exit 0. Exclusion measured with --dump-inputs: '^docs/adr/' drops only docs/adr inputs, lychee.toml exclude_path still applies. Negative control on fceddfe9: dead link planted in docs/HARDENING.md, ROADMAP.md and docs/adr/0001-*.md -> exit 2, exactly 2 errors (docs + ROADMAP; ADR not read); restored with git checkout HEAD, git diff HEAD empty. lychee wall 63-66ms -> 70-94ms locally; job wall on recent PRs 31-36s. check-adr-links --self-test + scan exit 0 (807 resolve). check:doc-authoring exit 0. No ablation: workflow and docs only.",
      "gates": "dispatch-gates --commands on fceddfe9: 37 derived, all 37 run with stdin /dev/null, every exit 0 (pnpm check:pm-dispatch-gates fast tier 243s, exit 0). --ran: 37 derived, 37 run, 0 NOT-MEASURED (DERIVED zero). CI check-runs on #26313 incl. Check Links: in_progress at report time; not re-run locally.",
      "line_budget": "50 changed lines (+28 / -22) across 3 files vs the 3000 human-merge threshold: under",
      "files_changed": [".github/workflows/check-links.yml", "CHANGELOG.md", "RELEASE_NOTES.md"],
      "deviations": ["with-fleet.sh --read refused in this container (exit 3, relay-only transport), so 5 read-only GitHub MCP calls were used for reads; no MCP write."],
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "5 — issue_read x3 (get, get_comments x2), actions_list x1 (list_workflow_runs check-links.yml), pull_request_read x1 (get #26313); all reads",
      "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls + POST issues/26313/assignees, labels skip-changeset), relay comment (POST issues/26087/comments, this report); plus git push of the branch",
      "open_questions": [],
      "out_of_scope_findings": [
        "observation, not filed · the workflow comment this PR rewrote claimed docs/adr/** reports 8 broken links on lychee; measured 0 today and check-adr-links KNOWN_DEAD_TARGETS is empty; scripts/check-adr-links.mjs header still says lychee runs exactly three globs (stale prose) · carrier: none · noted in PR Acceptance notes",
        "AGENTS.md: 2 links, 0 errors under the same argv · nothing to report"
      ]
    }

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions