Skip to content

feat(projects): add list metadata expansions - #60

Merged
marckong merged 3 commits into
mainfrom
marckong/project-list-expansions
Sep 14, 2026
Merged

marckong merged 3 commits into
mainfrom
marckong/project-list-expansions

Conversation

@marckong

@marckong marckong commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Coordinates with Kong/volcano-hosting#959. Syncs the current public OpenAPI contract and generates support for optional project-list Git connection and health metadata.

@marckong
marckong force-pushed the marckong/project-list-expansions branch from 0e280e1 to 3b28560 Compare September 14, 2026 20:39
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@marckong
marckong merged commit 0a7bb3d into main Sep 14, 2026
5 checks passed
@marckong
marckong deleted the marckong/project-list-expansions branch September 14, 2026 20:49
swkeever added a commit that referenced this pull request Sep 17, 2026
* feat(auth): synchronize the local user after profile operations

* fix(auth): preserve session identity during profile updates

* feat(projects): add list metadata expansions (#60)

* feat(projects): add list metadata expansions

* fix(auth): handle raw OAuth provider responses

* fix(openapi): regenerate project list expansions

* chore(main): release 0.5.0 (#131)

Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>

* feat(functions): cache name resolution and invoke the resolved endpoint (#132)

* feat(functions): cache name resolution and invoke the resolved endpoint

Every functions.invoke() resolved the name first, so each call paid two
round trips even though the server tells us how long the mapping stays
valid. Cache resolutions for the advertised cache_ttl_seconds, shared
process-wide and keyed by credential so a mapping never crosses an
identity.

Invoke the resolved invoke_url when the server supplies one, which is
how a call reaches the geo-routed endpoint instead of the API host. A
deployment serving no public invocation domain omits it, and those
callers keep using the API invoke path.

A platform 404 means the cached identity is gone, so drop it and resolve
once more. A function that answers 404 itself carries the version header
and is returned as-is rather than invoked twice.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(functions): collapse concurrent resolves and refuse plaintext endpoints

A cold cache or an expiring TTL let every caller open its own
/functions/resolve. Concurrent misses for one name now serialize on a
striped lock, so one round trip serves them all.

An https API is no longer downgraded: a resolve response may only name a
plaintext invocation endpoint when the API itself is plaintext, since the
request carries the caller's bearer token.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(functions): treat a malformed invoke_url as unusable rather than raising

urlsplit raises ValueError on an unclosed IPv6 literal or an out-of-range
port, so a malformed resolve response escaped invoke() instead of falling
back to the API path. JavaScript and Ruby already degrade for the same
input; Python now matches them, including for a host containing
whitespace, which it previously accepted.

Reported by @shawnwu-kong in review.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(main): release 0.6.0 (#134)

Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>

* fix(realtime): drain presence replies after cancellation (#139)

* chore(main): release 0.6.1 (#140)

Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>

* fix(realtime): separate explicit pause from transport recovery (#141)

* fix(realtime): separate explicit pause from transport recovery

* fix(realtime): preserve presence messages and repeated pause state

* chore(main): release 0.6.2 (#142)

Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>

* fix(realtime): separate callback work from transport shutdown (#143)

* fix(realtime): separate callback work from transport shutdown

* fix(realtime): defer callbacks until worker registration completes

* chore(main): release 0.6.3 (#144)

Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>

* fix(realtime): await subscription readiness outside the connection lock (#138)

* fix(realtime): await subscription readiness outside the connection lock

* fix(realtime): invalidate readiness and finish local teardown

* fix(realtime): preserve subscription intent across queued calls

* fix(realtime): invalidate requests on every stop operation

* chore(main): release 0.6.4 (#145)

Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>

* fix(realtime): finish native unsubscribe before propagating cancellation (#146)

* chore(main): release 0.6.5 (#147)

Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>

* fix(functions): retry a stale mapping on the dispatch signal (#136)

* fix(functions): retry a stale mapping on the dispatch signal

The 404 retry was gated on X-Volcano-Version being absent, on the assumption
that only a function runtime sets it. The server stamps it on every response,
including platform errors raised before dispatch, so the branch never ran: a
cached name->id mapping for a deleted function stayed until its TTL expired.

X-Volcano-Function-Invoked is set only after the platform dispatched, so its
absence is the signal that was wanted. The distinction still matters in the
other direction — a function answering 404 itself must not be invoked twice —
which is why this is not simply a retry on any 404.

The tests missed it by manufacturing a headerless platform 404 the server never
produces. The HTTP-level server now stamps the version header on every response
the way the real one does, so keying off it again fails here.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(functions): classify platform failures on the dispatch signal

The stale-mapping retry was not the only thing keyed on the version header
being absent. The same broken invariant decided whether a non-2xx was the
platform refusing or the function answering, so every platform failure — a
failed or provisioning deploy, a quota refusal — came back as though the
function had returned it, instead of raising.

The server stamps the version header on every response, so the branch that
raises could never be taken. It keys on the dispatch marker now, which is set
only after the function runs.

The tests passed because they mocked a non-2xx without the version header, a
shape the server does not produce. They carry both headers now, and a new case
covers the platform refusal that nothing exercised.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(main): release 0.6.6 (#148)

Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>

* docs: say where a function invocation is sent (#135)

invoke() no longer posts to api_url, and a reader restricting outbound requests
has to know that the call goes to the function's own domain.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(contract): bind the function invocation scenario (#137)

SDK-FUNCTIONS-001 covers invoking by name reaching the endpoint the platform
resolved. The fixture deploys a function that echoes one field, so the
assertion distinguishes the SDK returning something from the SDK reaching that
function — the endpoint is on a domain the API URL does not name, and a client
that built a host from its API URL would reach nothing.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(packaging): publish Python releases as volcano-sdk-python (#149)

* fix(packaging): publish Python releases as volcano-sdk-python

* test(packaging): validate distribution metadata before upload

* chore(main): release 0.6.7 (#150)

Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>

---------

Co-authored-by: Mark Kim <103070941+marckong@users.noreply.github.com>
Co-authored-by: kong-volcano-app[bot] <305569927+kong-volcano-app[bot]@users.noreply.github.com>
Co-authored-by: Marco Palladino <88.marco@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.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.

2 participants