codeimprint 0.5.0a11__tar.gz → 0.5.0a12__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 (25) hide show
  1. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/CHANGELOG.md +27 -5
  2. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/LICENSE +26 -1
  3. codeimprint-0.5.0a12/NOTICE +4 -0
  4. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/PKG-INFO +12 -8
  5. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/README.pypi.md +8 -5
  6. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/pyproject.toml +6 -5
  7. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/__init__.py +3 -2
  8. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/__main__.py +1 -0
  9. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/api.py +1 -0
  10. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/chainseal.py +1 -0
  11. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/cli.py +4 -3
  12. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/config.py +1 -0
  13. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/gitrepo.py +1 -0
  14. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/imprint_file.py +1 -0
  15. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/linecount.py +1 -0
  16. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/ownership.py +1 -0
  17. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/project.py +1 -0
  18. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/receipt.py +1 -0
  19. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/records.py +1 -0
  20. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/timestamp.py +1 -0
  21. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/transparency.py +1 -0
  22. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/trust.py +1 -0
  23. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/src/codeimprint_cli/tsa_roots.py +1 -0
  24. codeimprint-0.5.0a11/NOTICE +0 -11
  25. {codeimprint-0.5.0a11 → codeimprint-0.5.0a12}/.gitignore +0 -0
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0a12 — Licensed under Apache-2.0 [CIM-BE-23-v1]
4
+
5
+ - Licensed under Apache-2.0. Copyright 2026 Elystra Private Limited.
6
+ - `LICENSE` is now the full, unmodified Apache License 2.0 text, appendix included.
7
+ `tests/test_licence.py` pins its SHA-256.
8
+ - `NOTICE` names the copyright holder and the trademarks: "CodeImprint" and the logo are
9
+ trademarks of Elystra Private Limited, and the licence grants no rights to them
10
+ (section 6).
11
+ - Every source file under `src/` and `scripts/` starts with
12
+ `# SPDX-License-Identifier: Apache-2.0`.
13
+ - The metadata says `License-Expression: Apache-2.0` (PEP 639), and both files ship in the
14
+ wheel and the sdist.
15
+ - The PyPI page no longer mentions the dropped `code-imprint` alias.
16
+ - Elystra Private Limited is the legal owner. It is the PyPI author and maintainer, with
17
+ `dev@elystratech.com`. The product is "CodeImprint", not "CodeImprint by Mudrika", in
18
+ the READMEs, the PyPI description, `imprint --help` and the workflow `imprint init`
19
+ writes.
20
+
21
+ Packaging [CIM-BE-20-v2]:
22
+
23
+ - `.github/workflows/publish.yml` publishes with `skip-existing: true`: re-running a tag no
24
+ longer fails on files PyPI already has.
25
+
3
26
  ## 0.5.0a11 — Project names, `imprint github link`, identity offer [CIM-BE-19-v1]
4
27
 
5
28
  - `imprint init` names the project `owner/repo` from the `origin` remote, else the folder's
@@ -18,14 +41,13 @@
18
41
 
19
42
  Packaging [CIM-BE-20-v1]: the client's first PyPI release.
20
43
 
21
- - The distribution is now `codeimprint` (`pip install --pre codeimprint`); `code-imprint` is
22
- a separate, code-free alias that installs `codeimprint` at the same version. The import
44
+ - The distribution is now `codeimprint` (`pip install --pre codeimprint`). The import
23
45
  package (`codeimprint_cli`) and the command (`imprint`) are unchanged.
24
46
  `imprint --version` prints `codeimprint <version>`; the User-Agent is `codeimprint/<version>`.
25
47
  - `.github/workflows/publish.yml`: on a tag `v*`, the thin-client check and the tests, then
26
- both packages are built, checked (`twine check`, `scripts/check_release.py`: the tag matches
27
- the versions, and only the client package and its notices ship) and published with Trusted
28
- Publishing, `codeimprint` first (environment `pypi`), then the alias (`pypi-alias`).
48
+ the package is built, checked (`twine check`, `scripts/check_release.py`: the tag matches
49
+ the version, and only the client package and its notices ship) and published with Trusted
50
+ Publishing (environment `pypi`).
29
51
  - The sdist holds only the package, `README.pypi.md`, `CHANGELOG.md`, `LICENSE` and `NOTICE`.
30
52
  - An existing install from a folder under the old name must be removed first:
31
53
  `pip uninstall code-imprint`, then `pip install codeimprint`.
@@ -1,7 +1,7 @@
1
1
 
2
2
  Apache License
3
3
  Version 2.0, January 2004
4
- https://www.apache.org/licenses/
4
+ http://www.apache.org/licenses/
5
5
 
6
6
  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
7
 
@@ -175,3 +175,28 @@
175
175
  of your accepting any such warranty or additional liability.
176
176
 
177
177
  END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
@@ -0,0 +1,4 @@
1
+ CodeImprint client — Copyright 2026 Elystra Private Limited.
2
+ Licensed under the Apache License, Version 2.0.
3
+ 'CodeImprint' and the CodeImprint logo are trademarks of Elystra Private Limited; this licence
4
+ grants no rights to use them (Apache-2.0 section 6).
@@ -1,10 +1,11 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: codeimprint
3
- Version: 0.5.0a11
4
- Summary: CodeImprint by Mudrika: seal your code with a CodeImprint server (tamper-evident, logged and timestamped) and verify seals offline.
3
+ Version: 0.5.0a12
4
+ Summary: CodeImprint: seal your code with a CodeImprint server (tamper-evident, logged and timestamped) and verify seals offline.
5
5
  Project-URL: Homepage, https://codeimprint.ai
6
6
  Project-URL: Hub, https://app.codeimprint.ai
7
- Author: Mudrika
7
+ Author-email: Elystra Private Limited <dev@elystratech.com>
8
+ Maintainer-email: Elystra Private Limited <dev@elystratech.com>
8
9
  License-Expression: Apache-2.0
9
10
  License-File: LICENSE
10
11
  License-File: NOTICE
@@ -31,7 +32,7 @@ Requires-Dist: pytest>=8; extra == 'dev'
31
32
  Requires-Dist: ruff==0.17.2; extra == 'dev'
32
33
  Description-Content-Type: text/markdown
33
34
 
34
- # CodeImprint by Mudrika — command-line client
35
+ # CodeImprint — command-line client
35
36
 
36
37
  **Code provenance that survives AI.** CodeImprint seals your code: every seal is an
37
38
  **Imprint**, a compact signature of the code that is tamper-evident, recorded in a public
@@ -51,8 +52,6 @@ seals offline. Learn more at [codeimprint.ai](https://codeimprint.ai).
51
52
  pip install --pre codeimprint
52
53
  ```
53
54
 
54
- (`pip install --pre code-imprint` installs the same package.)
55
-
56
55
  ## Get started
57
56
 
58
57
  ```bash
@@ -88,5 +87,10 @@ Your developer key never leaves your machine: only its public half is sent.
88
87
 
89
88
  ## Licence
90
89
 
91
- Apache-2.0. The client contains no part of the CodeImprint engine, which runs on the server.
92
- "Mudrika" and "CodeImprint" are trademarks of their owner (see NOTICE).
90
+ Licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
91
+ (the `LICENSE` and `NOTICE` files ship with the package). Copyright 2026 Elystra Private
92
+ Limited. The client contains no part of the CodeImprint engine, which runs on the server and
93
+ is proprietary.
94
+
95
+ **Trademarks.** "CodeImprint" and the CodeImprint logo are trademarks of Elystra Private
96
+ Limited; this licence grants no rights to use them (Apache-2.0 section 6).
@@ -1,4 +1,4 @@
1
- # CodeImprint by Mudrika — command-line client
1
+ # CodeImprint — command-line client
2
2
 
3
3
  **Code provenance that survives AI.** CodeImprint seals your code: every seal is an
4
4
  **Imprint**, a compact signature of the code that is tamper-evident, recorded in a public
@@ -18,8 +18,6 @@ seals offline. Learn more at [codeimprint.ai](https://codeimprint.ai).
18
18
  pip install --pre codeimprint
19
19
  ```
20
20
 
21
- (`pip install --pre code-imprint` installs the same package.)
22
-
23
21
  ## Get started
24
22
 
25
23
  ```bash
@@ -55,5 +53,10 @@ Your developer key never leaves your machine: only its public half is sent.
55
53
 
56
54
  ## Licence
57
55
 
58
- Apache-2.0. The client contains no part of the CodeImprint engine, which runs on the server.
59
- "Mudrika" and "CodeImprint" are trademarks of their owner (see NOTICE).
56
+ Licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
57
+ (the `LICENSE` and `NOTICE` files ship with the package). Copyright 2026 Elystra Private
58
+ Limited. The client contains no part of the CodeImprint engine, which runs on the server and
59
+ is proprietary.
60
+
61
+ **Trademarks.** "CodeImprint" and the CodeImprint logo are trademarks of Elystra Private
62
+ Limited; this licence grants no rights to use them (Apache-2.0 section 6).
@@ -3,16 +3,17 @@ requires = ["hatchling>=1.27"]
3
3
  build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
- # Published on PyPI as `codeimprint` (and the alias `code-imprint`, alias/). The import
7
- # package stays `codeimprint_cli` and the command `imprint`.
6
+ # Published on PyPI as `codeimprint`. The import package stays `codeimprint_cli` and the
7
+ # command `imprint`.
8
8
  name = "codeimprint"
9
- version = "0.5.0a11"
10
- description = "CodeImprint by Mudrika: seal your code with a CodeImprint server (tamper-evident, logged and timestamped) and verify seals offline."
9
+ version = "0.5.0a12"
10
+ description = "CodeImprint: seal your code with a CodeImprint server (tamper-evident, logged and timestamped) and verify seals offline."
11
11
  readme = "README.pypi.md"
12
12
  license = "Apache-2.0"
13
13
  license-files = ["LICENSE", "NOTICE"]
14
14
  requires-python = ">=3.10"
15
- authors = [{ name = "Mudrika" }]
15
+ authors = [{ name = "Elystra Private Limited", email = "dev@elystratech.com" }]
16
+ maintainers = [{ name = "Elystra Private Limited", email = "dev@elystratech.com" }]
16
17
  keywords = ["code provenance", "software birthmark", "code sealing", "transparency log",
17
18
  "github actions"]
18
19
  classifiers = [
@@ -1,7 +1,8 @@
1
- """CodeImprint by Mudrika — command-line client.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ """CodeImprint — command-line client.
2
3
 
3
4
  A thin client for a CodeImprint server: it zips a project, asks the server to seal or check
4
5
  it, and verifies Imprint files offline. All analysis happens on the server.
5
6
  """
6
7
 
7
- __version__ = "0.5.0a11"
8
+ __version__ = "0.5.0a12"
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  import sys
2
3
 
3
4
  from .cli import main
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """HTTP calls to a CodeImprint server (standard library only)."""
2
3
 
3
4
  from __future__ import annotations
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Incremental Git seals, the project chain and offline-safe hooks (client side).
2
3
 
3
4
  The server's protocol (see docs/how-sealing-works.md): send the commit's file list (paths and
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """The `imprint` command: login, init, seal, check and verify."""
2
3
 
3
4
  from __future__ import annotations
@@ -65,7 +66,7 @@ HANDLING = {
65
66
  }
66
67
 
67
68
  WORKFLOW = """\
68
- # Added by `imprint init` — CodeImprint by Mudrika
69
+ # Added by `imprint init` — CodeImprint
69
70
  #
70
71
  # Seals the code on pushes to main and on tags (the seal and its receipt are kept as a build
71
72
  # artifact), and checks pull requests against a reference Imprint on your CodeImprint server.
@@ -1856,8 +1857,8 @@ def cmd_verify(args) -> int:
1856
1857
 
1857
1858
  # -- parser --------------------------------------------------------------------------------
1858
1859
  def build_parser() -> argparse.ArgumentParser:
1859
- p = argparse.ArgumentParser(prog="imprint", description="CodeImprint by Mudrika — seal and "
1860
- "check your code with a CodeImprint server.")
1860
+ p = argparse.ArgumentParser(prog="imprint", description="CodeImprint — seal and check "
1861
+ "your code with a CodeImprint server.")
1861
1862
  p.add_argument("--version", action="version", version=f"codeimprint {__version__}")
1862
1863
  sub = p.add_subparsers(dest="command", required=True)
1863
1864
 
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Where the client keeps the server URL and token, and how settings are resolved.
2
3
 
3
4
  Order: command-line flag, then environment (CODEIMPRINT_URL, CODEIMPRINT_TOKEN), then the
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Read a Git repository for incremental sealing: tree listings, blobs and commit links.
2
3
 
3
4
  Everything comes from `git` itself (ls-tree, cat-file, rev-parse, rev-list): the client
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Offline verification of .imprint files (docs/imprint-format.md).
2
3
 
3
4
  Checks only the public file format: canonical JSON, SHA-256 digest, optional Ed25519
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """The line count of a seal (docs/line-count.md): the size a project is priced by.
2
3
 
3
4
  Non-blank lines in the files Git tracks at the sealed commit, without binary, vendored and
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Ownership claims (ADR 0002, D4): build claim documents and verify a project's ownership
2
3
  listing.
3
4
 
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Choosing which files leave the machine, and packing them into a zip.
2
3
 
3
4
  Only source files the server reads are sent (Python in this release). Files ignored by
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Verify a seal receipt: digest, attestation, developer signatures, log inclusion, time.
2
3
 
3
4
  A receipt is what `POST /api/v1/seal` returns next to the Imprint (see
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Ownership records (receipt format 4): the public byte format, for verification only.
2
3
 
3
4
  A record's digest is SHA-256 of its canonical JSON document; its ID is a typed ID built from
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Offline verification of RFC 3161 time-stamp tokens.
2
3
 
3
4
  A token from an independent time-stamping authority (TSA) proves that a hash existed no later
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Merkle proofs for the CodeImprint transparency log (RFC 6962 hashing, RFC 9162 proofs).
2
3
 
3
4
  Leaf hash = SHA-256(0x00 || leaf bytes); node hash = SHA-256(0x01 || left || right). These
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Keys: the server's published attestation keys, and the developer's own signing key.
2
3
 
3
4
  Server keys are trusted on first use and then only ever extended: a later key set must keep
@@ -1,3 +1,4 @@
1
+ # SPDX-License-Identifier: Apache-2.0
1
2
  """Pinned root certificates of the time-stamping authorities the client trusts.
2
3
 
3
4
  A timestamp token counts only if its signer certificate chains to one of these roots
@@ -1,11 +0,0 @@
1
- CodeImprint client by Mudrika
2
- Copyright 2026 Mudrika
3
-
4
- Licensed under the Apache License, Version 2.0 (see LICENSE).
5
-
6
- This client calls a CodeImprint server. It contains no part of the IMP-1 engine, which is
7
- proprietary to Mudrika and is not covered by this licence.
8
-
9
- "Mudrika" and "CodeImprint" are trademarks of their owner. The Apache License does not grant
10
- permission to use these names except as required for reasonable and customary use in
11
- describing the origin of the work.