Make protected-file policy configurable and consistent for migration branches
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
Research direction
Start by reviewing install.md and workflows/crane.md, then locate the installer and workflow prompt tests mentioned in the issue. Trace how protected-file behavior is configured for create-pull-request and push-to-pull-request-branch. Done means the selected policy is documented, applied consistently, and fallback output is not treated as a successful iteration without a branch commit.
Written by the indexing model from the issue text.
Description
Background
During the githubnext/apm Python-to-Go migration, Crane repeatedly needed to touch files that are commonly protected: go.mod, go.sum, workflow files, and other project configuration. With protected files set to fallback-to-issue, Crane could describe work in an issue but not push the actual migration commit. That caused false progress and stalled PR updates.
APM locally changed the Crane workflow so create-pull-request uses protected-files: allowed. The upstream lesson is broader: code migration frequently requires manifest, lockfile, or workflow changes, so protected-file behavior must be explicit, configurable, and consistent across both creating the PR and pushing later iteration commits.
Problem
The default upstream Crane workflow has create-pull-request protected files set to fallback-to-issue, while push-to-pull-request-branch also has its own protected-file behavior from safe outputs. This can create surprising behavior:
- First accepted iteration can fail to create a useful PR if protected files are touched.
- Later iterations can fail to push to the existing migration branch.
- Crane may write fallback issues that look like progress but do not update the PR branch.
- Migrations involving Go, Node, Python, Java, or Rust often need dependency manifest and lockfile edits.
For a migration tool, touching manifest and lock files is often not exceptional. It is part of the migration.
Proposed implementation
Make protected-file policy an explicit Crane installation or workflow configuration choice.
Possible design:
-
Add an installer prompt in
install.md:- Strict: protected files fall back to issue for maximum safety.
- Migration-friendly: protected files are allowed on Crane migration branches.
- Custom: user provides an allowlist or policy.
-
Apply the selected policy consistently to both:
create-pull-requestpush-to-pull-request-branch
-
Document when to use each mode:
- Use strict for repositories where agents must never touch manifests or workflow files without human intervention.
- Use migration-friendly when the migration target requires dependency, lockfile, build, or workflow updates.
-
If a protected-file fallback still happens, Crane should treat it as blocked or incomplete, not as an accepted migration iteration. It should tell the maintainer what policy or allowlist needs to change.
-
Consider per-migration override support in migration frontmatter, for example:
protected-files-policy: allowed
or
protected-files-policy: fallback-to-issue
Suggested test coverage
- Prompt or installer tests that verify the protected-file policy is described.
- Workflow prompt test that verifies the policy applies to both PR creation and PR branch pushes.
- If implemented in installer code, test that the selected policy is written into
workflows/crane.mdbeforegh aw compile.
Acceptance criteria
- A repository owner can choose strict or migration-friendly protected-file behavior during installation.
- The chosen behavior is applied consistently for initial PR creation and later PR updates.
- Crane does not mark protected-file fallback output as a successful accepted iteration unless a commit actually reached the migration branch.
- Documentation explains why migrations may need to touch manifest and lock files.
Provenance
This came from githubnext/apm, where the Python-to-Go migration needed dependency and workflow changes and protected-file fallback prevented Crane from generating new PR commits.
- Dominant language
- Python
- Stars
- 10
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from githubnext/crane
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
githubnext/crane#6 ·
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
githubnext/crane#5 ·
-
documentation enhancement
Difficulty 4/5 3-5 days Newbie friendliness 58/100
githubnext/crane#8 ·
-
enhancement
githubnext/crane#4 · 1 reaction · 2 assignees ·
All issues in githubnext/crane
Similar issues
-
Add: hunch Open
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
AbdelStark/awesome-typesafe#104 ·
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
DiamondLightSource/dodal#2211 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
openml/openml-python#1749 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
sipyourdrink-ltd/bernstein#6191 ·