# Capture changes into my fork

You're integrating one or more commits from a sibling GitHub fork into
the CURRENT WORKING DIRECTORY. The CWD should already be a clean git
working tree on a branch you're willing to commit to.

## Source thread: dropthejase splits the AI brain in two for table-style review

One assistant for general chat, a second one dedicated to spreadsheet-style document review - each with its own focused toolkit.

| # | SHA | Subject | Fork | Authored |
|---|-----|---------|------|----------|
| 1 | [`1a79b1c0`](https://github.com/dropthejase/louis/commit/1a79b1c012a1677c33e4b0563eef8c2ca67e152a) | Add louisTabular agent and wire tabular chat to AgentCore | `dropthejase/louis` | 2026-05-09 |
| 2 | [`1fede12c`](https://github.com/dropthejase/louis/commit/1fede12ce2679fea33dab9dcfbd21fc933ce9733) | feat(api): add resolve-batch endpoint to fix bulk accept/reject race condition | `dropthejase/louis` | 2026-05-12 |
| 3 | [`6e5b266e`](https://github.com/dropthejase/louis/commit/6e5b266e99591c932c9b0a0d458e89f7ad9792ba) | fix(api): parse columns_config and shared_with JSON strings in tabular review re | `dropthejase/louis` | 2026-05-13 |
| 4 | [`8a09da7b`](https://github.com/dropthejase/louis/commit/8a09da7b3cf89221c1c7a6fca81237c900096774) | fix(api): parse columns_config and shared_with in PATCH tabular review response | `dropthejase/louis` | 2026-05-13 |
| 5 | [`a0d653c1`](https://github.com/dropthejase/louis/commit/a0d653c186181882b801a3a43a4560356e9584b0) | feat(tabular): optimistic update when adding documents to review | `dropthejase/louis` | 2026-05-13 |
| 6 | [`54fd7a39`](https://github.com/dropthejase/louis/commit/54fd7a39b04f773ca459542e98401c28bae89a35) | feat(frontend): retry apiRequest once on 500 after 1.5s delay | `dropthejase/louis` | 2026-05-13 |
| 7 | [`720650fc`](https://github.com/dropthejase/louis/commit/720650fc647bcb1ed9d2a8a2d86348c782f4cfd8) | revert(frontend): remove apiRequest retry - caused stale UI across endpoints | `dropthejase/louis` | 2026-05-13 |
| 8 | [`66a5cecb`](https://github.com/dropthejase/louis/commit/66a5cecb4813c33f0ab6bde8754510869bc84133) | fix(tabular): fix generation failures - columns_config parse, Bedrock client, UU | `dropthejase/louis` | 2026-05-13 |
| 9 | [`e2ed854f`](https://github.com/dropthejase/louis/commit/e2ed854f2d5040ad716c5a6d7f1679cfe155bb81) | fix(tabular-agent): fix credential bootstrap, columns_config parse, and UUID cas | `dropthejase/louis` | 2026-05-14 |
| 10 | [`714bcbd1`](https://github.com/dropthejase/louis/commit/714bcbd12af0fb5730449f83e843ff6ce682c92c) | fix(api): parse columns_config JSON string in workflow responses | `dropthejase/louis` | 2026-05-14 |
| 11 | [`8c7e7405`](https://github.com/dropthejase/louis/commit/8c7e7405d8c5fd032f0df628a186d7481a9f82ec) | fix(tabular): parse jsonb content/annotations in mapTRMessages | `dropthejase/louis` | 2026-05-14 |
| 12 | [`42c8e187`](https://github.com/dropthejase/louis/commit/42c8e18753847081e7b5e0a3605d5a8b7f868335) | fix(tabular): suppress CITATIONS from stream, fix citation schema and extraction | `dropthejase/louis` | 2026-05-14 |
| 13 | [`29b80f48`](https://github.com/dropthejase/louis/commit/29b80f48cfc4b9b009cb8737dbd8951bf30d57ff) | feat(tabular): migrate tabular chat storage from Aurora to S3 | `dropthejase/louis` | 2026-05-14 |

### Commit URLs (for your tooling)

1. https://github.com/dropthejase/louis/commit/1a79b1c012a1677c33e4b0563eef8c2ca67e152a
2. https://github.com/dropthejase/louis/commit/1fede12ce2679fea33dab9dcfbd21fc933ce9733
3. https://github.com/dropthejase/louis/commit/6e5b266e99591c932c9b0a0d458e89f7ad9792ba
4. https://github.com/dropthejase/louis/commit/8a09da7b3cf89221c1c7a6fca81237c900096774
5. https://github.com/dropthejase/louis/commit/a0d653c186181882b801a3a43a4560356e9584b0
6. https://github.com/dropthejase/louis/commit/54fd7a39b04f773ca459542e98401c28bae89a35
7. https://github.com/dropthejase/louis/commit/720650fc647bcb1ed9d2a8a2d86348c782f4cfd8
8. https://github.com/dropthejase/louis/commit/66a5cecb4813c33f0ab6bde8754510869bc84133
9. https://github.com/dropthejase/louis/commit/e2ed854f2d5040ad716c5a6d7f1679cfe155bb81
10. https://github.com/dropthejase/louis/commit/714bcbd12af0fb5730449f83e843ff6ce682c92c
11. https://github.com/dropthejase/louis/commit/8c7e7405d8c5fd032f0df628a186d7481a9f82ec
12. https://github.com/dropthejase/louis/commit/42c8e18753847081e7b5e0a3605d5a8b7f868335
13. https://github.com/dropthejase/louis/commit/29b80f48cfc4b9b009cb8737dbd8951bf30d57ff

## What I want you to do

1.  **Sanity check first.**

    - Run `git status`. If the working tree is dirty (uncommitted
      changes you don't recognise, untracked stuff you don't expect),
      STOP and tell me — don't try to be helpful by stashing. I'll
      resolve it.
    - Run `git branch --show-current`. If the branch is `main` or
      `master`, confirm with me before proceeding.

2.  **For each commit URL above, in the order listed:**

    a.  Fetch the diff. Pick whichever works:
        - `gh api repos/<owner>/<repo>/commits/<sha>` returns the full
          patch in JSON.
        - WebFetch the URL with `.patch` appended, e.g.
          `https://github.com/<owner>/<repo>/commit/<sha>.patch`.

    b.  Read the original commit message. That's the AUTHOR's intent —
        respect it.

    c.  Read the diff and understand the change. **Don't blindly
        cherry-pick.** This is a sibling fork — paths, naming, and
        structure can differ. You're porting, not pasting.

    d.  Compare against THIS repo's layout:
        - File at the same path → apply the change.
        - File exists under a different name (renamed / restructured) →
          apply the equivalent change at the right location.
        - File doesn't exist here at all → decide: new file we want, or
          is the source adding something this repo already has by
          another name? Use judgement. Lean towards creating the file
          when in doubt — easier for me to delete than to recreate.

    e.  Apply the change. Run `git diff` after, eyeball it, fix
        obvious issues (lint errors, broken imports, typos in the diff
        itself).

    f.  Commit with a message that:
        - Preserves the source commit's subject line.
        - Adds a short body explaining what you adapted, if anything.
        - Includes trailers:

              Source: <commit-url>
              Source-author: <original author name>

        so the attribution stays clear.

3.  **After all commits are applied:**

    - Run `git log --oneline -<count>` showing what you produced.
    - Show `git status` final state.
    - List any files you skipped, conflicts you resolved, and any
      assumptions you made.

## Rules

- **Do not push.** Local commits only. I'll review and push.
- **Do not rebase or force.** Only fresh commits. If you'd otherwise
  need a force push, stop and explain why.
- **Don't touch `.git/config` or run `git remote add`.** Leave my
  repo's remote setup alone.
- **No package installs, build steps, or migrations** unless the
  change manifestly requires it AND you explicitly tell me what
  you're about to run first.
- **One commit per source commit.** Don't squash. Don't split. If
  porting genuinely requires either, explain.
- **Read existing code before changing it.** This isn't the source
  fork. Match the local style.

## If you get stuck

Stop and tell me. Show what you've already done (commits made, files
changed), what blocked you (conflict, missing file, ambiguous intent),
and your recommended next move. I'd rather ship 3 of 5 commits cleanly
than have you guess on the 4th and break things.
