Skip to content

Serve an OpenAccess descriptor - #69

Merged
ralyodio merged 1 commit into
mainfrom
openaccess-descriptor
Sep 12, 2026
Merged

ralyodio merged 1 commit into
mainfrom
openaccess-descriptor

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Adds apps/web/public/.well-known/openaccess.json so outreachgraph.com is listed on openaccess.logicsrc.com, can be linked with OAuth 2.1 + PKCE, and honours the shared profullstack.com/all-access entitlement. Static file only; no runtime change. The private key is vaulted in logicsrc teams openaccess-app-keys--prod.

Spec: https://logicsrc.com/openaccess

🤖 Generated with Claude Code

https://claude.ai/code/session_01SWRffW4ifQPUrGXJtgYWMd

Lists OutreachGraph on OpenAccess hubs (openaccess.logicsrc.com) so people can
link it with OAuth 2.1 + PKCE and it honours the shared
profullstack.com/all-access entitlement. The Ed25519 public key here is
the app's credential for reporting sales; the private half is in the
logicsrc teams vault openaccess-app-keys--prod. Scopes are empty for now:
the reserved openid, email and entitlements scopes need no listing.

Spec: https://logicsrc.com/openaccess

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWRffW4ifQPUrGXJtgYWMd
@ralyodio
ralyodio merged commit bc7f3b3 into main Sep 12, 2026
3 of 4 checks passed
@ralyodio
ralyodio deleted the openaccess-descriptor branch September 12, 2026 19:27
ralyodio added a commit that referenced this pull request Sep 13, 2026
…71)

A crawl of a site that names no person recorded the company and its
support@ address and then stopped: a recommendation only ever hangs off a
person, so a family-run store with one shared mailbox ended as a company
row and an empty queue. Vendor sites forwarded for outreach are usually
exactly this shape (instantpeptides.com was the one that surfaced it,
issue #70).

The crawl now queues the inbox itself as a lead of a new kind,
`company_inbox`, when and only when the page named nobody. It walks the
same chain as a named person: site identity at 0.9 confidence, a signal
that cites the published address and the company's own description,
scoring, a `send_email` card, the policy engine and the approval queue.
Nothing about the address changes hands: no email identity is written, so
`pickEmailRecipient` still resolves the company inbox as shared and every
shared-inbox limit applies as before.

Where the row being an inbox rather than a person matters, the kind is
read: `isLikelyRoleAccount` is bypassed for this one deliberate, typed row
(scraped role words are still rejected); the composer writes to "the
<company> team" about what the site says instead of greeting a first name
and quoting nobody; `proposeAddresses` and the photo sweep leave it alone;
the approval card labels it "Company inbox".

Migration 0034 adds `people.kind` (default `person`). Also formats the
OpenAccess descriptor that has had `main`'s format check red since #69.


Claude-Session: https://claude.ai/code/session_01W7ec4VgoKNWeoESuvtKK3i

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
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