auth-yes/tasks/complete/2026-0821.03.jul.story.auth-yes.modular-workspace-1855.md
Tyler Gillispie 474cc177ce chore: adopt dual licensing and import task history & scaffolding
- Add LICENSE-MIT and LICENSE-APACHE for dual MIT / Apache-2.0 distribution
- Update root LICENSE pointer, README.md, Deno workspace manifests, and Cargo.toml
- Add deno.lock dependency lockfile
- Format AGENTS.md system guidelines
- Import task lifecycle scaffolding and historical story specifications (extract-auth-yes, setup-ts architecture, modular workspace)
2026-08-21 15:20:36 -07:00

81 lines
3.6 KiB
Markdown

# TASK METADATA
- **Target Files:** `auth-yes/deno.json`, `auth-yes/sdk/deno.json`,
`auth-yes/server/deno.json`, `auth-yes/ui/deno.json`, `auth-yes/sdk/gen/*`
- **Core Objective:** Architect the modular Deno workspace structure for the
standalone auth-yes repository to ensure `@auth-yes/sdk` is fully isolated and
cleanly exportable.
- **Dependencies:** None.
- **Additional Important Notes:**
- Package naming standard: `@auth-yes/sdk`, `@auth-yes/server`,
`@auth-yes/ui`.
- `@auth-yes/sdk` must have zero database or server imports and be consumable
independently.
- UI JSX compilation relies on `"jsx": "react-jsx"` with
`"jsxImportSource": "jsr:@hono/hono@4/jsx"` (pure Hono SSR, zero React
dependencies).
---
## Architectural Considerations & Risks
- **Risks:** The primary risk is a circular dependency or importing server-side
logic into the SDK, which would break the isolation of the SDK. If the SDK
depends on the server, external consumers (like ed-droid) will be forced to
download unnecessary and potentially insecure backend dependencies.
- **Dependency Decoupling for Contracts:** The generated ConnectRPC contracts
(`auth_pb.ts` and `auth_connect.ts`) currently reside in `server/gen/`. To
ensure the SDK has 100% zero dependencies on `./server`, these generated files
must be moved into the SDK (e.g., `sdk/gen/`). This way, consumers of
`@auth-yes/sdk` will have all necessary type definitions and client stubs
without needing any server files. The server package can then import these
service contracts from the SDK.
- **JSX Compiler Standard (Zero React):** TypeScript and Deno use
`"jsx": "react-jsx"` as the compiler standard for the modern JSX transform.
When paired with `"jsxImportSource": "jsr:@hono/hono@4/jsx"`, TypeScript
targets Hono's lightweight native SSR engine without pulling in any React
runtime or dependencies.
- **Alternatives:** We could extract the proto contracts into a separate fourth
workspace member (e.g., `api-contracts`). However, moving them directly into
the SDK is simpler and provides exactly what external consumers need in a
single package.
## Proposed Implementation
### Phase 1: Root Workspace Definition
1. Create a root `deno.json` in `auth-yes/` managing workspace members:
`"./sdk"`, `"./server"`, `"./ui"`.
2. Configure workspace-wide tasks (`lint`, `fmt`, `check`, `test`).
### Phase 2: SDK Package Isolation
1. Create `auth-yes/sdk/deno.json` with package name `@auth-yes/sdk`, version
`0.1.0`, and export definition (`"exports": "./mod.ts"`).
2. Move the generated ConnectRPC contracts from `server/gen/` into `sdk/gen/`.
3. Update `sdk/mod.ts` to export client functions and proto types, ensuring zero
imports point to `../server` or `../ui`.
### Phase 3: Server and UI Package Configuration
1. Create `auth-yes/server/deno.json` with package name `@auth-yes/server`.
2. Update `auth-yes/server/main.ts` to import service contracts directly from
`@auth-yes/sdk`.
3. Create `auth-yes/ui/deno.json` with package name `@auth-yes/ui`, including:
```json
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "jsr:@hono/hono@4/jsx"
}
```
4. Verify that the Rust `spire_ffi` crate is properly referenced by `server/`
and is not exposed or imported by `@auth-yes/sdk`.
### Phase 4: Workspace Verification & Quality Gates
1. Run `deno fmt` across all workspace members.
2. Run `deno lint` to ensure zero import violations.
3. Run `deno check sdk/**/*.ts server/**/*.ts ui/**/*.ts` to verify clean
cross-package type resolutions.
4. Run `deno test -A` to verify test suite execution.