pythia-plsql 0.8.0__tar.gz → 0.10.0__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 (44) hide show
  1. {pythia_plsql-0.8.0/scripts/pythia_plsql.egg-info → pythia_plsql-0.10.0}/PKG-INFO +10 -7
  2. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/README.md +9 -6
  3. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/pyproject.toml +1 -1
  4. pythia_plsql-0.10.0/queries/current-schema.sql +6 -0
  5. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/scripts/pythia.py +512 -82
  6. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0/scripts/pythia_plsql.egg-info}/PKG-INFO +10 -7
  7. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/scripts/pythia_plsql.egg-info/SOURCES.txt +1 -0
  8. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-apply/SKILL.md +30 -30
  9. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/tests/test_phase3.py +363 -5
  10. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/tests/test_phase5.py +2 -1
  11. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/LICENSE +0 -0
  12. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/compile-errors.sql +0 -0
  13. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/dependencies.sql +0 -0
  14. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/impact.sql +0 -0
  15. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/invalid-objects.sql +0 -0
  16. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/name-occupants.sql +0 -0
  17. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/object-names.sql +0 -0
  18. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/object-source.sql +0 -0
  19. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/plscope-enabled.sql +0 -0
  20. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/plscope-statements.sql +0 -0
  21. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/plscope-usages.sql +0 -0
  22. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/session-privileges.sql +0 -0
  23. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/similar-candidates.sql +0 -0
  24. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/queries/source.sql +0 -0
  25. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/scripts/pythia_plsql.egg-info/dependency_links.txt +0 -0
  26. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/scripts/pythia_plsql.egg-info/entry_points.txt +0 -0
  27. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/scripts/pythia_plsql.egg-info/requires.txt +0 -0
  28. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/scripts/pythia_plsql.egg-info/top_level.txt +0 -0
  29. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/setup.cfg +0 -0
  30. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-conventions/SKILL.md +0 -0
  31. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-explore/SKILL.md +0 -0
  32. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-explore/reference/data-dictionary.md +0 -0
  33. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-impact/SKILL.md +0 -0
  34. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-review/SKILL.md +0 -0
  35. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-review/reference/antipatterns.md +0 -0
  36. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-setup/SKILL.md +0 -0
  37. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-skill-author/SKILL.md +0 -0
  38. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-spec/SKILL.md +0 -0
  39. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-write/SKILL.md +0 -0
  40. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/pythia-write/reference/patterns.md +0 -0
  41. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/skills/using-pythia/SKILL.md +0 -0
  42. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/tests/test_install.py +0 -0
  43. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/tests/test_phase1.py +0 -0
  44. {pythia_plsql-0.8.0 → pythia_plsql-0.10.0}/tests/test_phase2.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythia-plsql
3
- Version: 0.8.0
3
+ Version: 0.10.0
4
4
  Summary: PL/SQL development for AI agents on Oracle Database - expert data-dictionary queries, impact analysis, and a snapshot-verified write path with honest rollback.
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://github.com/thaildhe172591/pythia
@@ -101,11 +101,14 @@ through one door: **snapshot → impact → preview → token → approve → ap
101
101
  verify → report**. DDL self-commits in Oracle, so the snapshot is the only real
102
102
  undo — it runs first and no flag disables it. A content-bound token guarantees
103
103
  what lands is byte-for-byte what was previewed, and a **developer-minted grant**
104
- guarantees a person approved it at all: `pythia approve` runs only at a human's
105
- own console, and without its one-time grant `apply --confirm` refuses. The
106
- agent's command line is unchanged; what changed is that it now stops until
107
- someone acts. A headless agent cannot `--yes` its own writes, cannot approve
108
- them, and cannot loosen policy — each of those takes a human at a real terminal.
104
+ guarantees a person approved it at all — through one of two doors, both the
105
+ developer's. In chat: the agent asks with `AskUserQuestion`, the question text
106
+ being pythia's own approval card (`pythia approve --card <token>`), and the
107
+ answer **Approve** — written into the hook payload by Claude Code, never by
108
+ the agent — mints the one-time grant. At a console: `pythia approve <token>`.
109
+ Without that grant `apply --confirm` refuses. A headless agent cannot `--yes`
110
+ its own writes, cannot mint approval, and cannot loosen policy — each of those
111
+ takes a human, answering or typing.
109
112
 
110
113
  The same discipline holds when the *developer* does the work: `src` and
111
114
  `impact` silently snapshot what they read, so even a change made by hand in
@@ -211,7 +214,7 @@ Per-group write policy, `.pythia/policy.json` (defaults shown):
211
214
  | Group | Default | Is rollback real? |
212
215
  |---|---|---|
213
216
  | `plsql_source` | `confirm` | **Yes — completely.** Source is recoverable from `ALL_SOURCE`. |
214
- | `data_dml` | `deny` | **No.** After commit only Flashback Query remains, within undo retention. |
217
+ | `data_dml` | `deny` | **No.** After commit only Flashback Query remains, within undo retention. Revalidation checks the row set *before* the write; it is not an undo. |
215
218
  | `structural` | `deny` | **Almost never.** `DROP COLUMN` is permanent; a dropped table may be in the Recycle Bin. |
216
219
  | `grants` | `deny` | Yes, but by hand. |
217
220
  | `session` | `allow` | Not needed. |
@@ -87,11 +87,14 @@ through one door: **snapshot → impact → preview → token → approve → ap
87
87
  verify → report**. DDL self-commits in Oracle, so the snapshot is the only real
88
88
  undo — it runs first and no flag disables it. A content-bound token guarantees
89
89
  what lands is byte-for-byte what was previewed, and a **developer-minted grant**
90
- guarantees a person approved it at all: `pythia approve` runs only at a human's
91
- own console, and without its one-time grant `apply --confirm` refuses. The
92
- agent's command line is unchanged; what changed is that it now stops until
93
- someone acts. A headless agent cannot `--yes` its own writes, cannot approve
94
- them, and cannot loosen policy — each of those takes a human at a real terminal.
90
+ guarantees a person approved it at all — through one of two doors, both the
91
+ developer's. In chat: the agent asks with `AskUserQuestion`, the question text
92
+ being pythia's own approval card (`pythia approve --card <token>`), and the
93
+ answer **Approve** — written into the hook payload by Claude Code, never by
94
+ the agent — mints the one-time grant. At a console: `pythia approve <token>`.
95
+ Without that grant `apply --confirm` refuses. A headless agent cannot `--yes`
96
+ its own writes, cannot mint approval, and cannot loosen policy — each of those
97
+ takes a human, answering or typing.
95
98
 
96
99
  The same discipline holds when the *developer* does the work: `src` and
97
100
  `impact` silently snapshot what they read, so even a change made by hand in
@@ -197,7 +200,7 @@ Per-group write policy, `.pythia/policy.json` (defaults shown):
197
200
  | Group | Default | Is rollback real? |
198
201
  |---|---|---|
199
202
  | `plsql_source` | `confirm` | **Yes — completely.** Source is recoverable from `ALL_SOURCE`. |
200
- | `data_dml` | `deny` | **No.** After commit only Flashback Query remains, within undo retention. |
203
+ | `data_dml` | `deny` | **No.** After commit only Flashback Query remains, within undo retention. Revalidation checks the row set *before* the write; it is not an undo. |
201
204
  | `structural` | `deny` | **Almost never.** `DROP COLUMN` is permanent; a dropped table may be in the Recycle Bin. |
202
205
  | `grants` | `deny` | Yes, but by hand. |
203
206
  | `session` | `allow` | Not needed. |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pythia-plsql"
7
- version = "0.8.0"
7
+ version = "0.10.0"
8
8
  description = "PL/SQL development for AI agents on Oracle Database - expert data-dictionary queries, impact analysis, and a snapshot-verified write path with honest rollback."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -0,0 +1,6 @@
1
+ -- Purpose: the schema an unqualified CREATE lands in for this session. A proxy
2
+ -- or a mis-set connections.json can put it somewhere other than the
3
+ -- schema pythia snapshots and verifies; apply refuses that mismatch.
4
+ -- Binds: none
5
+ -- Returns: CURRENT_SCHEMA
6
+ select sys_context('userenv', 'current_schema') current_schema from dual