From 93e57b40bf84f70eb5329d630a89176c170a2a52 Mon Sep 17 00:00:00 2001 From: Lan_zhijiang Date: Tue, 28 Jul 2026 14:23:56 +0800 Subject: [PATCH] feat(ui): support consumer source development --- .changeset/calm-ui-source-loop.md | 5 + README.md | 28 ++++ packages/web/README.md | 20 +++ .../inkJsonEditor/inkJsonEditor.vue | 15 +- packages/web/src/index.ts | 12 +- tasks/ui-engineering/execution-08a.md | 7 +- tasks/ui-engineering/execution-08b.md | 13 +- tasks/ui-engineering/execution-09.md | 144 ++++++++++++++++++ tasks/ui-engineering/packet.md | 84 ++++++---- tasks/ui-engineering/roadmap.md | 12 +- 10 files changed, 284 insertions(+), 56 deletions(-) create mode 100644 .changeset/calm-ui-source-loop.md create mode 100644 tasks/ui-engineering/execution-09.md diff --git a/.changeset/calm-ui-source-loop.md b/.changeset/calm-ui-source-loop.md new file mode 100644 index 0000000..8302c1a --- /dev/null +++ b/.changeset/calm-ui-source-loop.md @@ -0,0 +1,5 @@ +--- +"@inkcre/ui-web": patch +--- + +Document the consumer-owned local source loop and make the source entry compatible with strict consumer type graphs. diff --git a/README.md b/README.md index 868ab9c..27a05fa 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,34 @@ Generate derived files with `pnpm generate`. The public component manifest drives the runtime registry, global component types, package version, Story coverage, and generated Agent Skills. +## Joint development with client-web + +The consuming Vite/Vitest/TypeScript pipeline owns source consumption. Keep +this workspace installed and generated, then opt in from a sibling +`client-web` checkout: + +```bash +pnpm install --frozen-lockfile +pnpm generate +pnpm --dir ../client-web dev:ui --ui-source ../ui/packages/web +``` + +Replace `../ui` with this checkout's actual location while the local directory +is still named `design` or is stored elsewhere. + +The command validates this package root and maps only its public specifiers for +the current development process. It does not use `pnpm link`, persist an +absolute path, or modify either manifest or lockfile. Token JSON changes still +require `pnpm generate`. + +Run the consumer source-graph check with +`pnpm --dir ../client-web type-check:ui --ui-source ../ui/packages/web`. +Normal client development, builds, checks, and CI remain pinned to the +published registry artifact. The consumer's +[`apps/client-web/docs/development.md`](https://github.com/InKCre/client-web/blob/main/apps/client-web/docs/development.md#joint-dev-with-inkcreui-web) +owns the full startup, remotes, cleanup, troubleshooting, and release-fidelity +contract. + ## GitHub Packages authentication The committed `.npmrc` routes only the `@inkcre` scope to GitHub Packages. It diff --git a/packages/web/README.md b/packages/web/README.md index bdc1a3d..687e49b 100644 --- a/packages/web/README.md +++ b/packages/web/README.md @@ -79,6 +79,26 @@ subpath. - Provider-agnostic internationalization support - Agent Skills for AI-assisted development +## Local consumer source loop + +`client-web` can opt into this package's source without changing its +registry-backed dependency: + +```bash +pnpm --dir ../client-web dev:ui --ui-source ../ui/packages/web +pnpm --dir ../client-web type-check:ui --ui-source ../ui/packages/web +``` + +Replace `../ui` with the actual source checkout location when needed. + +The consumer validates the package identity and public entries, uses exact +Vite/Vitest/TypeScript mappings, and keeps Vue and other peer runtimes +consumer-owned. This lane is development-only: it rejects production builds +and never replaces packed or published-package verification. Generate tokens +before expecting token changes to reach Sass HMR. See the +[consumer development guide](https://github.com/InKCre/client-web/blob/main/apps/client-web/docs/development.md#joint-dev-with-inkcreui-web) +for prerequisites, remote development, cleanup, and rollback. + ## Agent Skills The package ships one progressively disclosed Agent Skill under diff --git a/packages/web/src/components/inkJsonEditor/inkJsonEditor.vue b/packages/web/src/components/inkJsonEditor/inkJsonEditor.vue index 06fd415..1fa3379 100644 --- a/packages/web/src/components/inkJsonEditor/inkJsonEditor.vue +++ b/packages/web/src/components/inkJsonEditor/inkJsonEditor.vue @@ -28,6 +28,19 @@ const editorRef = ref(); let editorView: EditorView | null = null; const editableCompartment = new Compartment(); +function diagnosticMessage(message: unknown): string { + if (typeof message === "string") return message; + if ( + message && + typeof message === "object" && + "value" in message && + typeof message.value === "string" + ) { + return message.value; + } + return String(message); +} + const jsonSchemaLinter = linter(async (view) => { if (!props.schema) return []; @@ -46,7 +59,7 @@ const jsonSchemaLinter = linter(async (view) => { from, to, severity: d.severity === 1 ? "error" : "warning", - message: d.message, + message: diagnosticMessage(d.message), }; }); }); diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts index 06514c0..8c27540 100644 --- a/packages/web/src/index.ts +++ b/packages/web/src/index.ts @@ -28,12 +28,6 @@ import type { JSONSchema, JSONSchemaProperty } from "./components/inkAutoForm/in import type { InkRouter } from "./router"; import type { InkI18n } from "./i18n"; -export { - DropdownOption, - JSONSchema, - JSONSchemaProperty, - InkRouter, - INK_ROUTER_KEY, - InkI18n, - INK_I18N_KEY, -}; +export { INK_ROUTER_KEY, INK_I18N_KEY }; + +export type { DropdownOption, JSONSchema, JSONSchemaProperty, InkRouter, InkI18n }; diff --git a/tasks/ui-engineering/execution-08a.md b/tasks/ui-engineering/execution-08a.md index baa4af9..576ffb4 100644 --- a/tasks/ui-engineering/execution-08a.md +++ b/tasks/ui-engineering/execution-08a.md @@ -1,8 +1,9 @@ # Execution 08A — Web DX And Native TypeScript -Execution 08A is implemented and locally verified. Sir authorized it on -2026-07-28 after the registry-backed consumer migration and remote identity -closure. Ubuntu glibc CI is the next external proof. +Execution 08A is complete and published in `@inkcre/ui-web@1.3.0`. Sir +authorized it on 2026-07-28 after the registry-backed consumer migration and +remote identity closure. The bounded change was committed as `f9a65a3`, and +Ubuntu glibc CI passed before release. ## Why This Slice Exists diff --git a/tasks/ui-engineering/execution-08b.md b/tasks/ui-engineering/execution-08b.md index b9c4bba..da5b618 100644 --- a/tasks/ui-engineering/execution-08b.md +++ b/tasks/ui-engineering/execution-08b.md @@ -1,9 +1,9 @@ # Execution 08B — Intent-Based Agent Skill Delivery -Execution 08B is implemented and locally verified. Sir authorized it on -2026-07-28 together with the web DX slice after consumer and remote identity -closure. Its release-PR refresh, exact registry publication, and -post-publication probe are the next external gates. +Execution 08B is complete and published in `@inkcre/ui-web@1.3.0`. Sir +authorized it on 2026-07-28 together with the web DX slice after consumer and +remote identity closure. Release PR #31 merged, and the exact registry +artifact passed installed-package discovery and loading. ## Problem Statement @@ -154,8 +154,9 @@ reopened rather than silently adding a permanent mirror. - The working and frozen-install root checks pass Intent, generation, package-contract, tests, build, and Histoire. - Sir authorized the bounded commit and release-PR merge on 2026-07-28. - Registry publication remains successful only after CI, the release workflow, - and the exact installed-package probe pass. + Commit `f9a65a3` passed CI; release PR #31 merged as `7b0034c`, and the exact + `@inkcre/ui-web@1.3.0` registry artifact passed installed-package discovery + and loading. ## Primary References diff --git a/tasks/ui-engineering/execution-09.md b/tasks/ui-engineering/execution-09.md new file mode 100644 index 0000000..7e7452c --- /dev/null +++ b/tasks/ui-engineering/execution-09.md @@ -0,0 +1,144 @@ +# Execution 09 — Opt-In Local UI Source Loop + +Execution 09 is implemented and locally verified across this producer and +`../client-web`. Sir authorized the slice on 2026-07-28 after +`@inkcre/ui-web@1.3.0` was published and its installed-package contract was +proven. The bounded producer and consumer changes are committed locally and +remain unpushed. + +## Outcome + +The normal consumer lane remains an exact registry dependency. A developer can +now opt one process into the sibling UI source graph without linking packages, +editing a manifest, changing the workspace, or writing a machine path: + +```bash +pnpm dev:ui --ui-source ../ui/packages/web +pnpm type-check:ui --ui-source ../ui/packages/web +``` + +`../client-web` owns the overlay because its Vite, Vitest, TypeScript, Sass, +Module Federation, SVC, and Portless pipelines compile and serve the external +source. This producer owns package-source compatibility, generated inputs, its +package README, and the Changeset. + +## Consumer Contract + +The tracked consumer helper validates the real package root before returning +any configuration: + +- `package.json` must name `@inkcre/ui-web`; +- all ten public source entries must exist: root, styles, functions, mixins, + ref/sys/comp tokens, utilities, locales, and UnoCSS; +- the global component declaration must exist; +- environment-based configuration must be an absolute path; +- build mode rejects the source overlay. + +The resulting aliases are exact regular expressions, so an undeclared private +subpath cannot silently become public. Source mode extends Vite's filesystem +allowlist with both the detected client workspace and the validated package +root. No absolute path is stored in Vite configuration. + +Vue and other shared peers are deduplicated to the consumer installation. The +UI package is excluded from dependency pre-bundling in source mode. The same +contract is used by the client Vite server, client Vitest project, and Twitter +remote. + +## Sass Ownership + +The previous substring test for `src/components/` could classify a sibling UI +component as client source and inject client-only `@/styles`. Source mode uses +real path containment instead: + +- client components, views, and host extensions receive UI functions/mixins + plus client styles; +- sibling UI components receive only UI functions/mixins; +- unrelated files receive no injected prelude. + +This keeps `@/` consumer-owned while allowing UI component Sass to compile and +hot-reload inside the host graph. + +## Lifecycle And Identity + +The root `dev:ui` launcher: + +1. accepts `--ui-source` or `INKCRE_UI_SOURCE_ROOT`, never both; +2. resolves and validates the source package; +3. prints one `NON-RELEASE` banner with its version and real root; +4. asks SVC to ensure the separate worktree-scoped `web-ui` capability; +5. lets the Vite identity endpoint and SVC probe compare a non-path source + identity hash, preventing a route for a different checkout from being + reused silently. + +`dev:all:ui` carries the same environment into extension development. +`dev:stop` knows the additional Portless route. The established database +capability remains shared with normal client development. + +## Type Graph + +`type-check:ui` writes a temporary tsconfig below ignored +`.runtime/ui-source/`, maps the same exact source entries, maps peer packages +to the consumer installation, includes the UI global component declaration, +runs Vue TSC, and removes the directory. + +The strict cross-repository graph exposed two producer compatibility defects: + +- type-only public exports were emitted as value exports; +- JSON language-service versions disagree on whether a diagnostic message is + always a string or may be markup content. + +The producer now uses type-only exports and normalizes an unknown diagnostic +message into a CodeMirror string. Both the producer's pinned graph and the +consumer source graph pass. + +## Durable Consumer Documentation + +The complete operating guide lives in +`../client-web/apps/client-web/docs/development.md`. It covers prerequisites, +the recommended checkout shape, environment-variable use, remote development, +source type checking, generated tokens, cleanup, Portless behavior, and the +release-fidelity boundary. + +Short routes to that guide are present in the consumer root README, docs +index, app `AGENTS.md`, extension guide, architecture, and filesystem map. This +producer links to it from both the repository README and the published +package-local README, so a consumer inspecting the repository or installed +package can find the canonical instructions. + +## Local Proof + +- `pnpm exec vitest run scripts/ui-source.test.mjs`: 5 contract tests pass. +- `pnpm type-check:ui --ui-source ` passes and removes its + temporary config. +- Source-mode client Vitest passes 3 files / 19 tests. +- Vite-transformed client and Twitter modules import the sibling UI source + rather than `node_modules`. +- WebSocket observation proves both a Vue template edit and an SCSS edit under + the sibling package emit HMR updates for the external source path. +- UI-owned Sass compiles in both the client and Twitter source graphs. +- A source-enabled production build fails with the intentional + development-only error. +- Source SVC startup reports a healthy `web-ui` capability and a distinct + `client-web-ui-` route. +- SHA-256 values for the consumer root manifest, client manifest, Twitter + manifest, and lockfile are byte-identical before startup and after route + shutdown. +- The complete consumer check passes 11 test files / 40 tests and all builds. +- The complete producer check passes 12 test files / 104 tests, both packed + contracts, and 21 stories / 108 variants. + +The initial consumer run warned that the interactive shell used Node `26.3.0` +while the repository declared Node `22.22.3`. Sir chose organization +consistency rather than a Node 26 adoption. The consumer now matches this +producer's pnpm-managed `devEngines.runtime`: `pnpm exec node` and the +repository doctor report exact Node `22.22.3` independently of system Node, +and setup-node reads the same package authority. Frozen installation, the +complete consumer check, source-mode tests, and the source type graph pass +after the migration. + +## Rollback + +The consumer overlay is isolated to the new helper, launch/type-check scripts, +three Vite-family configurations, one SVC target, and documentation. Removing +that slice restores the exact registry-only graph. No dependency, lockfile, +workspace, or persisted local-link state must be repaired. diff --git a/tasks/ui-engineering/packet.md b/tasks/ui-engineering/packet.md index 3f71503..3722b6c 100644 --- a/tasks/ui-engineering/packet.md +++ b/tasks/ui-engineering/packet.md @@ -1,24 +1,29 @@ # UI Engineering And Design-to-UI Migration -- **Objective**: establish a reproducible, agent-friendly engineering and development contract for the InKCre UI library, then migrate the repository and published package identity from `design` to `ui` without carrying existing package-contract defects into the new identity. Complete the registry-backed consumer migration and remote identity closure against the already-published artifact before making the web package a first-class Oxc/native-TypeScript development unit and replacing its nominal Agent Skill delivery with an installed-package TanStack Intent contract. +- **Objective**: establish a reproducible, agent-friendly engineering and development contract for the InKCre UI library, migrate the repository and published package identity from `design` to `ui` without carrying existing package-contract defects into the new identity, and add an explicit consumer-owned local source loop only after the registry, tooling, and installed-package contracts are proven. - **Guardrails**: preserve current product behavior, Vue component APIs (`Ink*`), CSS classes (`.ink-*`), and token contracts (`--ref-*`, `--sys-*`, `--comp-*`) unless a separate breaking-change decision is explicitly approved; retain accurate domain terms such as “Design System” and “design tokens” instead of mechanically replacing every `design` string; keep `tokens/inkcre.tokens.json` authoritative and generated Sass, UnoCSS, component facts, and Agent Skill references derived; keep reviewed intent/composition guidance explicit rather than inferring product judgment from source syntax; treat the published tarball rather than a source alias as the consumer contract; preserve the frozen-install contract in `../client-web`; keep repository, package, consumer, and remote-governance changes in bounded slices; do not implement, commit, publish, rename a remote repository, or mutate `../client-web` until Sir explicitly starts the relevant slice. - **Verification**: prove one pinned runtime and one lockfile can reproduce installation; provide one green root check covering package-local formatting/linting, one workspace TypeScript host, Vue type/declaration checking, tests, build, generator consistency, Intent validation/load, and package-contract smoke tests; verify the packed target web package through its JavaScript, types, CSS, Sass, token, locales, utilities, UnoCSS, and installed skill surfaces; run the complete `../client-web` check and affected extension builds against the published package; confirm generated artifacts are deterministic; confirm release and token-update workflows produce the required changeset and package through a deterministic workflow fixture; verify active code, configuration, and consumer documentation no longer depend on the old identity except for an explicitly approved historical or compatibility surface; verify GitHub Packages and remote URLs after the repository rename, with a live Figma dispatch retained as a post-deployment smoke rather than the only gate. -- **Current Truth**: Executions 01–05 and the producer packet are committed in `b1e0d6a`, `322dcf6`, `5d05693`, and `1d4ab92`; Execution 06 is committed and pushed in `../client-web` as `b08cade`. The GitHub repository is `InKCre/ui`, the local remote and private package association follow it, and remote identity fixes are committed through `59ec82f`. Release PR #31 is open and clean with both the reproducible workspace and Cloudflare checks passing; it has not yet been merged or published. Executions 08A and 08B plus their minor Changeset are complete: `packages/web` has package-local Oxc workflows, the exact TypeScript native bridge is canonical, a valid full declaration tree replaces the incompatible bridge/API-Extractor rollup, and one deterministic `@inkcre/ui-web#ui-web` Intent skill replaces `agent-skills/`. Both the working checkout and a disposable frozen-install copy pass the complete root check. Sir authorized the bounded commit and PR #31 merge; Ubuntu CI, the refreshed exact registry version, and its installed-skill probe are the remaining release gates. Live Figma integration remains an external handoff. -- **Next Step**: land the bounded 08A/08B commit, prove Ubuntu glibc CI, confirm the release PR refresh, then merge PR #31 and verify the exact published package through an installed-skill consumer probe. The local checkout directory rename remains deferred to a session boundary. +- **Current Truth**: Executions 01–08 are committed and pushed; the consumer registry migration is `b08cade`, and the producer DX/Intent change is `f9a65a3`. Release PR #31 merged as `7b0034c`, and exact `@inkcre/ui-web@1.3.0` is tagged, released, registry-installable, and proven through its installed Intent skill. Execution 09 is implemented and locally verified across this producer and `../client-web`: an explicit source root drives exact Vite/Vitest/TypeScript aliases, a distinct SVC `web-ui` capability, consumer-owned peer resolution, path-owned Sass injection, source HMR, and consumer-visible operating documentation. Both active TypeScript repositories now derive exact Node `22.22.3` from pnpm `devEngines.runtime`; system Node is not project authority. The bounded producer and consumer changes, including the producer patch Changeset, are committed locally and remain unpushed. Live Figma integration remains an external handoff. +- **Next Step**: when explicitly authorized, push both bounded Execution 09 commits and let their normal CI lanes prove the committed state. The local checkout directory rename remains deferred to a session boundary. ## Classification And Active Posture - Constraint: engineering, package, registry, workspace, CI, and cross-repository development boundaries must change while product behavior remains stable. -- Reality: the producer package, first registry artifact, source association, known-consumer Actions read boundary, and local registry-backed consumer graph are green. The migration artifact is frozen at `@inkcre/ui-web@1.2.2`; newly requested Oxc/native-TypeScript and installed Agent Skill contracts follow remote identity closure rather than redefining it. -- Artifact: this packet, the phased migration plan, package-contract fixture, story-coverage gate, web-DX and Intent task files, migration guide, and execution evidence. -- Active posture: Harden. The migration and known-consumer graph are proven; - the producer-DX and installed-skill baseline awaits remote CI and normal - release closure. +- Reality: the migration artifact remains frozen at `@inkcre/ui-web@1.2.2`, + while `1.3.0` proves the later Oxc/native-TypeScript and installed Intent + contracts. The optional source loop is additive and never substitutes for + either published artifact. +- Artifact: this packet, the phased migration plan, package-contract fixture, + story-coverage gate, web-DX, Intent and source-loop task files, migration + guide, durable consumer instructions, and execution evidence. +- Active posture: Close. The identity, registry-backed consumer, remote, + producer-DX, installed-skill, and local source-loop contracts are proven; + only bounded Execution 09 commit/CI closure and external handoffs remain. ## Evidence Snapshot - `package.json` now carries the private `@inkcre/ui` workspace identity and exposes the pinned toolchain and canonical root development/check commands. -- `packages/web/package.json` names `@inkcre/ui-web@1.2.2`, publishes to GitHub Packages with restricted access, and exposes only built JavaScript, declarations, CSS, Sass, token, locale, utility, UnoCSS, migration, and `skills/` surfaces. +- `packages/web/package.json` names `@inkcre/ui-web@1.3.0`, publishes to GitHub Packages with restricted access, and exposes only built JavaScript, declarations, CSS, Sass, token, locale, utility, UnoCSS, migration, and `skills/` surfaces. - `scripts/lib/ui-package.ts` resolves the renamed package once; token, package-metadata, and Intent skill generators derive their outputs from repository and manifest authority instead of caller cwd. - `.github/workflows/ci.yml` runs the root frozen-install contract, generated-output gates, story coverage, tests, build, packed contract, and Histoire smoke with read-only contents permission. The token-update workflow validates input and creates a deterministic package changeset. - `.npmrc` contains only the `@inkcre` registry route. Local credentials belong to trusted user configuration, and CI publication credentials exist only on the release step. @@ -34,16 +39,20 @@ - `partner-up-dev/ui` uses a package-local `skills/ui-web` surface and pinned Intent validation, but its custom generator and reviewed seed—not Intent—own component facts, composition guidance, caveats, and deterministic output. - `../client-web/apps/client-web/vitest.config.ts` no longer bypasses the UI exports map; its four old direct filesystem aliases were removed. - `../client-web` has three exact `@inkcre/ui-web@1.2.2` importers: the web app, extension development utilities, and the Twitter remote. The browser extension does not consume it. +- `../client-web` now also owns an opt-in source overlay with exact public + aliases, a temporary source type graph, a distinct SVC/Portless route, and + durable instructions reachable from its root README, docs index, app agent + guide, extension guide, architecture, and filesystem map. - The consumer lock resolves the published new-package URL and integrity, including the required text-document peer and optional UnoCSS peer. Node `22.22.3` and pnpm `11.11.0` pass frozen install, the full 35-test/root build gate, type-aware Oxlint, and native TypeScript 7. - GitHub reports `InKCre/ui` as public with the same repository ID as the old name. The old web URL redirects, the local remote uses the new SSH URL, default workflow permissions are `read`, and workflow-token PR approval is disabled. The existing ruleset still only blocks deletion and non-fast-forward updates until the canonical PR check is green. -- `@inkcre/ui-web@1.2.2` is the only published new-name version. GitHub reports - private visibility, an `InKCre/ui` source association, and retained - `InKCre/client-web` Actions access; a post-rename frozen consumer CI rerun - passes. +- `@inkcre/ui-web@1.2.2` remains the immutable consumer-migration artifact. + `@inkcre/ui-web@1.3.0` is also published with private visibility, an + `InKCre/ui` source association, the Oxc/native-TypeScript contract, and the + installed `@inkcre/ui-web#ui-web` Intent skill. - A fresh clone from `InKCre/ui` passes frozen install and the full 104-test, package, packed-consumer, and Histoire baseline. The renamed repository's Release workflow also passes and creates release PR #31 without publishing. @@ -55,18 +64,21 @@ ## Approved Target Identity -| Surface | Current | Candidate | -| ------------------------------------- | ------------------------------------ | ---------------- | -| GitHub repository | `InKCre/ui` | `InKCre/ui` | -| Local checkout directory | `design` | `ui` | -| Private workspace | `inkcre-design` | `@inkcre/ui` | -| Package directory | `packages/web-design` | `packages/web` | -| Published package | `@inkcre/web-design` | `@inkcre/ui-web` | -| Vite library identifier | `InKCreWebDesign` | `InKCreUIWeb` | -| Vue, CSS, and token APIs | `Ink*`, `.ink-*`, `--ref/sys/comp-*` | unchanged | -| Domain vocabulary | Design System, design tokens | unchanged | - -Sir approved this identity on 2026-07-27. The workspace, package directory, published package metadata, and library identifier were renamed in Execution 05; the GitHub repository and local checkout rename remain Execution 07. +| Surface | Legacy | Approved/current | +| ------------------------ | ------------------------------------ | ---------------- | +| GitHub repository | `InKCre/design` | `InKCre/ui` | +| Local checkout directory | `design` | `ui` | +| Private workspace | `inkcre-design` | `@inkcre/ui` | +| Package directory | `packages/web-design` | `packages/web` | +| Published package | `@inkcre/web-design` | `@inkcre/ui-web` | +| Vite library identifier | `InKCreWebDesign` | `InKCreUIWeb` | +| Vue, CSS, and token APIs | `Ink*`, `.ink-*`, `--ref/sys/comp-*` | unchanged | +| Domain vocabulary | Design System, design tokens | unchanged | + +Sir approved this identity on 2026-07-27. The workspace, package directory, +published package metadata, library identifier, and GitHub repository are +renamed. Only the local checkout directory remains `design`, deferred to a +session boundary so no running tool keeps the old absolute path. ## Working Topology @@ -95,23 +107,23 @@ flowchart LR - Execution 07 implementation evidence: [`execution-07.md`](execution-07.md) - Execution 08A implementation and local evidence: [`execution-08a.md`](execution-08a.md) - Execution 08B implementation and local evidence: [`execution-08b.md`](execution-08b.md) +- Execution 09 implementation and cross-repository evidence: [`execution-09.md`](execution-09.md) - External engineering reference: [`partner-up-dev/ui`](https://github.com/partner-up-dev/ui) ## Open Decisions -There are no unresolved naming or Execution 08 architecture decisions. The -chosen compiler posture is one exact-pinned bridge-backed TypeScript host, and -the chosen delivery posture is one clean `skills/ui-web` Intent router with no -`agent-skills/` mirror. The 08A/08B commit and release-PR merge are authorized. -Remaining operational gates are remote CI, exact publication and registry -probing; remaining decisions are whether to install the proven workspace check -as required and who owns the supplementary live Figma dispatch. +There are no unresolved naming, tooling, Intent, or source-loop architecture +decisions. The source overlay is consumer-owned, process-scoped, and +development-only; the registry and packed artifact remain authoritative. +Remaining decisions are whether to install the proven workspace check as +required and who owns the supplementary live Figma dispatch. The package remains private/restricted, and the old package is frozen for rollback, retained without a forwarding wrapper, and deprecated only after coordinated consumer migration. -SVC adoption is no longer on this task's critical path. The recommended disposition is a separate task after the UI migration contract is stable. +Broad producer-side SVC adoption is not part of this task. Execution 09 reuses +the consumer's established SVC lifecycle only for its `web-ui` host capability. ## Decision Log @@ -176,3 +188,9 @@ SVC adoption is no longer on this task's critical path. The recommended disposit - 2026-07-28: the package moved from non-discoverable `agent-skills/` folders to one generated `skills/ui-web` Intent router backed by reviewed seed data, component/source facts, story facts, deterministic checks, and packed installed-package discovery/load proof. - 2026-07-28: both the working checkout and an artifact-free frozen-install copy pass the complete root check on macOS arm64. Ubuntu glibc CI and exact-version registry proof remain post-commit gates; no commit or publication was made in this implementation turn. - 2026-07-28: Sir explicitly authorized the combined 08A/08B commit, merge of the refreshed release PR #31, and post-release verification before starting Execution 09. +- 2026-07-28: Execution 08 was committed as `f9a65a3`; Ubuntu CI passed. Release PR #31 merged as `7b0034c`, and `@inkcre/ui-web@1.3.0` was tagged, released, registry-installed, and loaded as `@inkcre/ui-web#ui-web`. +- 2026-07-28: Sir explicitly started Execution 09 and required durable usage documentation visible to consumers. +- 2026-07-28: `../client-web` gained a process-scoped exact source overlay, temporary source type graph, and worktree SVC `web-ui` capability. Client and Twitter transformed modules resolve sibling UI source; Vue and Sass edits emit HMR updates. +- 2026-07-28: source mode rejects builds and leaves the consumer root/client/Twitter manifests plus lockfile byte-identical across startup and shutdown. The complete consumer and producer checks pass, and the canonical consumer guide is linked from both repositories and the published package README. +- 2026-07-28: Sir selected organization runtime consistency over adopting Node 26 Current. `client-web` replaced `.node-version` and `engines` with the same exact pnpm-managed Node `22.22.3` authority as UI; setup-node derives its version from `package.json`. +- 2026-07-28: Sir authorized bounded commits in both repositories. The consumer source-loop and runtime-alignment slice was committed as `9aed28d`; the matching producer source-compatibility, documentation, task-packet, and Changeset slice was committed locally. Neither repository was pushed. diff --git a/tasks/ui-engineering/roadmap.md b/tasks/ui-engineering/roadmap.md index eeeda00..00c5a16 100644 --- a/tasks/ui-engineering/roadmap.md +++ b/tasks/ui-engineering/roadmap.md @@ -276,8 +276,8 @@ the transition from `design`. ## Execution 08A — Web DX And Native TypeScript -**Status:** implemented and locally verified on 2026-07-28; Ubuntu glibc CI is -the next external proof. See +**Status:** completed and released on 2026-07-28. Ubuntu glibc CI passed and +the contract is published in `@inkcre/ui-web@1.3.0`. See [`execution-08a.md`](execution-08a.md). This slice gives `packages/web` direct lint/format/fix ergonomics, closes its @@ -309,8 +309,8 @@ stock/compiler parity proof. ## Execution 08B — Intent-Based Agent Skill Delivery -**Status:** implemented and locally verified on 2026-07-28; release-PR refresh, -exact registry publication, and post-publication probe are the next gates. See +**Status:** completed and released on 2026-07-28. Exact +`@inkcre/ui-web@1.3.0` publication and installed-skill loading passed. See [`execution-08b.md`](execution-08b.md). This slice replaces the non-discoverable `agent-skills/` documentation @@ -343,6 +343,10 @@ real TanStack Intent package contract. ## Execution 09 — Opt-In Local UI Source Loop +**Status:** implemented and locally verified across the producer and +`../client-web` on 2026-07-28. The bounded changes are committed locally and +remain unpushed. See [`execution-09.md`](execution-09.md). + This is a fast development lane, never the release contract. ### Ownership and invocation