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.
- autonerves-2026.7.19.1/.gitattributes +2 -0
- autonerves-2026.7.19.1/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- autonerves-2026.7.19.1/.github/ISSUE_TEMPLATE/feature_request.md +51 -0
- autonerves-2026.7.19.1/.github/copilot-instructions.md +9 -0
- autonerves-2026.7.19.1/.github/workflows/main.yml +13 -0
- autonerves-2026.7.19.1/.url_check_allowlist.txt +13 -0
- autonerves-2026.7.19.1/AGENTS.md +121 -0
- autonerves-2026.7.19.1/CLAUDE.md +5 -0
- autonerves-2026.7.19.1/CODE_OF_CONDUCT.md +307 -0
- autonerves-2026.7.19.1/CONTRIBUTING.md +78 -0
- autonerves-2026.7.19.1/LICENSE +21 -0
- autonerves-2026.7.19.1/MANIFEST.in +12 -0
- autonerves-2026.7.19.1/PKG-INFO +104 -0
- autonerves-2026.7.19.1/README.md +66 -0
- autonerves-2026.7.19.1/autonerves/__init__.py +105 -0
- autonerves-2026.7.19.1/autonerves/class_path.py +61 -0
- autonerves-2026.7.19.1/autonerves/conf.py +386 -0
- autonerves-2026.7.19.1/autonerves/csvable.py +105 -0
- autonerves-2026.7.19.1/autonerves/dictable.py +387 -0
- autonerves-2026.7.19.1/autonerves/directory_config.py +243 -0
- autonerves-2026.7.19.1/autonerves/exc.py +6 -0
- autonerves-2026.7.19.1/autonerves/fitsable.py +242 -0
- autonerves-2026.7.19.1/autonerves/jax_wrapper.py +139 -0
- autonerves-2026.7.19.1/autonerves/json_prior/__init__.py +0 -0
- autonerves-2026.7.19.1/autonerves/json_prior/config.py +244 -0
- autonerves-2026.7.19.1/autonerves/json_prior/generate.py +70 -0
- autonerves-2026.7.19.1/autonerves/mock/__init__.py +0 -0
- autonerves-2026.7.19.1/autonerves/mock/mock_real.py +61 -0
- autonerves-2026.7.19.1/autonerves/output.py +64 -0
- autonerves-2026.7.19.1/autonerves/setup_colab.py +336 -0
- autonerves-2026.7.19.1/autonerves/setup_notebook.py +41 -0
- autonerves-2026.7.19.1/autonerves/test_mode.py +216 -0
- autonerves-2026.7.19.1/autonerves/tools/__init__.py +0 -0
- autonerves-2026.7.19.1/autonerves/tools/decorators.py +80 -0
- autonerves-2026.7.19.1/autonerves/workspace.py +234 -0
- autonerves-2026.7.19.1/autonerves.egg-info/SOURCES.txt +44 -0
- autonerves-2026.7.19.1/eden.yaml +2 -0
- autonerves-2026.7.19.1/llms.txt +15 -0
- autonerves-2026.7.19.1/logo.png +0 -0
- autonerves-2026.7.19.1/priors/subconfig.json +1 -0
- autonerves-2026.7.19.1/pyproject.toml +66 -0
- autonerves-2026.7.19.1/scripts/convert_config.py +37 -0
- autonerves-2026.7.19.1/scripts/convert_prior_configs.py +55 -0
- autonerves-2026.7.19.1/scripts/edenise.py +23 -0
- autonerves-2026.7.19.1/scripts/generate_priors.py +14 -0
- autonerves-2026.7.19.1/setup.cfg +4 -0
- autonerves-2026.7.19.1/setup.py +8 -0
|
@@ -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,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.
|