Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
4cd51ca
fix: preserve delegation limits and revoke issued authority
antoinetoussaint-byte Oct 24, 2026
ff19f25
hop: a permissive mode that never blocks a developer
AntoineToussaint Oct 25, 2026
d20c272
fix: preserve advisory identity and avoid guessing hop destinations
antoinetoussaint-byte Oct 25, 2026
dc41de4
feat: derive local developer permissions and diagnose delivered policies
antoinetoussaint-byte Oct 25, 2026
e7afe12
fix: canonicalize issued teams and complete local collection grants
antoinetoussaint-byte Oct 25, 2026
b555608
fix: preserve hop advisory diagnostics in Python
antoinetoussaint-byte Oct 25, 2026
e1b061f
feat: expose bound context resource scopes to Python consumers
antoinetoussaint-byte Oct 25, 2026
0e84c15
fix: bind installation roles and issued permissions to live revisions
antoinetoussaint-byte Oct 25, 2026
3b8bac8
feat: add Go and TypeScript resource scope readers
antoinetoussaint-byte Oct 25, 2026
06d0d3b
fix: align local service graphs with the authority client
antoinetoussaint-byte Oct 25, 2026
e19c5de
fix: preserve signed delivery lifecycle in authority state
antoinetoussaint-byte Oct 25, 2026
819765d
fix: admit solution roles for explicitly consumed permissions
antoinetoussaint-byte Oct 25, 2026
b312726
fix: a warn-mode hop lets through only the authority's policy advisories
AntoineToussaint Oct 25, 2026
85ef9f0
fix: a refused installation list leaves the edge's session standing
AntoineToussaint Oct 25, 2026
5be0a8a
feat: the edge and hop reach the host the composition names
AntoineToussaint Oct 25, 2026
1c3c342
fix: keep resource-limited grants out of kind-wide method admission
antoinetoussaint-byte Oct 25, 2026
b44e831
refactor: name the development authority service local
antoinetoussaint-byte Oct 25, 2026
3925878
fix: authenticate installation callers and test solution tool authority
antoinetoussaint-byte Oct 25, 2026
244c19d
fix: retain solution role authority through person hops
antoinetoussaint-byte Oct 25, 2026
2cd4f99
fix(edge): the session names what a person may use from Issue, not th…
antoinetoussaint-byte Oct 25, 2026
837bd81
fix: preserve delegated limits in target-specific child issuance
antoinetoussaint-byte Oct 25, 2026
e259c71
fix: preserve installation owners across module actors
antoinetoussaint-byte Oct 25, 2026
d4bd61d
fix: infer workload organization from its sole active installation
antoinetoussaint-byte Oct 25, 2026
7b2953e
fix: authenticate installation administration and distinguish missing…
antoinetoussaint-byte Oct 25, 2026
2b68905
fix(edge): the sign-in page is built from the platform's UI kit
antoinetoussaint-byte Oct 25, 2026
df3ca1e
fix: let outbound module calls defer tenant resolution to authority
antoinetoussaint-byte Oct 25, 2026
4c14b68
test: require authority use cases across host implementations
antoinetoussaint-byte Oct 25, 2026
7d00337
hop: an issue returned, asked scopes, and a credential at a resolved …
antoinetoussaint-byte Oct 25, 2026
69b71f0
fix: retain parent permission limits across target hops
antoinetoussaint-byte Oct 25, 2026
13ea57e
fix: require work item tenants and preserve resource-limited admission
antoinetoussaint-byte Oct 25, 2026
49f2cb4
fix: gate advisory runs and share secure authority transport
antoinetoussaint-byte Oct 25, 2026
b1ce545
fix: bind claim reads to the authenticated hop stamp
antoinetoussaint-byte Oct 25, 2026
9f04fc4
fix: isolate session discovery failures and evict cached contexts
antoinetoussaint-byte Oct 25, 2026
c9da431
test: reject drift in the embedded sign-in bundle
antoinetoussaint-byte Oct 25, 2026
46be55f
fix: pin shared stamp validation for standalone hop consumers
antoinetoussaint-byte Oct 25, 2026
31ece59
test: prove concurrent discovery and fence signed-out cache writes
antoinetoussaint-byte Oct 25, 2026
b531e13
fix: version authority changes and require session display names
antoinetoussaint-byte Oct 25, 2026
cc6ac29
fix: route checked hop calls to their published service endpoint
antoinetoussaint-byte Oct 25, 2026
cac1f6b
fix: honor composed mesh transport in the shared authority client
antoinetoussaint-byte Oct 25, 2026
8b9aef7
fix: check canonical HTTP requests without inventory policy substitution
antoinetoussaint-byte Oct 25, 2026
d017f07
test: require ambiguous and absent workload tenant refusals
antoinetoussaint-byte Oct 25, 2026
5614d1b
fix: preserve sessions on authority outages and document sign-out scope
antoinetoussaint-byte Oct 25, 2026
47801a3
fix: gate upstream transport and name the required CLI route producer
antoinetoussaint-byte Oct 25, 2026
2799e70
fix: bind Python and TypeScript claim reads to the hop stamp
antoinetoussaint-byte Oct 25, 2026
aa487df
test: preserve manifest precedence and reject unprotected hop upstreams
antoinetoussaint-byte Oct 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
# authority — agent instructions

This repo is the **host authority interface** and its development implementation,
the **authority gateway**. One sentence of responsibility: declare what a module or
the **local authority**. One sentence of responsibility: declare what a module or
solution calls on its host to be issued and checked authority, and provide the one
small process that implements it on a laptop. If a change makes that sentence need
another clause, it does not belong here.

- **Owns:** the interface declaration; the authority gateway service; later, the
- **Owns:** the interface declaration; the local authority service; later, the
authority proto, verifier and conformance kit moved from core.
- **Never contains:** a second implementation of sign-in, minting or grant
derivation (the authority gateway links the host's packages); a store the host does
derivation (the local authority links the host's packages); a store the host does
not also use; any solution, customer or business-line name; a route of the
product frontend; anything the CLI should do (rendering, per-process launcher
credentials).
- **Depends on:** the host's authority packages (codefly-dev/module-saas-starter)
and core's Work Context types until step 3 moves them here.
- **Depends on today:** Core's Work Context authority/verifier, workload
attestation and composition packages, plus this repo's libraries. The local
service does not currently import module-saas-starter.

The host-package reuse requirement above is an unresolved design obligation:
the existing local issuer/state resolves fixture grants itself. Do not add a
parallel resolver, infer that local tests prove SaaS parity, or silently erase
that obligation to match the implementation. Reconcile it with the host owner.

Rules, governed by https://github.com/obin-ai/handbook/blob/main/concepts/boundaries.md
and the development contract at
Expand Down
400 changes: 334 additions & 66 deletions README.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions interfaces/authority/interface.codefly.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
kind: interface
publisher: codefly.dev
name: authority
description: What a module or solution calls on its host to be issued, checked and verified authority. Implemented by accounts and by the authority gateway.
version: 0.1.0
description: What a module or solution calls on its host to be issued, checked and verified authority. Implemented by accounts and by the local authority.
version: 0.2.0
type: connect
protobuf:
package: host.authority.v1
Expand Down
2 changes: 1 addition & 1 deletion interfaces/session/interface.codefly.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ kind: interface
publisher: codefly.dev
name: session
description: A person signs in at the browser edge, and a page asks who the bearer it was handed is; a module never calls this.
version: 0.1.0
version: 0.2.0
type: connect
protobuf:
package: host.session.v1
Expand Down
4 changes: 2 additions & 2 deletions libraries/authority-client/contract/catalog.codefly.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
"version": "0.0.0",
"endpoints": [
{
"service": "gateway",
"service": "local",
"endpoint": "grpc",
"api": "grpc",
"kind": "protobuf",
"package": "api",
"path": "contract.binpb",
"digest": "sha256:89baa9ae5c5f7940f17b303afdb58824e913427d3fb826c81b24f78e5378d599",
"digest": "sha256:d2fcb57f3608ea6c57918565db2d83cc69d7e9cebee33edadf2160a3fee8d635",
"services": [
{
"name": "GatewayService",
Expand Down
Binary file modified libraries/authority-client/contract/contract.binpb
Binary file not shown.
48 changes: 48 additions & 0 deletions libraries/authority-client/go/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Authority Go client

Codefly generates the RPC bindings in `gen/`. The `workcontext` package adds a
non-verifying projection using Core's maintained decoder and scope containment:

```go
import claims "github.com/codefly-dev/authority/libraries/authority-client/go/workcontext"

// The reader requires incoming metadata and the run-delivered hop proof.
md, _ := metadata.FromIncomingContext(ctx)
c, err := claims.ReadClaims(md, proof)
// Handle err, compare c.Audience() to this module's delivered audience, then:
allowed := c.Allows(resourceKind, action, exactResourceID)
```

`Scopes()` returns deep copies of the final actor's grants, or the owner's grants
when there is no actor. An empty final actor grants nothing. `Allows` evaluates
each candidate independently. An empty requested resource ID asks for the entire
kind; a restricted grant cannot satisfy it. Kind-wide grants cover named IDs.
Actions are literal: no admin implication, wildcard expansion, prefix matching
or union of one grant's actions with another's resources.

The reader checks a bounded canonical envelope and 64-byte signature shape, then
uses Core Decode. Go deliberately retains Core's stronger structural/schema and
attenuation checks; the Python and TypeScript readers only project readable
claims. All three agree on the shared Core-produced fixtures. None verifies a
signature, current time, live revisions or replay. Even a digest-bound context
may have been refused in warning mode. These claims alone never prove authority.
Keep audience, installed-definition, ownership, resource and live-visibility
checks at their existing owners. The exposed protobuf scopes are Core's current
public types during the authority migration; do not mutate returned copies and
expect to change the claims snapshot.

From this directory, run `GOWORK=off go test -race ./...` and `go vet ./...`.
The tests consume `../testdata/claims.json`, whose gateway-side oracle verifies
Core-minted tokens at a fixed fixture clock. Synthetic mutated tokens in unit
tests exercise parsing only and are not valid credentials.

Handwritten code lives outside `gen/`, the directory Codefly replaces. The root
module scaffold is preserved by `codefly generate client`.

The shared `host.Dial` resolves the authority for edge and hop. Remote endpoints
use verified HTTPS/TLS unless the composition asserts
`internal-transport/mesh-protected=true` and the target is an in-cluster Service
DNS name. Plaintext loopback is accepted only in a local Codefly environment.
Configured endpoints and SDK-resolved fallbacks use the same rule. Unreadable or
misspelled mesh assertions refuse before dialing; the shared host client owns
this check for edge and hop, without reviving the retired SDK verifier.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading