Skip to content

ci(security): make @fuzefront/security-client publishable + installable now (izzywdev alias) - #260

Merged
izzywdev merged 1 commit into
masterfrom
claude/publish-security-client
Jul 15, 2026
Merged

ci(security): make @fuzefront/security-client publishable + installable now (izzywdev alias)#260
izzywdev merged 1 commit into
masterfrom
claude/publish-security-client

Conversation

@izzywdev

Copy link
Copy Markdown
Owner

What

Makes @fuzefront/security-client (packages/security/) actually publishable and installable so FuzeSocial / Mendys can reintegrate through it.

Changes

  • Add packages/security to lerna.json packages[] and to the root workspaces (it was in neither, so lerna change-detection + workspace tooling never saw it).
  • Add .github/workflows/security-packages-publish.yml — mirrors the proven chat-packages-publish.yml: on push to master touching packages/security/**, builds the tsup output and publishes to GitHub Packages, idempotently (skips an already-published version). No git push / tag, so master's required_signatures is never involved.

The scope-vs-owner constraint (important)

GitHub Packages ties the npm scope to the repo owner. Under the current izzywdev account, @fuzefront/* cannot publish (403) — which is exactly why packages-publish.yml is gated to github.repository_owner == 'fuzefront' and no-ops today. The finding's suggested "flip that gate to izzywdev and keep the @fuzefront scope" would make lerna publish 403 on every @fuzefront/* package on every master push, so that gate is intentionally left unchanged as the long-term org-transfer path.

Instead we follow the repo's already-established workaround (used for chat packages): publish under the owner-scoped alias @izzywdev/fuzefront-security-client. Consumers install via an npm alias so their imports keep the canonical name:

// consumer package.json
"@fuzefront/security-client": "npm:@izzywdev/fuzefront-security-client@^0.1.0"

with a scoped .npmrc:

@izzywdev:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}

Once the org transfer lands and packages-publish.yml activates, consumers drop the alias and this workflow is deleted.

Signatures / tags

The alias workflow does no git commit/git push/tag — it only npm publishes — so master's required_signatures protection is not touched (unlike a lerna publish version-bump-and-push, which would be rejected on signed-master).

🤖 Generated with Claude Code

…orkflow

Add packages/security to lerna.json packages[] and root npm workspaces so
tooling and lerna change-detection see it. Add security-packages-publish.yml
(mirrors chat-packages-publish.yml) to publish the tsup build to GitHub
Packages as @izzywdev/fuzefront-security-client — the owner-scoped alias
that lets @fuzefront/security-client ship NOW under the izzywdev account
(GitHub Packages ties scope to repo owner, so the @fuzefront-scoped
packages-publish.yml stays a no-op until the org transfer).

Co-Authored-By: Claude claude-opus-4-8 <noreply@anthropic.com>
Claude-Session-Id: cf830721-b1ef-4fe0-a024-035ad280dcf7
@izzywdev izzywdev added the auto-merge Enable squash auto-merge once CI passes label Jul 15, 2026
@github-actions
github-actions Bot enabled auto-merge (squash) July 15, 2026 11:33
@github-actions

Copy link
Copy Markdown
Contributor

Automated code review (gate-code-review)

Credit balance is too low

Report-only — this check never blocks merge.

@izzywdev
izzywdev merged commit 895e03a into master Jul 15, 2026
36 of 47 checks passed
@izzywdev
izzywdev deleted the claude/publish-security-client branch July 15, 2026 13:09
izzywdev pushed a commit that referenced this pull request Jul 15, 2026
master's lockfile drifted: the packages/security workspace
(@fuzefront/security-client@0.1.0) and its dev-deps (@types/node@18.19.0,
openapi-typescript@7.13.0, typescript@5.1.6) were declared in package.json
but never added to package-lock.json (introduced by #260), so `npm ci`
failed strictly on every PR. Regenerated the lock (npm install
--package-lock-only) to add only the missing workspace + dev-deps; no other
dependency versions change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PMVXVQ5XUh8ZfFx8Vr7XW
izzywdev added a commit that referenced this pull request Jul 21, 2026
* feat(launcher): compact icon+name tiles in the 9-dots app menu

The 9-dots top-bar launcher reused the full-detail <AppCard> (icon, name,
integration badge, health, description), making it a dense wall of text.
Model it on the Google app launcher instead: a new <AppTile> DS primitive
renders only the app icon and its menu label in a 3-column grid.

- Add design-system/components/launcher/AppTile.{jsx,d.ts,prompt.md} — a
  compact icon+name cell reusing the HealthDot primitive; offline apps stay
  grayscaled/dimmed/inert. <AppCard> remains for the dashboard/management
  surfaces that legitimately need full detail.
- Regenerate the DS barrels + manifest (build.mjs).
- AppSelector: swap AppCard -> AppTile, drop the description, widen the grid
  to 3 columns. The .app-grid-button hook and per-app name text are
  unchanged, so the existing launcher e2e assertions still match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PMVXVQ5XUh8ZfFx8Vr7XW

* fix(launcher): AppTile falls back to emoji glyph on icon load error

The onError handler only hid the broken <img>, leaving a blank space and
contradicting the documented contract ("falls back to a per-type emoji glyph
on error or when absent"). Track the load failure in state and render the
emoji fallback node instead of just hiding the image.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PMVXVQ5XUh8ZfFx8Vr7XW

* build: sync root package-lock.json with the packages/security workspace

master's lockfile drifted: the packages/security workspace
(@fuzefront/security-client@0.1.0) and its dev-deps (@types/node@18.19.0,
openapi-typescript@7.13.0, typescript@5.1.6) were declared in package.json
but never added to package-lock.json (introduced by #260), so `npm ci`
failed strictly on every PR. Regenerated the lock (npm install
--package-lock-only) to add only the missing workspace + dev-deps; no other
dependency versions change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PMVXVQ5XUh8ZfFx8Vr7XW

* build: sync frontend/package-lock.json with chat-client/chat-ui 1.1.0

The packages/chat-client and packages/chat-ui workspaces were bumped to
1.1.0, but frontend/package-lock.json (the frontend is a standalone npm
project, not a root workspace) still pinned them at 1.0.0, so `npm ci` in
gate-frontend-build failed on the version mismatch. Regenerated the frontend
lock (npm install --package-lock-only); only the chat-client/chat-ui
versions change. `npm ci --dry-run` now exits 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PMVXVQ5XUh8ZfFx8Vr7XW

---------

Co-authored-by: Claude <noreply@anthropic.com>
@izzywdev
izzywdev restored the claude/publish-security-client branch July 27, 2026 11:44
@izzywdev
izzywdev deleted the claude/publish-security-client branch July 27, 2026 18:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

auto-merge Enable squash auto-merge once CI passes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant