`portal-trainer generate` turns a plain-words business intake into a content repo in three phases, each held to portal's question_lint: needs.yaml (then frozen, so the generator cannot weaken the spec to pass), structure (revised against the lint's findings until green), and wording (personas answered blind, misroutes fed back; a rewrite that breaks structure is reverted). Model output is written to disk only under aggregates.yaml, site.yaml and questions/**.yaml. `portal-trainer answer` is the blind answerer alone. The LLM is an external command, prompt on stdin, text on stdout: engines/ollama.sh (local Ollama), engines/anthropic.sh (API key), engines/mailbox.sh (hand each prompt to an agent or a person). portal-portal/ is the onboarding site as a portal content repo: the front door is the intake interview, records land in `onboardings` (open -> drafted <-> revising -> live | declined), and it passes its own needs spec. runs/uhhm-2026-09-21/ollama: qwen3:8b and granite4.1:8b as blind answerers on the same eight tasks. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L4jrCgLiKKHAEFuZUJjckH
18 lines
627 B
YAML
18 lines
627 B
YAML
# One onboarding per business. `open` is the intake as submitted; the
|
|
# generator (portal-trainer generate) turns it into a draft content
|
|
# repo; the business reviews the draft and either it goes live or it
|
|
# comes back for another pass.
|
|
aggregates:
|
|
- bucket: onboardings
|
|
initial: open
|
|
states:
|
|
open: { event: intake_received }
|
|
drafted: { event: draft_generated }
|
|
revising: { event: revision_requested }
|
|
live: { event: went_live }
|
|
declined: { event: declined }
|
|
transitions:
|
|
open: [drafted, declined]
|
|
drafted: [live, revising, declined]
|
|
revising: [drafted, declined]
|