Repository: KyleKing/copier-template-tester (language: python)

Issue:
Not deterministic `_src_path` in answers file
**Describe the bug**
<!-- Describe the bug -->

When running pre-commit on CI, I get failures that I don't get locally:

```
copier-template-tester................................................... Failed
- hook id: copier-template-tester
- files were modified by this hook
Creating: /builds/moduon/ops/dct-private/.ctt/full
[...]
  conflict  .copier-answers.dct-private.yml
 overwrite  .copier-answers.dct-private.yml
[...]
pre-commit hook(s) made changes.
If you are seeing this message in CI, reproduce locally with: `pre-commit run --all-files`.
To run `pre-commit` as part of git workflow, use `pre-commit install`.
All changes made by hooks:
diff --git a/.ctt/full/.copier-answers.dct-private.yml b/.ctt/full/.copier-answers.dct-private.yml
index 205a1ef..4e44453 100644
--- a/.ctt/full/.copier-answers.dct-private.yml
+++ b/.ctt/full/.copier-answers.dct-private.yml
@@ -1,6 +1,6 @@
 # Changes here will be overwritten by Copier; do NOT edit manually
 _commit: v6.4.0-0
-_src_path: /var/home/yajo/prodevel/dct-private
+_src_path: /builds/moduon/ops/dct-private
user: yajo
org: moduon
```

#**To Reproduce**
<!-- How can someone else replicate the issue -->

Steps and/or code snippet(s) to reproduce the behavior:

1. Configure for pre-commit.
1. run it.
2. Commit it.
3. clone in another directory
4. `pre-commit run -a`

**Expected behavior**
<!-- What did you expect? -->
The `_src_path` in the answers file, when it points to the local git directory (always, right?), should get stripped off the absolute paths.

Or maybe just harcode it to "." or similar.

In any case, the output should be deterministic.

**Additional Information**
<!-- Add any relevant versions -->

- `copier_template_tester` Version:
- OS: \[e.g. macOS/Windows\]:
- OS Version \[e.g. Catalina/10\]:
<!-- Add `pip freeze` or other version information that is relevant -->



Discussion / hints:
I ran into that in the test suite, but hadn't considered pre-commit in CI (or on another user's computer for that matter). I think I'll need to resolve the path to the git directory and convert the path to relative like I do here:

https://github.com/KyleKing/copier-template-tester/blob/1ca3a1faa40604143986dfbf0033837dd2759933/tests/helpers.py#L82

I'll open a PR when I'm back next week!

Fix patch:
diff --git a/.calcipy_packaging.lock b/.calcipy_packaging.lock
index 6068bc0..e08c04b 100644
--- a/.calcipy_packaging.lock
+++ b/.calcipy_packaging.lock
@@ -1,11 +1,11 @@
 {
     "argcomplete": {
-        "datetime": "2023-03-06T16:05:21.890200+00:00",
+        "datetime": "2023-04-23T21:45:49.443940+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-03-26T05:56:56.583910+00:00",
-        "latest_version": "3.0.5",
+        "latest_datetime": "2023-04-23T21:45:49.443940+00:00",
+        "latest_version": "3.0.8",
         "name": "argcomplete",
-        "version": "2.0.6"
+        "version": "3.0.8"
     },
     "arrow": {
         "datetime": "2022-09-03T19:35:29.660994+00:00",
@@ -16,12 +16,12 @@
         "version": "1.2.3"
     },
     "astroid": {
-        "datetime": "2023-04-16T20:56:31.107697+00:00",
+        "datetime": "2023-04-24T08:55:30.705025+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-16T20:56:31.107697+00:00",
-        "latest_version": "2.15.3",
+        "latest_datetime": "2023-04-25T17:57:15.032356+00:00",
+        "latest_version": "3.0.0a2",
         "name": "astroid",
-        "version": "2.15.3"
+        "version": "2.15.4"
     },
     "attrs": {
         "datetime": "2023-04-16T10:48:16.358050+00:00",
@@ -56,12 +56,12 @@
         "version": "1.7.5"
     },
     "beartype": {
-        "datetime": "2023-04-11T07:55:34.693052+00:00",
+        "datetime": "2023-05-02T04:56:54.292242+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-11T07:55:34.693052+00:00",
-        "latest_version": "0.13.1",
+        "latest_datetime": "2023-05-02T04:56:54.292242+00:00",
+        "latest_version": "0.14.0",
         "name": "beartype",
-        "version": "0.13.1"
+        "version": "0.14.0"
     },
     "bidict": {
         "datetime": "2023-01-01T01:54:13.937546+00:00",
@@ -96,20 +96,20 @@
         "version": "1.2.3"
     },
     "certifi": {
-        "datetime": "2022-12-07T20:13:19.428014+00:00",
+        "datetime": "2023-05-07T07:30:54.402352+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2022-12-07T20:13:19.428014+00:00",
-        "latest_version": "2022.12.7",
+        "latest_datetime": "2023-05-07T07:30:54.402352+00:00",
+        "latest_version": "2023.5.7",
         "name": "certifi",
-        "version": "2022.12.7"
+        "version": "2023.5.7"
     },
     "charset-normalizer": {
-        "datetime": "2022-08-19T22:13:46.702012+00:00",
+        "datetime": "2023-03-06T09:48:01.969613+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2022-11-18T08:16:23.347777+00:00",
-        "latest_version": "3.0.1",
+        "latest_datetime": "2023-03-06T09:48:01.969613+00:00",
+        "latest_version": "3.1.0",
         "name": "charset-normalizer",
-        "version": "2.1.1"
+        "version": "3.1.0"
     },
     "click": {
         "datetime": "2022-04-28T17:36:06.952869+00:00",
@@ -144,12 +144,12 @@
         "version": "6.7.0"
     },
     "commitizen": {
-        "datetime": "2023-02-25T08:43:38.863265+00:00",
+        "datetime": "2023-05-03T07:34:13.351423+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-02-25T08:43:38.863265+00:00",
-        "latest_version": "2.42.1",
+        "latest_datetime": "2023-05-11T12:35:53.000625+00:00",
+        "latest_version": "3.2.2",
         "name": "commitizen",
-        "version": "2.42.1"
+        "version": "3.2.1"
     },
     "copier": {
         "datetime": "2023-04-19T17:40:33.020968+00:00",
@@ -160,28 +160,28 @@
         "version": "7.2.0"
     },
     "corallium": {
-        "datetime": "2023-04-22T05:20:32.410131+00:00",
+        "datetime": "2023-04-22T15:34:50.851442+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-22T05:20:32.410131+00:00",
-        "latest_version": "0.2.0",
+        "latest_datetime": "2023-04-22T15:34:50.851442+00:00",
+        "latest_version": "0.2.1",
         "name": "corallium",
-        "version": "0.2.0"
+        "version": "0.2.1"
     },
     "coverage": {
-        "datetime": "2023-04-06T14:32:14.021193+00:00",
+        "datetime": "2023-04-30T11:11:54.123461+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-06T14:32:14.021193+00:00",
-        "latest_version": "7.2.3",
+        "latest_datetime": "2023-04-30T11:11:54.123461+00:00",
+        "latest_version": "7.2.5",
         "name": "coverage",
-        "version": "7.2.3"
+        "version": "7.2.5"
     },
     "decli": {
-        "datetime": "2020-07-26T08:29:41.079082+00:00",
+        "datetime": "2023-04-28T09:49:57.509779+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2020-07-26T08:29:41.079082+00:00",
-        "latest_version": "0.5.2",
+        "latest_datetime": "2023-04-28T09:49:57.509779+00:00",
+        "latest_version": "0.6.0",
         "name": "decli",
-        "version": "0.5.2"
+        "version": "0.6.0"
     },
     "defusedxml": {
         "datetime": "2021-03-08T10:59:24.450195+00:00",
@@ -288,12 +288,12 @@
         "version": "22.1.0"
     },
     "griffe": {
-        "datetime": "2023-04-16T12:27:58.565613+00:00",
+        "datetime": "2023-05-10T17:04:05.914038+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-16T12:27:58.565613+00:00",
-        "latest_version": "0.27.1",
+        "latest_datetime": "2023-05-10T17:04:05.914038+00:00",
+        "latest_version": "0.27.4",
         "name": "griffe",
-        "version": "0.27.1"
+        "version": "0.27.4"
     },
     "httplib2": {
         "datetime": "2023-03-21T22:29:35.683092+00:00",
@@ -311,6 +311,14 @@
         "name": "idna",
         "version": "3.4"
     },
+    "importlib-metadata": {
+        "datetime": "2023-04-22T12:57:00.231948+00:00",
+        "domain": "https://pypi.org/pypi/{name}/json",
+        "latest_datetime": "2023-04-22T12:57:00.231948+00:00",
+        "latest_version": "6.6.0",
+        "name": "importlib-metadata",
+        "version": "6.6.0"
+    },
     "iniconfig": {
         "datetime": "2023-01-07T11:08:09.864484+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
@@ -320,12 +328,12 @@
         "version": "2.0.0"
     },
     "invoke": {
-        "datetime": "2023-01-16T22:24:34.645087+00:00",
+        "datetime": "2023-05-02T02:12:46.614094+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-01-16T22:24:34.645087+00:00",
-        "latest_version": "2.0.0",
+        "latest_datetime": "2023-05-02T02:12:46.614094+00:00",
+        "latest_version": "2.1.1",
         "name": "invoke",
-        "version": "2.0.0"
+        "version": "2.1.1"
     },
     "isort": {
         "datetime": "2023-01-28T17:10:21.149615+00:00",
@@ -416,12 +424,12 @@
         "version": "1.3.4"
     },
     "mkdocs": {
-        "datetime": "2022-11-01T18:32:16.869887+00:00",
+        "datetime": "2023-05-02T21:18:03.295538+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2022-11-01T18:32:16.869887+00:00",
-        "latest_version": "1.4.2",
+        "latest_datetime": "2023-05-02T21:18:03.295538+00:00",
+        "latest_version": "1.4.3",
         "name": "mkdocs",
-        "version": "1.4.2"
+        "version": "1.4.3"
     },
     "mkdocs-autorefs": {
         "datetime": "2022-03-07T16:43:47.394684+00:00",
@@ -440,12 +448,12 @@
         "version": "1.7.4"
     },
     "mkdocs-gen-files": {
-        "datetime": "2022-08-22T17:39:48.902428+00:00",
+        "datetime": "2023-04-27T19:48:07.059869+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2022-08-22T17:39:48.902428+00:00",
-        "latest_version": "0.4.0",
+        "latest_datetime": "2023-04-27T19:48:07.059869+00:00",
+        "latest_version": "0.5.0",
         "name": "mkdocs-gen-files",
-        "version": "0.4.0"
+        "version": "0.5.0"
     },
     "mkdocs-git-revision-date-localized-plugin": {
         "datetime": "2023-03-02T20:16:12.239079+00:00",
@@ -472,12 +480,12 @@
         "version": "0.6.0"
     },
     "mkdocs-material": {
-        "datetime": "2023-04-07T16:28:15.444798+00:00",
+        "datetime": "2023-05-08T19:25:47.441556+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-07T16:28:15.444798+00:00",
-        "latest_version": "9.1.6",
+        "latest_datetime": "2023-05-08T19:25:47.441556+00:00",
+        "latest_version": "9.1.11",
         "name": "mkdocs-material",
-        "version": "9.1.6"
+        "version": "9.1.11"
     },
     "mkdocs-material-extensions": {
         "datetime": "2022-11-22T05:31:01.586723+00:00",
@@ -504,20 +512,20 @@
         "version": "0.21.2"
     },
     "mkdocstrings-python": {
-        "datetime": "2023-04-03T14:20:27.308667+00:00",
+        "datetime": "2023-05-07T16:52:30.775967+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-03T14:20:27.308667+00:00",
-        "latest_version": "0.9.0",
+        "latest_datetime": "2023-05-11T10:08:36.731259+00:00",
+        "latest_version": "1.0.0",
         "name": "mkdocstrings-python",
-        "version": "0.9.0"
+        "version": "0.10.1"
     },
     "mypy": {
-        "datetime": "2023-04-06T15:26:18.922636+00:00",
+        "datetime": "2023-05-10T15:42:53.158417+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-06T15:26:18.922636+00:00",
-        "latest_version": "1.2.0",
+        "latest_datetime": "2023-05-10T15:42:53.158417+00:00",
+        "latest_version": "1.3.0",
         "name": "mypy",
-        "version": "1.2.0"
+        "version": "1.3.0"
     },
     "mypy-extensions": {
         "datetime": "2023-02-04T12:11:25.002510+00:00",
@@ -528,12 +536,12 @@
         "version": "1.0.0"
     },
     "nox": {
-        "datetime": "2022-11-21T16:14:45.948661+00:00",
+        "datetime": "2023-04-23T03:12:57.080768+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2022-11-21T16:14:45.948661+00:00",
-        "latest_version": "2022.11.21",
+        "latest_datetime": "2023-04-23T03:12:57.080768+00:00",
+        "latest_version": "2023.4.22",
         "name": "nox",
-        "version": "2022.11.21"
+        "version": "2023.4.22"
     },
     "nox-poetry": {
         "datetime": "2022-11-08T08:38:42.012140+00:00",
@@ -544,12 +552,12 @@
         "version": "1.0.2"
     },
     "numpy": {
-        "datetime": "2023-02-05T19:45:29.320338+00:00",
+        "datetime": "2023-04-22T21:29:36.764975+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-02-05T19:45:29.320338+00:00",
-        "latest_version": "1.24.2",
+        "latest_datetime": "2023-04-22T21:29:36.764975+00:00",
+        "latest_version": "1.24.3",
         "name": "numpy",
-        "version": "1.24.2"
+        "version": "1.24.3"
     },
     "packaging": {
         "datetime": "2023-04-12T16:11:09.290380+00:00",
@@ -560,12 +568,12 @@
         "version": "23.1"
     },
     "pandas": {
-        "datetime": "2023-04-03T14:10:47.709938+00:00",
+        "datetime": "2023-04-24T10:17:37.973468+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-03T14:10:47.709938+00:00",
-        "latest_version": "2.0.0",
+        "latest_datetime": "2023-04-24T10:17:37.973468+00:00",
+        "latest_version": "2.0.1",
         "name": "pandas",
-        "version": "2.0.0"
+        "version": "2.0.1"
     },
     "pathspec": {
         "datetime": "2023-03-15T00:56:37.770046+00:00",
@@ -592,12 +600,12 @@
         "version": "3.16.2"
     },
     "pip": {
-        "datetime": "2023-04-15T10:52:52.618235+00:00",
+        "datetime": "2023-04-26T09:23:27.085033+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-15T10:52:52.618235+00:00",
-        "latest_version": "23.1",
+        "latest_datetime": "2023-04-26T09:23:27.085033+00:00",
+        "latest_version": "23.1.2",
         "name": "pip",
-        "version": "23.1"
+        "version": "23.1.2"
     },
     "pip-check": {
         "datetime": "2022-11-06T05:14:07.450137+00:00",
@@ -608,12 +616,12 @@
         "version": "2.8.1"
     },
     "platformdirs": {
-        "datetime": "2023-03-25T20:38:42.102077+00:00",
+        "datetime": "2023-04-27T16:37:51.807826+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-03-25T20:38:42.102077+00:00",
-        "latest_version": "3.2.0",
+        "latest_datetime": "2023-05-11T20:14:46.575810+00:00",
+        "latest_version": "3.5.1",
         "name": "platformdirs",
-        "version": "3.2.0"
+        "version": "3.5.0"
     },
     "pluggy": {
         "datetime": "2021-08-25T16:25:59.674784+00:00",
@@ -672,12 +680,12 @@
         "version": "2.15.1"
     },
     "pylint": {
-        "datetime": "2023-04-03T12:24:24.404684+00:00",
+        "datetime": "2023-05-06T16:34:20.332188+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-03T12:24:24.404684+00:00",
-        "latest_version": "2.17.2",
+        "latest_datetime": "2023-05-06T16:34:20.332188+00:00",
+        "latest_version": "2.17.4",
         "name": "pylint",
-        "version": "2.17.2"
+        "version": "2.17.4"
     },
     "pymdown-extensions": {
         "datetime": "2023-04-07T18:15:35.562119+00:00",
@@ -832,36 +840,36 @@
         "version": "1.10.0"
     },
     "regex": {
-        "datetime": "2023-03-23T17:59:10.445988+00:00",
+        "datetime": "2023-05-03T18:06:30.379442+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-03-23T17:59:10.445988+00:00",
-        "latest_version": "2023.3.23",
+        "latest_datetime": "2023-05-03T18:06:30.379442+00:00",
+        "latest_version": "2023.5.5",
         "name": "regex",
-        "version": "2023.3.23"
+        "version": "2023.5.5"
     },
     "requests": {
-        "datetime": "2023-01-12T16:24:52.241259+00:00",
+        "datetime": "2023-05-03T15:44:03.457714+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-01-12T16:24:52.241259+00:00",
-        "latest_version": "2.28.2",
+        "latest_datetime": "2023-05-03T15:44:03.457714+00:00",
+        "latest_version": "2.30.0",
         "name": "requests",
-        "version": "2.28.2"
+        "version": "2.30.0"
     },
     "rich": {
-        "datetime": "2023-04-12T16:49:40.099023+00:00",
+        "datetime": "2023-04-27T14:16:51.410069+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-12T16:49:40.099023+00:00",
-        "latest_version": "13.3.4",
+        "latest_datetime": "2023-04-27T14:16:51.410069+00:00",
+        "latest_version": "13.3.5",
         "name": "rich",
-        "version": "13.3.4"
+        "version": "13.3.5"
     },
     "ruamel-yaml": {
-        "datetime": "2022-02-12T08:54:03.046398+00:00",
+        "datetime": "2023-05-09T20:00:56.579801+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2022-02-12T08:54:03.046398+00:00",
-        "latest_version": "0.17.21",
+        "latest_datetime": "2023-05-09T20:00:56.579801+00:00",
+        "latest_version": "0.17.26",
         "name": "ruamel-yaml",
-        "version": "0.17.21"
+        "version": "0.17.26"
     },
     "ruamel-yaml-clib": {
         "datetime": "2022-10-20T13:09:34.031451+00:00",
@@ -872,20 +880,20 @@
         "version": "0.2.7"
     },
     "ruff": {
-        "datetime": "2023-04-19T20:37:10.358279+00:00",
+        "datetime": "2023-05-05T17:58:00.443455+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-19T20:37:10.358279+00:00",
-        "latest_version": "0.0.262",
+        "latest_datetime": "2023-05-05T17:58:00.443455+00:00",
+        "latest_version": "0.0.265",
         "name": "ruff",
-        "version": "0.0.262"
+        "version": "0.0.265"
     },
     "semgrep": {
-        "datetime": "2023-04-21T18:14:19.225210+00:00",
+        "datetime": "2023-05-04T22:37:27.935667+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-21T18:14:19.225210+00:00",
-        "latest_version": "1.19.0",
+        "latest_datetime": "2023-05-04T22:37:27.935667+00:00",
+        "latest_version": "1.21.0",
         "name": "semgrep",
-        "version": "1.19.0"
+        "version": "1.21.0"
     },
     "six": {
         "datetime": "2021-05-05T14:18:17.237677+00:00",
@@ -920,12 +928,12 @@
         "version": "0.9.0"
     },
     "termcolor": {
-        "datetime": "2023-01-03T17:23:10.399827+00:00",
+        "datetime": "2023-04-23T19:45:22.671749+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-01-03T17:23:10.399827+00:00",
-        "latest_version": "2.2.0",
+        "latest_datetime": "2023-04-23T19:45:22.671749+00:00",
+        "latest_version": "2.3.0",
         "name": "termcolor",
-        "version": "2.2.0"
+        "version": "2.3.0"
     },
     "terminaltables": {
         "datetime": "2021-12-07T19:03:34.013333+00:00",
@@ -944,12 +952,12 @@
         "version": "2.0.1"
     },
     "tomlkit": {
-        "datetime": "2023-03-27T07:39:34.987717+00:00",
+        "datetime": "2023-04-27T10:39:19.629611+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-03-27T07:39:34.987717+00:00",
-        "latest_version": "0.11.7",
+        "latest_datetime": "2023-04-27T10:39:19.629611+00:00",
+        "latest_version": "0.11.8",
         "name": "tomlkit",
-        "version": "0.11.7"
+        "version": "0.11.8"
     },
     "transitions": {
         "datetime": "2022-09-02T09:48:52.135381+00:00",
@@ -968,12 +976,12 @@
         "version": "6.0.12.9"
     },
     "types-setuptools": {
-        "datetime": "2023-04-17T21:13:00.597367+00:00",
+        "datetime": "2023-05-10T15:20:33.799930+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-17T21:13:00.597367+00:00",
-        "latest_version": "67.6.0.8",
+        "latest_datetime": "2023-05-10T15:20:33.799930+00:00",
+        "latest_version": "67.7.0.2",
         "name": "types-setuptools",
-        "version": "67.6.0.8"
+        "version": "67.7.0.2"
     },
     "typing-extensions": {
         "datetime": "2023-02-15T00:17:53.726117+00:00",
@@ -1008,12 +1016,12 @@
         "version": "1.26.15"
     },
     "virtualenv": {
-        "datetime": "2023-04-19T23:49:16.500287+00:00",
+        "datetime": "2023-04-27T23:37:54.268249+00:00",
         "domain": "https://pypi.org/pypi/{name}/json",
-        "latest_datetime": "2023-04-19T23:49:16.500287+00:00",
-        "latest_version": "20.22.0",
+        "latest_datetime": "2023-04-27T23:37:54.268249+00:00",
+        "latest_version": "20.23.0",
         "name": "virtualenv",
-        "version": "20.22.0"
+        "version": "20.23.0"
     },
     "watchdog": {
         "datetime": "2023-03-20T09:20:25.047937+00:00",
@@ -1046,5 +1054,13 @@
         "latest_version": "1.15.0",
         "name": "wrapt",
         "version": "1.15.0"
+    },
+    "zipp": {
+        "datetime": "2023-02-25T02:17:20.807094+00:00",
+        "domain": "https://pypi.org/pypi/{name}/json",
+        "latest_datetime": "2023-02-25T02:17:20.807094+00:00",
+        "latest_version": "3.15.0",
+        "name": "zipp",
+        "version": "3.15.0"
     }
 }
diff --git a/.copier-answers.yml b/.copier-answers.yml
index 3ef2c90..639a203 100644
--- a/.copier-answers.yml
+++ b/.copier-answers.yml
@@ -2,7 +2,7 @@
 # Answer file maintained by Copier for: https://github.com/KyleKing/calcipy_template
 # DO NOT MODIFY THIS FILE. Edit by re-running copier and changing responses to the questions
 # Check into version control.
-_commit: 1.5.0
+_commit: 1.6.3
 _src_path: gh:KyleKing/calcipy_template
 author_email: dev.act.kyle@gmail.com
 author_name: Kyle King
@@ -12,7 +12,6 @@ copyright_date: '2022'
 development_branch: main
 doc_dir: docs
 extends_calcipy: false
-include_adrs: false
 install_extras: ''
 minimum_python: 3.10.5
 minimum_python_short: '3.10'
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c80b923..caaa75b 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -69,9 +69,8 @@ repos:
     rev: v0.23.1
     hooks:
       - id: toml-sort-fix
-        args: [--in-place, --all, --trailing-comma-inline-array]
-        # TODO: https://github.com/pappasam/toml-sort/issues/42
-        exclude: poetry\.lock|pyproject\.toml
+        args: [--in-place, --all, --trailing-comma-inline-array, --sort-first=python]
+        exclude: poetry\.lock
   - repo: https://github.com/MarcoGorelli/absolufy-imports
     rev: v0.3.1
     hooks:
diff --git a/docs/docs/CHANGELOG.md b/docs/docs/CHANGELOG.md
index 185d0f9..6e7c913 100644
--- a/docs/docs/CHANGELOG.md
+++ b/docs/docs/CHANGELOG.md
@@ -1,5 +1,21 @@
 ## Unreleased
 
+### Fix
+
+- improve logging when run from pre-commit
+
+## 1.2.1 (2023-05-11)
+
+### Fix
+
+- start implementation to replace the src_path
+
+### Refactor
+
+- run calcipy tool suite
+- merge stabilization code
+- provide better CLI output
+
 ## 1.2.0 (2023-04-22)
 
 ### Feat
diff --git a/docs/docs/CODE_TAG_SUMMARY.md b/docs/docs/CODE_TAG_SUMMARY.md
deleted file mode 100644
index 3e0df87..0000000
--- a/docs/docs/CODE_TAG_SUMMARY.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Collected Code Tags
-
-| Type   | Comment                                         | Last Edit   | Source File                                                                                                                                                 |
-|--------|-------------------------------------------------|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| TODO   | https://github.com/pappasam/toml-sort/issues/42 | 2023-04-08  | [.pre-commit-config.yaml:73](https://github.com/KyleKing/copier-template-tester/blame/afbed9ffee8e9a7240efcfce30616efe814e71b0/.pre-commit-config.yaml#L73) |
-
-Found code tags for TODO (1)
-
-<!-- calcipy_skip_tags -->
diff --git a/docs/docs/DEVELOPER_GUIDE.md b/docs/docs/DEVELOPER_GUIDE.md
index 9015abe..97a7a6b 100644
--- a/docs/docs/DEVELOPER_GUIDE.md
+++ b/docs/docs/DEVELOPER_GUIDE.md
@@ -47,11 +47,11 @@ poetry config pypi-token.pypi ...
 | File                                            |   Statements |   Missing |   Excluded | Coverage   |
 |-------------------------------------------------|--------------|-----------|------------|------------|
 | `copier_template_tester/__init__.py`            |            2 |         0 |          0 | 100.0%     |
-| `copier_template_tester/_config.py`             |           20 |         2 |          0 | 90.0%      |
+| `copier_template_tester/_config.py`             |           17 |         0 |          3 | 100.0%     |
 | `copier_template_tester/_pre_commit_support.py` |           19 |         0 |          0 | 100.0%     |
-| `copier_template_tester/_write_output.py`       |           52 |         7 |          2 | 86.5%      |
-| `copier_template_tester/main.py`                |           25 |         0 |         15 | 100.0%     |
-| **Totals**                                      |          118 |         9 |         17 | 92.4%      |
+| `copier_template_tester/_write_output.py`       |           65 |         7 |         12 | 89.2%      |
+| `copier_template_tester/main.py`                |           28 |         0 |         15 | 100.0%     |
+| **Totals**                                      |          131 |         7 |         30 | 94.7%      |
 
-Generated on: 2023-04-22
+Generated on: 2023-05-11
 <!-- {cte} -->
diff --git a/pyproject.toml b/pyproject.toml
index f86b428..7666cbe 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,7 +3,7 @@ build-backend = "poetry.core.masonry.api"
 requires = ["poetry-core"]
 
 [tool.commitizen]
-version = "1.2.0"
+version = "1.2.2"
 version_files = ["copier_template_tester/__init__.py:^__version", "pyproject.toml:^version"]
 
 [tool.poetry]
@@ -24,7 +24,7 @@ maintainers = []
 name = "copier_template_tester"
 readme = "docs/README.md"
 repository = "https://github.com/kyleking/copier-template-tester"
-version = "1.2.0"
+version = "1.2.2"
 
 [tool.poetry.dependencies]
 python = "^3.10.5"


Test patch:
diff --git a/copier_template_tester/__init__.py b/copier_template_tester/__init__.py
index ceb1dbe..055ecf1 100644
--- a/copier_template_tester/__init__.py
+++ b/copier_template_tester/__init__.py
@@ -1,6 +1,6 @@
 """copier_template_tester."""
 
-__version__ = '1.2.0'
+__version__ = '1.2.2'
 __pkg_name__ = 'copier_template_tester'
 
 # ====== Above is the recommended code from calcipy_template and may be updated on new releases ======
diff --git a/copier_template_tester/_write_output.py b/copier_template_tester/_write_output.py
index 00705ce..46a8698 100644
--- a/copier_template_tester/_write_output.py
+++ b/copier_template_tester/_write_output.py
@@ -2,6 +2,7 @@
 
 import re
 import shutil
+from functools import lru_cache
 from pathlib import Path
 
 import copier
@@ -9,6 +10,7 @@
 from beartype import beartype
 from corallium.file_helpers import read_lines
 from corallium.log import get_logger
+from corallium.shell import capture_shell
 
 logger = get_logger()
 
@@ -53,15 +55,37 @@ def _find_answers_file(*, src_path: Path, dst_path: Path) -> Path:
     return dst_path / answers_filename  # pragma: no cover
 
 
+@lru_cache(maxsize=3)
 @beartype
-def _stabilize_commit_id(*, src_path: Path, dst_path: Path) -> None:
-    """Replace part of the _commit for a less variable 'ctt' output."""
+def _resolve_git_root_dir(base_dir: Path) -> Path:
+    """Use git to list all untracked files."""
+    cmd = 'git rev-parse --show-toplevel'
+    output = capture_shell(cmd=cmd, cwd=base_dir)
+    return Path(output.strip())
+
+
+@beartype
+def _stabilize(line: str, answers_path: Path) -> str:  # noqa: CFQ004
+    # Convert _src_path to a deterministic relative path
+    if line.startswith('_src_path'):
+        raw_path = Path(line.split('_src_path:')[-1].strip())
+        ans_dir = answers_path.parent
+        if ans_dir.is_relative_to(raw_path):
+            count_rel = len(ans_dir.relative_to(raw_path).parts)
+            rel_path = '/'.join([*(['..'] * count_rel), raw_path.name])
+            return f'_src_path: {rel_path}'
+        return line
+    # Create a stable tag for '_commit' that copier will still utilize
+    if line.startswith('_commit'):
+        return f'{line.split("-")[0]}-0'
+    return line
+
+
+@beartype
+def _stabilize_answers_file(*, src_path: Path, dst_path: Path) -> None:  # noqa: CFQ004
+    """Ensure that the answers file is deterministic."""
     answers_path = _find_answers_file(src_path=src_path, dst_path=dst_path)
-    lines = (  # noqa: ECE001
-        # Create a stable tag that copier will still utilize
-        f'{line.split("-")[0]}-0' if line.startswith('_commit') else line
-        for line in read_lines(answers_path)
-    )
+    lines = (_stabilize(_l, answers_path) for _l in read_lines(answers_path))
     answers_path.write_text('\n'.join(lines))
 
 
@@ -91,6 +115,7 @@ def write_output(  # type: ignore[no-untyped-def]
 
     # Reduce variability in the output
     try:
-        _stabilize_commit_id(src_path=src_path, dst_path=dst_path)
+        _stabilize_answers_file(src_path=src_path, dst_path=dst_path)
     except FileNotFoundError as exc:  # pragma: no cover
-        logger.error(str(exc))  # noqa: TRY400
+        logger.warning(str(exc))  # noqa: TRY400
+        raise
diff --git a/copier_template_tester/main.py b/copier_template_tester/main.py
index 78472a6..7ec960a 100644
--- a/copier_template_tester/main.py
+++ b/copier_template_tester/main.py
@@ -25,6 +25,8 @@ def run(*, base_dir: Path | None = None, check_untracked: bool = False) -> None:
     """Main class to run ctt."""
     base_dir = base_dir or Path.cwd()
     logger.text(f'Starting Copier Template Tester for {base_dir}')
+    logger.text('\tNote: If files were modified, pre-commit will report a failure.')
+    logger.text('')
     config = load_config(base_dir)
     defaults = config.get('defaults', {})
 
@@ -34,13 +36,11 @@ def run(*, base_dir: Path | None = None, check_untracked: bool = False) -> None:
         output_path = base_dir / key
         output_path.mkdir(parents=True, exist_ok=True)
         paths.add(output_path)
-        logger.text(f'Using copier to create: {output_path}')
+        logger.text(f'Using `copier` to create: {key}')
         write_output(src_path=input_path, dst_path=base_dir / output_path, data=defaults | data)
 
     if check_untracked:  # pragma: no cover
-        logger.text('Checking for untracked files')
         check_for_untracked(paths, base_dir)
-    logger.text('Completed Copier Template Tester. If files were modified, pre-commit will report a failure.')
 
 
 @beartype
diff --git a/tests/conftest.py b/tests/conftest.py
index ed12e4c..e5eb2da 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -6,6 +6,7 @@
 from beartype import beartype
 
 from .configuration import TEST_TMP_CACHE, clear_test_cache
+from .helpers import fix_answerfile_eol
 
 
 @pytest.fixture()
@@ -19,3 +20,10 @@ def fix_test_cache() -> Path:
     """
     clear_test_cache()
     return TEST_TMP_CACHE
+
+
+@pytest.fixture(autouse=True)
+def fix_answerfile_eol_fixture():
+    """Wrap all tests to ensure a consistent answerfile."""
+    yield
+    fix_answerfile_eol()
diff --git a/tests/helpers.py b/tests/helpers.py
index 410a47d..7d260e5 100644
--- a/tests/helpers.py
+++ b/tests/helpers.py
@@ -75,12 +75,8 @@ def temporary_git_dir(shell: Subprocess, *, source_dir: Path | None = None) -> G
 
 
 @beartype
-def reset_path_in_test_answers() -> None:
-    """Replace the absolute path written by copier.."""
+def fix_answerfile_eol() -> None:
+    """Ensure trailing newline is present."""
     answers_path = TEST_DATA_DIR / 'copier_demo/.ctt/no_all/.copier-answers.testing_no_all.yml'
-    lines = (
-        '_src_path: ../../copier_demo' if line.startswith('_src_path') else line
-        for line in read_lines(answers_path)
-        if line
-    )
+    lines = (_l for _l in read_lines(answers_path) if _l)
     answers_path.write_text('\n'.join(lines) + '\n')
diff --git a/tests/test_main.py b/tests/test_main.py
index 1b7663b..301c764 100644
--- a/tests/test_main.py
+++ b/tests/test_main.py
@@ -8,7 +8,7 @@
 from copier_template_tester.main import run
 
 from .configuration import TEST_DATA_DIR
-from .helpers import DEMO_DIR, reset_path_in_test_answers, run_ctt
+from .helpers import DEMO_DIR, run_ctt
 
 logger = get_logger()
 
@@ -23,7 +23,6 @@ def _run_auto(src_path: str, dst_path: Path, **kwargs) -> None:  # noqa: ARG001
     monkeypatch.setattr(copier, 'run_auto', _run_auto)
 
     run(base_dir=DEMO_DIR)
-    reset_path_in_test_answers()
 
 
 @beartype
@@ -31,10 +30,16 @@ def test_main(shell: Subprocess) -> None:
     ret = run_ctt(shell, cwd=DEMO_DIR)
 
     assert ret.returncode == 0
-    ret.stdout.matcher.fnmatch_lines(['*Creating:*copier_demo*no_all*', ''])
-    # Check output from copier
-    ret.stderr.matcher.fnmatch_lines(['*Copying from template*'])
-    reset_path_in_test_answers()
+    # Check output from ctt and copier (where order can vary on Windows)
+    ret.stdout.matcher.fnmatch_lines([
+        'Starting Copier Template Tester for *',
+        '*Note: If files were modified, pre-commit will report a failure.',
+        '',
+        'Using `copier` to create: .ctt/no_all',
+    ])
+    ret.stderr.matcher.fnmatch_lines_random([
+        '*Copying from template*',
+    ])
     # Check a few of the created files:
     paths = {pth.relative_to(DEMO_DIR) for pth in (DEMO_DIR / '.ctt').rglob('*.*') if pth.is_file()}
     assert Path('.ctt/no_all/README.md') in paths
diff --git a/tests/test_pre_commit_support.py b/tests/test_pre_commit_support.py
index 5d1392a..b8de4c9 100644
--- a/tests/test_pre_commit_support.py
+++ b/tests/test_pre_commit_support.py
@@ -61,9 +61,14 @@ def test_ctt_with_untracked_files(shell: Subprocess) -> None:
         paths = {pth.relative_to(copier_dir) for pth in (copier_dir / '.ctt').rglob('*.*') if pth.is_file()}
 
     assert ret.returncode == 1
-    ret.stdout.matcher.fnmatch_lines(['*Creating:*copier_demo*no_all*', ''])
-    # Check output from copier
-    ret.stderr.matcher.fnmatch_lines_random([  # Order can vary on Windows
+    # Check output from ctt and copier (where order can vary on Windows)
+    ret.stdout.matcher.fnmatch_lines([
+        'Starting Copier Template Tester for *',
+        '*Note: If files were modified, pre-commit will report a failure.',
+        '',
+        'Using `copier` to create: .ctt/no_all',
+    ])
+    ret.stderr.matcher.fnmatch_lines_random([
         '*Copying from template*',
         '*conflict* .copier-answers.testing_no_all.yml*',
         f'*create* {untracked_file.name}*',