SerenMeninges
The connective tissue of the Seren brain — the shared core for SerenMemory, SerenLoci, SerenCorpusCallosum, SerenLodestar, SerenWorkbench and SerenObservatory. One installable package so the things that must be identical across the family are identical by construction:
resolve_token()— credentials resolution. Config holds a pointer to a secret (env var name, OS-keychain ref) or, as a deliberate escape hatch, an inline literal. Never the secret in plaintext unless you choose it.ServerConfig/TlsConfig+ a lenient yaml/env loader.get_version()— the one version-getter.UpdateChecker—get_version()'s far half: is there a newer release of me? TTL-cached, opt-in, never in the request path. (see below)bearer_auth_middleware()— one constant-time bearer-auth implementation.render_shell()— the viewer's shared shell + design tokens (leaves keep their own tabs).
The governing rule: core holds contracts and mechanisms, never anything
redesign-prone. See ../SPEC.md for the full design, the
inbound/outbound token symmetry, the version-coupling contract, and the
guardrail list of what deliberately stays in the leaf repos.
Extras
Core stays light — pyyaml and starlette, both already present in every leaf
via FastAPI. Anything heavier is opt-in:
pip install seren-meninges # the core
pip install 'seren-meninges[keyring]' # OS-keychain token backend
pip install 'seren-meninges[updates]' # update checking (httpx + packaging)
Headless Jetsons skip [keyring] and fall through to env-var tokens. A box
that never leaves the LAN has no reason to install [updates].
Update checking
get_version() answers what am I running. UpdateChecker answers is there
something newer, by asking the index the package came from.
from seren_meninges.updates import UpdateChecker
checker = UpdateChecker("seren-lodestar") # build it once, at startup
...
status = await checker.get()
status.as_dict()
# {'status': 'ok', 'distribution': 'seren-lodestar', 'installed': '1.4.2',
# 'latest': '1.5.0', 'update_available': True, 'detail': None,
# 'checked_at': 5412.9}
It never raises and it never blocks the request path. Results are cached for
ttl_seconds (6h default) behind a lock, so ten concurrent dashboard hits are
one index request. A wedged index is bounded by timeout_seconds (3s default).
This is deliberately not middleware.
The status is always explicit — one of four values, never a bare None:
| status | meaning |
|---|---|
ok |
we asked and got an answer; read latest and update_available |
disabled |
the operator switched it off |
unavailable |
the [updates] extra isn't installed |
error |
we asked and it didn't work; detail says why |
That distinction is the whole point. "I could not check" and "you are up to
date" are different facts, and collapsing them produces the worst failure mode
there is: a green tick on a box that has no idea. Callers should render
unavailable and error as their own state, not as "fine."
Prereleases are skipped unless you pass allow_prerelease=True, and a
release whose every file is yanked is never offered. Comparison goes through
packaging.version.Version, never string compare — "1.10.0" < "1.9.0"
lexically, which would silently hide every tenth minor release.
Point index_url at a private index if you publish somewhere else; it's a
format string taking {distribution}.
What it deliberately won't do
It won't upgrade anything. Self-upgrade is a lie in every language — a
running process cannot reliably swap its own code out from under itself.
Applying an update is pip install -U <package> plus a restart, which belongs
to whatever supervises the service (NSSM, systemd), not to the service. This
reports; something outside applies.
It also won't check on import, won't check on every request, and won't tell you about a version your own pins can't install — the index's newest is not necessarily your newest.
License
GPL-3.0-or-later.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file seren_meninges-2.2.0.tar.gz.
File metadata
- Download URL: seren_meninges-2.2.0.tar.gz
- Upload date:
- Size: 46.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ece7c84bf5ef00f0afa7bff237c0c1f6a2f623cc97de689f512ee8d38ab24dcb
|
|
| MD5 |
9f58869748fa7c7c6464fbea6accde24
|
|
| BLAKE2b-256 |
68bc4599c6bd6cff618fdc5dfc40568e780fb4896a35e1c5d651805a18538168
|
Provenance
The following attestation bundles were made for seren_meninges-2.2.0.tar.gz:
Publisher:
release.yml on ChadRoesler/SerenMeninges
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seren_meninges-2.2.0.tar.gz -
Subject digest:
ece7c84bf5ef00f0afa7bff237c0c1f6a2f623cc97de689f512ee8d38ab24dcb - Sigstore transparency entry: 2319231204
- Sigstore integration time:
-
Permalink:
ChadRoesler/SerenMeninges@bc24fb0ccbe4bcb78ddc6dee158ebec723675266 -
Branch / Tag:
refs/tags/v2.2.0 - Owner: https://github.com/ChadRoesler
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bc24fb0ccbe4bcb78ddc6dee158ebec723675266 -
Trigger Event:
push
-
Statement type:
File details
Details for the file seren_meninges-2.2.0-py3-none-any.whl.
File metadata
- Download URL: seren_meninges-2.2.0-py3-none-any.whl
- Upload date:
- Size: 36.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a92865c8e03bdbe3a91e5e3958f24ffccda30c59089067cae69ae680b7a26ffa
|
|
| MD5 |
3d44184532f82a3af632d87e996e0efb
|
|
| BLAKE2b-256 |
897347802e2fb423bf0061eea7a654cac4a2d51b64cab2b2001a8c90ba91bac6
|
Provenance
The following attestation bundles were made for seren_meninges-2.2.0-py3-none-any.whl:
Publisher:
release.yml on ChadRoesler/SerenMeninges
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seren_meninges-2.2.0-py3-none-any.whl -
Subject digest:
a92865c8e03bdbe3a91e5e3958f24ffccda30c59089067cae69ae680b7a26ffa - Sigstore transparency entry: 2319231325
- Sigstore integration time:
-
Permalink:
ChadRoesler/SerenMeninges@bc24fb0ccbe4bcb78ddc6dee158ebec723675266 -
Branch / Tag:
refs/tags/v2.2.0 - Owner: https://github.com/ChadRoesler
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bc24fb0ccbe4bcb78ddc6dee158ebec723675266 -
Trigger Event:
push
-
Statement type: