docs: reachableceo wording sweep per 2026-09-09 direct order
House style: the principal identity is named (reachableceo), never 'the founder'. No behavior change. https://projects.knownelement.com/issues/942
This commit is contained in:
@@ -7,7 +7,7 @@ description: >
|
|||||||
schema, and verification. Use whenever asked to "stand up" an identity or
|
schema, and verification. Use whenever asked to "stand up" an identity or
|
||||||
agent, create/fix Cloudron users, wire SSO, debug identity logins or 2FA,
|
agent, create/fix Cloudron users, wire SSO, debug identity logins or 2FA,
|
||||||
or store identity credentials — even if the word "provisioning" is not used.
|
or store identity credentials — even if the word "provisioning" is not used.
|
||||||
Policy-critical: encodes founder rulings #942 (unique passwords, Cloudron-only
|
Policy-critical: encodes reachableceo rulings #942 (unique passwords, Cloudron-only
|
||||||
accounts, no reachableceo credentials).
|
accounts, no reachableceo credentials).
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -19,17 +19,17 @@ Bitwarden vault. The Cloudron is the ONLY identity source: never create local
|
|||||||
accounts in Redmine, Gitea, Discourse, or GLPI — the system account comes into
|
accounts in Redmine, Gitea, Discourse, or GLPI — the system account comes into
|
||||||
existence when the identity completes its first SSO login there.
|
existence when the identity completes its first SSO login there.
|
||||||
|
|
||||||
## Non-negotiable policy (founder rulings — violating these invalidates the work)
|
## Non-negotiable policy (reachableceo rulings — violating these invalidates the work)
|
||||||
|
|
||||||
1. **Unique password per identity.** One identity, one password, used only for
|
1. **Unique password per identity.** One identity, one password, used only for
|
||||||
its Cloudron account. Shared passwords are banned (Redmine #942).
|
its Cloudron account. Shared passwords are banned (Redmine #942).
|
||||||
2. **Cloudron-only accounts.** System access = SSO first-login. No local
|
2. **Cloudron-only accounts.** System access = SSO first-login. No local
|
||||||
accounts, no admin-created users in the downstream systems.
|
accounts, no admin-created users in the downstream systems.
|
||||||
3. **Never use reachableceo credentials.** Items like `creds/gitea-admin`,
|
3. **Never use reachableceo credentials.** Items like `creds/gitea-admin`,
|
||||||
`creds/gitea`, `creds/redmine` are the founder's personal accounts and
|
`creds/gitea`, `creds/redmine` are reachableceo's personal accounts and
|
||||||
carry RESTRICTED notes. If an auth test resolves to user `reachableceo`,
|
carry RESTRICTED notes. If an auth test resolves to user `reachableceo`,
|
||||||
stop — you are holding the founder's identity.
|
stop — you are holding reachableceo's identity.
|
||||||
4. **TOTP seeds MUST be stored in Bitwarden** (founder ruling 2026-09-08).
|
4. **TOTP seeds MUST be stored in Bitwarden** (reachableceo ruling 2026-09-08).
|
||||||
Enroll TOTP and write the base32 seed to the vault item in the same
|
Enroll TOTP and write the base32 seed to the vault item in the same
|
||||||
breath — a seed that is not in the vault is treated as lost, because
|
breath — a seed that is not in the vault is treated as lost, because
|
||||||
there is no admin 2FA reset on this Cloudron and no other record exists.
|
there is no admin 2FA reset on this Cloudron and no other record exists.
|
||||||
@@ -42,9 +42,9 @@ existence when the identity completes its first SSO login there.
|
|||||||
|
|
||||||
## Scope check
|
## Scope check
|
||||||
|
|
||||||
Identity stand-up is the COO C2 lane's assigned program (founder directive,
|
Identity stand-up is the COO C2 lane's assigned program (reachableceo directive,
|
||||||
2026-09-08). If your chat runs in another lane (SRE, security, OAM), confirm
|
2026-09-08). If your chat runs in another lane (SRE, security, OAM), confirm
|
||||||
the founder assigned the stand-up to you before executing, or route a ticket
|
reachableceo assigned the stand-up to you before executing, or route a ticket
|
||||||
to the COO C2 lane instead.
|
to the COO C2 lane instead.
|
||||||
|
|
||||||
## Admin lever: Cloudron API token
|
## Admin lever: Cloudron API token
|
||||||
@@ -70,8 +70,8 @@ seed was lost, then re-enroll with capture. Admin password set:
|
|||||||
### 0. Prerequisites
|
### 0. Prerequisites
|
||||||
|
|
||||||
- Vault reachable: `sm get creds/cloudron` works (see references/vault.md).
|
- Vault reachable: `sm get creds/cloudron` works (see references/vault.md).
|
||||||
- For a NEW Cloudron user: the founder generates the invite, or you create the
|
- For a NEW Cloudron user: reachableceo generates the invite, or you create the
|
||||||
user via the admin token if the founder has authorized self-service.
|
user via the admin token if reachableceo has authorized self-service.
|
||||||
- A Redmine ticket to record the work (create one if none exists).
|
- A Redmine ticket to record the work (create one if none exists).
|
||||||
|
|
||||||
### 1. Cloudron account (unique password)
|
### 1. Cloudron account (unique password)
|
||||||
@@ -114,7 +114,7 @@ by a real TOTP login (a totpToken in a login is silently ignored for users
|
|||||||
without 2FA — "success" there proves nothing).
|
without 2FA — "success" there proves nothing).
|
||||||
|
|
||||||
If the identity already has 2FA enforced and no seed exists anywhere: STOP and
|
If the identity already has 2FA enforced and no seed exists anywhere: STOP and
|
||||||
ask the founder. There is no programmatic recovery (verified 2026-09-08).
|
ask reachableceo. There is no programmatic recovery (verified 2026-09-08).
|
||||||
Compute codes offline when needed: `scripts/totp.sh <seed>`.
|
Compute codes offline when needed: `scripts/totp.sh <seed>`.
|
||||||
|
|
||||||
### 3. TOTP enrollment (in the identity's dashboard session)
|
### 3. TOTP enrollment (in the identity's dashboard session)
|
||||||
@@ -155,7 +155,7 @@ success.
|
|||||||
`POST /api/v1/users/<login>/tokens` using the session (requires basic auth
|
`POST /api/v1/users/<login>/tokens` using the session (requires basic auth
|
||||||
of the same user for token endpoints).
|
of the same user for token endpoints).
|
||||||
- **Discourse**: user API key flow; or admin-generated key if an admin lever
|
- **Discourse**: user API key flow; or admin-generated key if an admin lever
|
||||||
is ever provided (none currently is — do not use founder keys).
|
is ever provided (none currently is — do not use reachableceo keys).
|
||||||
- **GLPI**: My account → API token (personal token); pair with the app token
|
- **GLPI**: My account → API token (personal token); pair with the app token
|
||||||
from `creds/glpi` (password field) for REST calls.
|
from `creds/glpi` (password field) for REST calls.
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
- There is NO admin route to reset another user's 2FA (PUT/PATCH/DELETE on
|
- There is NO admin route to reset another user's 2FA (PUT/PATCH/DELETE on
|
||||||
`/users/<uid>` 2FA variants all 404; the dashboard UI only offers profile
|
`/users/<uid>` 2FA variants all 404; the dashboard UI only offers profile
|
||||||
self-service enrollment). Consequence: TOTP seeds not captured at
|
self-service enrollment). Consequence: TOTP seeds not captured at
|
||||||
enrollment are unrecoverable without the founder.
|
enrollment are unrecoverable without reachableceo.
|
||||||
- Other useful routes seen in the SPA bundle: `/api/v1/tokens`,
|
- Other useful routes seen in the SPA bundle: `/api/v1/tokens`,
|
||||||
`/api/v1/oidc/clients`, `/api/v1/groups`, `/api/v1/eventlog`,
|
`/api/v1/oidc/clients`, `/api/v1/groups`, `/api/v1/eventlog`,
|
||||||
`/api/v1/app_passwords`. Verify behavior at runtime before relying on a
|
`/api/v1/app_passwords`. Verify behavior at runtime before relying on a
|
||||||
@@ -51,10 +51,10 @@ exist (`coo`). Identity emails follow `tsgstaff-<login>@turnsys.com`.
|
|||||||
- Enrollment is profile self-service ONLY. Capture the base32 seed into the
|
- Enrollment is profile self-service ONLY. Capture the base32 seed into the
|
||||||
vault (`sm setfield "<login> Cloudron" totp_seed <seed>`) at enrollment —
|
vault (`sm setfield "<login> Cloudron" totp_seed <seed>`) at enrollment —
|
||||||
there is no admin reset and no recovery path.
|
there is no admin reset and no recovery path.
|
||||||
- Policy RULED (founder, 2026-09-08): TOTP seeds MUST be stored in Bitwarden.
|
- Policy RULED (reachableceo, 2026-09-08): TOTP seeds MUST be stored in Bitwarden.
|
||||||
Enroll 2FA only when the seed is being captured to the vault item in the
|
Enroll 2FA only when the seed is being captured to the vault item in the
|
||||||
same step. Legacy identities whose seeds were never captured (the whole
|
same step. Legacy identities whose seeds were never captured (the whole
|
||||||
August batch) are reset-on-sight candidates: founder clears 2FA or hands
|
August batch) are reset-on-sight candidates: reachableceo clears 2FA or hands
|
||||||
over the seed, then re-enroll with capture.
|
over the seed, then re-enroll with capture.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ rabbit hole (see #939 correction).
|
|||||||
password across cloudron+gitea+redmine+discourse, and the stored password
|
password across cloudron+gitea+redmine+discourse, and the stored password
|
||||||
already fails Cloudron auth (401 tested). Shared passwords are banned
|
already fails Cloudron auth (401 tested). Shared passwords are banned
|
||||||
(#942); treat those items as stale until their owning lane remediates.
|
(#942); treat those items as stale until their owning lane remediates.
|
||||||
- Several "admin" vault candidates resolved to the founder's personal
|
- Several "admin" vault candidates resolved to reachableceo's personal
|
||||||
reachableceo accounts (gitea id 3, redmine user 5) and none were admin
|
reachableceo accounts (gitea id 3, redmine user 5) and none were admin
|
||||||
(gitea: 403 "user should be the site admin"; redmine: 403 on /users.json).
|
(gitea: 403 "user should be the site admin"; redmine: 403 on /users.json).
|
||||||
They now carry RESTRICTED notes. The compliant Cloudron admin lever is the
|
They now carry RESTRICTED notes. The compliant Cloudron admin lever is the
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ turn a provisioning change lands:
|
|||||||
|
|
||||||
| Where | What | How |
|
| Where | What | How |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `TSYSGroupCorporate/TSYSGroupAIOS` `agents/global/AGENTS.md` — "Org chart & agent lanes" | THE canonical operational map (every session loads it via symlink) | branch `coo/…` or lane branch → PR → founder merge |
|
| `TSYSGroupCorporate/TSYSGroupAIOS` `agents/global/AGENTS.md` — "Org chart & agent lanes" | THE canonical operational map (every session loads it via symlink) | branch `coo/…` or lane branch → PR → reachableceo merge |
|
||||||
| `reachableceo/org-buildout` `docs/org-chart.md` | The rendered full-group chart (publishable) | same-turn commit |
|
| `reachableceo/org-buildout` `docs/org-chart.md` | The rendered full-group chart (publishable) | same-turn commit |
|
||||||
| Redmine provisioning ticket | Per-identity state (pw/2FA/seed/systems) | comment with commit URLs |
|
| Redmine provisioning ticket | Per-identity state (pw/2FA/seed/systems) | comment with commit URLs |
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
the API key is stored in the item's password field.
|
the API key is stored in the item's password field.
|
||||||
- Admin surface: `/users.json` lists users (admin only — 403 otherwise).
|
- Admin surface: `/users.json` lists users (admin only — 403 otherwise).
|
||||||
Every admin candidate tested in the vault so far is NON-admin (they are
|
Every admin candidate tested in the vault so far is NON-admin (they are
|
||||||
all the founder's personal accounts anyway — RESTRICTED).
|
all reachableceo's personal accounts anyway — RESTRICTED).
|
||||||
|
|
||||||
## Shared infrastructure hazard
|
## Shared infrastructure hazard
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Authenticated Cloudron admin API call (compliant lever: api-token service
|
# Authenticated Cloudron admin API call (compliant lever: api-token service
|
||||||
# account from vault item creds/cloudron — never the founder's accounts).
|
# account from vault item creds/cloudron — never reachableceo's accounts).
|
||||||
# usage: cloudron-api.sh METHOD /api/v1/PATH [JSON-BODY]
|
# usage: cloudron-api.sh METHOD /api/v1/PATH [JSON-BODY]
|
||||||
# body -> stdout; HTTP status -> stderr. Secrets never printed.
|
# body -> stdout; HTTP status -> stderr. Secrets never printed.
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|||||||
Reference in New Issue
Block a user