Commit Graph
7 Commits
Author SHA1 Message Date
Bendik Aagaard LynghaugandClaude Fable 5.1 f5027a2bd4 Desk buttons that say what they do, stages in words, declined only before starting
Lint and reload / lint (push) Skipped
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 06:01:57 +02:00
Bendik Aagaard LynghaugandClaude Fable 5.1 d0af3c88d5 The mails, worded: what happened and what you can do, in a few lines
Lint and reload / lint (push) Skipped
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 23:02:48 +02:00
Bendik Aagaard LynghaugandClaude Fable 5.1 77b62afaa2 Every stage that matters mails the person who sent it
Lint and reload / lint (push) Skipped
The brief, the trial and a custody case tell the submitter when they
arrive and when they are decided; the sender is portal@uhhm.no with
replies to bl@uhhm.no. Built by portal-trainer from plans/uhhm.yaml
with `mails:` on the needs; pins to portal and iris v0.3.44.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 21:19:10 +02:00
Bendik Aagaard LynghaugandClaude Fable 5.1 5b657828e1 uhhm.no rebuilt from a trainer plan: trials, and the redoal custodians
Lint and reload / lint (push) Skipped
Built by portal-trainer from plans/uhhm.yaml (uhhm/portal-trainer,
runs/uhhm-2026-09-23): the five live buckets keep their state and
event names, so every record on the owners' desk stays. New: `trials`,
a business trying the trainer on its own workflow, approved by an
owner before anything is built (the n8n preview workflow comes later,
noted as attended_by); `custody_requests`, what reaches UHHM as the
custodian of the redoal network, on a custodians' desk owners can
watch. Owners invite into both desks. needs.yaml holds the site to
its needs from here on; the lint reads it.

Gone from the live site: the starred-repos card, the proposal editor
with its file picker and /review/[record], and the /applied, /project
and /subscribed followups (now /received/<need>; the unsubscribe move
is /decide/subscribe). The pins move to v0.3.42: `invite:` and
`attended_by` need a portal newer than the v0.3.36 this site runs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 15:09:48 +02:00
Bendik Aagaard LynghaugandClaude Sonnet 5 c07f8c880d Drop the investor concern entirely
Lint and reload / lint (push) Successful in 2s
Lint and reload / reload (push) Successful in 0s
It was a worked example of the empathic pattern, not a feature: every
alternative should be empathic, informative, and helpful - information
that gives an answer, not necessarily a path to choose. The pattern
stays (voice rules, README); the investor pages, aggregate, review
alternative, and front-page gateway go. The investors KV bucket and
its test records linger in NATS unreferenced - purge at leisure.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:33:53 +02:00
Bendik Aagaard LynghaugandClaude Sonnet 5 8d10e99726 Actor state machines: employee lifecycle, investors, organizations wired, development proposals
Lint and reload / lint-and-reload (push) Successful in 2s
- applicants grows past the one decision: invited -> active (onboarded)
  -> departed, one continuous graph per person.
- investors: open -> in_dialogue -> committed -> divested, with decline
  edges; submission via a new "I want to invest" alternative on /.
- organizations (prospect -> client -> past_client) finally gets pages:
  a review listing with its transitions and a record-a-prospect form.
- development_proposals: the question architecture dogfooding its own
  development - /develop-proposal takes proposals from anyone (human
  today, an LLM later through the same public form), /develop lets an
  owner approve or reject, and approval hands off to the automation
  that opens the PR (see infrastructure's development-commit workflow).
  The repo's own lint CI gates the merge, same as any human commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 22:04:11 +02:00
Bendik Aagaard LynghaugandClaude Sonnet 5 4efa26585a Add aggregates.yaml: the full state graph for applicants/subscribers/projects/organizations
Lint and reload / lint-and-reload (push) Successful in 2s
Portal's aggregate state machines used to be compiled Rust, duplicated
across four files plus the bucket-name wiring that dispatched to them.
This is now the single source of truth for what states exist, what
event-type string represents each, and what transitions are legal -
portal loads and validates it at boot/reload (see the paired portal
change). Adding a new aggregate, or reshaping an existing one, is now
a content-only change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:42:57 +02:00