faf-python-sdk 1.3.0__tar.gz → 1.3.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 (38) hide show
  1. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/CHANGELOG.md +12 -1
  2. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/CLAUDE.md +1 -1
  3. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/PKG-INFO +5 -3
  4. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/README.md +4 -2
  5. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/__init__.py +1 -1
  6. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/interop.py +6 -6
  7. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/pyproject.toml +1 -1
  8. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/.github/workflows/pypi.yml +0 -0
  9. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/.github/workflows/testpypi.yml +0 -0
  10. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/.gitignore +0 -0
  11. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/CODE_OF_CONDUCT.md +0 -0
  12. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/CONTRIBUTING.md +0 -0
  13. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/LICENSE +0 -0
  14. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/SECURITY.md +0 -0
  15. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/docs/GROK-INTEGRATION.md +0 -0
  16. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/docs/TECHNICAL-SPEC.md +0 -0
  17. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/examples/basic_usage.py +0 -0
  18. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/examples/grok_integration.py +0 -0
  19. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/dart_detection.json +0 -0
  20. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/detect.py +0 -0
  21. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/discovery.py +0 -0
  22. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/mk4.py +0 -0
  23. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/parser.py +0 -0
  24. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/py.typed +0 -0
  25. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/types.py +0 -0
  26. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/validator.py +0 -0
  27. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/project.faf +0 -0
  28. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/scripts/sync-dart-spec.sh +0 -0
  29. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/__init__.py +0 -0
  30. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/dart_parity_fixtures.json +0 -0
  31. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/stress_test.py +0 -0
  32. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_dart_parity.py +0 -0
  33. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_discovery.py +0 -0
  34. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_interop.py +0 -0
  35. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_mk4.py +0 -0
  36. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_parser.py +0 -0
  37. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_validator.py +0 -0
  38. {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_wjttc.py +0 -0
@@ -3,6 +3,17 @@
3
3
  All notable changes to faf-python-sdk are documented here.
4
4
  Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
5
5
 
6
+ ## [1.3.1] - 2026-09-07 — The Interop Edition
7
+
8
+ Docs / copy patch — no API change.
9
+
10
+ ### Fixed
11
+ - "generate" removed from external copy: the `interop.py` module docstring, the
12
+ `## Setup & build` blockquote written into every AGENTS.md ("regenerated each
13
+ time" → "do not edit the managed block"), README, and CHANGELOG. FAF authors
14
+ and delivers facts. The `generate_agents_md` / `generate_gemini_md` function
15
+ names are unchanged (internal identifiers, TS↔Python parity).
16
+
6
17
  ## [1.3.0] - 2026-09-06 — The Interop Edition
7
18
 
8
19
  The SDK can now author AI-context files, not just parse and score them.
@@ -18,7 +29,7 @@ The SDK can now author AI-context files, not just parse and score them.
18
29
  intentionally omitted from AGENTS.md — it belongs in the README / .faf DNA.
19
30
  - `faf_meta_tag(faf)`, `title_label(key)`, `slot_label(path)` — the shared
20
31
  label + metastamp helpers, also from `src/interop`.
21
- - Both generators take the **raw parsed dict** (`FafFile.data.raw`) — the .faf
32
+ - Both take the **raw parsed dict** (`FafFile.data.raw`) — the .faf
22
33
  format carries top-level `commands` / `key_files` / `security` that the typed
23
34
  model doesn't surface.
24
35
  - 17 tests, including deterministic-output and human-context-omission guards.
@@ -29,5 +29,5 @@ Python SDK for parsing, validating, scoring, and authoring .faf project context
29
29
 
30
30
  ---
31
31
 
32
- *STATUS: BI-SYNC ACTIVE — 2026-09-06T18:19:41.228Z*
32
+ *STATUS: BI-SYNC ACTIVE — 2026-09-07T02:08:39.970Z*
33
33
  <!-- faf:end -->
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: faf-python-sdk
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: Persistent project context for Python — parse, validate, and score `.faf` files. The foundation other Python FAF tools (gemini-faf-mcp, custom MCP servers, CI validators) build on. IANA-registered application/vnd.faf+yaml.
5
5
  Project-URL: Homepage, https://faf.one
6
6
  Project-URL: Documentation, https://github.com/Wolfe-Jam/faf-python-sdk
@@ -46,10 +46,12 @@ The foundation other Python FAF tools build on. If you're building MCP servers,
46
46
 
47
47
  **Media Type:** `application/vnd.faf+yaml` (IANA registered)
48
48
 
49
- ## What's New in v1.3.0 — The Interop Edition
49
+ ## What's New in v1.3.1 — The Interop Edition
50
50
 
51
51
  The SDK can now author AI-context files, not just parse and score them.
52
52
 
53
+ > **v1.3.1** is a copy patch — "generate" removed from external text (module docstring, the blockquote written into every AGENTS.md, README, CHANGELOG). No API change; the `faf_sdk.interop` functions below are unchanged.
54
+
53
55
  `faf_sdk.interop` — `generate_agents_md(faf)` and `generate_gemini_md(faf)`, Python ports of faf-cli's `src/interop/agents.ts` + `gemini.ts`, in parity with the canonical TypeScript. Deterministic BETTER-shaped projection: setup (install→build→dev ordered) · tests · layout · conventions · three-tier guardrails · definition of done · security · commit · stack. Human Context (who/why marketing) is intentionally omitted from AGENTS.md — it belongs in the README / .faf DNA, not agent ops.
54
56
 
55
57
  ```python
@@ -59,7 +61,7 @@ faf = parse_file("project.faf")
59
61
  print(generate_agents_md(faf.data.raw)) # takes the raw dict — carries top-level commands / key_files / security
60
62
  ```
61
63
 
62
- Any Python FAF tool that authors an AI-context file wraps this now — never hand-roll a Markdown generator. `gemini-faf-mcp` 2.7.0's `faf_agents` / `faf_gemini` are the reference wrappers.
64
+ Any Python FAF tool that authors an AI-context file wraps this now — never hand-roll one. `gemini-faf-mcp` 2.7.0's `faf_agents` / `faf_gemini` are the reference wrappers.
63
65
 
64
66
  ## What's New in v1.2.0 — The Dart Edition
65
67
 
@@ -14,10 +14,12 @@ The foundation other Python FAF tools build on. If you're building MCP servers,
14
14
 
15
15
  **Media Type:** `application/vnd.faf+yaml` (IANA registered)
16
16
 
17
- ## What's New in v1.3.0 — The Interop Edition
17
+ ## What's New in v1.3.1 — The Interop Edition
18
18
 
19
19
  The SDK can now author AI-context files, not just parse and score them.
20
20
 
21
+ > **v1.3.1** is a copy patch — "generate" removed from external text (module docstring, the blockquote written into every AGENTS.md, README, CHANGELOG). No API change; the `faf_sdk.interop` functions below are unchanged.
22
+
21
23
  `faf_sdk.interop` — `generate_agents_md(faf)` and `generate_gemini_md(faf)`, Python ports of faf-cli's `src/interop/agents.ts` + `gemini.ts`, in parity with the canonical TypeScript. Deterministic BETTER-shaped projection: setup (install→build→dev ordered) · tests · layout · conventions · three-tier guardrails · definition of done · security · commit · stack. Human Context (who/why marketing) is intentionally omitted from AGENTS.md — it belongs in the README / .faf DNA, not agent ops.
22
24
 
23
25
  ```python
@@ -27,7 +29,7 @@ faf = parse_file("project.faf")
27
29
  print(generate_agents_md(faf.data.raw)) # takes the raw dict — carries top-level commands / key_files / security
28
30
  ```
29
31
 
30
- Any Python FAF tool that authors an AI-context file wraps this now — never hand-roll a Markdown generator. `gemini-faf-mcp` 2.7.0's `faf_agents` / `faf_gemini` are the reference wrappers.
32
+ Any Python FAF tool that authors an AI-context file wraps this now — never hand-roll one. `gemini-faf-mcp` 2.7.0's `faf_agents` / `faf_gemini` are the reference wrappers.
31
33
 
32
34
  ## What's New in v1.2.0 — The Dart Edition
33
35
 
@@ -36,7 +36,7 @@ from .types import (
36
36
  AIScoring
37
37
  )
38
38
 
39
- __version__ = "1.3.0"
39
+ __version__ = "1.3.1"
40
40
  __all__ = [
41
41
  # Parser
42
42
  "parse",
@@ -1,5 +1,5 @@
1
1
  """
2
- AI-context file generators — AGENTS.md and GEMINI.md from .faf data.
2
+ AI-context file authoring — AGENTS.md and GEMINI.md from .faf data.
3
3
 
4
4
  Python port of faf-cli's `src/interop/agents.ts` + `gemini.ts`, kept in
5
5
  parity with the canonical TypeScript. Deterministic projection from curated
@@ -90,7 +90,7 @@ def slot_label(path: str) -> str:
90
90
 
91
91
 
92
92
  def faf_meta_tag(faf: dict) -> str:
93
- """The two-line `<!-- faf: ... -->` metastamp every faf-generated file opens with."""
93
+ """The two-line `<!-- faf: ... -->` metastamp every faf-authored file opens with."""
94
94
  proj = faf.get("project") or {}
95
95
  name = str(proj.get("name") or "").strip()
96
96
  lang = str(proj.get("main_language") or "").strip()
@@ -102,7 +102,7 @@ def faf_meta_tag(faf: dict) -> str:
102
102
  return f"{line1}\n{line2}"
103
103
 
104
104
 
105
- # --- command classification (shared by both generators) ---------------------
105
+ # --- command classification (shared by both) --------------------------------
106
106
 
107
107
  def _classify_commands(faf: dict) -> dict:
108
108
  commands = faf.get("commands") or {}
@@ -187,9 +187,9 @@ def generate_agents_md(faf: dict) -> str:
187
187
  push(orientation)
188
188
  push()
189
189
  push(
190
- "> Authored by faf — refresh with `faf export --agents` or the "
191
- "`faf_agents` MCP tool. The managed block is regenerated each time; "
192
- "hand-written content outside it is preserved."
190
+ "> Authored by faf — do not edit the managed block; refresh with "
191
+ "`faf export --agents` or the `faf_agents` MCP tool. Hand-written "
192
+ "content outside it is preserved."
193
193
  )
194
194
  push()
195
195
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "faf-python-sdk"
7
- version = "1.3.0"
7
+ version = "1.3.1"
8
8
  description = "Persistent project context for Python — parse, validate, and score `.faf` files. The foundation other Python FAF tools (gemini-faf-mcp, custom MCP servers, CI validators) build on. IANA-registered application/vnd.faf+yaml."
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
File without changes