autonerves 2026.7.19.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. autonerves-2026.7.19.1/.gitattributes +2 -0
  2. autonerves-2026.7.19.1/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  3. autonerves-2026.7.19.1/.github/ISSUE_TEMPLATE/feature_request.md +51 -0
  4. autonerves-2026.7.19.1/.github/copilot-instructions.md +9 -0
  5. autonerves-2026.7.19.1/.github/workflows/main.yml +13 -0
  6. autonerves-2026.7.19.1/.url_check_allowlist.txt +13 -0
  7. autonerves-2026.7.19.1/AGENTS.md +121 -0
  8. autonerves-2026.7.19.1/CLAUDE.md +5 -0
  9. autonerves-2026.7.19.1/CODE_OF_CONDUCT.md +307 -0
  10. autonerves-2026.7.19.1/CONTRIBUTING.md +78 -0
  11. autonerves-2026.7.19.1/LICENSE +21 -0
  12. autonerves-2026.7.19.1/MANIFEST.in +12 -0
  13. autonerves-2026.7.19.1/PKG-INFO +104 -0
  14. autonerves-2026.7.19.1/README.md +66 -0
  15. autonerves-2026.7.19.1/autonerves/__init__.py +105 -0
  16. autonerves-2026.7.19.1/autonerves/class_path.py +61 -0
  17. autonerves-2026.7.19.1/autonerves/conf.py +386 -0
  18. autonerves-2026.7.19.1/autonerves/csvable.py +105 -0
  19. autonerves-2026.7.19.1/autonerves/dictable.py +387 -0
  20. autonerves-2026.7.19.1/autonerves/directory_config.py +243 -0
  21. autonerves-2026.7.19.1/autonerves/exc.py +6 -0
  22. autonerves-2026.7.19.1/autonerves/fitsable.py +242 -0
  23. autonerves-2026.7.19.1/autonerves/jax_wrapper.py +139 -0
  24. autonerves-2026.7.19.1/autonerves/json_prior/__init__.py +0 -0
  25. autonerves-2026.7.19.1/autonerves/json_prior/config.py +244 -0
  26. autonerves-2026.7.19.1/autonerves/json_prior/generate.py +70 -0
  27. autonerves-2026.7.19.1/autonerves/mock/__init__.py +0 -0
  28. autonerves-2026.7.19.1/autonerves/mock/mock_real.py +61 -0
  29. autonerves-2026.7.19.1/autonerves/output.py +64 -0
  30. autonerves-2026.7.19.1/autonerves/setup_colab.py +336 -0
  31. autonerves-2026.7.19.1/autonerves/setup_notebook.py +41 -0
  32. autonerves-2026.7.19.1/autonerves/test_mode.py +216 -0
  33. autonerves-2026.7.19.1/autonerves/tools/__init__.py +0 -0
  34. autonerves-2026.7.19.1/autonerves/tools/decorators.py +80 -0
  35. autonerves-2026.7.19.1/autonerves/workspace.py +234 -0
  36. autonerves-2026.7.19.1/autonerves.egg-info/SOURCES.txt +44 -0
  37. autonerves-2026.7.19.1/eden.yaml +2 -0
  38. autonerves-2026.7.19.1/llms.txt +15 -0
  39. autonerves-2026.7.19.1/logo.png +0 -0
  40. autonerves-2026.7.19.1/priors/subconfig.json +1 -0
  41. autonerves-2026.7.19.1/pyproject.toml +66 -0
  42. autonerves-2026.7.19.1/scripts/convert_config.py +37 -0
  43. autonerves-2026.7.19.1/scripts/convert_prior_configs.py +55 -0
  44. autonerves-2026.7.19.1/scripts/edenise.py +23 -0
  45. autonerves-2026.7.19.1/scripts/generate_priors.py +14 -0
  46. autonerves-2026.7.19.1/setup.cfg +4 -0
  47. autonerves-2026.7.19.1/setup.py +8 -0
@@ -0,0 +1,2 @@
1
+ # Executable scripts must keep LF endings — a CRLF shebang breaks execution on HPC/Linux.
2
+ scripts/*.py eol=lf
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: Bug Report
3
+ about: Report a bug or unexpected behaviour
4
+ title: 'fix: '
5
+ labels: bug
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Description
10
+
11
+ <!-- Clear description of the bug -->
12
+
13
+ ## Steps to Reproduce
14
+
15
+ 1.
16
+ 2.
17
+ 3.
18
+
19
+ ## Expected Behaviour
20
+
21
+ <!-- What should happen -->
22
+
23
+ ## Actual Behaviour
24
+
25
+ <!-- What actually happens -->
26
+
27
+ ## Environment
28
+
29
+ - OS:
30
+ - Python version:
31
+ - Package version:
32
+
33
+ ## Original Prompt
34
+
35
+ <details>
36
+ <summary>Click to expand starting prompt</summary>
37
+
38
+ <!-- If this issue was created from an AI prompt, paste the original prompt here -->
39
+
40
+ </details>
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: Feature / Task Request
3
+ about: Propose a new feature, improvement, or task
4
+ title: ''
5
+ labels: enhancement
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ <!-- 2-4 sentence summary of what this task is and why it matters -->
12
+
13
+ ## Plan
14
+
15
+ <!-- High-level bullet-point plan, human readable, no code -->
16
+
17
+ <details>
18
+ <summary>Detailed implementation plan</summary>
19
+
20
+ ### Affected Repositories
21
+ <!-- List repos this touches, mark primary -->
22
+
23
+ ### Implementation Steps
24
+ <!-- Step-by-step with file paths and specifics -->
25
+
26
+ ### Key Files
27
+ <!-- List files that will be modified -->
28
+
29
+ </details>
30
+
31
+ ## Example Code
32
+
33
+ <!-- If your feature involves a specific calculation, algorithm, or small piece of functionality,
34
+ include example code here. Even a rough script, a working prototype, or a snippet showing
35
+ the existing behaviour you want changed helps enormously.
36
+
37
+ Code gives AI agents and human contributors concrete context and dramatically reduces
38
+ misunderstandings. Delete this section if not applicable. -->
39
+
40
+ ```python
41
+ # Paste your example code here
42
+ ```
43
+
44
+ ## Original Prompt
45
+
46
+ <details>
47
+ <summary>Click to expand starting prompt</summary>
48
+
49
+ <!-- If this issue was created from an AI prompt, paste the original prompt here -->
50
+
51
+ </details>
@@ -0,0 +1,9 @@
1
+ # Copilot Coding Agent Instructions
2
+
3
+ You are working on **PyAutoNerves**, the configuration, serialization and I/O
4
+ foundation of the PyAuto ecosystem (package `autonerves`).
5
+
6
+ The canonical, agent-agnostic instructions for this repo live in **`AGENTS.md`** at
7
+ the repository root — build and test commands, architecture, the base-layer config
8
+ rules, and conventions. Read it directly (Copilot does not process `@`-imports) and
9
+ treat it as the single source of truth.
@@ -0,0 +1,13 @@
1
+ name: Tests
2
+
3
+ on: [push, pull_request]
4
+
5
+ # Unit tests are defined once, centrally, in PyAutoHeart's reusable workflow
6
+ # (Heart owns all health/readiness checking). This thin caller preserves PR-time
7
+ # gating: the `unittest` job is the required status check on this repo.
8
+ jobs:
9
+ unittest:
10
+ uses: PyAutoLabs/PyAutoHeart/.github/workflows/lib-tests.yml@main
11
+ with:
12
+ package: autonerves
13
+ secrets: inherit
@@ -0,0 +1,13 @@
1
+ # Known broken URLs grandfathered for url_check_live.sh.
2
+ # Format: one URL per line. Lines starting with '#' and blank lines are ignored.
3
+ # Sample location follows each URL as a trailing comment.
4
+ #
5
+ # This file is referenced by .github/workflows/url_check.yml (weekly cron).
6
+ # url_check_live.sh fails CI when a URL is broken AND not in this file.
7
+ # To accept new breakage: append the URL here. To force a fix: leave it out.
8
+
9
+ # Code of Conduct boilerplate
10
+ http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy # CODE_OF_CONDUCT.md:305
11
+
12
+ # Internal PyAuto docs — pages renamed, need editorial fix
13
+ https://pyautofit.readthedocs.io/en/latest/general/adding_a_model_component.html # autonerves/directory_config.py:235
@@ -0,0 +1,121 @@
1
+ # PyAutoNerves — Agent Instructions
2
+
3
+ Canonical, agent-agnostic instructions for this repo. `CLAUDE.md` imports this
4
+ file; any tool that does not process `@`-imports should read this directly.
5
+
6
+ **This repo is the Nerves organ of the PyAuto organism** — the base
7
+ configuration/serialization layer (`autonerves`) that every scientific library
8
+ imports. It is a full organ (promoted to the seventh organ 2026-07); the
9
+ organism map below is generated from `PyAutoMind/repos.yaml`.
10
+
11
+ ## The organism map
12
+
13
+ <!-- repos_sync:map:begin -->
14
+ **You are one organ of the PyAuto organism** — an agentic ecosystem for
15
+ human-led, natural-language software development. The organs below are
16
+ peer repositories; this repo is one of them, not a part of another.
17
+ Canonical boundaries live in `PyAutoBrain/ORGANISM.md`; the full body map
18
+ (every repo, not just organs) is `PyAutoMind/repos.yaml`.
19
+
20
+ | Organ | Repo | Role |
21
+ |-------|------|------|
22
+ | **Mind** | PyAutoMind | Intent, goals, priorities, workflow state; every task starts as a markdown prompt here. |
23
+ | **Brain** | PyAutoBrain | Reasoning/orchestration layer; how work is decomposed and routed; the specialist agents. |
24
+ | **Hands** | PyAutoHands | Packaging, tagging, notebook generation, PyPI release execution. |
25
+ | **Heart** | PyAutoHeart | Health/readiness — the authoritative "is it safe to release?" verdict. |
26
+ | **Memory** | PyAutoMemory | Long-term scientific/software/project knowledge (see science pointer below). |
27
+ | **Gut** | PyAutoGut | Owns the lifecycle of condemned self-material (stale branches, stashes, dead code/tests): holds it as durable, recoverable git refs through a transit window and voids it on a sweep. The storage mirror of Memory (retention vs release). |
28
+ | **Nerves** | PyAutoNerves | The Nerves — the configuration/serialization layer connecting workspace conventions to libraries (layered config, version handshake, test_mode), delivered as the `autonerves` package. |
29
+
30
+ Call chain (always this order): **Brain → Heart (gate) → Build (execute)**. Brain agents are **conductors** (front-door; a human drives them; they decide *and* act) or **faculties** (read-only opinions the conductors consult; they judge and stop). New capability grows as a faculty, not a new organ, unless it owns state or effects no existing organ can.
31
+
32
+ Generated from `PyAutoMind/repos.yaml` + `PyAutoBrain/ORGANISM.md`; edit there, then run `python3 PyAutoMind/scripts/repos_sync.py --write`.
33
+ <!-- repos_sync:map:end -->
34
+
35
+ ## What this repo is
36
+
37
+ **PyAutoNerves** (package `autonerves`) is the configuration, serialization, and
38
+ I/O foundation of the PyAuto ecosystem: layered config with overrides,
39
+ dict/JSON/CSV serialization, FITS I/O, JSON-based priors, and the shared
40
+ `jax_wrapper` / `test_mode` utilities.
41
+
42
+ Dependency direction: autonerves is the **base layer**. It does **not** import
43
+ `autofit`, `autoarray`, `autogalaxy`, or `autolens`. All four of those depend
44
+ on autonerves, so any public-API change here ripples downstream.
45
+
46
+ ## Related repos
47
+
48
+ - **Source siblings (downstream):** PyAutoFit, PyAutoArray, PyAutoGalaxy,
49
+ PyAutoLens — all depend on autonerves.
50
+ - No `_workspace`, `_workspace_test`, or HowTo companion repo.
51
+ - No `docs/` / RTD site — the package source and `test_autonerves/` are the
52
+ authoritative reference.
53
+
54
+ ## Architecture
55
+
56
+ - `autonerves/conf.py` — layered config system (`Config` / `conf.instance`).
57
+ - `autonerves/dictable.py` — dict / JSON serialization (`output_to_json` / `from_json`).
58
+ - `autonerves/fitsable.py` — FITS I/O (`output_to_fits` / `ndarray_via_fits_from`).
59
+ - `autonerves/json_prior/` — JSON-based priors.
60
+ - `autonerves/tools/` — shared decorators and helpers.
61
+ - `test_autonerves/` — test suite.
62
+
63
+ ## Quick commands
64
+
65
+ ```bash
66
+ pip install -e ".[dev]" # install with dev/test extras
67
+ python -m pytest test_autonerves/ # full test suite
68
+ python -m pytest test_autonerves/tools/test_decorators.py # one focused test
69
+ black autonerves/ # formatter (advisory — not gated)
70
+ ```
71
+
72
+ In a sandboxed / restricted environment, point numba and matplotlib at
73
+ writable caches:
74
+
75
+ ```bash
76
+ NUMBA_CACHE_DIR=/tmp/numba_cache MPLCONFIGDIR=/tmp/matplotlib python -m pytest test_autonerves/
77
+ ```
78
+
79
+ ## CI / definition of green
80
+
81
+ PRs must pass `pytest --cov` on the CI matrix (Python 3.12 **and** 3.13). There
82
+ is no black/ruff/flake8 gate — formatting is advisory. (`requires-python` in
83
+ `pyproject.toml` is `>=3.9`.)
84
+
85
+ ## Public API
86
+
87
+ The public surface is defined authoritatively in `autonerves/__init__.py` — read
88
+ it rather than trusting a hand-maintained list. Canonical import:
89
+
90
+ ```python
91
+ from autonerves import conf
92
+ ```
93
+
94
+ Key surfaces: `Config` / `conf.instance`, `output_to_json` / `from_json`
95
+ (`dictable.py`), `output_to_fits` / `ndarray_via_fits_from` (`fitsable.py`).
96
+
97
+ ## Key rules / footguns
98
+
99
+ - All files use Unix line endings (LF, `\n`) — never `\r\n`.
100
+ - This is the base config/IO layer: a public-API change here can break
101
+ PyAutoFit, PyAutoArray, PyAutoGalaxy, and PyAutoLens. Flag it loudly.
102
+ - YAML dict keys are lowercased on load (`muJy` → `mujy`); keep config keys and
103
+ any matching Python registries snake_case-lowercase.
104
+
105
+ ## Working on issues
106
+
107
+ 1. Read the issue description and any linked plan.
108
+ 2. Identify affected files and make the change.
109
+ 3. Run the full suite: `python -m pytest test_autonerves/`.
110
+ 4. If you changed public API, say so explicitly — PyAutoFit, PyAutoArray,
111
+ PyAutoGalaxy, and PyAutoLens all depend on this package and may need updates.
112
+ 5. Ensure all tests pass before opening a PR.
113
+
114
+ <!-- repos_sync:history:begin -->
115
+ ## Never rewrite history
116
+
117
+ Never rewrite pushed history on any repo with a remote — no `git init` over a
118
+ tracked repo, no force-push to `main`, no fresh-start "Initial commit", no
119
+ `filter-repo` / `filter-branch` / `rebase -i` on pushed branches. To get a
120
+ clean tree: `git fetch origin && git reset --hard origin/main && git clean -fd`.
121
+ <!-- repos_sync:history:end -->
@@ -0,0 +1,5 @@
1
+ # PyAutoNerves — agent instructions
2
+ The canonical, agent-agnostic instructions live in `AGENTS.md`. Claude Code loads them
3
+ via the import below; if your tool does not process `@`-imports, open `AGENTS.md` in
4
+ this directory and read it directly.
5
+ @AGENTS.md
@@ -0,0 +1,307 @@
1
+ # PyAutoNerves Code of Conduct
2
+
3
+ **Table of Contents**
4
+
5
+ - [The Short Version](#the-short-version)
6
+ - [The Longer Version](#the-longer-version)
7
+ - [PyAutoNerves Diversity Statement](#project-diversity-statement)
8
+ - [PyAutoNerves Code of Conduct: Introduction & Scope](#project-code-of-conduct-introduction--scope)
9
+ - [Standards for Behavior](#standards-for-behavior)
10
+ - [Unacceptable Behavior](#unacceptable-behavior)
11
+ - [Reporting Guidelines](#reporting-guidelines)
12
+ - [How to Submit a Report](#how-to-submit-a-report)
13
+ - [Person(s) Responsible for Resolving Complaints](#persons-responsible-for-resolving-complaints)
14
+ - [Conflicts of Interest](#conflicts-of-interest)
15
+ - [What to Include in a Report](#what-to-include-in-a-report)
16
+ - [Enforcement: What Happens After a Report is Filed?](#enforcement-what-happens-after-a-report-is-filed)
17
+ - [Acknowledgment and Responding to Immediate Needs](#acknowledgment-and-responding-to-immediate-needs)
18
+ - [Reviewing the Report](#reviewing-the-report)
19
+ - [Contacting the Person Reported](#contacting-the-person-reported)
20
+ - [Response and Potential Consequences](#response-and-potential-consequences)
21
+ - [Appealing a Decision](#appealing-a-decision)
22
+ - [Timeline Summary:](#timeline-summary)
23
+ - [Confirming Receipt](#confirming-receipt)
24
+ - [Reviewing the Report](#reviewing-the-report-1)
25
+ - [Consequences & Resolution](#consequences--resolution)
26
+ - [License](#license)
27
+
28
+ ## The Short Version
29
+
30
+ Be kind to others. Do not insult or put down others. Behave professionally. Remember that harassment and sexist,
31
+ racist, or exclusionary jokes are not appropriate for PyAutoNerves.
32
+
33
+ All communication should be appropriate for a professional audience including people of many different backgrounds.
34
+ Sexual language and imagery is not appropriate.
35
+
36
+ PyAutoNerves is dedicated to providing a harassment-free community for everyone, regardless of gender, sexual orientation,
37
+ gender identity and expression, disability, physical appearance, body size, race, or religion. We do not tolerate
38
+ harassment of community members in any form.
39
+
40
+ Thank you for helping make this a welcoming, friendly community for all.
41
+
42
+ ## The Longer Version
43
+
44
+ ### PyAutoNerves Diversity Statement
45
+
46
+ PyAutoNerves welcomes and encourages participation in our community by people of all backgrounds and identities. We
47
+ are committed to promoting and sustaining a culture that values mutual respect, tolerance, and learning, and we work
48
+ together as a community to help each other live out these values.
49
+
50
+ We have created this diversity statement because we believe that a diverse community is stronger, more vibrant,
51
+ and produces better software and better science. A diverse community where people treat each other with respect has
52
+ more potential contributors, more sources for ideas, and fewer shared assumptions that might hinder development
53
+ or research.
54
+
55
+ Although we have phrased the formal diversity statement generically to make it all-inclusive, we recognize that there
56
+ are specific identities that are impacted by systemic discrimination and marginalization. We welcome all people to
57
+ participate in the PyAutoNerves community regardless of their identity or background.
58
+
59
+ ### PyAutoNerves Code of Conduct: Introduction & Scope
60
+
61
+ This code of conduct should be honored by everyone who participates in the PyAutoNerves community. It should be
62
+ honored in any PyAutoNerves-related activities, by anyone claiming affiliation with PyAutoNerves, and especially when
63
+ someone is representing PyAutoNerves in any role (including as an event volunteer or speaker).
64
+
65
+ This code of conduct applies to all spaces managed by PyAutoNerves, including all public and private mailing lists,
66
+ issue trackers, wikis, forums, and any other communication channel used by our community. The code of conduct equally
67
+ applies at PyAutoNerves events and governs standards of behavior for attendees, speakers, volunteers, booth staff,
68
+ and event sponsors.
69
+
70
+ This code is not exhaustive or complete. It serves to distill our understanding of a collaborative, inclusive
71
+ community culture. Please try to follow this code in spirit as much as in letter, to create a friendly and
72
+ productive environment that enriches the PyAutoNerves community.
73
+
74
+ The PyAutoNerves Code of Conduct follows below.
75
+
76
+ ### Standards for Behavior
77
+
78
+ PyAutoNerves is a worldwide community. All communication should be appropriate for a professional audience including
79
+ people of many different backgrounds.
80
+
81
+ **Please always be kind and courteous. There's never a need to be mean or rude or disrespectful.** Thank you for
82
+ helping make this a welcoming, friendly community for all.
83
+
84
+ We strive to:
85
+
86
+ **Be empathetic, welcoming, friendly, and patient.** We remember that PyAutoNerves is crafted by human beings who
87
+ deserve to be treated with kindness and empathy. We work together to resolve conflict and assume good intentions.
88
+ We may all experience some frustration from time to time, but we do not allow frustration to turn into a personal
89
+ attack. A community where people feel uncomfortable or threatened is not a productive one.
90
+
91
+ **Be collaborative.** Our work depends on the participation of many people, and in turn others depend on our work.
92
+ Open source communities depend on effective and friendly collaboration to achieve their goals.
93
+
94
+ **Be inquisitive.** Nobody knows everything! Asking questions early avoids many problems later, so we encourage
95
+ questions, although we may direct them to the appropriate forum. We will try hard to be responsive and helpful.
96
+
97
+ **Be careful in the words that we choose.** We are careful and respectful in our communication and we take
98
+ responsibility for our own speech. Be kind to others. Do not insult or put down other members of the community.
99
+
100
+ #### Unacceptable Behavior
101
+
102
+ We are committed to making participation in this community a harassment-free experience.
103
+
104
+ We will not accept harassment or other exclusionary behaviours, such as:
105
+
106
+ - The use of sexualized language or imagery
107
+ - Excessive profanity (please avoid curse words; people differ greatly in their sensitivity to swearing)
108
+ - Posting sexually explicit or violent material
109
+ - Violent or intimidating threats or language directed against another person
110
+ - Inappropriate physical contact and/or unwelcome sexual attention or sexual comments
111
+ - Sexist, racist, or otherwise discriminatory jokes and language
112
+ - Trolling or insulting and derogatory comments
113
+ - Written or verbal comments which have the effect of excluding people on the basis of membership in a specific group,
114
+ including level of experience, gender, gender identity and expression, sexual orientation, disability, neurotype,
115
+ personal appearance, body size, race, ethnicity, age, religion, or nationality
116
+ - Public or private harassment
117
+ - Sharing private content, such as emails sent privately or non-publicly, or direct message history, without the
118
+ sender's consent
119
+ - Continuing to initiate interaction (such as photography, recording, messaging, or conversation) with someone after
120
+ being asked to stop
121
+ - Sustained disruption of talks, events, or communications, such as heckling of a speaker
122
+ - Publishing (or threatening to post) other people's personally identifying information ("doxing"), such as
123
+ physical or electronic addresses, without explicit permission
124
+ - Other unethical or unprofessional conduct
125
+ - Advocating for, or encouraging, any of the above behaviors
126
+
127
+ ### Reporting Guidelines
128
+
129
+ If you believe someone is violating the code of conduct, please report this in a timely manner. Code of conduct
130
+ violations reduce the value of the community for everyone. The PyAutoNerves leadership team takes reports of misconduct
131
+ very seriously and is committed to preserving and maintaining the welcoming nature of our community.
132
+
133
+ **All reports will be kept confidential.**
134
+
135
+ In some cases we may determine that a public statement will need to be made. If that's the case, the identities of
136
+ all involved parties and reporters will remain confidential unless those individuals instruct us otherwise.
137
+
138
+ All complaints will be reviewed and investigated and will result in a response that is deemed necessary and
139
+ appropriate to the circumstances. The PyAutoNerves team commits to maintaining confidentiality with regard to the
140
+ reporter of an incident.
141
+
142
+ For possibly unintentional breaches of the code of conduct, you may want to respond to the person and point out
143
+ this code of conduct (either in public or in private, whatever is most appropriate). If you would prefer not to do
144
+ that, please report the issue to PyAutoNerves directly, or ask James Nightingale for advice in confidence. Complete contact
145
+ information is below, under "How to Submit a Report."
146
+
147
+ Take care of each other. Alert PyAutoNerves if you notice a dangerous situation, someone in distress, or violations of
148
+ this code of conduct, even if they seem inconsequential.
149
+
150
+ #### How to Submit a Report
151
+
152
+ **If you feel your safety is in jeopardy or the situation is an emergency, we urge you to contact local law enforcement before making a report to PyAutoNerves.** (In the U.K., dial 999.)
153
+
154
+ PyAutoNerves is committed to promptly addressing any reported issues. If you have experienced or witnessed behavior that
155
+ violates the PyAutoNerves Code of Conduct, please report it by sending an email to one of the members of the PyAutoNerves
156
+ CoC Enforcement Team.
157
+
158
+ #### Person(s) Responsible for Resolving Complaints
159
+
160
+ All reports of breaches of the code of conduct will be investigated and handled by the **PyAutoNerves Code of Conduct Enforcement Team**.
161
+
162
+ The current PyAutoNerves Code of Conduct Enforcement Team consists of:
163
+
164
+ - James Nightingale
165
+
166
+ - [*james.w.nightingale@durham.ac.uk*](mailto:james.w.nightingale@durham.ac.uk)
167
+
168
+ #### Conflicts of Interest
169
+
170
+ In the event of any conflict of interest, the team member will immediately notify the PyAutoNerves Code of Conduct
171
+ Enforcement Team and recuse themselves if necessary.
172
+
173
+ #### What to Include in a Report
174
+
175
+ Our ability to address any code of conduct breaches in a timely and effective manner is impacted by the amount of
176
+ information you can provide, so, **our reporting form asks you to include as much of the following information as you can**:
177
+
178
+ - **Your contact info** (so we can get in touch with you if we need to follow up). This will be kept confidential.
179
+ If you wish to remain anonymous, your information will not be shared beyond the person receiving the initial report.
180
+ - The **approximate time and location of the incident** (please be as specific as possible)
181
+ - **Identifying information** (e.g. name, nickname, screen name, physical description) of the individual whose
182
+ behavior is being reported
183
+ - **Description of the behavior** (if reporting harassing language, please be specific about the words
184
+ used), **your account of what happened**, and any available **supporting records** (e.g. email, GitHub issue, screenshots, etc.)
185
+ - **Description of the circumstances/context** surrounding the incident
186
+ - Let us know **if the incident is ongoing**, and/or if this is part of an ongoing pattern of behavior
187
+ - Names and contact info, if possible, of **anyone else who witnessed** or was involved in this incident. (Did
188
+ anyone else observe the incident?)
189
+ - **Any other relevant information** you believe we should have
190
+
191
+ At PyAutoNerves Events: Event staff will attempt to gather and write down the above information from anyone making a
192
+ verbal report in-person at an event. Recording the details in writing is exceedingly important in order for us to
193
+ effectively respond to reports. If event staff write down a report taken verbally, then the person making the
194
+ report will be asked to review the written report for accuracy.
195
+
196
+ **If urgent action is needed regarding an incident at an in-person event, we strongly encourage you to reach out to the local event staff for immediate assistance.**
197
+
198
+ ### Enforcement: What Happens After a Report is Filed?
199
+
200
+ What happens after a report is filed?
201
+
202
+ #### Acknowledgment and Responding to Immediate Needs
203
+
204
+ PyAutoNerves and/or our event staff will attempt to ensure your safety and help with any immediate needs, particularly
205
+ at an in-person event. PyAutoNerves will make every effort to **acknowledge receipt within 24 hours** (and we'll aim
206
+ for much more quickly than that).
207
+
208
+ <!-- PROJECT SHOULD REVIEW THE RESPONSE SCHEDULE LISTED ABOVE AND BELOW, AND DETERMINE WHETHER IT IS REALISTIC FOR THE PROJECT. -->
209
+
210
+ #### Reviewing the Report
211
+
212
+ PyAutoNerves will make all efforts to **review the incident within three days** and determine:
213
+
214
+ - Whether this is an ongoing situation, or if there is a threat to anyone's physical safety
215
+ - What happened
216
+ - Whether this event constitutes a code of conduct violation
217
+ - Who the bad actor was, if any
218
+
219
+ #### Contacting the Person Reported
220
+
221
+ After PyAutoNerves has had time to review and discuss the report, someone will attempt to contact the person who is the
222
+ subject of the report to inform them of what has been reported about them. We will then ask that person for their
223
+ account of what happened.
224
+
225
+ #### Response and Potential Consequences
226
+
227
+ Once PyAutoNerves has completed our investigation of the report, we will make a decision as to how to respond. The
228
+ person making a report will not normally be consulted as to the proposed resolution of the issue, except insofar as
229
+ we need to understand how to help them feel safe.
230
+
231
+ Potential consequences for violating the PyAutoNerves code of conduct include:
232
+
233
+ - Nothing (if we determine that no violation occurred)
234
+ - Private feedback or reprimand from PyAutoNerves to the individual(s) involved
235
+ - Warning the person to cease their behavior and that any further reports will result in sanctions
236
+ - A public announcement that an incident occurred
237
+ - Mediation (only if both reporter and reportee agree)
238
+ - An imposed vacation (e.g. asking someone to "take a week off" from a mailing list)
239
+ - A permanent or temporary ban from some or all PyAutoNerves spaces (mailing lists, GitHub repos, in-person events, etc.)
240
+ - Assistance to the complainant with a report to other bodies, for example, institutional offices or appropriate law enforcement agencies
241
+ - Removing a person from PyAutoNerves membership or other formal affiliation
242
+ - Publishing an account of the harassment and calling for the resignation of the alleged harasser from their
243
+ responsibilities (usually pursued by people without formal authority: may be called for if the person is the
244
+ event leader, or refuses to stand aside from the conflict of interest, or similar)
245
+ - Any other response that PyAutoNerves deems necessary and appropriate to the situation
246
+
247
+ At PyAutoNerves events, if a participant engages in behavior that violates this code of conduct, the conference
248
+ organizers and staff may take any action they deem appropriate.
249
+
250
+ Potential consequences for violating the PyAutoNerves Code of Conduct at an in-person event include:
251
+
252
+ - Warning the person to cease their behavior and that any further reports will result in sanctions
253
+ - Requiring that the person avoid any interaction with, and physical proximity to, the person they are harassing
254
+ for the remainder of the event
255
+ - Ending a talk that violates the policy early
256
+ - Not publishing the video or slides of a talk that violated the policy
257
+ - Not allowing a speaker who violated the policy to give (further) talks at the event now or in the future
258
+ - Immediately ending any event volunteer responsibilities and privileges the reported person holds
259
+ - Requiring that the person not volunteer for future events PyAutoNerves runs (either indefinitely or for a certain time period)
260
+ - Expelling the person from the event without a refund
261
+ - Requiring that the person immediately leave the event and not return
262
+ - Banning the person from future events (either indefinitely or for a certain time period)
263
+ - Any other response that PyAutoNerves deems necessary and appropriate to the situation
264
+
265
+ No one espousing views or values contrary to the standards of our code of conduct will be permitted to hold any
266
+ position representing PyAutoNerves, including volunteer positions. PyAutoNerves has the right and responsibility to
267
+ remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not
268
+ aligned with this code of conduct.
269
+
270
+ We aim to **respond within one week** to the original reporter with either a resolution or an explanation of why the
271
+ situation is not yet resolved.
272
+
273
+ We will contact the person who is the subject of the report to let them know what actions will be taken as a result of
274
+ the report, if any.
275
+
276
+ Our policy is to make sure that everyone aware of the initial incident is also made aware that official action has
277
+ been taken, while still respecting the privacy of individuals. PyAutoNerves may choose to make a public report of the
278
+ incident, while maintaining the anonymity of those involved.
279
+
280
+ #### Appealing a Decision
281
+
282
+ To appeal a decision of PyAutoNerves, contact James Nightingale via email at
283
+ [*james.w.nightingale@durham.ac.uk*](mailto:james.w.nightingale@durham.ac.uk) with your appeal and
284
+ the Leadership Team will review the case.
285
+
286
+ ### Timeline Summary:
287
+
288
+ #### Confirming Receipt
289
+
290
+ PyAutoNerves will make every effort to acknowledge receipt of a report **within 24 hours** (and we'll aim for much more
291
+ quickly than that).
292
+
293
+ #### Reviewing the Report
294
+
295
+ PyAutoNerves will make all efforts to review the incident **within three days**.
296
+
297
+ #### Consequences & Resolution
298
+
299
+ We aim to respond **within one week** to the original reporter with either a resolution or an explanation of why
300
+ the situation is not yet resolved.
301
+
302
+ ## License
303
+
304
+ This code of conduct has been adapted from [*NUMFOCUS code of conduct*](https://numfocus.org/code-of-conduct),
305
+ which is adapted from numerous sources, including the [*Geek Feminism wiki, created by the Ada Initiative and other volunteers, which is under a Creative Commons Zero license*](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy), the [*Contributor Covenant version 1.2.0*](http://contributor-covenant.org/version/1/2/0/), the [*Bokeh Code of Conduct*](https://github.com/bokeh/bokeh/blob/main/docs/CODE_OF_CONDUCT.md), the [*SciPy Code of Conduct*](https://github.com/jupyter/governance/blob/main/conduct/enforcement.md), the [*Carpentries Code of Conduct*](https://docs.carpentries.org/topic_folders/policies/code-of-conduct.html#enforcement-manual), and the [*NeurIPS Code of Conduct*](https://neurips.cc/public/CodeOfConduct).
306
+
307
+ **PyAutoNerves Code of Conduct is licensed under the [Creative Commons Attribution 3.0 Unported License](https://creativecommons.org/licenses/by/3.0/).**
@@ -0,0 +1,78 @@
1
+ # AI-Assisted Development
2
+
3
+ This project uses an AI-first development workflow. Most features, bug fixes, and improvements are implemented through AI coding agents (Claude Code, GitHub Copilot, OpenAI Codex) working from structured issue descriptions.
4
+
5
+ ## How It Works
6
+
7
+ 1. **Issues are the starting point** — Every task begins as a GitHub issue with a structured format: an overview, a human-readable plan, a detailed implementation plan (in a collapsible block), and optionally the original prompt that generated the issue.
8
+
9
+ 2. **AI agents pick up issues** — Issues can be assigned to AI coding agents (e.g. GitHub Copilot) which read the issue description, `AGENTS.md`, and `CLAUDE.md` for context, then implement the changes autonomously.
10
+
11
+ 3. **Human review** — All AI-generated pull requests are reviewed by maintainers before merging.
12
+
13
+ ## Maintainer Workflow
14
+
15
+ Maintainer-driven dev work starts as a prompt file in
16
+ **[PyAutoPrompt](https://github.com/PyAutoLabs/PyAutoPrompt)** — the public
17
+ workflow repo that hosts the PyAuto task registry and the prompt-coupled
18
+ Claude Code skills. The pipeline:
19
+
20
+ 1. Write the task as `PyAutoPrompt/<category>/<name>.md` (free-form markdown
21
+ describing what to do, with `@RepoName/path/to/file.py` references).
22
+ 2. `/start_dev <category>/<name>.md` — reads the prompt, audits the code,
23
+ drafts the GitHub issue you see in this repo, and files it.
24
+ 3. `/start_library` or `/start_workspace` — opens a feature worktree under
25
+ `~/Code/PyAutoLabs-wt/<task-name>/`.
26
+ 4. `/ship_library` / `/ship_workspace` — runs tests, opens the PR, and
27
+ tracks state in `PyAutoPrompt/active.md`.
28
+
29
+ External contributors don't need PyAutoPrompt access — open an issue using
30
+ the templates in this repo and the same machinery handles it on our end.
31
+
32
+ ## Creating an Issue
33
+
34
+ When opening an issue, please use the provided issue templates. The **Feature / Task Request** template follows our standard format:
35
+
36
+ - **Overview** — What and why, in 2-4 sentences
37
+ - **Plan** — High-level bullet points (human-readable)
38
+ - **Detailed implementation plan** — File paths, steps, key files (in a collapsible block)
39
+ - **Original Prompt** — If you used an AI to help draft the issue, include the original prompt
40
+
41
+ If your feature involves a specific calculation, algorithm, or small piece of functionality — **include example code**. Even a rough script, a working prototype, or a snippet showing the existing behaviour you want to change makes a huge difference. Code examples give AI agents and human contributors concrete context to work from, and dramatically reduce misunderstandings about what you're asking for.
42
+
43
+ This structure ensures that both human contributors and AI agents can understand and act on the issue effectively.
44
+
45
+ ## Contributing Without AI
46
+
47
+ Traditional contributions are equally welcome! If you prefer to work without AI tools, simply follow the development setup and pull request guidelines below. The issue templates are helpful for any contributor, AI or human.
48
+
49
+ ---
50
+
51
+ # Contributing
52
+
53
+ Contributions are welcome and greatly appreciated!
54
+
55
+ ## Getting Started
56
+
57
+ 1. Install from source:
58
+ ```
59
+ pip install -e ".[dev]"
60
+ ```
61
+
62
+ 2. Create a feature branch:
63
+ ```
64
+ git checkout -b feature/name-of-your-branch
65
+ ```
66
+
67
+ 3. Make your changes and run tests:
68
+ ```
69
+ python -m pytest test_autonerves/
70
+ ```
71
+
72
+ 4. Commit, push, and submit a pull request.
73
+
74
+ ### Pull Request Guidelines
75
+
76
+ 1. The pull request should include tests for new functionality.
77
+ 2. If the pull request adds functionality, update docs accordingly.
78
+ 3. If changing public API, clearly document what changed — downstream packages depend on this.