Add daily logs and templates for project fidelity
- Created daily log entries for May 13, 14, 18, 19, 20, and 21, capturing work done, findings, and next steps. - Established a daily logs index for easy navigation of daily notes. - Developed templates for daily logs, decisions, meeting notes, people, systems, and work items to standardize documentation. - Introduced base files for filtering and displaying various types of project knowledge, including daily notes, decisions, people, systems, work items, and workstreams. - Added maps for current work, fidelity apps, and fidelity domain to enhance project navigation and context.
This commit is contained in:
1
workspaces/fidelity/inbox/.gitkeep
Normal file
1
workspaces/fidelity/inbox/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
12
workspaces/fidelity/inbox/README.md
Normal file
12
workspaces/fidelity/inbox/README.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# Mattermost Inbox
|
||||
|
||||
This directory stores raw or semi-processed communication captured from Mattermost before it is promoted into the persistent workspace context.
|
||||
|
||||
Recommended usage:
|
||||
|
||||
- `mattermost-mirror/` is the preferred local Mattermost evidence source when present. It stores `latest.*`, `by-date/`, `channels/`, `threads/`, and `refs/` views from the local proxy mirror.
|
||||
- `mattermost-latest.md` contains the legacy most recent sync capture
|
||||
- timestamped snapshots can be stored here if needed
|
||||
- durable facts should be promoted into `workspaces/fidelity/project-knowledge/06-daily/`, `workspaces/fidelity/project-knowledge/01-current/`, `workspaces/fidelity/project-knowledge/02-work-items/`, `workspaces/fidelity/project-knowledge/03-context/`, `workspaces/fidelity/project-knowledge/04-people/`, or `workspaces/fidelity/project-knowledge/05-decisions/`
|
||||
|
||||
This directory is intentionally treated as an inbox, not as the final source of truth.
|
||||
@@ -0,0 +1,104 @@
|
||||
# Charles Session File Format (.chlsx)
|
||||
|
||||
Reference for AI agents that need to parse Charles Proxy session files.
|
||||
|
||||
---
|
||||
|
||||
## File Format
|
||||
|
||||
`.chlsx` is a **ZIP archive** containing numbered XML files, each representing one HTTP request/response pair.
|
||||
|
||||
### Structure inside the ZIP
|
||||
|
||||
```
|
||||
session.chlsx
|
||||
├── 00001.xml
|
||||
├── 00002.xml
|
||||
├── 00003.xml
|
||||
├── ...
|
||||
└── 00/
|
||||
├── 00001.xml
|
||||
├── 00002.xml
|
||||
└── ...
|
||||
```
|
||||
|
||||
Files may be flat at the root or grouped in two-digit subdirectories (`00/`, `01/`, etc.) depending on session size.
|
||||
|
||||
### XML Structure Per File
|
||||
|
||||
Each XML file contains:
|
||||
|
||||
- **Request**: method, URL, protocol, headers, body
|
||||
- **Response**: status, protocol, headers, body
|
||||
- **Timing**: start time, duration
|
||||
|
||||
Key XML elements:
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<session>
|
||||
<request>
|
||||
<method>GET</method>
|
||||
<url>https://discourse.example.com/t/123.json</url>
|
||||
<protocol>HTTP/1.1</protocol>
|
||||
<header name="Accept">application/json</header>
|
||||
<header name="Cookie">_t=abc123</header>
|
||||
<body></body>
|
||||
</request>
|
||||
<response>
|
||||
<status>200</status>
|
||||
<protocol>HTTP/1.1</protocol>
|
||||
<header name="Content-Type">application/json; charset=utf-8</header>
|
||||
<body>{"id": 123, "title": "...", "post_stream": {...}}</body>
|
||||
</response>
|
||||
<timing>
|
||||
<start>2026-01-15T10:30:00.000Z</start>
|
||||
<duration>450</duration>
|
||||
</timing>
|
||||
</session>
|
||||
```
|
||||
|
||||
### .chls vs .chlsx vs .chlsj
|
||||
|
||||
| Extension | Format | Notes |
|
||||
|---|---|---|
|
||||
| `.chls` | Binary | Legacy format, harder to parse |
|
||||
| `.chlsx` | ZIP + XML | **Prefer this**. Most common modern format |
|
||||
| `.chlsj` | JSON | Newer, less common; each session is one JSON file with an array of request/response objects |
|
||||
|
||||
**Recommendation**: Configure Charles to save as `.chlsx` (File → Save Session As... → choose `.chlsx`).
|
||||
|
||||
---
|
||||
|
||||
## Discourse API Endpoints to Look For
|
||||
|
||||
These are the endpoints worth extracting from a Charles session:
|
||||
|
||||
| Purpose | URL pattern | Parsing target |
|
||||
|---|---|---|
|
||||
| Topic feed | `/latest.json` | `topic_list.topics[]` |
|
||||
| Category topics | `/c/{slug}.json` | `topic_list.topics[]` |
|
||||
| Single topic | `/t/{id}.json` | The full topic with posts |
|
||||
| Posts in topic | `/t/{id}/{page}.json` | Paginated posts |
|
||||
| Search | `/search.json?q=...` | `topics[]`, `posts[]` |
|
||||
| User activity | `/u/{username}/activity.json` | User posts/topics |
|
||||
|
||||
---
|
||||
|
||||
## Extraction Strategy for AI
|
||||
|
||||
1. **Open the `.chlsx` as a ZIP** (it is not encrypted)
|
||||
2. **Iterate over all XML files** inside
|
||||
3. For each XML, check if the request URL matches a Discourse API endpoint
|
||||
4. Extract the JSON response body from `<response><body>`
|
||||
5. Parse the JSON and convert to Markdown
|
||||
6. Organize by topic ID + title for easy search
|
||||
|
||||
---
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
- Some responses are paginated (`/t/{id}.json?page=1`). Collect all pages for completeness.
|
||||
- Binary responses (images, JS bundles) should be skipped.
|
||||
- The same topic may appear multiple times in different Charles sessions; deduplicate by topic ID + last updated timestamp.
|
||||
- Session cookies captured in Charles will be expired by the time the AI reads them; only the response data matters.
|
||||
@@ -0,0 +1,140 @@
|
||||
---
|
||||
type: copilot-prompt
|
||||
status: ready
|
||||
target: github-copilot
|
||||
purpose: Parse Charles .chlsx sessions to create a searchable Discourse archive
|
||||
---
|
||||
|
||||
# Copilot Prompt — Charles Discourse Archiver
|
||||
|
||||
Paste this into GitHub Copilot on the corporate device.
|
||||
|
||||
---
|
||||
|
||||
## Prompt
|
||||
|
||||
You are helping me build a local searchable archive of a Discourse forum from captured Charles Proxy session files.
|
||||
|
||||
### Background
|
||||
|
||||
I browse a Discourse forum in my browser while Charles Proxy records traffic. I save the session as a `.chlsx` file. Inside that file are all the HTTP request/response pairs for the pages I visited — including Discourse API calls that return structured JSON (topics, posts, categories, user profiles).
|
||||
|
||||
I need you to extract only the Discourse content and organize it into a Markdown archive that:
|
||||
- Is searchable by an AI in future sessions
|
||||
- Preserves topic titles, post authors, dates, and content
|
||||
- Groups by category
|
||||
- Deduplicates topics that appear across multiple sessions
|
||||
|
||||
### File format: `.chlsx`
|
||||
|
||||
`.chlsx` is a ZIP archive. Inside are numbered XML files (e.g. `00001.xml`, `00/00001.xml`). Each XML file represents one HTTP request/response pair with this structure:
|
||||
|
||||
```xml
|
||||
<session>
|
||||
<request>
|
||||
<method>GET</method>
|
||||
<url>https://forum.example.com/t/123.json</url>
|
||||
<protocol>HTTP/1.1</protocol>
|
||||
<header name="Cookie">...</header>
|
||||
<body></body>
|
||||
</request>
|
||||
<response>
|
||||
<status>200</status>
|
||||
<protocol>HTTP/1.1</protocol>
|
||||
<header name="Content-Type">application/json; charset=utf-8</header>
|
||||
<body>{"id": 123, "title": "Some Topic", "post_stream": {...}}</body>
|
||||
</response>
|
||||
<timing>
|
||||
<start>2026-01-15T10:30:00.000Z</start>
|
||||
<duration>450</duration>
|
||||
</timing>
|
||||
</session>
|
||||
```
|
||||
|
||||
### Discourse API endpoints to extract
|
||||
|
||||
| What | URL pattern | JSON fields |
|
||||
|---|---|---|
|
||||
| Latest topics | `/latest.json` | `topic_list.topics[].{id, title, slug, category_id, created_at, last_posted_at}` |
|
||||
| Category index | `/categories.json` | `category_list.categories[].{id, name, slug}` |
|
||||
| Single topic (with posts) | `/t/{id}.json` | `id, title, slug, category_id, post_stream.posts[].{username, cooked, created_at, post_number}` |
|
||||
| Topic with page | `/t/{id}/{page}.json` | Same as above, paginated |
|
||||
| User activity | `/u/{username}/activity.json` | `user_actions[]` |
|
||||
| Search results | `/search.json?q=...` | `topics[]`, `posts[]` |
|
||||
|
||||
### What to do
|
||||
|
||||
1. **Open the `.chlsx` file** as a ZIP archive.
|
||||
2. **List all XML files** inside (both flat and in subdirectories).
|
||||
3. **For each XML file**, parse it and check if the request URL matches one of the Discourse endpoints above.
|
||||
4. **Skip**: CSS, JS, images, font files, analytics, CDN assets, and any non-Discourse endpoint.
|
||||
5. **Parse the JSON response body** from `<response><body>`.
|
||||
6. **Create this folder structure** as output:
|
||||
|
||||
```
|
||||
discourse-archive/
|
||||
├── categories.json # All categories found
|
||||
├── index.md # Master index (table of all topics with ID, title, date, category, URL)
|
||||
├── topics/
|
||||
│ ├── 123-your-topic-slug.md
|
||||
│ ├── 456-another-topic.md
|
||||
│ └── ...
|
||||
```
|
||||
|
||||
### Markdown format per topic
|
||||
|
||||
Each topic file should be a clean Markdown document with YAML frontmatter:
|
||||
|
||||
```markdown
|
||||
---
|
||||
id: 123
|
||||
title: "Your Topic Title"
|
||||
slug: your-topic-slug
|
||||
category: "Category Name"
|
||||
created: 2026-01-15
|
||||
updated: 2026-01-16
|
||||
url: https://forum.example.com/t/your-topic-slug/123
|
||||
---
|
||||
|
||||
# Your Topic Title
|
||||
|
||||
**Category**: Category Name
|
||||
|
||||
---
|
||||
|
||||
## Post 1 — @username1 (2026-01-15T10:30:00Z)
|
||||
|
||||
Post content here (HTML stripped, plain Markdown preferred).
|
||||
|
||||
---
|
||||
|
||||
## Post 2 — @username2 (2026-01-16T14:00:00Z)
|
||||
|
||||
More content.
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
### Deduplication rules
|
||||
|
||||
- If the same topic ID appears in multiple `.chlsx` files, keep the one with the most recent `last_posted_at`.
|
||||
- If a session has page 2+ of a topic (`/t/123/2.json`), merge the posts with page 1.
|
||||
- Never duplicate posts within a topic.
|
||||
|
||||
### What to do with the output
|
||||
|
||||
Place the resulting `discourse-archive/` folder in a location I can reference in future Copilot sessions. I will point Copilot to that folder when I need to search past Discourse conversations.
|
||||
|
||||
### Constraints
|
||||
|
||||
- Do not modify the original `.chlsx` file.
|
||||
- Do not upload or send the extracted data anywhere — keep it local.
|
||||
- If a topic has no readable content (deleted, access restricted), note it in the index but skip the full extraction.
|
||||
- HTML in `cooked` fields should be converted to readable plain text / Markdown (Discourse stores posts as HTML in the JSON).
|
||||
|
||||
### First action
|
||||
|
||||
Ask me for:
|
||||
1. The path to the `.chlsx` file (or files)
|
||||
2. The Discourse base URL (so you can construct canonical topic URLs)
|
||||
3. Where I want the output folder created
|
||||
1
workspaces/fidelity/inbox/photos/.gitkeep
Normal file
1
workspaces/fidelity/inbox/photos/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
Reference in New Issue
Block a user