Source and commits#
Pup checks supertests against Git commits. The commit object ID gives each result a familiar, immutable source identity that remains meaningful when branches move.
What source Pup sends#
pup repo link is the consent boundary before source leaves your computer. Pup sends eligible files beneath the linked repository directory. It does not traverse parent directories or follow symbolic links outside that root.
Eligible content typically includes:
- Source code and supertests
- Dependency manifests and lockfiles
- Build and language configuration
- Schemas, templates, and source fixtures used by the code
Pup sends the selected commit identity and the eligible contents required to understand and check it. It does not push to a Git remote or send every branch, remote-tracking reference, reflog, or commit in the repository’s history.
Exclusion rules#
Pup applies these rules before source is sent:
.git/and nonregular filesystem objects are never sent as source files.- Entries matched by
.pupignoreare excluded. - Untracked files matched by
.gitignoredo not enter a temporary Pup commit. - Symbolic links that resolve outside the linked root are excluded.
- Individual files larger than 10 MiB are excluded and reported.
.pupignore uses Git ignore syntax. Put it at the linked root:
# Local credentials and private fixtures
.env*
secrets/
fixtures/customer-data/
# Generated output not required for checking
tmp/
coverage/Tracked files remain part of their Git commit even when they match .gitignore. Use .pupignore when a tracked path must not be sent to Schematic.
Sensitive files: Pup cannot determine whether every source file or fixture is safe to send. Keep credentials and private data in excluded files. Review
.pupignorebefore linking a repository.
Checked-out commits#
After linking, Pup watches the commit checked out in that repository. When a commit, checkout, merge, rebase, reset, or branch switch moves HEAD to an unseen commit, Pup begins preparing its eligible source in the background.
Pup does not send every local branch. You can select another locally available commit explicitly with --commit <git-revision> on pup check.
Preparing a commit does not run git push, modify a remote, or change any Git references.
Temporary Pup commits#
When the repository has uncommitted changes, Pup never silently ignores them and checks HEAD. It can instead create a temporary Pup commit containing the current tracked changes and eligible untracked files.
The first time this happens in an interactive terminal, Pup asks for permission and remembers the answer for that linked repository. The temporary Pup commit is created without changing your branch, HEAD, working files, or Git index.
Pup retains it under a hidden Git reference, so its object ID remains usable with ordinary Git commands:
$ git show 4e92c1a
$ git diff 4e92c1a
$ git restore --source=4e92c1a -- path/to/file
$ git branch recovered-work 4e92c1aThe final command promotes the temporary Pup commit to a normal local branch. A temporary Pup commit is not a complete backup of ignored or excluded files.
Pass --dirty to authorize a temporary Pup commit for one command without a prompt. Pass --commit <git-revision> to check a specific commit and ignore current uncommitted changes.
Checks and commit identity#
One check evaluates one supertest against one commit. Later edits or branch movement cannot alter the source or result for that check.
If the same commit, supertest, and checking options are selected again, Pup reuses the existing check. A different commit receives a distinct check even when Schematic can safely reuse work internally.
How Schematic processes source#
Eligible content is transmitted to the Schematic service over an encrypted connection and stored for asynchronous processing. Contact Schematic support before linking if your organization has specific residency, retention, or deletion requirements.