Skip to content
Draft
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .claude/scripts/product-value-contract.test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,20 @@ grep -Fq ' - changes' "${workflow}" ||
grep -Fq '${{ needs.changes.result }}' "${workflow}" ||
fail "required aggregate does not evaluate path-detection failures"

# Monorepo product-card label allowlist (#2260) — must match live taxonomy names.
labels_line="$(grep -E '^\- \*\*Labels\*\*' "${site_card}" || true)"
[[ -n "${labels_line}" ]] || fail "site card missing Labels allowlist line"
grep -Fq '`github_actions`' <<<"${labels_line}" ||
fail "site card Labels allowlist missing live github_actions (#2260)"
grep -Fq '`roadmap`' <<<"${labels_line}" ||
fail "site card Labels allowlist missing live roadmap (#2260)"
Comment on lines +146 to +149

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Validate every allowed label against the taxonomy

When a future edit adds any other nonexistent or misspelled label, this test still passes because it only requires two labels and rejects two specific retired names; for example, adding github-action leaves every assertion green even though agents will silently fail to apply it. Parse every backticked label and compare the complete set with the expected or live taxonomy so the new subset invariant is actually enforced.

AGENTS.md reference: AGENTS.md:L2413-L2418

Useful? React with 👍 / 👎.

if grep -Eq '`ci`' <<<"${labels_line}"; then
fail "site card Labels allowlist still lists nonexistent ci (#2260)"
fi
if grep -Fq '`agentic-workflows`' <<<"${labels_line}"; then
fail "site card Labels allowlist still lists nonexistent agentic-workflows (#2260)"
fi

# Egress mention neutralisation (#2312) — bots parse raw text; backticks do not inert a mention.
grep -Fq 'No Markdown construct hides a mention from a bot' "${contract}" ||
fail "Egress does not state that Markdown cannot hide mentions from bots (#2312)"
Expand Down
6 changes: 5 additions & 1 deletion .claude/skills/products/monorepo/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@ material refreshes. Validate with the `docs` build before any PR.
- **Branch** `claude/<area>-<desc>-<issue>` (the issue number makes a pre-PR claim matchable — see the contract's *Claim protocol*; issue-less hotfixes and trivial obvious fixes keep plain `claude/<area>-<desc>`). Submodule pointers often show as modified — **expected, not yours**; detect real dirtiness with `git status --porcelain --ignore-submodules=all`; never stage pointer bumps; never `git submodule update --remote`.
- **Validate:** before any `docs/` PR, `[ -d docs/node_modules ] || (cd docs && npm ci)` then `cd docs && npm run build` (use `npm --prefix docs …`). Workflows → `actionlint`. Never edit auto-generated files / `*.lock.yml`.
- **Agent/review files:** `AGENTS.md` is the **single canonical** instruction file — what humans, agents, and **Copilot code review** all read ([since 2026-06-18](https://github.blog/changelog/2026-06-18-copilot-code-review-agents-md-support-and-ui-improvements/)); there is no separate `.github/copilot-instructions.md` (retired portfolio-wide). Keep `AGENTS.md`, the `.claude/` skills/cards, and any path-scoped `.github/instructions/` files from drifting apart (see `product-engineering` §7).
- **Labels** (apply only from this set): `automation`, `documentation`, `ci`, `dependencies`, `submodules`, `bug`, `enhancement`, `question`, `duplicate`, `wontfix`, `needs triage`, `needs investigation`, `performance`, `refactor`, `security`, `repo-assist`, `agentic-workflows`, `good first issue`, `help wanted`, `spam`, `blocked`, `next`.
- **Labels** (apply only from this set): `automation`, `documentation`, `github_actions`, `dependencies`, `submodules`, `bug`, `enhancement`, `question`, `duplicate`, `wontfix`, `needs triage`, `needs investigation`, `performance`, `refactor`, `security`, `repo-assist`, `roadmap`, `good first issue`, `help wanted`, `spam`, `blocked`, `next`.
Live taxonomy is the verification source (`gh label list -R devantler-tech/monorepo`); the allowlist
above must stay a subset of it — never invent label names. Contract self-test:
`.claude/scripts/product-value-contract.test.sh` pins `github_actions` present and rejects the
retired `ci` / `agentic-workflows` entries.

## Task menu (1–3 highest-value; Content Review gated to Mondays; Blog Stewardship low priority)
- **A. CI Doctor:** `gh run list --repo devantler-tech/monorepo --status failure --limit 20 ...` (active workflows **CI** + **Publish - Pages**; ignore removed gh-aw workflows & Dependabot's submodule-update job). Dedupe vs native memory's CI-investigation cache (`caches.md`). `gh run view <id> --log-failed` (untrusted); root-cause (bad MDX/frontmatter, broken imports, `npm ci` lockfile desync, Node/Sharp, dead submodule ref, broken YAML). Failure on an open PR → one root-cause comment (+ draft fix if confident); else record it in native memory (`caches.md`). Prune cache >7d.
Expand Down
Loading