Skip to content

fix(framework): the orthogonality guard's two generous table shapes #884

Closed

Description

@blafourcade

Two limits the guard from #250 ships with, both measured and neither reachable from the tree as it stands. Recorded so the next person meets them in a document rather than in a refusal.

A separator-less run below the router is read as part of it

scripts/lib/architecture-rules.js, citationsIn. A run of table rows with no | --- | beneath it is treated as the table above it resumed after a blank line. That exists so a purely cosmetic edit — one blank line inside a router table — does not refuse every row below it. The cost: a glossary written without a separator, immediately under the router, donates its cells as citations, so a deleted row can hide behind it.

## Actions

| Action | When |
| --- | --- |
| 01-keep | a |

| role | the caller |
| scope | the ask |

02-role.md's missing row passes. A column-count check does not discriminate the two shapes — a glossary often has the router's width. Neither shape is a table any renderer accepts.

Rule one reads addresses through fences, rule two does not

findAddresses runs on the raw content, so a governed file teaching a counter-example inside a fenced block is refused:

plugins/aidd-dev/skills/99-x/references/teach.md:6 addresses sibling plugin "aidd-vcs" via "/aidd-vcs:01-commit"

22 fenced address lines exist under plugins/ today, all own-plugin or aidd-orchestrator, so none fires. Rule two blanks fences; rule one does not, and the asymmetry is stated in the spec rather than resolved.

A third, smaller one

plugins/aidd-context/skills/04-skill-generate/references/skill-authoring.md:17 (R8) says an Action cell is "the bare slug, no backticks and no number". Two action files sharing a stem — 01-plan.md and 04-plan.md both reduce to plan — can then only be cited in a form R8 forbids, because a shared stem deliberately cites nobody. No skill in the tree has such a collision. One sentence in R8 would close it.

Done when

  • A separator-less glossary under a router no longer donates citations, without reintroducing the blank-line false refusal.
  • Rule one and rule two agree about fences, or the asymmetry is deliberate and says why.
  • R8 says what to write when two actions share a stem.

Activity

  1. added theissue type on Sep 22, 2026
  2. added a commit that references this issue on Oct 12, 2026
    4140a53
  3. blafourcade commented on Oct 12, 2026

    @blafourcade
    ContributorAuthor

    Fixed by #1005.

    • Table rows with no separator under a router's Actions table now get one refusal at their first line and count as no citation, so a glossary there can no longer hide a deleted row.
    • Orthogonality still reads through fences, deliberately, because a fenced command is still one the model runs; the code says so and a test pins it.
    • R8 now says that two actions sharing a slug keep their number.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Priority

    Low

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions