Skip to content
Open
Changes from 2 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0ad1af9
learn: retrospective learnings
peco-engineer-bot[bot] Aug 13, 2026
41ee2ca
learn: retrospective learnings
peco-engineer-bot[bot] Aug 15, 2026
d85e724
learn: retrospective learnings
peco-engineer-bot[bot] Aug 18, 2026
274247c
learn: retrospective learnings
peco-engineer-bot[bot] Aug 20, 2026
68e338e
learn: retrospective learnings
peco-engineer-bot[bot] Aug 21, 2026
919525c
learn: retrospective learnings
peco-engineer-bot[bot] Aug 22, 2026
44f18b0
learn: retrospective learnings
peco-engineer-bot[bot] Aug 23, 2026
fddcf13
learn: retrospective learnings
peco-engineer-bot[bot] Aug 25, 2026
3ef3adc
learn: retrospective learnings
peco-engineer-bot[bot] Aug 26, 2026
9d0a18a
learn: retrospective learnings
peco-engineer-bot[bot] Aug 27, 2026
af0767b
learn: retrospective learnings
peco-engineer-bot[bot] Aug 28, 2026
4875a9f
learn: retrospective learnings
peco-engineer-bot[bot] Sep 5, 2026
4fcb4a1
learn: retrospective learnings
peco-engineer-bot[bot] Sep 11, 2026
4d8b987
learn: retrospective learnings
peco-engineer-bot[bot] Sep 17, 2026
f80bbf7
learn: retrospective learnings
peco-engineer-bot[bot] Sep 24, 2026
88f63ea
learn: retrospective learnings
peco-engineer-bot[bot] Sep 28, 2026
ce821ff
learn: retrospective learnings
peco-engineer-bot[bot] Oct 7, 2026
2072b25
learn: retrospective learnings
peco-engineer-bot[bot] Oct 8, 2026
9b5f6d4
learn: retrospective learnings
peco-engineer-bot[bot] Oct 13, 2026
38a7943
learn: retrospective learnings
peco-engineer-bot[bot] Oct 16, 2026
73110cc
learn: retrospective learnings
peco-engineer-bot[bot] Oct 20, 2026
7db4b87
learn: retrospective learnings
peco-engineer-bot[bot] Oct 22, 2026
e987119
learn: retrospective learnings
peco-engineer-bot[bot] Oct 24, 2026
1a1a53e
learn: retrospective learnings
peco-engineer-bot[bot] Oct 28, 2026
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 .claude/knowledge/learning-log.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,20 @@ until a human merges it. The engineer author phase reads this log (see

## Entries

### 2026-08-13: learnings since 2026-08-04T18:01:30Z
- **Context:** PR #905/#906 repaired an HTTP 400 in the retrospective/bot GitHub Actions cron by fixing the `MODEL_ENDPOINT` value.
**Rule:** In bot workflow YAML, set `MODEL_ENDPOINT` to the concrete `https://<host>/serving-endpoints/<model>/invocations` form; do NOT use `.../serving-endpoints/anthropic/invocations`, which hits `sdk_agent.translate_endpoint`'s already-v2 early-return, keeps the trailing `invocations`, and makes the CLI append `/v1/messages` → 400 (unsupported path).
- **Context:** Run #31030595544 fixed TIMESTAMP_NTZ collapsing to 'timestamp' in `cursor.description`; changing `_col_to_description` to emit a new `type_code` would have silently broken the column-based timestamp parser in `utils.py` keyed on `== "timestamp"`.
**Rule:** When you change the DB-API `type_code` string a column reports, grep for every downstream branch that matches that string (e.g. type conversion/parsing in `utils.py`) and extend it too — a new type_code that no existing branch matches leaves values unparsed, a silent regression.
- **Context:** Run #31030595544 diagnosed that Spark `TIMESTAMP` and `TIMESTAMP_NTZ` both arrive over Thrift as `TTypeId.TIMESTAMP_TYPE`, so the enum name alone collapses them (same pattern PR #560 used for VARIANT).
**Rule:** Distinct Spark SQL types that share one Thrift `TTypeId` cannot be disambiguated from the enum name; recover the true type by reading the Arrow field's `Spark:DataType:SqlName` metadata override in `_col_to_description`.
- **Context:** Run #31030595544 verified the TIMESTAMP_NTZ fix; the disambiguating `Spark:DataType:SqlName` Arrow metadata is emitted by the live warehouse, not synthesized client-side.
**Rule:** When a fix depends on server-populated Arrow schema metadata, prove it with an e2e test against the real warehouse (a mocked unit test asserts the metadata you fabricated, not that the server actually emits it); a passing mock is not evidence the wire carries the field.
- **Context:** Run #31030595544's read-only plan phase spent a turn calling `edit_file` (turn 32) before realizing at turn 34 that edit tools are unavailable during planning.
**Rule:** In the read-only plan phase the structured plan is the only deliverable — do not attempt `edit_file`/write tools there; defer all edits to the implementation phase to avoid wasted turns.

### 2026-08-15: learnings since 2026-08-14T17:40:48Z
- **Context:** PR #910 forwarded `identity_federation_client_id` through all three kernel auth-resolution branches (M2M, PAT, U2M) in `auth_bridge.py`, guarded by a truthy `if federation_client_id:` check; the reviewer flagged that the field was uniquely untested even though every other forwarded kwarg was pinned per-path.
**Rule:** When a kwarg/field is forwarded identically across N parallel resolution branches, assert it per-branch (plus a negative case for the omitted/empty guard) — a shared behavior tested on only one branch lets a dropped-field regression on the others pass CI silently.

--- *Add new entries above this line (oldest→newest); newest sections sort to the bottom.* ---
Loading