m149 c: bench joins the operator surface
c promotes bench into the cli help and the coverage registries, so the command is discoverable and its tests count.
c promotes bench into the cli help and the coverage registries, so the command is discoverable and its tests count.
b makes bench report --apply preview the team.roles diff and only write with --yes.
a adds bench run --offline: a deterministic no-config, no-network default for ci and demos.
m149 hardens the model bench for routine use, then runs the cohort live for real per-role numbers.
m149 hardens the model bench for routine use and runs the candidate cohort live for real per-role numbers.
m148 turns model selection into a reproducible role-keyed benchmark scored on read-only-tool reliability.
a adds a promptfoo wide-net screen over the openrouter cohort, dry-validated in ci without spend.
b3 turns scored rows into a per-role recommendation and an applicable mixed-model team config.
b2 lands bench run: bind a model to a role, run the real agent loop, harvest the ledger into a scored row.
b1 lands the harvest that reads one run's ledger and scores tool-call reliability, with a relevance/irrelevance metric.
m148 turns model selection into a role-keyed benchmark scored on whether a model uses read-only tools without refusing.
per-engagement provider secrets land in the shadow, never reach git history. cost source auto-derives from the engagement identity. m120's visibility surface is now operational.
gap 12 closed minimally. all thirteen sut gaps from rounds 4 and 5 now durable scenarios. flywheel delivered seven closure milestones in two days.
gap 11 was the highest-severity round-4 surprise. m118 closes it pre-dispatch: cap exceeded, no run, event recorded.
gap 18 closed with one fixture step. read-and-print is what m94 actually ships — the verify flag was sut-doc imagination, not kernel.
gap 16 closed with one fixture step. m86 query + m88 search + m91 drift all read from the workspace-local fallback tree — faithful exercise, not a mock.
the capability shipped milestones ago; the scenarios never landed. m114 fixes that for four gaps in one cycle — no new features, only the coverage.
loswfx cost summary rolls up workspace usage × catalog cost; cost by-role breaks down per-role per-model; cost recommend surfaces cheaper alternatives. m96-m99 cluster closes.
loswfx roles list renders the workspace roles table; roles configure <role> --provider --model writes the per-role override; loswf-roles-v1 envelope; 3 @m98 scenarios green.
loswf-catalog-v1 schema lands; per-model context window + cost per million input/output tokens + best-for hint; loswfx providers/models commands surface the catalog.
loswf-auth-v1 store at ~/.loswfx/auth.json; add/list/remove CLI; ResolveAPIKey resolution chain — flag > auth.json > env var; 4 @m96 scenarios green.
loswfx engagement init --interactive prompts through engagement repo, shadow path/repo, skills path, roles; --answers <json-file> script-friendly path; engagement.init.interactive event records the flow.
loswfx engagement replay --log <path> [--json] reads a ledger and replays the decision sequence; 2 @m94 scenarios cover fixture playback + missing-log error path.
loswfx milestone run --live flips the existing dry-run path into chained orchestration; helpful-next-action paths preserved; the kernel can now execute a milestone end-to-end without per-phase operator gating.
three M111 gaps fixed structurally + frozen as durable Gherkin scenarios. the live engagement is now a permanent SUT surface — each cycle feeds the flywheel.
round-3 closes the four round-2 carry-forward gaps: proposals/ quarantine, fake-provider silent-pass downgrades, legacy config preserved across quarantine, skill.load.succeeded/failed events made explicit.
real client work as SUT discipline. Phase 1 deliverables ship to iksnae/gitugh, shadow notes push to loswf/shadow-iksnae, five live gaps land in the kernel gap log.
shadow.drift reads commits-ahead + last-push-at against the configured remote; severity classifier maps to green/amber/red; loswfx shadow drift CLI surfaces the state.
side: dual joins the skill frontmatter validator as a third value; CommitDualArtifact runs the client + shadow commits as an atomic pair with recovered-state on partial failure.
the kernel that wrote 110 milestones today just wrote a real client response. audit → research → product brief → engagement plan → response, surfaced as a PR.
loswfx promote proposal --file <path> --dry-run reads a shadow proposal artifact and renders the would-be PR body with shadow citations as provenance; real PR creation is the m89-followup.
Gap 14a from SUT round 4 closes — init and the M84 probe path now emit the same schema.legacy_read event on legacy reads. operators audit both surfaces uniformly.
loswfx shadow search <query> case-insensitive substring scan across artifact bodies; sort.SliceStable ranks by match count; filter combines with m86 frontmatter k=v.
ten milestones in one grinding session. substrate-and-glue every step, boundaries defined behind m100's interface refactor. the kernel can deploy.
loswfx shadow branch list/create/switch/merge/abandon — agents get full git semantics on shadow; lazy git init turns any shadow path into a real repo; ledger captures every branch lifecycle event.
Tracer + Span boundary lands. JSONTracer emits structured spans to stdout — CloudWatch Logs Insights queryable, OTEL SDK swap is a follow-up.
loswfx shadow query [k=v ...] walks shadow across engagements and filters by frontmatter fields; the cross-engagement substrate becomes queryable; 3 @m86 scenarios green.
operator API gains a milestone-dispatch write endpoint. CLI + API now produce identical audit trails; only data.source differs.
loswfx schema migrate command + migration framework lands; M77 quarantine becomes the fallback path when migrate can't map; engagement.workspace.migrated event records the plan.
credential precedence is now flag > auth.json > SSM > env. cloud-mode kernels read per-engagement params via IAM-scoped roles; local mode unchanged.
config readers tolerate missing schemaVersion; loswfx schema legacy-probe reports legacy state; workspace.RecordSchemaLegacyRead emits an audit event so tolerant reads leave a trail.
EmitMilestoneStateMachine — each scope item becomes a sequential Task state invoking the kernel Lambda. Retry policy + 4h timeout. Halt-and-resume deferred.
loswfx workspace unify migrates legacy .loswf/tools and .loswf/config.yaml into the unified .loswfx/ tree; engagement.workspace.unified ledger event records movedFileCount and configAbsorbed.
Emitter interface + EmittingStore decorator. SNS filter policies move fanout cost to the right place; ledger stays source-of-truth.
repo-audit / product-brief / engagement-plan / build deliverable paths move from proposals/ to .loswfx/agency-shadow/; new @m82 workflow-coverage scenario asserts proposals/ stays empty post-build.
engagement → SAM template in one command. arm64, no VPC, S3 lifecycle, log retention, per-agent IAM. cost-optimization pillar is non-negotiable at the generator level.
docs/loswfx-workspace-spec.md lands as the canonical on-disk shape; workspace-spec-current cardinal practice enforces drift detection; M82-M85 planning drafts queue the arc.
the kernel now ships as a Lambda function — Handler wraps RunKernelWorkflow, three event envelopes, arm64 container image. runtime identical to local; only the entry point changes.
loswfx readiness Readiness panel + JSON gain skills.path coverage; work list annotates items with their most-recent agent.build.partial signal so silent dead-ends surface.
cloud ledger substrate — s3Store + composite primary/mirror — slots in behind m100's interface without touching a single call site.
loswfx agent run --skill resolves the capability; CLI rejects conflicting --skill/--capability pairs; RunAgentCapability refuses on work-item skill mismatch.
first of the m100-m109 aws cloud-deployment arc — ledger.Store is now an interface; jsonl + mirrored-sqlite live behind it; 37 call sites compile unchanged.
RunKernelWorkflow refuses engagement-seeded work items via skill-routing; SuggestedCapabilityForSkill maps skill→capability; engagement.workflow.refused event captures the refusal.
engagement init quarantines pre-existing .loswfx state into a timestamped .loswfx.previous-<utc>/ directory; engagement.init.legacy.quarantined event lands; SUT round-2 gap 1 closes.
the engagement harvest closes: intake → audit → research → brief → plan → iteration → build → ship runs end-to-end against the gitugh fixture as a single chained godog journey.
ship phase activates: scripted review capability gates ready-to-merge signal; retrospective runs against the engagement with What worked / What broke / Carry forward sections; phase ordering enforced.
build artifact records ≥1 intended SUT change + a verification command; the verify capability runs against the build's named SUT and writes a verdict artifact with PASS/FAIL status.
iteration-plan promotes 3-8 child work items with effort estimates; canonical child-promotion write path lands; Skill persists on workflow.WorkItem; titles reference deliverables from the prior phase.
engagement-plan composes 3-7 numbered phases with Risks (≥2) and Out-of-scope sections; phase composition gates on prerequisites; timelines use relative weeks not calendar dates.
product-brief joins simulateBuildArtifact; brief shape mandates frontmatter + Product / Customer goal / Source documents sections + README evidence row; open questions reference missing evidence.
research phase activates: skill-aware build simulation routes per-skill output; brief shape mandates frontmatter + evidence table + 3 numbered findings; the brief lands in shadow not the tracked tree.
audit phase activates with skill metadata on seeded work items, the SUT git-status cleanup, and 8 new step-defs (scripted-build-runs, file-exists-in-engagement-workspace, audit-frontmatter, contract-inputs-warns).
engagement.init.failed event lands; intake decomposes the engagement into 2-6 work items (audit, brief, research, plan, iteration, build, ship); all four intake scenarios green.
engagement init honors a fake-gh env override for fixtures, emits engagement.init.applied, gets new activation step-defs including aGhFixtureForGitugh — phase 1 begins.
eight engagement-phase feature files land as sketches: intake, audit, research, product-brief, engagement-plan, iteration-plan, build, ship — the spec layer for the M67-M75 activation arc.
practices-history.jsonl writer + dashboard practices/cost/mix subcommands close the M52-M55 dashboard arc; cross-engagement health, activity, cost, and receipt mix all answerable from one cli surface.
practices.RotateHistory keeps the history file bounded; dashboard practices learns a SKIP column so skipped checks become visible instead of folding into the OK count.
loswfx milestone grind --cycles N enumerates N consecutive M<N> dispatches; halt-on-closed-highest detection so the driver stops when the queue is drained.
ActivitySeries readmodel + Sparkline/BarChart primitives + the sparkline column lands on the M52 multi-engagement table; dashboard learns to draw.
loswfx milestone run dispatches the m62 milestone-execute capability via RunAgentCapability; --dry-run prints the would-be dispatch; --surface and --role overrides for testing.
milestone-execute joins the capability registry with Name/SystemPrompt/UserPrompt/Tools all wired; dispatcher recognizes it as a first-class capability.
loswf-foreman-chat-transcript-v1 schema lands in shadow; ForemanChatModel renders the bubbletea panel; ChatService wires prompt → existing M34-M40 dispatch path; foreman finally answers.
MilestoneExecuteSystemPromptBody constant encodes the operator's TDD-iterate-until-DoD loop as a capability system prompt; halt conditions named explicitly.
loswfx milestone active surfaces the highest unclosed plan; loswfx milestone run [N] resolves and dispatches; resolveActiveMilestone helper lands; the grinder pattern becomes a kernel command.
VerifySkillContractInputs joins the practices catalog as the 14th cardinal practice; cli handler renders results; skips without SkillsPath; passes without warnings for non-contract skills.
MultiEngagementHealthView readmodel surfaces every engagement on disk with name/status/artifacts/receipts/failed/lastActivity columns; status derives mechanically from receipt + ledger state.
the m50 edit-source detector grows a ledger-reader; rows tagged source: ledger merge with source: artifact rows so feedback cascade events flow into the same analysis.
loswfx flags discovered walks internal/cli for per-group flag discovery; --src override; --json stable map; --diff compares against the default registry.
loswfx health ships as the single-pane operator view: practices total/passed/warned/failed counts, 7d receipts grouped, recent activity top 5, structured verdict — OK / OK WITH WARNINGS / FAILING.
six more milestones — the milestone-grinder loop becomes a loswfx capability: cli surface, prompt body, full Capability interface, --dry-run dispatch, multi-cycle driver, plus practices-history rotation + dashboard SKIP column.
VerifySkillContractInputs lands as the verifier any caller can gate on; required-with-zero-matches fails; optional inputs absent without failing; {repo} substitution honors empty placeholder.
the remaining 19 skills migrate to contract: frontmatter (27 total); schema gains a kind: marker (deliverable/methodology/verdict/criteria); the edit-source detector lands as the cross-engagement learning surface.
four milestones in one cadence pass — contract data goes load-bearing, flag-registry gets a cli, edit-source detector grows a ledger channel, contract-inputs-present joins the catalog as the 14th validator.
the inputs/process/outputs/verification contract that lived as freeform markdown in 14 of 19 skills moves into machine-parseable yaml frontmatter; role-contract validator pilots against 8 skills.
four M43-M47 carry-forwards land in one pass: agent-loop SubmittedTool gate gets a direct unit test, flag-registry gains per-group auto-discovery, 9 M4-M9 tracking docs canonicalized, contributor guide ships.
three @pending tags inside proof_shadow_repo cleared via system-prompt assertions; scripted-adapter cache reset centralized through a godog hook; five direct unit tests pin the matchKeys precedence owed since M45.
two pre-existing proof_* features activated, the last @pending tag cleared in proof_triage_decomposition, scriptedtest gains typed submit-tool builders, and validators learn the soft-warning dimension.

114 commits since v0.3.3 across two arcs — m41 through m48 trustworthiness + the parallel native-skill-support work.
phase script bundle (3 tandem + 8 onboarding), `loswfx config use fake-scripted` operator wiring, milestone-template canonization.
bubbles v1 proposal selection + huh v1 confirmation. x is confirmation-first; cancel returns cleanly without executing.
native tui upgraded to bubbletea v2 + lipgloss v1; explicit foreman panel with keyboard-driven proposal execution.
by-id shortcut for foreman proposal resume — `--approval-request-id <id>` resolves the command automatically.
foreman session view now carries proposal lifecycle counts and renders exact resume commands inline.
approved foreman proposals can be resumed by approval-request id with exact-match consumption semantics.
executable foreman previews can now be recorded as durable pending proposals, reusing the existing approval-request evidence shape.
foreman prompt responses now carry a typed action preview — label, command, safety status, source, work item, trace.
arxiv 2603.16021 surfaces a five-layer folder-and-markdown agent architecture. loswfx independently shipped most of it.
the scripted provider drives a full tandem phase end to end. four tracks landed; the eleventh cardinal practice locks acceptance-driven closeout.
three drift validators land alongside bail visibility and a scripted-provider foundation. the orchestrator stops drifting silently.
loswfx exercises its own pipeline as the system under test. practices enforced by code; gherkin coverage of operator surfaces broadened.
the operator console grew up — bubbletea snapshots, foreman sessions, capability catalogs, and trace correlation all rendered inline.

added the first explicit foreman prompt interface with deterministic intent classification and evidence context.
added deterministic next-action selection to foreman sessions.
derived foreman thread history from durable dispatch and queue evidence.
promoted the first foreman-dispatched action with readiness gating and durable evidence.
turned provider and team setup into a coordinated readiness surface — foreman.
hardened provider readiness with recorded probe results, custom endpoint probes, and gherkin use-case coverage.
addressed trust items from issue 10 with orphan transition diagnostics and 404 semantics for missing work items.
made local loops scriptable and operator-friendly with setup gating and corrected policy-denial semantics.
promoted setup facts from m24 tui behavior into a read model and `/api/status` contract.
made the native tui more useful for local bootstrap with a read-only readiness section.
removed the highest-friction manual configuration step with a helper command.
added the first supported local install path without a full release channel.
converted the manual sample-project smoke into repeatable product guidance and test coverage.
validated current api consumption from the external-client point of view with a deterministic client smoke and openapi fixes.
added the first loswfx-owned agent harness slice with named capability runs.
promoted durable tool_run proposed-action execution through the cli with exact command matching and approval consumption.
turned the local smoke path into repeatable operator guidance with a readiness command and comprehensive docs.
turned m15 observable surface facts into a concrete diagnostics contract with an action eligibility vocabulary.
moved from single-surface contracts to multi-surface operator readiness with surface-scoped fixtures and operator journeys.
turned the m13 external-client decision into a validated contract handoff with an openapi seed, error catalog, and fixture validation.
established the external-client readiness boundary with a contract audit, live-response-backed fixtures, and use-case coverage.
hardened the operator service foundation with a durable jsonl queue projection artifact, freshness diagnostics, and high test coverage.
converted m10 follow-ups into working foundations with bounded queue reads and approval-gated test-evidence resumption.
turned the m9 approval affordance into durable approval request and decision evidence with live-response-backed fixture tests.
turned the m8 tui foundation into a richer workflow console and proved an end-to-end operator loop with contract fixtures.
landed the tui-first native ui foundation and proved service contracts for future external clients.
turned the m6 provider and tool foundation into operator-ready workflows with adrs and a capability catalog.
moved from fake-backed provider execution to a real local-first openai-compatible harness with named tool policy.
proved the first auditable multi-agent factory loop with planner, builder, and reviewer roles and bounded retry.
hardened the provider runtime with a fake-backed execution adapter, normalized result shapes, and execution health.
hardened the projection adapter boundary and added browser automation for command-center validation.
turned the local kernel into an operator-facing foundation with typed read models and a static command center.
proved durable local workflow state, routes, and bounded phase attempts with audit evidence and causal tracing.
the rfp went out may 22; the kernel-versus-host boundary was asserted in code 24 hours later.