Repository navigation
v0.6.1: imports recognise known rows, weekly catalog check, readability - #12
Merged
Merged
Conversation
An imported row was found again only through its activity, whose ID comes from the participants. When a newer mapping saw other entities in a row, importing the same export again added a second activity and evidence item. The browser's import index now names the rows it holds: a 64-bit key of each evidence note (web/src/rowKey.ts, the same function as row_key in app/ingest.py, checked against shared values in both test suites). A known row adds no entity, activity or evidence; its entities on the board only get the IDs the newer mapping reads. The same row from a second export is one evidence item too. Older browsers send no keys and import as before. With that, CloudAppEvents links the OAuth app that acted (OAuthAppId, an Entra app ID) as a participant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XkeMnAg6DWQ8xZucm51CzK
scripts/build_column_relations.py --check compares the catalog upstream with app/data/column_relations.json and lists added, removed and changed joins (also in the job summary); it exits 1 when anything changed. The new workflow "Relationship catalog" runs it every Monday and on demand, so a change upstream shows up as a failed run. Building again keeps the date when nothing changed, so a rebuild without changes touches no file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XkeMnAg6DWQ8xZucm51CzK
App.tsx (1,632 lines) is split by purpose without changing behaviour: Inspector.tsx (entity and activity inspector, evidence list), Dialogs.tsx (create/edit dialogs, help, agent connection, welcome), Panels.tsx (timeline, evidence window, change log, explorer, command palette) and ui.tsx (shared helpers and small components); App.tsx keeps state, shortcuts and layout (about 750 lines). TypeScript is formatted with Prettier (140 columns, no semicolons, single quotes; web/.prettierrc.json), Python with Ruff (140 columns, quotes as they are; pyproject.toml). Not formatted: the compact style sheet, the generated joinColumns.ts and index.html (its inline script is allowed by CSP hash). CI checks both formats; Ruff is pinned with hashes in requirements-dev.lock like the app's own dependencies. Lines over 160 characters drop from about 1,170 to the long strings that remain. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XkeMnAg6DWQ8xZucm51CzK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XkeMnAg6DWQ8xZucm51CzK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XkeMnAg6DWQ8xZucm51CzK
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three follow-ups to v0.6.0. Best reviewed commit by commit: the formatting commit is large but only moves and formats code.
Rows already on the board are recognised by their content (9286923)
An imported row used to be found again only through its activity, whose ID comes from the participants. When a newer mapping saw other entities in a row, importing the same export again added a second activity and evidence item.
web/src/rowKey.ts, the same function asrow_keyinapp/ingest.py; both test suites check the same reference values).CloudAppEventslinks the OAuth app that acted (OAuthAppId) as a participant.EmailEventsobject IDs stay unlinked on purpose (they would join an email address to a user entity).Weekly check against xdrinternals.com (4a5121d)
scripts/build_column_relations.py --checklists added, removed and changed joins (also in the job summary) and exits 1 on any change.Readability (ddb27f9, 6c227a4)
App.tsx(1,632 lines) split by purpose without behaviour changes:Inspector.tsx,Dialogs.tsx,Panels.tsx,ui.tsx;App.tsxkeeps state, shortcuts and layout (~750 lines).npm run format:check,ruff format --check; Ruff pinned with hashes inrequirements-dev.lock). Not formatted: the compact style sheet, the generatedjoinColumns.ts, andindex.html(its inline script is allowed by CSP hash)..git-blame-ignore-revslists the formatting commit (git config blame.ignoreRevsFile .git-blame-ignore-revs).Release (86f8b4d)
Version 0.6.1 in the backend, frontend, publish script and README.
Tests
Generated by Claude Code