Skip to content

feat(skillgen): support monorepo packages and polish the opt-in page - #462

Merged
harlan-zw merged 1 commit into
mainfrom
feat/skillgen-monorepos
Oct 6, 2026
Merged

harlan-zw merged 1 commit into
mainfrom
feat/skillgen-monorepos

Conversation

@harlan-zw

Copy link
Copy Markdown
Collaborator

🔗 Linked issue

Related to #450

❓ Type of change

  • 📖 Documentation
  • 🐞 Bug fix
  • 👌 Enhancement
  • ✨ New feature
  • 🧹 Chore
  • ⚠️ Breaking change

📚 Description

Harlan's Skillgen account page refused most of his repositories. They are monorepos: the root package.json is private or names the monorepo, and the published package keeps its Skill under packages/<name>/skills/. He also asked for a cleaner page and a way to turn every repository on at once.

Architecture: the account page and the skill-harness Worker share one package rule

  • One package rule. workers/skill-harness/src/package-skills.ts finds every package with a Skill. A package sits at the root or under packages/<name>/, has a public named package.json, and keeps its Skill in skills/<dir>/SKILL.md beside it. The Worker uses the rule to prepare a tag, and the account page imports it to check eligibility. Skills deeper in a package, such as test fixtures, are ignored.
  • Tags. A tag matches a package version as 1.2.3, v1.2.3 or name@1.2.3. If one tag matches several packages, the job splits into one job per package. Each gets its own branch, skilld/<sha>-<package dir>, and a title that names the package. nuxt-seo releases @nuxtjs/seo and nuxtseo-layer-devtools together, so it needs the split.
  • Account page. The list checks every repository when it loads. Ready rows name the packages Skillgen updates. Blocked repositories sit under "Needs a change" with their reason and no switch. "Turn on all" switches on every ready repository. Rows update by replacing the list, because useFetch data is shallow in Nuxt 4; before this, a saved switch did not re-render its row.
  • Root packages keep working, including a single SKILL.md at the root.

Data flow: one tag splits into one job and one draft per package

/skillgen, COPY.md and the runbook describe the new layout.

📝 Migration

After merging, run the "Deploy to Cloudflare" workflow with target=harness-proof. The site deploy changes the account page on its own, but the live Worker reads only the root package.json until then.

🤖 AI disclosure: Harlan Agent Kit modified this description. My AI open-source policy.

Harlan's account page refused most of his repositories. They are monorepos:
the root package.json is private or names the monorepo, and the published
package keeps its Skill under packages/<name>/skills/. One rule in
workers/skill-harness/src/package-skills.ts now finds every package with a
Skill at the root or under packages/, and the site imports the same rule.

A tag that several packages share splits into one job per package, each
with its own branch and draft, since nuxt-seo releases two packages with
Skills at once.

The account page checks every repository when it loads, so a blocked one
shows its reason before any click. Ready rows name the packages Skillgen
updates, and "Turn on all" switches on every ready repository. useFetch
data is shallow in Nuxt 4, so rows now update by replacing the list.
@harlan-zw harlan-zw added the harlan-agent-review Pull request triage requires an adversarial Review. Adding this label manually always forces one. label Oct 6, 2026
@harlan-zw

Copy link
Copy Markdown
Collaborator Author

An agent wrote this comment. Checked by hand in a headless browser against nuxi dev, with /api/me/skillgen mocked from the real repository list, since CI cannot sign in to GitHub:

  • Ready rows name their packages, including "nuxtseo-layer-devtools and @nuxtjs/seo" for nuxt-seo.
  • Blocked repositories show their reason with no switch.
  • "Turn on all (4)" turned every ready repository on, showed 8 of 8 on, and then disappeared.
  • At 375px in light mode the page has no horizontal scroll.
Ready, dark Needs a change, dark 375px, light
Ready group in dark mode Needs a change group in dark mode Mobile view in light mode

@harlan-github-agent harlan-github-agent Bot added harlan-agent-review-required Pull request triage requires an adversarial Review for this head commit. harlan-agent-running An Agent holds a Task on this issue or pull request right now. and removed harlan-agent-review Pull request triage requires an adversarial Review. Adding this label manually always forces one. labels Oct 6, 2026
@harlan-github-agent

harlan-github-agent Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

🤖 MERGED

Harlan Agent Kit posted this automated review. It is not Harlan's personal review or approval. AI open source policy. Last updated: 2026-10-06 13:45 UTC.

GitHub merged this pull request.

  • Logged (40/100): The PR's embedded screenshots and diagrams are inaccessible to review, so the UI rework ships without independently verified visual evidence. View code
    • Ask an agent to verify and fix this finding
  • Logged (35/100): A transient GitHub failure now renders as a permanent Needs-a-change row, so a rate limit or 5xx reads as a repository defect with no retry affordance. View code
    • Ask an agent to verify and fix this finding
  • Logged (30/100): An ambiguous multi-skill package is reported as private-or-unnamed, giving maintainers a false refusal reason that points at the wrong fix. View code
    • Ask an agent to verify and fix this finding

Review completed. No finding above 80/100.

Selected findings run after merge and open separate pull requests.

@harlan-zw
harlan-zw merged commit 234c57f into main Oct 6, 2026
7 checks passed
@harlan-zw
harlan-zw deleted the feat/skillgen-monorepos branch October 6, 2026 09:15
@harlan-github-agent harlan-github-agent Bot added harlan-agent-running An Agent holds a Task on this issue or pull request right now. and removed harlan-agent-running An Agent holds a Task on this issue or pull request right now. labels Oct 6, 2026
@harlan-github-agent harlan-github-agent Bot removed the harlan-agent-review-required Pull request triage requires an adversarial Review for this head commit. label Oct 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant