at main
4 folders
4 files
Rebuild RFD platform as a thin client over tangled's bobbin (#1)
* docs: RFD bobbin thin-client redesign spec
* docs: fold in types-only core, feed.comment provenance, layered rendering
* docs: @rfd/core implementation plan (plan 1 of 3)
* feat(core): scaffold @rfd/core package
* feat(core): add parseAtUri
* feat(core): move pure diff parsing into core
* feat(core): add record + envelope types
* feat(core): add config parsing
* test(core): add captured bobbin fixtures
* feat(core): add resilient BobbinPool with failover + health gating
* feat(core): add typed bobbin read methods
* feat(core): resolve owner + repo name to a repoDid context
* refactor(core): use typed XrpcRequestError for 4xx; test 4xx surfacing
* feat(core): add pure proposal status + slug helpers
* feat(core): add createRfd factory + identity adapter
* chore(core): add type-check script and make tsc pass
* docs(core): explain why DOM lib is in tsconfig
* docs: @rfd/core proposal assembly plan (plan 2 of 4)
* feat(core): export XrpcRequestError
* feat(core): add identity.resolvePds
* feat(core): add git-proxy reads (branch, tree, blob)
* feat(core): fetch + parse a pull's patch from the author PDS
* feat(core): assemble proposals from tree + pulls + discussion
* feat(core): expose listProposals/getProposal on createRfd
* fix(core): decode base64 blobs as UTF-8, not Latin-1
* docs: www thin rewrite plan (plan 3 of 4)
* feat(www): switch to @astrojs/node, add getRfd(), drop cloudflare entry
* feat(www): add in-memory short-TTL cache
* feat(www): add design tokens, Base layout, simplify Link
* feat(www): add cached read helpers
* feat(core): export parseAtUri
* feat(www): proposal list page reading @rfd/core
* feat(www): web components for login, callback, draft, comment
* feat(www): live discussion server island with comment pagination
* feat(www): proposal detail page with discussion island + comment form
* feat(www): login, callback, and draft pages via web components
* feat(www): pull page, /api/v0 routes, remove claim + [handle] pages
* docs: distribution + cleanup plan (plan 4 of 4)
* chore(www): delete legacy microcosm + cloudflare machinery
* chore: remove lexicon codegen package (superseded by @rfd/core types)
* feat: add Dockerfile for self-hosting
* ci: add Docker Hub publish workflow (tag-triggered)
* docs: add Railway config, .env.example, and self-host README
* refactor(www): drop duplicated diff-parser from client draft.ts
* fix(www): register web components client-side via Base layout
Components call customElements.define at module load; importing them in page
frontmatter ran that server-side and crashed with 'HTMLElement is not defined'.
Register once in a client <script> in the shared Base layout instead.
* feat(www): use granular oauth scopes instead of transition:generic
Replace the broad transition:generic grant with granular repo/blob scopes
covering exactly what the app writes: tangled pull + feed comment records
and gzipped patch blobs.
Rebuild RFD platform as a thin client over tangled's bobbin (#1)
* docs: RFD bobbin thin-client redesign spec
* docs: fold in types-only core, feed.comment provenance, layered rendering
* docs: @rfd/core implementation plan (plan 1 of 3)
* feat(core): scaffold @rfd/core package
* feat(core): add parseAtUri
* feat(core): move pure diff parsing into core
* feat(core): add record + envelope types
* feat(core): add config parsing
* test(core): add captured bobbin fixtures
* feat(core): add resilient BobbinPool with failover + health gating
* feat(core): add typed bobbin read methods
* feat(core): resolve owner + repo name to a repoDid context
* refactor(core): use typed XrpcRequestError for 4xx; test 4xx surfacing
* feat(core): add pure proposal status + slug helpers
* feat(core): add createRfd factory + identity adapter
* chore(core): add type-check script and make tsc pass
* docs(core): explain why DOM lib is in tsconfig
* docs: @rfd/core proposal assembly plan (plan 2 of 4)
* feat(core): export XrpcRequestError
* feat(core): add identity.resolvePds
* feat(core): add git-proxy reads (branch, tree, blob)
* feat(core): fetch + parse a pull's patch from the author PDS
* feat(core): assemble proposals from tree + pulls + discussion
* feat(core): expose listProposals/getProposal on createRfd
* fix(core): decode base64 blobs as UTF-8, not Latin-1
* docs: www thin rewrite plan (plan 3 of 4)
* feat(www): switch to @astrojs/node, add getRfd(), drop cloudflare entry
* feat(www): add in-memory short-TTL cache
* feat(www): add design tokens, Base layout, simplify Link
* feat(www): add cached read helpers
* feat(core): export parseAtUri
* feat(www): proposal list page reading @rfd/core
* feat(www): web components for login, callback, draft, comment
* feat(www): live discussion server island with comment pagination
* feat(www): proposal detail page with discussion island + comment form
* feat(www): login, callback, and draft pages via web components
* feat(www): pull page, /api/v0 routes, remove claim + [handle] pages
* docs: distribution + cleanup plan (plan 4 of 4)
* chore(www): delete legacy microcosm + cloudflare machinery
* chore: remove lexicon codegen package (superseded by @rfd/core types)
* feat: add Dockerfile for self-hosting
* ci: add Docker Hub publish workflow (tag-triggered)
* docs: add Railway config, .env.example, and self-host README
* refactor(www): drop duplicated diff-parser from client draft.ts
* fix(www): register web components client-side via Base layout
Components call customElements.define at module load; importing them in page
frontmatter ran that server-side and crashed with 'HTMLElement is not defined'.
Register once in a client <script> in the shared Base layout instead.
* feat(www): use granular oauth scopes instead of transition:generic
Replace the broad transition:generic grant with granular repo/blob scopes
covering exactly what the app writes: tangled pull + feed comment records
and gzipped patch blobs.
Rebuild RFD platform as a thin client over tangled's bobbin (#1)
* docs: RFD bobbin thin-client redesign spec
* docs: fold in types-only core, feed.comment provenance, layered rendering
* docs: @rfd/core implementation plan (plan 1 of 3)
* feat(core): scaffold @rfd/core package
* feat(core): add parseAtUri
* feat(core): move pure diff parsing into core
* feat(core): add record + envelope types
* feat(core): add config parsing
* test(core): add captured bobbin fixtures
* feat(core): add resilient BobbinPool with failover + health gating
* feat(core): add typed bobbin read methods
* feat(core): resolve owner + repo name to a repoDid context
* refactor(core): use typed XrpcRequestError for 4xx; test 4xx surfacing
* feat(core): add pure proposal status + slug helpers
* feat(core): add createRfd factory + identity adapter
* chore(core): add type-check script and make tsc pass
* docs(core): explain why DOM lib is in tsconfig
* docs: @rfd/core proposal assembly plan (plan 2 of 4)
* feat(core): export XrpcRequestError
* feat(core): add identity.resolvePds
* feat(core): add git-proxy reads (branch, tree, blob)
* feat(core): fetch + parse a pull's patch from the author PDS
* feat(core): assemble proposals from tree + pulls + discussion
* feat(core): expose listProposals/getProposal on createRfd
* fix(core): decode base64 blobs as UTF-8, not Latin-1
* docs: www thin rewrite plan (plan 3 of 4)
* feat(www): switch to @astrojs/node, add getRfd(), drop cloudflare entry
* feat(www): add in-memory short-TTL cache
* feat(www): add design tokens, Base layout, simplify Link
* feat(www): add cached read helpers
* feat(core): export parseAtUri
* feat(www): proposal list page reading @rfd/core
* feat(www): web components for login, callback, draft, comment
* feat(www): live discussion server island with comment pagination
* feat(www): proposal detail page with discussion island + comment form
* feat(www): login, callback, and draft pages via web components
* feat(www): pull page, /api/v0 routes, remove claim + [handle] pages
* docs: distribution + cleanup plan (plan 4 of 4)
* chore(www): delete legacy microcosm + cloudflare machinery
* chore: remove lexicon codegen package (superseded by @rfd/core types)
* feat: add Dockerfile for self-hosting
* ci: add Docker Hub publish workflow (tag-triggered)
* docs: add Railway config, .env.example, and self-host README
* refactor(www): drop duplicated diff-parser from client draft.ts
* fix(www): register web components client-side via Base layout
Components call customElements.define at module load; importing them in page
frontmatter ran that server-side and crashed with 'HTMLElement is not defined'.
Register once in a client <script> in the shared Base layout instead.
* feat(www): use granular oauth scopes instead of transition:generic
Replace the broad transition:generic grant with granular repo/blob scopes
covering exactly what the app writes: tangled pull + feed comment records
and gzipped patch blobs.
Rebuild RFD platform as a thin client over tangled's bobbin (#1)
* docs: RFD bobbin thin-client redesign spec
* docs: fold in types-only core, feed.comment provenance, layered rendering
* docs: @rfd/core implementation plan (plan 1 of 3)
* feat(core): scaffold @rfd/core package
* feat(core): add parseAtUri
* feat(core): move pure diff parsing into core
* feat(core): add record + envelope types
* feat(core): add config parsing
* test(core): add captured bobbin fixtures
* feat(core): add resilient BobbinPool with failover + health gating
* feat(core): add typed bobbin read methods
* feat(core): resolve owner + repo name to a repoDid context
* refactor(core): use typed XrpcRequestError for 4xx; test 4xx surfacing
* feat(core): add pure proposal status + slug helpers
* feat(core): add createRfd factory + identity adapter
* chore(core): add type-check script and make tsc pass
* docs(core): explain why DOM lib is in tsconfig
* docs: @rfd/core proposal assembly plan (plan 2 of 4)
* feat(core): export XrpcRequestError
* feat(core): add identity.resolvePds
* feat(core): add git-proxy reads (branch, tree, blob)
* feat(core): fetch + parse a pull's patch from the author PDS
* feat(core): assemble proposals from tree + pulls + discussion
* feat(core): expose listProposals/getProposal on createRfd
* fix(core): decode base64 blobs as UTF-8, not Latin-1
* docs: www thin rewrite plan (plan 3 of 4)
* feat(www): switch to @astrojs/node, add getRfd(), drop cloudflare entry
* feat(www): add in-memory short-TTL cache
* feat(www): add design tokens, Base layout, simplify Link
* feat(www): add cached read helpers
* feat(core): export parseAtUri
* feat(www): proposal list page reading @rfd/core
* feat(www): web components for login, callback, draft, comment
* feat(www): live discussion server island with comment pagination
* feat(www): proposal detail page with discussion island + comment form
* feat(www): login, callback, and draft pages via web components
* feat(www): pull page, /api/v0 routes, remove claim + [handle] pages
* docs: distribution + cleanup plan (plan 4 of 4)
* chore(www): delete legacy microcosm + cloudflare machinery
* chore: remove lexicon codegen package (superseded by @rfd/core types)
* feat: add Dockerfile for self-hosting
* ci: add Docker Hub publish workflow (tag-triggered)
* docs: add Railway config, .env.example, and self-host README
* refactor(www): drop duplicated diff-parser from client draft.ts
* fix(www): register web components client-side via Base layout
Components call customElements.define at module load; importing them in page
frontmatter ran that server-side and crashed with 'HTMLElement is not defined'.
Register once in a client <script> in the shared Base layout instead.
* feat(www): use granular oauth scopes instead of transition:generic
Replace the broad transition:generic grant with granular repo/blob scopes
covering exactly what the app writes: tangled pull + feed comment records
and gzipped patch blobs.
Rebuild RFD platform as a thin client over tangled's bobbin (#1)
* docs: RFD bobbin thin-client redesign spec
* docs: fold in types-only core, feed.comment provenance, layered rendering
* docs: @rfd/core implementation plan (plan 1 of 3)
* feat(core): scaffold @rfd/core package
* feat(core): add parseAtUri
* feat(core): move pure diff parsing into core
* feat(core): add record + envelope types
* feat(core): add config parsing
* test(core): add captured bobbin fixtures
* feat(core): add resilient BobbinPool with failover + health gating
* feat(core): add typed bobbin read methods
* feat(core): resolve owner + repo name to a repoDid context
* refactor(core): use typed XrpcRequestError for 4xx; test 4xx surfacing
* feat(core): add pure proposal status + slug helpers
* feat(core): add createRfd factory + identity adapter
* chore(core): add type-check script and make tsc pass
* docs(core): explain why DOM lib is in tsconfig
* docs: @rfd/core proposal assembly plan (plan 2 of 4)
* feat(core): export XrpcRequestError
* feat(core): add identity.resolvePds
* feat(core): add git-proxy reads (branch, tree, blob)
* feat(core): fetch + parse a pull's patch from the author PDS
* feat(core): assemble proposals from tree + pulls + discussion
* feat(core): expose listProposals/getProposal on createRfd
* fix(core): decode base64 blobs as UTF-8, not Latin-1
* docs: www thin rewrite plan (plan 3 of 4)
* feat(www): switch to @astrojs/node, add getRfd(), drop cloudflare entry
* feat(www): add in-memory short-TTL cache
* feat(www): add design tokens, Base layout, simplify Link
* feat(www): add cached read helpers
* feat(core): export parseAtUri
* feat(www): proposal list page reading @rfd/core
* feat(www): web components for login, callback, draft, comment
* feat(www): live discussion server island with comment pagination
* feat(www): proposal detail page with discussion island + comment form
* feat(www): login, callback, and draft pages via web components
* feat(www): pull page, /api/v0 routes, remove claim + [handle] pages
* docs: distribution + cleanup plan (plan 4 of 4)
* chore(www): delete legacy microcosm + cloudflare machinery
* chore: remove lexicon codegen package (superseded by @rfd/core types)
* feat: add Dockerfile for self-hosting
* ci: add Docker Hub publish workflow (tag-triggered)
* docs: add Railway config, .env.example, and self-host README
* refactor(www): drop duplicated diff-parser from client draft.ts
* fix(www): register web components client-side via Base layout
Components call customElements.define at module load; importing them in page
frontmatter ran that server-side and crashed with 'HTMLElement is not defined'.
Register once in a client <script> in the shared Base layout instead.
* feat(www): use granular oauth scopes instead of transition:generic
Replace the broad transition:generic grant with granular repo/blob scopes
covering exactly what the app writes: tangled pull + feed comment records
and gzipped patch blobs.
Rebuild RFD platform as a thin client over tangled's bobbin (#1)
* docs: RFD bobbin thin-client redesign spec
* docs: fold in types-only core, feed.comment provenance, layered rendering
* docs: @rfd/core implementation plan (plan 1 of 3)
* feat(core): scaffold @rfd/core package
* feat(core): add parseAtUri
* feat(core): move pure diff parsing into core
* feat(core): add record + envelope types
* feat(core): add config parsing
* test(core): add captured bobbin fixtures
* feat(core): add resilient BobbinPool with failover + health gating
* feat(core): add typed bobbin read methods
* feat(core): resolve owner + repo name to a repoDid context
* refactor(core): use typed XrpcRequestError for 4xx; test 4xx surfacing
* feat(core): add pure proposal status + slug helpers
* feat(core): add createRfd factory + identity adapter
* chore(core): add type-check script and make tsc pass
* docs(core): explain why DOM lib is in tsconfig
* docs: @rfd/core proposal assembly plan (plan 2 of 4)
* feat(core): export XrpcRequestError
* feat(core): add identity.resolvePds
* feat(core): add git-proxy reads (branch, tree, blob)
* feat(core): fetch + parse a pull's patch from the author PDS
* feat(core): assemble proposals from tree + pulls + discussion
* feat(core): expose listProposals/getProposal on createRfd
* fix(core): decode base64 blobs as UTF-8, not Latin-1
* docs: www thin rewrite plan (plan 3 of 4)
* feat(www): switch to @astrojs/node, add getRfd(), drop cloudflare entry
* feat(www): add in-memory short-TTL cache
* feat(www): add design tokens, Base layout, simplify Link
* feat(www): add cached read helpers
* feat(core): export parseAtUri
* feat(www): proposal list page reading @rfd/core
* feat(www): web components for login, callback, draft, comment
* feat(www): live discussion server island with comment pagination
* feat(www): proposal detail page with discussion island + comment form
* feat(www): login, callback, and draft pages via web components
* feat(www): pull page, /api/v0 routes, remove claim + [handle] pages
* docs: distribution + cleanup plan (plan 4 of 4)
* chore(www): delete legacy microcosm + cloudflare machinery
* chore: remove lexicon codegen package (superseded by @rfd/core types)
* feat: add Dockerfile for self-hosting
* ci: add Docker Hub publish workflow (tag-triggered)
* docs: add Railway config, .env.example, and self-host README
* refactor(www): drop duplicated diff-parser from client draft.ts
* fix(www): register web components client-side via Base layout
Components call customElements.define at module load; importing them in page
frontmatter ran that server-side and crashed with 'HTMLElement is not defined'.
Register once in a client <script> in the shared Base layout instead.
* feat(www): use granular oauth scopes instead of transition:generic
Replace the broad transition:generic grant with granular repo/blob scopes
covering exactly what the app writes: tangled pull + feed comment records
and gzipped patch blobs.