Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions Zeta.sln
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "CrmSample", "samples\CrmSam
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FactoryDemo.Api.CSharp", "samples\FactoryDemo.Api.CSharp\FactoryDemo.Api.CSharp.csproj", "{E1F00C7B-E03C-4DA4-8B47-E872973529D1}"
Comment thread
AceHack marked this conversation as resolved.
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -183,11 +185,25 @@ Global
{D44AB9CA-F491-41F4-96CE-B061238F3D6E}.Release|x64.Build.0 = Release|Any CPU
{D44AB9CA-F491-41F4-96CE-B061238F3D6E}.Release|x86.ActiveCfg = Release|Any CPU
{D44AB9CA-F491-41F4-96CE-B061238F3D6E}.Release|x86.Build.0 = Release|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Debug|x64.ActiveCfg = Debug|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Debug|x64.Build.0 = Debug|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Debug|x86.ActiveCfg = Debug|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Debug|x86.Build.0 = Debug|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Release|Any CPU.Build.0 = Release|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Release|x64.ActiveCfg = Release|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Release|x64.Build.0 = Release|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Release|x86.ActiveCfg = Release|Any CPU
{E1F00C7B-E03C-4DA4-8B47-E872973529D1}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{D44AB9CA-F491-41F4-96CE-B061238F3D6E} = {5D20AA90-6969-D8BD-9DCD-8634F4692FDA}
{40534D09-439E-4E5F-9A69-A73844DB674D} = {5D20AA90-6969-D8BD-9DCD-8634F4692FDA}
{E1F00C7B-E03C-4DA4-8B47-E872973529D1} = {5D20AA90-6969-D8BD-9DCD-8634F4692FDA}
EndGlobalSection
EndGlobal
45 changes: 45 additions & 0 deletions docs/BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9542,6 +9542,51 @@ Aarav.

---

## P2 — FactoryDemo C# sample — deterministic smoke-test startup

- [ ] **Smoke-test port allocation — replace random-in-range
with OS-assigned ephemeral port.** Codex P2 on PR #147:
`samples/FactoryDemo.Api.CSharp/smoke-test.sh` currently
picks a port from `5100-5499` via `RANDOM`, assumes it is
free, and fails with an address-in-use error if the port
is already occupied (parallel CI jobs, local services,
another smoke run). This creates flaky false negatives
unrelated to API correctness. **Scope:** two viable
approaches — (a) bind `--urls "http://127.0.0.1:0"` and
parse the chosen port from the Kestrel startup line in
the log file, or (b) pre-probe ports in the range with
`nc -z` / `/dev/tcp` and retry until one is free.
Approach (a) is preferred (truly deterministic; no race
window between probe and bind). Sibling
`samples/FactoryDemo.Api.FSharp/smoke-test.sh` has the
same issue and should be fixed in parallel. **Effort:**
S (shell-only, maybe 20 lines across both scripts plus a
log-line parser). **Owner:** devops-engineer. **Source:**
Codex thread `PRRT_kwDOSF9kNM59gdjf` on PR #147.

## P2 — FactoryDemo C# sample — solution project-type GUID hygiene

- [ ] **Align `FactoryDemo.Api.CSharp` project-type GUID
with other SDK-style C# projects.** Copilot finding on
PR #147: `Zeta.sln` lists `FactoryDemo.Api.CSharp` under
the legacy C# project-type GUID
`{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}` while every
other SDK-style C# project (`Core.CSharp`,
`Tests.CSharp`, `Core.CSharp.Tests`) uses the modern
SDK-style GUID `{9A19103F-16F7-4668-BE54-9A1E7A4F7556}`.
Mixing GUIDs can confuse solution-filter tooling and
Visual-Studio solution-node grouping; the `.csproj`
itself is already `<Project Sdk="Microsoft.NET.Sdk.Web">`
so the legacy GUID is purely cosmetic drift from the
initial `dotnet new` template. **Scope:** change the
single GUID in `Zeta.sln` line 32; verify `dotnet
build -c Release` stays at 0W/0E. **Effort:** XS
(single-line GUID swap). **Owner:** devops-engineer or
msbuild-expert. **Source:** Copilot thread
`PRRT_kwDOSF9kNM59geKB` on PR #147.

---

## Source of this backlog

- `docs/MISSED-ITEMS-AUDIT.md` — per-round sweep
Expand Down
58 changes: 58 additions & 0 deletions docs/hygiene-history/live-lock-audit-history.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,61 @@ The full memory context is
| date (UTC) | window | EXT | INTL | SPEC | OTHR | smell? | notes |
|---|---:|---:|---:|---:|---:|---|---|
| 2026-04-23 | 25 | 0% | 72% | 16% | 12% | **FIRING** | Inaugural run. Last 25 merged commits on `origin/main` contain zero src/tests/samples/bench changes. Factory has been running purely on tick-history + BACKLOG + research output for weeks. Response arc: PR #141 (ServiceTitan CRM demo sample) is the pattern-breaker; once #141 merges, the next audit should show non-zero EXT. Audit script landed this run. |

## Lessons integrated

Per `memory/feedback_lesson_permanence_is_how_we_beat_arc3_and_dora_2026_04_23.md`,
every live-lock firing files a lesson here. Each lesson names the
**signature** (what pattern preceded the smell), the **mechanism**
(what caused it), and the **prevention** (what decisions avoid
re-occurrence). Consult this section before opening a speculative arc
— prevention is upstream of detection.

### 2026-04-23 — tick-history-and-BACKLOG-dominance-with-zero-src

- **Signature.** 25 consecutive merged commits on `origin/main` with
exactly zero changes to `src/`, `tests/`, `samples/`, or `bench/`.
Every commit was either a tick-history row, a BACKLOG row, a
research doc, a capability-map, or an ADR. No external-observable
product motion.
- **Mechanism.** The autonomous-loop cron fires every minute per
`docs/AUTONOMOUS-LOOP.md`. The standing never-idle discipline
(`memory/feedback_never_idle_speculative_work_over_waiting.md`)
says speculative work is valid non-idle. But there was no
counter-balancing force pulling the loop toward external-code
work. Every tick, the lowest-friction move was another
tick-history append or BACKLOG grooming. Compounded over dozens of
ticks, the factory drifted into pure meta-work without any agent
catching the drift.
- **Prevention (decisions to embed forward).**
1. **External-priority stack is authoritative, agent-reorderable
only for internal priorities.**
`memory/project_aaron_external_priority_stack_and_live_lock_smell_2026_04_23.md`
names Aaron's stack (ServiceTitan+UI / Aurora / multi-algebra
DB / cutting-edge persistence) as externally-set; the agent
owns internal priorities but not the external stack's
ordering. Speculative work lives under internal;
external-priority work takes precedence when the ratio tilts.
Comment thread
AceHack marked this conversation as resolved.
2. **Live-lock audit runs at round-close as a gate-not-a-report.**
`tools/audit/live-lock-audit.sh` exits 1 when EXT < 20%;
round-close should check this signal. A smell-firing
round-close must include at least one external-priority
increment in the next round's plan before the close ledger
accepts.
3. **Speculative-work permit requires external-ratio check.**
Before opening a new speculative arc (research doc, large
BACKLOG row, capability map), agent reads the current audit
ratio. If smell is firing, no new speculative arcs open until
one external-priority increment lands. This is an *agent-
internal discipline*, not a blocking rule — but it gets cited
in the commit message ("audit EXT=X%, smell=not-firing,
speculative arc opens") so the discipline is visible.
4. **Tick-history rows are NOT external work.** The tick-history
append is ledger-keeping, not product motion. Counting it as
"forward motion" was the silent-drift mechanism. Agents
should explicitly describe tick-history work as INTL and
pair it with EXT work in the same tick when the smell is
near firing.
- **Open carry-forward.** The round-close-ladder wiring is a
follow-up — the audit script is landed, but it is not yet
invoked automatically at round-close. BACKLOG P1 row filed.
Loading
Loading