Compare commits

..

No commits in common. "master" and "v0.2.67" have entirely different histories.

2 changed files with 23 additions and 17 deletions

View File

@ -2,20 +2,20 @@
All notable changes to TFTSR are documented here.
Commit types shown: feat, fix, perf, docs, refactor.
CI, chore, and build changes are excluded.
CI, chore, and build changes are excluded unless they affect developer workflow.
## [Unreleased]
### Bug Fixes
- Harden timeline event input validation and atomic writes
### Documentation
- Update wiki for timeline events and incident response methodology
## [0.2.66] — 2026-04-20
### Features
- Add timeline_events table, model, and CRUD commands
- Populate RCA and postmortem docs with real timeline data
- Wire incident response methodology into AI and record triage events
- Integrate incident response methodology into all 17 domain prompts
- Add timeline_events table for UTC timestamp tracking during triage
- Populate RCA and postmortem documents with real timeline data
### Bug Fixes
- **ci**: Switch PR review from Ollama to liteLLM (qwen2.5-72b)
### Security
- Harden timeline event input validation and atomic writes
## [0.2.65] — 2026-04-15

View File

@ -42,8 +42,11 @@ describe("Audit Log", () => {
it("displays audit entries", async () => {
render(<Security />);
// Wait for table to appear after async audit data loads
const table = await screen.findByRole("table");
// Wait for audit log to load
await screen.findByText("Audit Log");
// Check that the table has rows (header + data rows)
const table = screen.getByRole("table");
expect(table).toBeInTheDocument();
const rows = screen.getAllByRole("row");
@ -53,7 +56,9 @@ describe("Audit Log", () => {
it("provides way to view transmitted data details", async () => {
render(<Security />);
// Wait for async data to load and render the table
await screen.findByText("Audit Log");
// Should have View/Hide buttons for expanding details
const viewButtons = await screen.findAllByRole("button", { name: /View/i });
expect(viewButtons.length).toBeGreaterThan(0);
});
@ -61,13 +66,14 @@ describe("Audit Log", () => {
it("details column or button exists for viewing data", async () => {
render(<Security />);
// Wait for async data to load and render the table
await screen.findByRole("table");
await screen.findByText("Audit Log");
// The audit log should have a Details column header
const detailsHeader = screen.getByText("Details");
expect(detailsHeader).toBeInTheDocument();
const viewButtons = screen.getAllByRole("button", { name: /View/i });
// Should have view buttons
const viewButtons = await screen.findAllByRole("button", { name: /View/i });
expect(viewButtons.length).toBe(2); // One for each mock entry
});
});