Skip to content

Releases: grishan0v/echolot

echolot 0.16.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 09:44
da46996

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

Full Changelog: v0.15.0...v0.16.0

echolot 0.15.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 16:40
1b8995b

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

Full Changelog: v0.14.1...v0.15.0

echolot 0.14.1

Choose a tag to compare

@github-actions github-actions released this 15 Oct 08:07
4c482db

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

Full Changelog: v0.14.0...v0.14.1

echolot 0.14.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 07:27
6846062

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

Full Changelog: v0.13.0...v0.14.0

echolot 0.13.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 13:53
c766d06

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

Full Changelog: v0.12.0...v0.13.0

echolot 0.12.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 19:29
636a0f5

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

Choose a tag to compare

@github-actions github-actions released this 09 Oct 19:04
709e145

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...
Read more

echolot 0.10.0

Choose a tag to compare

@github-actions github-actions released this 03 Oct 09:26
d5af5c4

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

Full Changelog: v0.9.0...v0.10.0

echolot 0.9.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 11:15
440fe3a

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

Choose a tag to compare

@github-actions github-actions released this 28 Sep 17:55
4387d4a

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

Full Changelog: v0.7.0...v0.8.0