Commit graph

67 commits

Author SHA1 Message Date
86cbb43965 FT-WP-0001-T14: upload post images instead of linking them
The adapter fetches visual_url from an allowlisted host (https, image types,
10 MB cap, optional read token) and uploads it as multipart sendPhoto, so the
forge can close without breaking post images.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 20:55:32 +02:00
e70c8be67d chore(consistency): refresh the work-record index
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 18:55:13 +02:00
custodian-sync
91290d2963 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-08:
  - update .custodian-brief.md for fluid-telegram

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 18:55:12 +02:00
b88a9a1445 Add FT-WP-0001-T14: upload post images instead of linking them
The forge is closing (ORGREF-WP-0002 decision point 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 18:54:48 +02:00
0ed93ad2dc Record the verified image publish to the private channel
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 10:36:38 +02:00
122bee140a send-post: take reviewed_by from the post file's top-level sign-off
An unsigned file (empty or the <please sign...> placeholder) is refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 10:33:31 +02:00
91c1155461 Record the image generation request to llm-connect
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 10:25:39 +02:00
4861dd994b Attach images to posts and return the Telegram message id
The adapter response now carries telegram_message_id and a t.me/c link.
compose visual resolves a post's image: own visual_url, else the entry's
rendered portrait, else hold an entry with only a visual prompt, else the
HelixForge main image. send-post.sh resolves before touching credentials,
requires an image on public posts and runs the adapter with ATTACH_VISUAL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 10:20:09 +02:00
custodian-sync
b61261d042 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-08:
  - update .custodian-brief.md for fluid-telegram

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 10:11:25 +02:00
42b69d3cc2 Record the first private-channel publish of the outlet test post
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 10:11:00 +02:00
84cc31bfda send-post: run inside warden's attended login envelope
warden replaces HOME and fails closed on output: resolve paths from the
script, keep Go caches at the real home, document the silent invocation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 09:44:41 +02:00
e6d80ad69b send-post: read the bot token from the KV v2 path directly
bao kv get preflights sys/internal/ui/mounts, which returned 403.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 09:41:50 +02:00
b09a5e21d4 Address channels in Bot API form and add a founder-run send script
The provisioner records the MTProto channel id; the Bot API needs -100<id>.
adapter-config now converts it, so the test channel resolves to
-1004427430639. scripts/send-post.sh starts a short-lived adapter with the
bot token injected from OpenBao (never printed) and sends one reviewed post.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 09:36:03 +02:00
custodian-sync
679aad207e chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-08:
  - update .custodian-brief.md for fluid-telegram

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 09:28:41 +02:00
21d3a2f656 Draft the T07 consent basis for the founder's decision
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 09:28:13 +02:00
6a33a6fad5 Fill the R-1 contract digest; publication stays founder-approved
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
2026-10-08 07:34:02 +02:00
custodian-sync
6c2e992a7b chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-08:
  - update .custodian-brief.md for fluid-telegram

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-08 01:15:08 +02:00
ee77641c80 Record the Hall of Helix signing public key.
The private key stays outside the repository. R-1 is not published.

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-08 01:14:37 +02:00
c99a7a1a4e chore(consistency): refresh the work-record index
Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-08 01:11:10 +02:00
custodian-sync
f98d17a23c chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-08:
  - update .custodian-brief.md for fluid-telegram

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-08 01:10:31 +02:00
41f88b6e55 Record the HelixForge bot and private test channel.
provision apply registered @HelixForgeBot and channel 4427430639. The public channel stays held. The resolved file contains no token.

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-08 01:10:00 +02:00
0acc5c02fc chore(consistency): refresh the work-record index
Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-08 00:49:57 +02:00
custodian-sync
47a9f758b7 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-08:
  - update .custodian-brief.md for fluid-telegram

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-08 00:49:51 +02:00
9defd362c6 Record the stored Hall of Helix operator session.
session check validated Coulomb Social. FT-WP-0002 is finished. Live apply is still outstanding.

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-08 00:49:20 +02:00
custodian-sync
b558e25688 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-06:
  - update .custodian-brief.md for fluid-telegram

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-06 00:40:58 +02:00
e8d90d60aa Record the accepted Telegram and signing-key reviews.
The attended registration, channels, session, and key creation are still outstanding.

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-06 00:38:53 +02:00
37afda341d chore(consistency): refresh the work-record index
Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-05 02:53:20 +02:00
custodian-sync
9c28b5fc82 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-05:
  - update .custodian-brief.md for fluid-telegram

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-05 02:52:04 +02:00
94ee3f4f9c FT-WP-0001-T06: add the temporary quoted-remembrance composer.
Assistant: grok
Assistant-Session: 01a1097f-0521-7fd1-8343-23631f633e2e
2026-10-05 02:50:27 +02:00
43fd92f375 chore(consistency): refresh the work-record index
Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-05 01:42:28 +02:00
custodian-sync
a21eb33899 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-05:
  - update .custodian-brief.md for fluid-telegram

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-05 01:39:08 +02:00
47c19de8ac Record the gates in front of the Hall of Helix loop.
FT-WP-0001-T12 was ranked as an implementable dependency root because the
consent, signing-key, operator-session, and experiment waits were still todo.

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-05 01:38:14 +02:00
custodian-sync
512a199a9a chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-10-03:
  - update .custodian-brief.md for fluid-telegram

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 3775@bnt-lap001
Assistant-Session: cfacb6a5-ad5b-4f79-ac67-053e3b0d34a3
2026-10-03 03:27:40 +02:00
3b8fe57918 CUST-WP-0075-T03: route human gates to hub decisions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 3775@bnt-lap001
Assistant-Session: cfacb6a5-ad5b-4f79-ac67-053e3b0d34a3
2026-10-03 03:27:14 +02:00
3494846707 Minor update 2026-10-03 00:35:33 +02:00
custodian-sync
d8daf9432f chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-09-30:
  - update .custodian-brief.md for fluid-telegram

Assistant: claude-code
Assistant-Model: sonnet
Assistant-Process: 101414@bnt-lap001
Assistant-Session: 60b5a221-d435-42b9-b778-983c90c7eed6
2026-09-30 12:51:02 +02:00
7898be8d91 Qualify wait tasks per CUST-WP-0074 (needs_human / depends_on)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: sonnet
Assistant-Process: 101414@bnt-lap001
Assistant-Session: 60b5a221-d435-42b9-b778-983c90c7eed6
2026-09-30 12:50:31 +02:00
custodian-sync
fa26eb4834 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-09-29:
  - update .custodian-brief.md for fluid-telegram

Assistant: claude-code
Assistant-Model: sonnet
Assistant-Process: 237582@bnt-lap001
Assistant-Session: f2b3d9f1-8fb9-4b9c-bc2b-837ec5dfc826
2026-09-29 21:30:15 +02:00
e18ef079b9 Qualify wait tasks per Task Wait Qualifiers v0.1 (CUST-WP-0074-T05, long tail)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: sonnet
Assistant-Process: 237582@bnt-lap001
Assistant-Session: f2b3d9f1-8fb9-4b9c-bc2b-837ec5dfc826
2026-09-29 21:25:25 +02:00
bfebca3aee Implement the R-1 adapter (FT-WP-0001 T05/T09); mark workplans blocked
Builds internal/adapter and cmd/adapter: the three contracts/r1.openapi.yaml
operations, idempotency on post_id, the reviewed_by/consent-basis refusals,
per-form (R-2/R-3) length limits, and Markdown-to-Telegram rendering, all
against a Sender interface so it's testable without a live bot token.

Every other open task in FT-WP-0001 and FT-WP-0002 needs something this repo
can't supply on its own: the human session bootstrap in FT-WP-0002 T01, the
fluid CLI from fluid-core, or a person's judgment (consent basis, editorial
review, publishing pace). Set both workplans to status: blocked and flagged
FT-WP-0002-T01 needs_human on the hub, since it's the single blocker gating
everything else.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: sonnet
Assistant-Process: 278411@bnt-lap001
Assistant-Session: 19568045-15bc-4b88-ba3d-8e95b4f9c6f1
2026-09-27 23:15:37 +02:00
f7f5302903 chore(consistency): write back hub IDs and refresh WORK-RECORDS
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 7184@bnt-lap001
Assistant-Session: 4b436ae2-b17c-4b40-8754-200b161b26e4
2026-09-22 08:35:43 +02:00
custodian-sync
9e15ec51ed chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-09-22:
  - update .custodian-brief.md for fluid-telegram

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 7184@bnt-lap001
Assistant-Session: 4b436ae2-b17c-4b40-8754-200b161b26e4
2026-09-22 08:27:42 +02:00
ce13ceb9fb AGENTS.md: fill unresolved {CREDENTIAL_ROUTING} placeholder with the credential-routing section
statehub register left the literal token (fixed in state-hub 19450d7).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 7184@bnt-lap001
Assistant-Session: 4b436ae2-b17c-4b40-8754-200b161b26e4
2026-09-22 08:26:52 +02:00
1dd402117c Classify open workplans with flavor (CUST-WP-0072).
Set flavor on open workplans from origin/prose/status. Copy existing
depends_on aliases only. Do not promote residuals.

Assistant: grok
Assistant-Session: 01a09dc1-b21e-77e1-919e-fcad2f82b267
2026-09-14 15:50:42 +02:00
1e9481e108 Finish the provisioner's remaining plane: honest check, adapter config, IEI-2
plan --check treated BotFather profile reassertion as drift, so a scheduled
check could never go quiet. Reassertion is now its own kind; a changed spec
digest is the drift signal. apply reasserts the profile, updates channel copy
when the spec changes, and is tested against a fake Telegram surface.

The adapter reads its chat id from resolved state and its token from OpenBao,
never the operator session. IEI-2 records that an approved provisioning plan
is not autonomous Daimon action.

Assistant: grok
Assistant-Session: 01a09d5a-92c1-7802-915b-92bee57fc9f0
2026-09-14 02:55:58 +02:00
f7af151f37 docs: use canonical State Hub reads with caller attribution
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a06ed7-828d-7ca0-a8d4-0c3e5a0c4102
2026-09-05 10:24:18 +02:00
854e807899 Request a credential lane for the Telegram operator
Addressed to ops-warden as the front door, and explicit that the lane
itself is railiance-platform's to create -- ops-warden routes this row
rather than executing it.

States the two things that are easy to get wrong. The lane needs write and
not only read: apply's critical write happens immediately after BotFather
issues the bot token, and a denial there leaves a registered bot whose only
credential is a chat message, with a re-run creating a second bot. And the
redaction salt must never be rotated, so write-once on that path would be
welcome if the lane tooling can express it.

Leaves the <domain> segment open rather than assuming infotech: the only
concrete lane we can read uses "coulomb", which looks like a tenant rather
than a sector, and the segment belongs to its owner.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0172sgCZEEDJcnQmr4SGDvKa

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1361245@bnt-lap001
Assistant-Session: b3b428ef-f3e6-4688-b091-01f71461d66a
2026-09-04 23:11:24 +02:00
c2ba960aee Adopt the confirmed secret layout
platform/workloads/infotech/fluid-telegram/<campaign>/<key>, confirmed with
the owner. The campaign sits between workload and bundle so two campaigns on
one interface cannot read each other's credentials, and both halves stay
overridable because the layout belongs to railiance-platform.

Records what ops-warden is for while it is fresh: it issues SSH certificates
and routes every other credential need to its owner, so it answers how to
authenticate to OpenBao and never holds what is stored there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0172sgCZEEDJcnQmr4SGDvKa

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1361245@bnt-lap001
Assistant-Session: b3b428ef-f3e6-4688-b091-01f71461d66a
2026-09-04 23:03:52 +02:00
ff2b19456f Make the secret layout configuration, not a constant
ops-warden routes API-key needs to railiance-platform, whose convention is
platform/workloads/<domain>/<workload>/<bundle>. This repository invented
secret/fluid-telegram/<campaign>/telegram instead, which is not its call to
make -- a service that picks its own paths in someone else's store is how a
policy ends up written around a mistake.

Mount and prefix are now BAO_MOUNT and FLUID_BAO_PREFIX, with the old scheme
kept as a development fallback. The runbook points at `warden access` for the
current shape and at OIDC login rather than a plain token, and names the
check that tells whether a login actually took.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0172sgCZEEDJcnQmr4SGDvKa

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1361245@bnt-lap001
Assistant-Session: b3b428ef-f3e6-4688-b091-01f71461d66a
2026-09-04 22:32:09 +02:00
de7a7bdd2a Read the standard token sink, and tell a 403 from an outage
NewFromEnv now falls back to ~/.vault-token, the file `bao login` writes and
the bao and vault CLIs already read. An operator who has logged in once
should not have to re-export a secret, and a token that never has to be
typed is a token that never lands in shell history.

Preflight distinguishes the two things a 403 means. An expired token and a
token missing a policy look identical in the error, and the check that
separates them -- whether `bao token lookup` also fails -- is worth naming
where it is read rather than left to be rediscovered.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0172sgCZEEDJcnQmr4SGDvKa

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1361245@bnt-lap001
Assistant-Session: b3b428ef-f3e6-4688-b091-01f71461d66a
2026-09-04 22:27:01 +02:00