<feed xmlns='http://www.w3.org/2005/Atom'>
<title>chime/.gitignore, branch main</title>
<subtitle>Emacs chimes, notifications, and modeline reminders so you don't miss events
</subtitle>
<id>https://git.cjennings.net/chime/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/chime/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/'/>
<updated>2026-06-11T20:12:08+00:00</updated>
<entry>
<title>chore: gitignore editor backup files</title>
<updated>2026-06-11T20:12:08+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-11T20:12:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=4717c770e17d8b85f39770ffe33aaea142c9d07e'/>
<id>urn:sha1:4717c770e17d8b85f39770ffe33aaea142c9d07e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: clear the rest of the lint backlog and make `make lint' actually work</title>
<updated>2026-05-05T14:50:57+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T14:50:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=18bad1aa33e25873b7f30b9d42adde071a63bad9'/>
<id>urn:sha1:18bad1aa33e25873b7f30b9d42adde071a63bad9</id>
<content type='text'>
Took the package-lint commit's foundation and finished the job. Three
groups of changes:

1. **checkdoc** is now clean across all three package files. I worked
   through every warning: 13 missing-double-space-after-period fixes, 4
   message-capitalization fixes, 1 trailing-period-on-error fix, 6
   Lisp-symbol-should-be-quoted fixes, and one rephrase from "starts" to
   the imperative "Log the start of an async check". One `chime-debug.el'
   docstring also exceeded 80 columns and got split into two lines.

2. **`make lint'** ran elisp-lint but had been silently broken. The shell
   glob `test-*.el' wasn't expanding (CWD ended up at project root, not
   tests/), and the noisy validators flagged everything. I rewrote the
   target to lint package files explicitly via absolute paths, preload
   chime.el so the byte-compiler sees cross-file symbols when checking
   chime-debug.el, and disable the validators that conflict with project
   style or duplicate other lint steps:
   - `--no-checkdoc' (covered by `eask lint checkdoc')
   - `--no-package-lint' (covered by `eask lint package'; running it on
     auxiliary files re-flags them as standalone packages)
   - `--no-indent-character' (project uses spaces per
     `.claude/rules/elisp.md'; the validator defaults to tabs)
   - `--no-fill-column' (project allows up to 80; validator defaults to 70)
   - `--no-indent' (false-positives on dash threading macros `-&gt;'/`-&gt;&gt;')
   The validators-disabled list is documented in the recipe header.

3. **Generated autoload files** (`chime-autoloads.el',
   `tests/tests-autoloads.el') are now gitignored. `tests/tests-autoloads.el'
   was tracked from an earlier commit; I removed it from the index.
   Eask regenerates these on every `eask compile' / `eask install-deps'
   run, so they don't belong in the tree.

Verified: `make compile' clean (with byte-compile-error-on-warn t),
`make test-all' green at 677 tests, `eask lint package' clean,
`eask lint checkdoc' clean, `make lint' clean. Full lint backlog is now
zero across all three checks.
</content>
</entry>
<entry>
<title>refactor: clear package-lint warnings for MELPA prep</title>
<updated>2026-05-05T14:39:09+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T14:39:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=1f57189ffbe4f039ea213918c97d0a9496b4db7b'/>
<id>urn:sha1:1f57189ffbe4f039ea213918c97d0a9496b4db7b</id>
<content type='text'>
I worked through the package-lint backlog and got it to zero. Five changes:

1. Renamed six interactive debug commands from the private `chime--debug-*'
   prefix to the public `chime-debug-*' form. They were always M-x targets,
   so the private prefix was just wrong. The autoload cookies stay because
   public commands SHOULD be autoloaded. README, docstring references in
   chime.el, and the matching tests follow the rename.

2. Dropped `Version', `Package-Requires', and `Keywords' headers from
   chime-org-contacts.el. Auxiliary files in a multi-file package shouldn't
   carry their own metadata — package-lint flags it as an error because the
   headers have no effect outside the main file. The main file (chime.el)
   already declares the chime package's metadata.

3. Dropped `Keywords' from chime-debug.el for the same reason.

4. Dropped the auto-loader for the optional chime-org-contacts integration
   from chime.el. The old code used `with-eval-after-load 'org-capture' to
   pull the file in, which package-lint flags as a configuration pattern
   that doesn't belong in a package. Users who want the integration now
   require it themselves; the README shows both the plain `with-eval-after-load'
   pattern and the `use-package :after' form. chime-org-contacts.el's
   internal `with-eval-after-load' went away too — by the time the user has
   required the file, they've already gated it on org-capture being loaded,
   so the inner check is redundant.

5. Dropped the redundant `with-eval-after-load' from chime-org-contacts.el's
   activation block. The setup function still guards on
   `(boundp 'org-capture-templates)' so it's safe to require either order.

Behavioral note: this is a small breaking change for anyone whose config
relied on the auto-load. The README change spells out the migration path.
</content>
</entry>
<entry>
<title>build: add eask manifest and setup/compile/coverage targets</title>
<updated>2026-05-05T09:57:14+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T09:57:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=e54041ac630fe31a9968cf41c452feee317a4049'/>
<id>urn:sha1:e54041ac630fe31a9968cf41c452feee317a4049</id>
<content type='text'>
I switched the test runner from `~/.emacs.d/elpa`-grep to eask. With
this, `make setup` installs every dep into a project-local `.eask/`,
so test runs don't depend on whatever's in my global elpa. It also
lets us catch missing Package-Requires entries before MELPA submission.

New targets:

- `make setup` — runs `eask install-deps --dev`
- `make compile` — byte-compiles chime.el and surfaces warnings that
  checkdoc and elisp-lint don't catch
- `make coverage` — runs the unit suite under undercover and writes a
  simplecov JSON to `.coverage/simplecov.json`
- `make test-all` — runs every test, including `:slow` tagged
- `-include makefile-local` in both Makefiles, for per-machine knobs

I added `ERT_FAST_SELECTOR` so `make test`, `test-unit`,
`test-integration`, and `test-file` exclude tests tagged `:slow`. When
we tag end-to-end integration tests as `:slow`, they'll stay out of
the fast feedback loop until someone explicitly asks for them via
`make test-all`.

Eask treats CWD as its workspace. So all eask invocations now run
from project root, with `(cd "tests/")' as the first `--eval' to
restore Emacs's default-directory. That preserves the relative loads
the existing test files and test-bootstrap.el rely on, without
touching either.

I updated `.gitignore` for `.eask/`, `.coverage/`, and the optional
`makefile-local` files.
</content>
</entry>
<entry>
<title>adding to gitignore</title>
<updated>2026-04-24T12:33:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-24T12:33:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=5108e05eeb395f1d66122c25c862b1401478853f'/>
<id>urn:sha1:5108e05eeb395f1d66122c25c862b1401478853f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: ignore .stignore (syncthing)</title>
<updated>2026-04-20T17:35:06+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-20T17:35:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=c9a748b0b87945b421949a4acaee8468e6cbcc67'/>
<id>urn:sha1:c9a748b0b87945b421949a4acaee8468e6cbcc67</id>
<content type='text'>
</content>
</entry>
<entry>
<title>restructure: move docs/ to .ai/ + sync latest template</title>
<updated>2026-04-20T13:36:28+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-20T13:36:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=32fc0a2fbdea16fcacd3b55ff9a1e15c938f4a48'/>
<id>urn:sha1:32fc0a2fbdea16fcacd3b55ff9a1e15c938f4a48</id>
<content type='text'>
Per claude-templates c36fd14. Claude tooling moves to hidden .ai/;
project-level docs/ reserved for real documentation.
</content>
</entry>
<entry>
<title>chore: add Claude Code ruleset via ~/code/rulesets install-elisp</title>
<updated>2026-04-19T17:46:59+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-19T17:46:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=6d72c4eed04c7d28639ee31789e6201275e7d9b7'/>
<id>urn:sha1:6d72c4eed04c7d28639ee31789e6201275e7d9b7</id>
<content type='text'>
Installs the Elisp ruleset from the rulesets repo:

  - CLAUDE.md (project instructions template)
  - .claude/rules/ (testing, verification, elisp, elisp-testing)
  - .claude/hooks/validate-el.sh (check-parens + byte-compile + run
    matching tests on every .el edit via PostToolUse)
  - .claude/settings.json (permission allowlist + hook wiring)
  - githooks/pre-commit (secret scan + staged-file paren check)

core.hooksPath set to githooks/ so the pre-commit activates automatically.
Hooks use \$CLAUDE_PROJECT_DIR with a script-relative fallback, so a
fresh clone works without path edits.

.gitignore extended with personal-override entries (settings.local.json,
.cache/) and byte-compile artifacts (*.elc, *.eln).
</content>
</entry>
<entry>
<title>changed repositories</title>
<updated>2025-11-18T17:13:39+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-18T17:13:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=4835fadabf243b33fb78557e45428055675e7300'/>
<id>urn:sha1:4835fadabf243b33fb78557e45428055675e7300</id>
<content type='text'>
</content>
</entry>
</feed>
