The Eco² globe character, refined for this portfolio from the latest official main character: a sky-blue globe with green land, a sprout on top and a brown smiling face
Back to the hall

Eco²

Backend · Cloud infrastructure

Recycling guidance from one photo and a conversation.

An all-in-one AI assistant that understands how recycling works in Korea.

2025.10.31 — 2026.02.10

Team project · infrastructure and deployment foundation → domain backend → async processing, conversational agent, verification

2025 새싹 해커톤 (Saessak Hackathon)Excellence Award · 2025.12.02

  • Web appService closed

A fix kept apart from another agent, a review split by lens

Two cases fixed with coding agents in the Eco² backend. A model is named only where a Claude Opus 4.5 or 4.6 co-author mark records it.

Full legend

How to read · one grammar for every case

  • Columns are who acted; top to bottom is time
  • Solid: a recorded handoff or next step
  • Heavy lapis ↩: a finding that sent work back
  • Dashed: not a recorded execution (a written rule, advice without authority, an unverified boundary)
  • Rectangle: an action
  • Rounded: an observed state or finding
  • Folded corner: an artifact or evidence
  • Hatched column: parts of the product under development (not the agents used to build it)

Case 1 / 2 · Kept apart from the develop branch another agent was using, token streaming was fixed in two passes

January 2026

Kept apart from the develop branch another agent was using, token streaming was fixed in two passes

  1. Coding agentAnother agent

    ActionOther work in progress on develop

    • handoffTree occupied → split off→ Separate worktree · analysis note first (Fix worktree)
  2. Under developmentChat stream

    Observation · findingOnly stage events arrive, no tokens

    • handoffScope: stream emission→ Separate worktree · analysis note first (Fix worktree)
  3. Coding agentFix worktree

    ActionSeparate worktree · analysis note first

    • handoffFiles to change→ Wrap the OpenAI SDK in a LangChain adapter (Fix worktree)
  4. Coding agentFix worktree

    ActionWrap the OpenAI SDK in a LangChain adapter

    • handoff→ PR #437 → merged to develop (Artifacts)
  5. ArtifactsArtifacts

    ArtifactPR #437 → merged to develop

    • handoff→ Worktree · analysis steps in the git-workflow skill (Artifacts)
    • handoffE2E after merge→ Answer tokens duplicated · intent “general” leaks (Chat stream)
  6. Under developmentChat stream

    Observation · findingAnswer tokens duplicated · intent “general” leaks

  7. ArtifactsArtifacts

    ArtifactWorktree · analysis steps in the git-workflow skill

  8. Coding agentFix worktree

    ActionTell the two emitters apart by node · seq → skip captured tokens (two passes)

    • handoffBefore / after→ Recorded SSE excerpts, before and after (Chat stream)
    • handoffCommand-level check→ Local command check: 0 notifier tokens (Artifacts)
  9. Under developmentChat stream

    Observation · findingRecorded SSE excerpts, before and after

  10. ArtifactsArtifacts

    ArtifactLocal command check: 0 notifier tokens

    • handoff→ PR #448 · merged after resolving develop conflicts (Artifacts)
  11. ArtifactsArtifacts

    ArtifactPR #448 · merged after resolving develop conflicts

Context
Chat’s SSE delivered stage events but no tokens. Another agent was working on develop, so the work started with an analysis note in a separate worktree; after the first fix merged, the duplication and leak then observed were narrowed by a second fix.
Outcome
Responsibility for emitting tokens was narrowed to the one node that actually produces them. The command check shows only that the notifier sends no tokens; the recorded SSE excerpts show the E2E observation after it. They are different evidence.
Limit
The other agent’s identity and model, and the number of coding agents, are not recorded. Neither PR had a formal review approval, and this record is neither the current service nor a new E2E run.
Sources and remaining limits
  • Within PR #448, the first patch skipped answer tokens; a follow-up made ProcessChatCommand skip every captured message token. They are not merged into one fix that worked the first time.
  • The analysis note and the before/after SSE excerpts are internal report records in the repository.

February 10, 2026

The evaluator was reviewed lens by lens, and only concrete findings became code

  1. Coding agentImplementation

    ActionCandidate evaluation pipeline

    • handoffLens-by-lens review→ Findings: no sampling · cost guard / mutable results / config outside the closure (Five review lenses)
  2. Review · verificationFive review lenses

    Observation · findingFindings: no sampling · cost guard / mutable results / config outside the closure

  3. Coding agentImplementation

    ActionSample and check daily cost before evaluating

  4. Coding agentImplementation

    ActionFrozen result objects · explicit config binding

    • handoffChecks→ Unit · wiring checks (local · mocked) (Artifacts)
  5. ArtifactsArtifacts

    ArtifactUnit · wiring checks (local · mocked)

    • not a recorded executionDoes not reach this far→ Real Redis + PG E2E: not written at the time (Artifacts)
    • handoff→ PR #546 merged · procedure into the eval-feedback-loop skill (Artifacts)
  6. ArtifactsArtifacts

    Rule · unverifiedReal Redis + PG E2E: not written at the time

  7. ArtifactsArtifacts

    ArtifactPR #546 merged · procedure into the eval-feedback-loop skill

Context
The implementation report for the conversation-evaluation pipeline records five review lenses and two rounds of fixes. The number of lenses is not a number of sessions or agents.
Outcome
The code has a branch that samples and checks daily cost before evaluating, frozen result objects and explicit config binding. If the cost lookup fails, L2 evaluation still proceeds, so it is not a hard cap on spending.
Limit
The five lenses are a way of dividing the review; they do not mean five independent model sessions or approval by human experts. The report’s near-100 internal scores are not a quality measurement and are not carried over.
Sources and remaining limits
  • The PR linked at the head of the report is #545; the public PR that merged Phases 1–4 is #546.
  • The recalibration stub still left open is also stated in the report as it is.