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
15 changes: 15 additions & 0 deletions .claude/agents/gsd-debugger.md
Original file line number Diff line number Diff line change
Expand Up @@ -843,6 +843,21 @@ ls .planning/debug/*.md 2>/dev/null | grep -v resolved
- Continue to create_debug_file
</step>

<step name="scan_learnings">
Before investigating, scan `.learnings/` for entries relevant to the reported issue:

```bash
ls .learnings/*.md 2>/dev/null | grep -v README
```

If entries exist, quickly scan titles and read any that relate to the affected area (e.g., same component, similar error type, related feature). Extract:
- Known gotchas in the affected area
- Past bugs with similar symptoms
- Key files that were involved in previous issues

This takes ~30 seconds and can shortcut investigation. Skip if no `.learnings/` directory exists.
</step>

<step name="create_debug_file">
**Create debug file IMMEDIATELY.**

Expand Down
15 changes: 15 additions & 0 deletions .claude/agents/gsd-executor.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,21 @@ Options:
**If .planning/ doesn't exist:** Error - project not initialized.
</step>

<step name="scan_learnings">
Scan `.learnings/` for entries relevant to the current plan's domain:

```bash
ls .learnings/*.md 2>/dev/null | grep -v README
```

If entries exist, quickly scan titles and read any that relate to the current phase/task area (e.g., same components, similar libraries, related features). Extract:
- Gotchas and edge cases to watch for
- Patterns that worked or failed
- Key files to be aware of

This takes ~30 seconds and prevents repeating past mistakes. Skip if no `.learnings/` directory exists.
</step>

<step name="load_plan">
Read the plan file provided in your prompt context.

Expand Down
13 changes: 13 additions & 0 deletions .claude/agents/gsd-phase-researcher.md
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,19 @@ cat "${PHASE_DIR}"/*-CONTEXT.md 2>/dev/null

Parse CONTEXT.md content before proceeding to research.

**Scan learnings (RECOMMENDED):**

```bash
ls .learnings/*.md 2>/dev/null | grep -v README
```

If entries exist, quickly scan titles and read any that relate to the current phase's technology domain. Extract:
- Past discoveries about libraries or APIs being researched
- Gotchas that should inform research direction
- Things that looked right but caused issues

This prevents re-discovering known issues and focuses research on genuinely unknown areas. Skip if no `.learnings/` directory exists.

## Step 2: Identify Research Domains

Based on phase description, identify what needs investigating:
Expand Down
16 changes: 16 additions & 0 deletions .claude/agents/gsd-planner.md
Original file line number Diff line number Diff line change
Expand Up @@ -1000,6 +1000,22 @@ Read `.planning/STATE.md` and parse:
If STATE.md missing but .planning/ exists, offer to reconstruct or continue without.
</step>

<step name="scan_learnings">
Scan `.learnings/` for entries relevant to the phase being planned:

```bash
ls .learnings/*.md 2>/dev/null | grep -v README
```

If entries exist, quickly scan titles and read any that relate to the current phase's domain (e.g., same technology area, similar components, related features). Extract:
- Gotchas to build into plan verification steps
- Patterns that worked — reuse in task actions
- Patterns that failed — explicitly avoid in task actions
- Key files to reference in plan context

Integrate relevant learnings into the plan as constraints or guidance. Skip if no `.learnings/` directory exists.
</step>

<step name="load_codebase_context">
Check for codebase map:

Expand Down
40 changes: 40 additions & 0 deletions .claude/commands/gsd/quick.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,14 @@ Generate slug from description:
slug=$(echo "$DESCRIPTION" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//' | cut -c1-40)
```

**Scan learnings** for relevant context:

```bash
ls .learnings/*.md 2>/dev/null | grep -v README
```

If entries exist, quickly scan titles and read any that relate to the task description. Extract gotchas, patterns, and key files that may be relevant. This prevents repeating past mistakes. Skip if no `.learnings/` directory exists.

---

### Step 2b: Detect UI task and offer design workflow
Expand Down Expand Up @@ -516,6 +524,38 @@ Get final commit hash:
commit_hash=$(git rev-parse --short HEAD)
```

**Capture learnings** (skip if trivial):

If the quick task involved non-obvious discoveries, gotchas, or useful patterns, create a learnings entry at `.learnings/YYYY-MM-DD-brief-description.md`:

```markdown
# [Brief Title]

**Date:** YYYY-MM-DD

## Original Prompt

> [User's original task description]

## What I Learned

- [Non-obvious discoveries, gotchas, edge cases]

## What Would Have Helped

- [Missing context, files to check first]

## Key Files

- [Relevant files for future reference]
```

If created, commit it:
```bash
git add .learnings/
git commit -m "docs(learnings): quick-${next_num} - {brief description}"
```

Display completion output:

```text
Expand Down
38 changes: 38 additions & 0 deletions .claude/get-shit-done/workflows/complete-milestone.md
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,44 @@ Confirm: "Committed: chore: complete v[X.Y] milestone"

</step>

<step name="capture_milestone_learnings">
**Capture milestone-level learnings.**

Create a learnings entry at `.learnings/YYYY-MM-DD-milestone-vXY-brief-description.md` reflecting on the entire milestone:

```markdown
# Milestone v[X.Y] - Learnings

**Date:** YYYY-MM-DD

## Original Prompt

> [Milestone goal/description from PROJECT.md]

## What I Learned

- [Architectural patterns that worked well or poorly across phases]
- [Cross-phase gotchas and integration issues]
- [Libraries, tools, or approaches worth reusing or avoiding]

## What Would Have Helped

- [Context that was missing at milestone start]
- [Planning gaps that caused rework]
- [Questions that should have been asked during requirements]

## Key Files

- [Files most critical to this milestone for future reference]
```

Commit the learnings file:
```bash
git add .learnings/
git commit -m "docs(learnings): milestone v[X.Y] - {brief description}"
```
</step>

<step name="offer_next">

```
Expand Down
42 changes: 42 additions & 0 deletions .claude/get-shit-done/workflows/execute-phase.md
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,48 @@ git commit -m "docs(phase-{X}): complete phase execution"
```
</step>

<step name="capture_learnings">
**Capture learnings from this phase execution.**

Reflect on what was learned and create a learnings entry at `.learnings/YYYY-MM-DD-phase-{X}-brief-description.md`.

Use this template:

```markdown
# [Phase Name] - Learnings

**Date:** YYYY-MM-DD

## Original Prompt

> [Phase goal from ROADMAP.md]

## What I Learned

- [Non-obvious discoveries about the codebase, libraries, or patterns]
- [Gotchas and edge cases encountered]
- [Things that look similar but behave differently]

## What Would Have Helped

- [Missing context that slowed things down]
- [Files that should have been checked first]
- [Clarifying questions that should have been asked earlier]

## Key Files

- [Files most relevant to this type of task for future reference]
```

Commit the learnings file:
```bash
git add .learnings/
git commit -m "docs(learnings): phase {X} - {brief description}"
```

**Skip this step if the phase was trivial or no meaningful learnings emerged.**
</step>

<step name="offer_next">
Present next steps based on milestone status:

Expand Down
5 changes: 5 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ reviews:
- '!**/pnpm-lock.yaml'
- '!**/*.lock'
- '!**/generated/**'
- '!.claude/agents/**'
- '!.claude/commands/**'
- '!.claude/get-shit-done/**'
- '!.learnings/**'
- '!.planning/**'

chat:
# Enable chat interactions in PR comments
Expand Down
32 changes: 32 additions & 0 deletions .learnings/2026-02-07-empty-state-upload-regression.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Empty State Upload Zone Regression

**Date:** 2026-02-07

## Original Prompt

> "there is a dropzone underneath the ascii art, and I am not a fan of the ascii art chosen. surely you can do something better"

Followed by: "the drag and drop to upload is no longer working"

## What I Learned

- **Removing a "visual" component can break functionality:** The UploadZone in EmptyState looked like a purely visual element (a box with upload text), but it was also the react-dropzone drop target providing drag-and-drop upload. Removing it to clean up the UI killed the DnD functionality.
- **Components often serve dual purposes:** Before removing any component, check if it provides event handlers, drop targets, focus management, or other invisible behavior beyond its visual output.
- **The fix pattern for invisible drop targets:** Use `useDropzone` directly on the container div via `getRootProps()` — this makes the entire area a drop target without rendering a separate visible upload zone component. Apply `getInputProps()` for the hidden file input.
- **API script naming:** The API uses `pnpm --filter api dev` (not `start:dev`). The `dev` script runs `nest start --watch`.
- **Docker is unnecessary in this dev environment:** PostgreSQL and IPFS are already exposed on the host. Just start the API and frontend.
- **GSD vendor markdown files fail markdownlint:** The `.claude/agents/gsd-*.md` and workflow files use non-standard markdown (HTML-like `<step>` tags, unfenced code blocks). These need to be excluded from linting via `.markdownlintignore`.

## What Would Have Helped

- Reading the UploadZone component before removing it from EmptyState to understand it provided drop target functionality, not just visuals
- Verifying DnD still worked immediately after the cosmetic fix, before committing
- A regression test for drag-and-drop upload in empty folders

## Key Files

- `apps/web/src/components/file-browser/EmptyState.tsx` — empty folder display + drop target
- `apps/web/src/components/file-browser/UploadZone.tsx` — standalone upload zone with react-dropzone
- `apps/web/src/components/file-browser/FileBrowser.tsx` — renders EmptyState with folderId prop
- `apps/web/src/styles/file-browser.css` — `.empty-state` and `.empty-state-drag-active` styles
- `tests/e2e/.env` — Web3Auth test credentials for Playwright login
54 changes: 54 additions & 0 deletions .learnings/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Agent Learnings

This folder contains learnings from AI-assisted development sessions. Each entry captures insights that help future sessions work more effectively in this codebase.

## When to Create an Entry

Create an entry after completing a significant task that involved:
- Learning something non-obvious about the codebase
- Getting stuck and finding a solution
- Discovering patterns or gotchas worth remembering

## File Naming

`YYYY-MM-DD-brief-description.md`

Example: `2026-02-06-discord-style-usernames.md`

## Entry Structure

```markdown
# [Brief Title]

**Date:** YYYY-MM-DD

## Original Prompt

> [Full prompt text as provided by user - preserving exact wording helps improve future prompts]

## What I Learned

Bullet points of non-obvious discoveries:
- Gotchas and edge cases
- Codebase patterns
- Data structure quirks
- Things that look similar but behave differently

## What Would Have Helped

Information that would have made the task smoother if known upfront:
- Missing context from the prompt
- Files I should have checked first
- Clarifying questions I should have asked

## Key Files

List of files most relevant to this type of task (for future reference).
```

## Guidelines

- **Be concise** - Future you wants quick insights, not a novel
- **Focus on learnings** - Skip implementation details that are obvious from the code
- **Highlight gotchas** - The non-obvious stuff is most valuable
- **Think reusability** - What would help with similar tasks in the future?
5 changes: 5 additions & 0 deletions .markdownlintignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,8 @@ CHANGELOG.md
# Finalized specifications - do not modify
00-Preliminary-R&D/
00_START_HERE.md

# GSD workflow files - vendor/generated markdown with non-standard syntax
.claude/agents/gsd-*.md
.claude/commands/gsd/
.claude/get-shit-done/
10 changes: 6 additions & 4 deletions .planning/STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,11 +184,12 @@ Recent decisions affecting current work:

### Pending Todos

4 pending todo(s):
5 pending todo(s):

- `2026-01-22-atomic-file-upload-flow.md` — Atomic file upload flow with client-side CID (area: api)
- `2026-01-23-pre-upload-file-validation.md` — Pre-upload file name validation and duplicate prevention (area: ui)
- `2026-01-23-simple-text-file-editor-modal.md` — Add simple text file editor modal (area: ui)
- `2026-02-07-web-worker-large-file-encryption.md` — Offload large file encryption to Web Worker (area: ui)
- ~~`2026-01-21-local-ipfs-node-for-testing.md` — Add local IPFS node to Docker stack for testing (area: api)~~ - **COMPLETED: Phase 4.2**

### Blockers/Concerns
Expand All @@ -205,6 +206,7 @@ Recent decisions affecting current work:
| # | Description | Date | Commit | Directory |
| --- | -------------------------------------- | ---------- | ------- | ----------------------------------------------------------------------------------- |
| 001 | Add API status indicator on login page | 2026-01-22 | 929143e | [001-login-page-api-status-indicator](./quick/001-login-page-api-status-indicator/) |
| 002 | Fix empty state ASCII art | 2026-02-07 | ff97f12 | [002-fix-empty-state-ascii-art](./quick/002-fix-empty-state-ascii-art/) |

### Research Flags (from research phase)

Expand All @@ -222,12 +224,12 @@ Recent decisions affecting current work:

## Session Continuity

Last session: 2026-02-02
Stopped at: Phase 7 complete - all 4 plans executed, verified ✓
Last session: 2026-02-07
Stopped at: Quick task 002 complete + DnD regression fix; 6.3 UAT gap closed (12/12 pass)
Resume file: None
Next plan: Phase 8 (TEE Integration)

---

_State initialized: 2026-01-20_
_Last updated: 2026-02-02 after 07-04 completion (gap closure - multi-device sync working)_
_Last updated: 2026-02-07 after 06.3 UAT gap closure (12/12 pass) + DnD regression fix_
Loading
Loading