Repository navigation
Releases: grishan0v/echolot
Release list
echolot 0.16.0
PyPI: https://pypi.org/project/echolot/0.16.0/
What's Changed
Features
- feat: collect checks the build on the phone for the code's markers before a round, and analyze names markers the code no longer has by @grishan0v in #394
- feat: echolot plugin cursor copies the plugin the package carries into Cursor by @grishan0v in #400
Fixes
- fix(readme): the tables and the logo read whatever theme GitHub and the system pick by @grishan0v in #396
Documentation
- docs: Cursor's install in the README, and the plugin's listing on cursor.directory by @grishan0v in #398
Maintenance
- build: 0.16.0 by @grishan0v in #401
Full Changelog: v0.15.0...v0.16.0
echolot 0.15.0
PyPI: https://pypi.org/project/echolot/0.15.0/
What's Changed
Features
- feat: the plugin installs in Cursor, and init passes in Cursor's sandbox by @grishan0v in #389
Fixes
- fix: collect stops at an app that is not installed, and at am start's error by @grishan0v in #386
- fix: mark --apply ends with the build to install, and analyze says when the code's markers are not in the traces by @grishan0v in #391
Maintenance
- build: 0.15.0 by @grishan0v in #392
Full Changelog: v0.14.1...v0.15.0
echolot 0.14.1
PyPI: https://pypi.org/project/echolot/0.14.1/
What's Changed
Features
- feat: an icon for the plugin's directory listing, sonar wave fronts in the logo's colours by @grishan0v in #381
Maintenance
- build: 0.14.1 by @grishan0v in #382
Full Changelog: v0.14.0...v0.14.1
echolot 0.14.0
PyPI: https://pypi.org/project/echolot/0.14.0/
What's Changed
Detectors
- feat: composables names a view's first composition, and the naming reference puts it under traversal by @grishan0v in #373
- feat: main_thread_waits, the main thread's sleeps by the thread of the app that ended them by @grishan0v in #378
Features
- feat: collect wakes the screen and stops at a locked phone, before the set and each repeat by @grishan0v in #375
- feat: a README in the plugin folder, catalog keywords, and an action name the Marketplace takes by @grishan0v in #377
Documentation
- docs: a card with the new logo for links to the repository by @grishan0v in #374
Maintenance
- build: 0.14.0 by @grishan0v in #379
Full Changelog: v0.13.0...v0.14.0
echolot 0.13.0
PyPI: https://pypi.org/project/echolot/0.13.0/
What's Changed
Detectors
- feat: a detector of the app's own composables, by the composition time they hold by @grishan0v in #366
- feat: collect switches a Compose app's Perfetto SDK on, so its composables are named by @grishan0v in #367
Features
- feat: a scenario keeps thresholds of its own, and calibrate --scenario prints them by @grishan0v in #360
- feat: collect cools the device before each repeat, and holds it still around a set by @grishan0v in #361
- feat: the naming reference reads Compose's rows, and says how composables get names by @grishan0v in #365
Documentation
- docs(readme): a short README under the new logo, its tables drawn in the logo's colours by @grishan0v in #371
Maintenance
- build: 0.13.0 by @grishan0v in #372
Full Changelog: v0.12.0...v0.13.0
echolot 0.12.0
PyPI: https://pypi.org/project/echolot/0.12.0/
What's Changed
Features
- feat: the frames a minified build writes into lock slices and ANR records come back by name, from its R8 mapping by @grishan0v in #340
- feat: setup names the build's mapping when the variant to measure is minified by @grishan0v in #341
- feat: a minified build's mapping read against a build that is not its own is called out by @grishan0v in #345
- feat: several scenarios in echolot.yml, and --scenario to pick one by @grishan0v in #353
- feat: each scenario keeps its own report, and the report names its scenario by @grishan0v in #354
- feat: an investigation is about one scenario, and the commands inside it take it by @grishan0v in #355
- feat: status and the next step name the scenario by @grishan0v in #356
- feat: the agent picks the scenario a question is about, and setup adds one by @grishan0v in #357
- feat: the GitHub Action measures one named scenario by @grishan0v in #358
Fixes
- fix: place reads a contention slice that names no frame for the owner, and places its waiter by @grishan0v in #338
Documentation
- docs: the Claude Code plugin install needs git 2.36 or newer, and why by @grishan0v in #339
Maintenance
- build(deps): bump reviewdog/action-actionlint from 1.77.0 to 1.79.1 by @dependabot[bot] in #335
- build(deps): bump actions/upload-artifact from 7.0.1 to 7.0.2 by @dependabot[bot] in #336
- build(deps): bump actions/download-artifact from 8.0.1 to 8.0.2 by @dependabot[bot] in #337
- ci: check the README's links into this repository against the pull request's tree by @grishan0v in #344
- build: 0.12.0 by @grishan0v in #359
Full Changelog: v0.11.0...v0.12.0
echolot 0.11.0
PyPI: https://pypi.org/project/echolot/0.11.0/
What's Changed
Detectors
- fix: the window, self times, thread states and cooling levels read an open interval as running to the end by @grishan0v in #279
- fix: five detectors count each frame, marker, pool thread and wait once by @grishan0v in #280
- docs: what init sets up, who runs the loop, and what a detector needs, as the code has it by @grishan0v in #318
- docs: README, docs/ and the example config state today's counts, commands and keys by @grishan0v in #319
- chore: hunt.py's docstrings name today's callers and sort, and state.py's next-step comment sits on NEXT_KINDS by @grishan0v in #320
- chore: comments in anr_risk.sql, io_wait.sql and repeated_work.sql say what the platform and the views do by @grishan0v in #321
- chore: comments in mapping.py, when.py and layer.py agree with the code below them by @grishan0v in #322
- chore: reflect's docstrings and comments name facts.py, eight fields, a hardcoded name and skip by @grishan0v in #323
- chore: anr.py and demo.py docstrings name three state spellings, the chains callers and the reason for late imports by @grishan0v in #324
- chore: CODEOWNERS in English, CI comments as the files are, and actionlint on a change to action.yml by @grishan0v in #325
- chore: main.py's comments on thread names, _hunt_config, ORDER and anr's help say what holds by @grishan0v in #326
- chore: comments in fixture.py and selftest.py count and place as the code does, and DiskWaiter gets a core of its own by @grishan0v in #327
- chore: comments and docstrings in tests/ name today's files, counts and widths by @grishan0v in #329
- chore: thirteen self-checks behind doctor can fail on the regression they name by @grishan0v in #330
Features
- feat: a GitHub Action that analyzes a benchmark's traces and compares them with the last good run by @grishan0v in #219
- feat: init --private installs for this clone alone, and git sees none of it by @grishan0v in #224
Fixes
- fix: the documented analyze glob and the next-step hints take one scenario's traces by @grishan0v in #278
- fix: a merged report's checks cover every repeat, and report.md names failed detectors by @grishan0v in #281
- fix: compare keeps failed detectors apart, checks the clock against its floor, and counts how often a row was found by @grishan0v in #282
- fix: reflect tells a reflection from work, a launch from a recording, and the hunt's loop from a helper by @grishan0v in #283
- fix: anr reads a lock note without its owner, keeps working threads, and names no root for a deadlock by @grishan0v in #284
- fix: analyze keeps a failed detector's params, marks open markers as floors, and reads opened_inside at the edges by @grishan0v in #285
- fix: calibrate takes its statistic per run and prints a section that can replace the config's whole by @grishan0v in #286
- fix: mark brackets the right class's onCreate, ignores comments, and refuses lambdas and suspend functions by @grishan0v in #287
- fix: the self-check leaves the run log on, checks the binary doctor names, and places a failure at its own line by @grishan0v in #288
- fix: collect hints the right cause, refuses the chooser, stops its command on interrupt, and quotes gradle_args by @grishan0v in #289
- fix: investigations keep their numbers and records, and the run log keeps every line by @grishan0v in #290
- fix: a trace session runs the binary named, refuses an unreadable trace before starting, and splits on statements by @grishan0v in #291
- fix: the Codex rule check reads the rule as Codex does, within the project, and says the right cause by @grishan0v in #292
- fix: init keeps the .claude/ layer apart from the plugin, and reads what it wrote on any system by @grishan0v in #293
- fix: reflect's readers keep queued messages, rejected questions, briefs, sittings and sidechains where they belong by @grishan0v in #294
- fix: reflect judges the instrumentation and the config an agent wrote by what they say by @grishan0v in #295
- fix: reflect's signals read global options, real calls, the last doctor and whole totals by @grishan0v in #296
- fix: the reflect report reads -c from here, names each session uniquely, and judges a brief by its values by @grishan0v in #297
- fix: scan reads the process, profileable build types, flavour dimensions and the benchmark class from the code by @grishan0v in #298
- fix: domains writes names that load and match, reads traceAsync, and leaves section ends and loggers out by @grishan0v in #299
- fix: the config takes tp_binary from its own directory, reads name: null as no anchor, and refuses unknown detectors by @grishan0v in #300
- fix: anr counts every drop box entry, says nothing about a checkout that has no sources, and keeps queued threads out of the working ones by @grishan0v in #301
- fix: the action outputs appeared and vanished rows, checks the config's trace_processor, and says why a comparison is missing by @grishan0v in #302
- fix: reflect names a log sitting it fell back to by @grishan0v in #311
- fix: compare and report find the project from a build directory, refuse files that are no report, and keep -o for the output by @grishan0v in #304
- fix: init checks the environment for every client, and hunt and status follow the project -c names by @grishan0v in #305
- fix: mark --apply closes every function-body marker in a finally, fits Trace's name limit, and --remove reaches every file it marked by @grishan0v in #307
- fix: mark finds Kotlin's Thread lambda, labelled returns, suffixed packages and abstract funs, and stops blaming the checkout for lambda frames by @grishan0v in #308
- fix: analyze, calibrate and names say what is wrong with the process, and names counts what masks miss by @grishan0v in #303
- fix: every run leaves a log line with its reason, input errors are sentences, and mark keeps its guard by @grishan0v in #306
- fix: compare writes to -o when there is no config by @grishan0v in #309
- fix: compare and report print the floor, hex names, two blank clocks, the silent detectors and --top as they are by @grishan0v in #310
- fix: render.py draws a gone row, takes the session's count from the README and refuses arguments it cannot use by @grishan0v in #314
- fix: help for names, doctor -q, compare's floors and report --wide says what the code does by @grishan0v in #315
Documentation
- docs: the documentation as a site with search and a sidebar, built by zensical by @grishan0v in #222
- docs: the package, the README and CONTRIBUTING point at the documentation site by @grishan0v in #223
- docs: the row filter in compare.md keeps grown rows that hold by @grishan0v in #312
- docs: the hunt skill takes traces set aside only when they were recorded for the question by @grishan0v in #313
- docs: agent texts stop before an unanalysed round, write markers mark --remove takes out, and read compare, probe and the ANR lead as they are by @grishan0v in #316
- docs: the agent's skill, references, guides and plugin door state today's counts, keys and commands by @grishan0v in #317
Maintenance
- ci: the release notes group pull requests by kind, from the type in the title by @grishan0v in #220
- refactor: the deepest functions split into named steps, with what they print unchanged by @grishan0v in #221
- build(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #225
- ci: a push to a pull request starts seven jobs instead of fifteen, and pytest runs on every core b...
echolot 0.10.0
PyPI: https://pypi.org/project/echolot/0.10.0/
What's Changed
Detectors
- feat: a blind spot names what ran there, from the samples in it by @grishan0v in #206
- fix: monitor_contention counts a wait once when ART nests its two slices by @grishan0v in #212
Features
- feat: Codex's sandbox rule from init, and doctor on the copies /import leaves by @grishan0v in #199
- feat: the loop leaves a value a person confirmed to the person by @grishan0v in #200
- feat: reflect reads a Codex session, subagents included by @grishan0v in #201
- feat: the hunt hands the loop a brief, and the main thread leaves its guides alone by @grishan0v in #203
- feat: a minified build's frames come back by name, from the build's R8 mapping by @grishan0v in #207
- feat: the report says where a cold start went, by Perfetto's own breakdown by @grishan0v in #210
- feat: the README's sample report is what analyze prints for a demo app by @grishan0v in #214
Fixes
- fix: a merged report keeps a whole count whole when the repeats are even by @grishan0v in #215
Documentation
- docs(readme): the quick start installs the plugin for Claude Code and Codex by @grishan0v in #216
Maintenance
- build: 0.10.0 by @grishan0v in #217
Full Changelog: v0.9.0...v0.10.0
echolot 0.9.0
PyPI: https://pypi.org/project/echolot/0.9.0/
What's Changed
- feat(compare): a move holds when its 95% range stays on one side of zero by @grishan0v in #157
- feat(report): say how much of the window the findings cover, each moment once by @grishan0v in #170
- feat(detectors): app_init, what ran between the Application and the first Activity by @grishan0v in #172
- feat(compare): say what the runs can resolve, and how many would settle a move by @grishan0v in #173
- feat(collect): sample callstacks with the trace, and say so in the report and compare by @grishan0v in #177
- docs(readme): a first screen that shows the tool at work, drawn from its sources by @grishan0v in #178
- docs(readme): the hunt loop as a picture, in place of the mermaid chart by @grishan0v in #179
- docs(readme): a shorter README, with the reference moved to the pages about it by @grishan0v in #180
- docs(readme): half the prose, tables where there were paragraphs by @grishan0v in #182
- docs(readme): sections in the order a reader needs them by @grishan0v in #184
- docs(readme): a first screen with one heading, one left edge and room on a phone by @grishan0v in #186
- feat: say when an agent's sandbox stopped trace_processor or adb by @grishan0v in #194
- feat: one set of skills for Claude Code and Codex, and a guide that prints the layer's own files by @grishan0v in #195
- build: 0.9.0, and a marketplace that serves the plugin from its release tag by @grishan0v in #198
Full Changelog: v0.8.0...v0.9.0
echolot 0.8.0
PyPI: https://pypi.org/project/echolot/0.8.0/
What's Changed
- fix: six bugs found by running echolot on a real project by @grishan0v in #101
- window: an async section is an anchor, and probe and names list it by @grishan0v in #102
- domains: a name kept in a constant is mapped to the call that uses it by @grishan0v in #103
- report: a contention row names both sides of the lock in the checkout by @grishan0v in #104
- chore: nothing in the tree names the project it was measured on by @grishan0v in #105
- report: the project's own markers are measured every time, in a table of their own by @grishan0v in #106
- report: the views an agent was cutting out of the json by hand by @grishan0v in #107
- collect: a failure says which line and why, the log keeps it, and status says how far a run got by @grishan0v in #108
- scan: what the repository says about itself, before setup reads it by hand by @grishan0v in #109
- init: the flag is --all, named for what it does rather than for insistence by @grishan0v in #110
- names: a pipe gets every name whole, --grep is the filter, --json the shape by @grishan0v in #111
- anr: a working thread is named by the frame nearest the app, and a file without lock notes says so by @grishan0v in #112
- reflect: the tree is read rather than the transcript, the harness is not echolot, and the agent's own words are quoted by @grishan0v in #113
- build(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #114
- build(deps): bump reviewdog/action-actionlint from 1.73.4 to 1.75.0 by @dependabot[bot] in #115
- build(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #116
- build(deps): bump reviewdog/action-actionlint from 1.75.0 to 1.77.0 by @dependabot[bot] in #117
- doctor: no verdict under -O, a self-check that could not run is recorded as failed, and the binary checked is the one analyze uses by @grishan0v in #118
- mark: the source comes back as it was found, the launcher is the launcher, allowed takes globs, and a named thread is not a finding by @grishan0v in #119
- anr: a frame lands on the right function in the right file, and a correct checkout is not called the wrong build by @grishan0v in #120
- collect: does what it says, and bad input gets a sentence and exit 2 by @grishan0v in #121
- layer: the Claude path opens and closes the hunt, and every route the layer names leads where it says by @grishan0v in #122
- docs: the pages a person reads describe the tool as it is on main by @grishan0v in #123
- layer: an older echolot leaves a newer layer alone and says to upgrade, and init checks the binary the project uses by @grishan0v in #124
- cli: the first run says what it downloads and why it could not, a pipe's encoding cannot crash it, and --version answers by @grishan0v in #125
- fix: a config that does not load opens no hunt, probe runs on the binary analyze uses, and a quiet report keeps its footer by @grishan0v in #126
- fix: a self-check that never ran is not called failed, no hunt is promised that the config would refuse, and a failed download leaves nothing behind by @grishan0v in #148
- docs: planning, how an issue is filed and how the roadmap board sorts it by @grishan0v in #149
- build: 0.8.0 by @grishan0v in #150
New Contributors
- @dependabot[bot] made their first contribution in #114
Full Changelog: v0.7.0...v0.8.0