Skip to content

Commit c31db96

Browse files
committed
docs: added a declaration of GenAI usage to the AI-POLICY.md file + misc
1 parent d743d53 commit c31db96

File tree

3 files changed

+111
-9
lines changed

3 files changed

+111
-9
lines changed

AI-POLICY.md

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22

33
## Read this first
44

5-
The most important rule: Be honest and inform about it!
5+
The most important rule: be honest and inform about it!
6+
7+
Also: keep a log of the prompts used - prompts may be included in the
8+
git commits.
9+
10+
## Transparency matters
611

712
If you've spent hours, perhaps a full day of your time writing up a
813
pull request, then I sort of owe you something. I should spend some
@@ -26,10 +31,10 @@ explain in details why I'm rejecting the pull request.
2631
## Bugfixes are (most often) welcome
2732

2833
It's fine to ask the AI for help to analyze a bug and create a fix for
29-
it. By discovering the bug, reproducing it and testing it you're adding
30-
real value to the project - but be transparent about AI usage and I
31-
expect that you will not break down and cry if I decide to reject the code
32-
changes.
34+
it. By discovering the bug, reproducing it and testing it you're
35+
adding real value to the project - just be transparent about AI usage
36+
and do not take offence if the code changes are rejected, or completely
37+
rewritten.
3338

3439
## General rules
3540

@@ -69,3 +74,34 @@ changes.
6974
as of 2026-02, and I can hardly see cases where the AI would break
7075
the Code of Conduct, but at the end of the day, it's **YOUR**
7176
responsibility that the contribution follows those guidelines.
77+
78+
## Disclosure of GenAI usage, 2.2.6 - 3.2.0
79+
80+
The maintainer started playing with Claude Code in the end of 2025 - and [blogged about it](https://www.redpill-linpro.com/techblog/2026/03/20/from-luddite-to-vibe-coder.html)
81+
82+
Releases 2.2.6 - 3.2.0 has been heavily assisted by Claude - which is pretty obvious when looking into the commit messages. My experiences has been mixed - sometimes it seems to be doing a better and faster job than me, other times it seems to be making a mess a lot faster than what I can do it. Despite (or because of?) using Claude extensively, I spent much more time on it than estimated.
83+
84+
Lots of time and efforts have been spent on doing QA on the changes, fixing up things and/or asking Claude to do a better job. The surge of issues reported after the 3.0-release is probably unrelated to the AI usage - it's a result of trying to shoehorn both async and API changes into it without breaking backward compatbility and without duplicating too much code. The CHANGELOG.md entry for 3.0 explicitly declared a caveat: "there are massive code changes in version 3.0, so if you're using the Python CalDAV client library in some sharp production environment, I would recommend to wait for two months before upgrading".
85+
86+
I don't have any good log of prompts given to Claude prior to the 3.2.0-release, but some of the considerations from Claude has been stored under `docs/design`. A copy of my [CLAUDE.md](docs/design/CLAUDE.md)-file can now be found in the same directory.
87+
88+
Generated changes and human-made changes are often mixed up. I prefer "logical" commits containing self-sustained changesets, one of the things I'm often asking Claude to do is to do a rebase of a branch and organize the commits in one or few logical commits with descriptive commit messages.
89+
90+
## Future plans of GenAI-usage
91+
92+
Post-3.2.0 and until further notice I will try to go more back to the old ways for doing the "core development tasks" - new features and complex refactoring. If nothing else, it's important for maintaining my brain cells, coding skills and making sure all the changes sticks to my memory. The new policy is that GenAI-tools should be used mainly for improving quality, not speeding up the development.
93+
94+
I still intend to use GenAI heavily for certain tasks, like:
95+
96+
* Minor bugfixes - with test code. The bugfix itself may often be a simple one-line change, but debugging and writing up the tests is tedious work.
97+
* Maintaining the integration test framework. It's hard work, even when using Claude. Thanks to Claude I've now been able to put up an extensive "battery" of test servers that I'm checking regularly towards. This is something I've started on several times since 2013 but except for the two integrated python servers I never managed to get any lasting solutions. It's very useful to be able to easily test the library towards a wide range of servers - the majority of the bug reports are compatibility issues. The more servers I have for testing every release, the less troubles will be discovered downstream.
98+
* Other CI-related frameworks and "boiler plate" for things like automated testing of code embedded in the documentation, QA on the commit messages before I push my git commits out from my laptop, etc. It increases quality, although being quite outside the "core business" of the CalDAV library. Doing it manually (and reading through all the documentation out there) would have stolen lots of valuable time that could have been used for coding.
99+
* Writing up test code. I've always thought that "test driven development" is a good idea (write test code first, then the logic), but it's quite often both tedious and difficult. Claude can make them really fast. It still needs some QA, care should be taken to ensure it's testing the right thing.
100+
* Code reviews. The more "eyes" looking into the software, the better - it seems Claude is equally good at spotting the problems and mistakes in my code as I'm on spotting the problems and mistakes in the code Claude generates.
101+
* Debugging. It's easy to get stuck and spend tons of time on debugging - sometimes (but not always) Claude can find them easily.
102+
* Various mundane and tedious work (i.e. "I left a TODO-note in the code over there, could you have look into it and eliminate it?").
103+
* Development of the companion caldav-server-checker tool - writing up checks to discover various server issues may be really tedious and time-consuming, and (most of the time) easy for Claude to get right. The alternative to using GenAI would probably be to have half as many checks. I find those checks very useful.
104+
* Investigations of different architectural choices - like with the async work I had claude develop different design approaches and chose the one that I felt most comfortable with (though I'm still not sure that I did the right choice).
105+
* Reading RFCs and quickly give a pointer to the relevant sections, or verifying that the code is according to the standards or not.
106+
107+
I will do some research on how to log prompts and chat.

README.md

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,28 @@ async def main():
4040
asyncio.run(main())
4141
```
4242

43-
The documentation was updated as of version 2.0, and is available at https://caldav.readthedocs.io/
43+
## Documentation and other links
44+
45+
The user documentation (up-to-date with version 3.2) is embedded under `docs/source` - a rendered copy is available at https://caldav.readthedocs.io/
46+
47+
Other documentation:
48+
49+
* [This file](README.md)
50+
* [Changelog](CHANGELOG.md)
51+
* [Contributors guide](CONTRIBUTING.md)
52+
* [Contact information](CONTACT.md)
53+
* [Code of Conduct](CODE_OF_CONDUCT)
54+
* [Security Policy](SECURITY.md)
55+
* [AI policy and AI disclaimer](AI-POLICY.md)
56+
* [Apache License](COPYING.APACHE)
57+
* [GPL license](COPYING.GPL)
4458

4559
The package is published at [Pypi](https://pypi.org/project/caldav)
4660

4761
## HTTP Libraries
4862

49-
The sync client uses [niquests](https://github.com/jawah/niquests) by default (with fallback to [requests](https://requests.readthedocs.io/)). The async client uses [httpx](https://www.python-httpx.org/) if installed (`pip install caldav[async]`), otherwise falls back to niquests. See [HTTP Library Configuration](docs/source/http-libraries.rst) for details.
63+
The sync client uses [niquests](https://github.com/jawah/niquests) by default (with fallback to [requests](https://requests.readthedocs.io/)). The async client uses [httpx](https://www.python-httpx.org/) if installed, otherwise falls back to niquests. See [HTTP Library Configuration](docs/source/http-libraries.rst) for details.
5064

51-
Licences:
65+
## Licences
5266

53-
Caldav is dual-licensed under the [GNU GENERAL PUBLIC LICENSE Version 3](COPYING.GPL) or the [Apache License 2.0](COPYING.APACHE).
67+
The caldav library is dual-licensed under the [GNU GENERAL PUBLIC LICENSE Version 3](COPYING.GPL) or the [Apache License 2.0](COPYING.APACHE).

docs/design/CLAUDE.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
Below is a copy of my ~/.claude/CLAUDE.md-file - included for the sake of transparency. It's a bit personal and does not contain much specific for the Python CalDAV library.
2+
3+
(This copy is from 2026-04 - I'm considering to create some scripts to auto-sync the content)
4+
5+
---
6+
7+
# GENERAL
8+
- Most work is git-backed, with GitHub, GitLab and/or my own server as upstream. `gh` and `glab` CLI tools are installed.
9+
- It's OK to publish comments on my behalf (e.g. in GitHub issues and pull requests), but such comments must always both start and end with a disclaimer that they are AI-generated.
10+
11+
# CHAT AND PLANNING
12+
- no need to be polite in the chat
13+
- on the keyword NOW in capital letters, ignore the two bullet points below
14+
- Point out typos or grammar errors found in my input.
15+
- Before doing anything, present honest arguments on why the user wish may be a bad idea.
16+
17+
# DEBUGGING
18+
- When debugging, prefer writing a permanent unit test over a temporary debugging script.
19+
20+
# BEFORE fixing/writing code
21+
- For projects I don't own, check for a contributors guide or AI policy and follow it.
22+
- Don't reinvent the wheel — check whether a library already solves the problem before writing new code from scratch.
23+
- Check the project's testing regime; test code may be important.
24+
- Write tests first, then implement. Confirm tests are FAILING before adding the fix/feature.
25+
26+
# WHEN fixing/writing code
27+
- Avoid duplicated code, paths, and logic. Check if similar logic already exists before implementing new logic. Refactor if needed.
28+
- For Python, consider type annotations:
29+
- All public APIs in packages/libraries must have good type annotations.
30+
- Some projects enforce annotations in test code via ruff — follow the project's conventions.
31+
- Annotations may be skipped for simple scripts and internal methods unless ruff requires them.
32+
33+
# AFTER fixing/writing code
34+
- Check if documentation needs updating.
35+
- Check if a CHANGELOG needs updating. My CHANGELOGs only cover changes since the last release — bugs introduced and fixed between releases should not be mentioned.
36+
- Run relevant tests. On the caldav project the integration tests take very long time to run, so don't do a full run of all tests on caldav.
37+
- Commit changes via git:
38+
- Commit often.
39+
- Always check the active git branch before committing.
40+
- For projects at version >= 1.0.0, never commit directly to main/master. For v0.x or unversioned projects, pushing to main/master is usually fine.
41+
- Only stage files related to the current task. Warn me if other uncommitted work exists in the repo.
42+
- Don't push and don't open PRs/MRs unless I explicitly ask.
43+
- for commit messages referencing github issues or pull requests, use the full URL (rationale: perhaps GitHub will still be existing in 15 years, but it may not be obvious that "#132" references an issue on GitHub anymore)
44+
- When generating new issues or leaving comments, prepend and tail the comment with "⚠️ This comment is AI-generated ($details) on behalf of tobixen" (details may be "Claude Sonnet 4.6 via Claude Code")
45+
- For PRs/MRs into projects I don't own or contribute to regularly, prepend the description with this text (skip "bug discovery, reproduction" if it's not applicable):
46+
47+
```
48+
The real value I'm adding to the project here is bug discovery, reproduction and
49+
testing. This pull request was vibe-coded, including the description below.
50+
I promise not to break down and cry if the pull request is rejected :-)
51+
---
52+
```

0 commit comments

Comments
 (0)