Started repro.sh v1.0.0 at Tue Jul 28 09:55:49 EDT 2026 in /Users/ttyler/pub/tt/repro/P4IsolateTest. ReproDir=/tmp/repro ============================================================================== Scenario 1: Streams Isolate Path Inheritance Preliminary info: Show versions of p4/p4d on the PATH: Executing command: p4 -V Perforce - The Fast Software Configuration Management System. Copyright 1995-2026 Perforce Software. All rights reserved. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) Version of OpenSSL Libraries: OpenSSL 3.5.7 9 Jun 2026 See 'p4 help [ -l ] legal' for additional license information on these licenses and others. Extensions/scripting support built-in. Parallel sync threading built-in. Rev. P4/MACOSX12ARM64/2026.1/2972966 (2026/06/10). Executing command: p4d -V Perforce - The Fast Software Configuration Management System. Copyright 1995-2026 Perforce Software. All rights reserved. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) Version of OpenSSL Libraries: OpenSSL 3.5.7 9 Jun 2026 This product includes software developed by the OpenLDAP Foundation (http://www.openldap.org/) This product includes software developed by Computing Services at Carnegie Mellon University: Cyrus SASL (http://www.cmu.edu/computing/) Version of OpenLDAP Libraries: 2.5.20 Version of Cyrus SASL Libraries: 2.1.28 See 'p4 help [ -l ] legal' for additional license information on these licenses and others. Using no memory manager. Rev. P4D/MACOSX12ARM64/2026.1/2972966 (2026/06/10). License: none Preliminary setup: Spin up a local repo. Operating in: /tmp/repro Executing command: p4 init -C0 -n Server ttyler-dvcs-1785246949 saved. After 'p4 init -C0 -n', the local repo should already have a stream depot named 'stream' and a mainline stream named //stream/main. Executing command: p4 info User name: ttyler Client name: ttyler-dvcs-1785246949 Client root: /tmp/repro Client stream: //stream/main Current directory: /tmp/repro Peer address: unknown Client address: unknown Server address: personal server created by 'init' Server root: /tmp/repro/.p4root Server date: 2026/07/28 09:55:50 -0400 EDT Server uptime: 00:00:00 Server version: P4D/MACOSX12ARM64/2026.1/2972966 (2026/06/10) ServerID: ttyler-dvcs-1785246949 Server services: local Server license: none Case Handling: sensitive Executing command: p4 streams Stream //stream/main mainline none '//stream/main' ============================================================================== Scenario 1 setup: Configure //stream/main with 'isolate Version'. The mainline stream generated by p4 init starts with ordinary shared stream paths. This repro edits only //stream/main and adds the SDP-style isolated Version path: Paths: share ... isolate Version Modified //stream/main stream spec: Stream: //stream/main Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: //stream/main Parent: none Type: mainline Description: Autocreated by switch command Options: allsubmit unlocked notoparent nofromparent mergeany ParentView: inherit Paths: share ... isolate Version p4 -s stream -i < main.stream info: Stream //stream/main saved. exit: 0 //stream/main after update: Stream: //stream/main Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: //stream/main Parent: none Type: mainline Description: Autocreated by switch command Options: allsubmit unlocked notoparent nofromparent mergeany ParentView: inherit Paths: share ... isolate Version ============================================================================== Scenario 2: Create descendant streams after main already has 'isolate Version'. Creating //stream/dev as a development child of //stream/main. Stream: //stream/dev Owner: ttyler Name: dev Parent: //stream/main Type: development Description: Created by ttyler. Options: allsubmit unlocked toparent fromparent mergedown ParentView: inherit Paths: share ... p4 -s stream -i < dev.stream info: Stream //stream/dev saved. exit: 0 Creating //stream/dev_rebrand as a development child of //stream/dev. Stream: //stream/dev_rebrand Owner: ttyler Name: dev_rebrand Parent: //stream/dev Type: development Description: Created by ttyler. Options: allsubmit unlocked toparent fromparent mergedown ParentView: inherit Paths: share ... p4 -s stream -i < dev_rebrand.stream info: Stream //stream/dev_rebrand saved. exit: 0 Creating //stream/r26.1 as a release child of //stream/main. This intentionally relies on the server's release-stream defaults rather than manually creating a noinherit stream depot or custom depot spec. Stream: //stream/r26.1 Owner: ttyler Name: r26.1 Parent: //stream/main Type: release Description: Created by ttyler. Options: allsubmit unlocked toparent fromparent mergedown ParentView: inherit Paths: share ... p4 -s stream -i < r26.1.stream info: Stream //stream/r26.1 saved. exit: 0 Current streams: Executing command: p4 streams Stream //stream/dev development //stream/main 'dev' Stream //stream/dev_rebrand development //stream/dev 'dev_rebrand' Stream //stream/main mainline none '//stream/main' Stream //stream/r26.1 release //stream/main 'r26.1' ============================================================================== Scenario 3: Capture stream specs and generated views for later inspection. The generated view output is intentionally verbose. It is often the most useful evidence when discussing stream behavior with someone who knows ViewGen internals. Stream spec for //stream/main: Stream: //stream/main Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: //stream/main Parent: none Type: mainline Description: Autocreated by switch command Options: allsubmit unlocked notoparent nofromparent mergeany ParentView: inherit Paths: share ... isolate Version Generated view for //stream/main: Stream: //stream/main Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: //stream/main Parent: none Type: mainline Description: Autocreated by switch command Options: allsubmit unlocked notoparent nofromparent mergeany ParentView: inherit Paths: share ... isolate Version View: //stream/main/... ... //stream/main/Version Version Stream spec for //stream/dev: Stream: //stream/dev Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: dev Parent: //stream/main Type: development Description: Created by ttyler. Options: allsubmit unlocked toparent fromparent mergedown ParentView: inherit Paths: share ... Generated view for //stream/dev: Stream: //stream/dev Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: dev Parent: //stream/main Type: development Description: Created by ttyler. Options: allsubmit unlocked toparent fromparent mergedown ParentView: inherit Paths: share ... View: //stream/dev/... ... //stream/dev/Version Version Stream spec for //stream/dev_rebrand: Stream: //stream/dev_rebrand Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: dev_rebrand Parent: //stream/dev Type: development Description: Created by ttyler. Options: allsubmit unlocked toparent fromparent mergedown ParentView: inherit Paths: share ... Generated view for //stream/dev_rebrand: Stream: //stream/dev_rebrand Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: dev_rebrand Parent: //stream/dev Type: development Description: Created by ttyler. Options: allsubmit unlocked toparent fromparent mergedown ParentView: inherit Paths: share ... View: //stream/dev_rebrand/... ... //stream/dev_rebrand/Version Version Stream spec for //stream/r26.1: Stream: //stream/r26.1 Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: r26.1 Parent: //stream/main Type: release Description: Created by ttyler. Options: allsubmit unlocked toparent fromparent mergedown ParentView: inherit Paths: share ... Generated view for //stream/r26.1: Stream: //stream/r26.1 Update: 2026/07/28 09:55:50 Access: 2026/07/28 09:55:50 Owner: ttyler Name: r26.1 Parent: //stream/main Type: release Description: Created by ttyler. Options: allsubmit unlocked toparent fromparent mergedown ParentView: inherit Paths: share ... View: //stream/r26.1/... ... //stream/r26.1/Version Version ============================================================================== Scenario 4: Create one workspace per stream. Using separate workspaces makes the file operations easier to read in the resulting log. ============================================================================== Scenario 5: Add a different Version file in every stream. The theory is that each Version file lives in its own stream forever and is not subject to normal Merge Down / Copy Up flow. Adding Version in //stream/main. Executing command: p4 add Version //stream/main/Version#1 - opened for add Executing command: p4 submit -d Add-main-Version Submitting change 5. Locking 1 files ... add //stream/main/Version#1 Change 5 submitted. Adding Version in stream dev. Executing command: p4 client -s -S //stream/dev Client ttyler-dvcs-1785246949 switched. Executing command: p4 sync //stream/main/Version#1 - deleted as /tmp/repro/Version Executing command: p4 add Version //stream/dev/Version#1 - opened for add Executing command: p4 submit -d Add-dev-Version Submitting change 6. Locking 1 files ... add //stream/dev/Version#1 Change 6 submitted. Adding Version in stream dev_rebrand. Executing command: p4 client -s -S //stream/dev_rebrand Client ttyler-dvcs-1785246949 switched. Executing command: p4 sync //stream/dev/Version#1 - deleted as /tmp/repro/Version Executing command: p4 add Version //stream/dev_rebrand/Version#1 - opened for add Executing command: p4 submit -d Add-dev_rebrand-Version Submitting change 7. Locking 1 files ... add //stream/dev_rebrand/Version#1 Change 7 submitted. Adding Version in stream r26.1. Executing command: p4 client -s -S //stream/r26.1 Client ttyler-dvcs-1785246949 switched. Executing command: p4 sync //stream/dev_rebrand/Version#1 - deleted as /tmp/repro/Version Executing command: p4 add Version //stream/r26.1/Version#1 - opened for add Executing command: p4 submit -d Add-r26.1-Version Submitting change 8. Locking 1 files ... add //stream/r26.1/Version#1 Change 8 submitted. ============================================================================== Scenario 6: Add ordinary shared files that should be proposed by merge previews. To avoid a false PASS, this repro also creates ordinary shared files. The preview tests should show these ordinary files as candidates while not showing Version. Adding SharedFromMain.txt in //stream/main. Executing command: p4 client -s -S //stream/main Client ttyler-dvcs-1785246949 switched. Executing command: p4 sync //stream/main/Version#1 - replacing /tmp/repro/Version Executing command: p4 add SharedFromMain.txt //stream/main/SharedFromMain.txt#1 - opened for add Executing command: p4 submit -d Add-shared-file-from-main Submitting change 9. Locking 1 files ... add //stream/main/SharedFromMain.txt#1 Change 9 submitted. Adding SharedFromDev.txt in //stream/dev. Executing command: p4 client -s -S //stream/dev Client ttyler-dvcs-1785246949 switched. Executing command: p4 sync //stream/main/SharedFromMain.txt#1 - deleted as /tmp/repro/SharedFromMain.txt //stream/dev/Version#1 - replacing /tmp/repro/Version Executing command: p4 add SharedFromDev.txt //stream/dev/SharedFromDev.txt#1 - opened for add Executing command: p4 submit -d Add-shared-file-from-dev Submitting change 10. Locking 1 files ... add //stream/dev/SharedFromDev.txt#1 Change 10 submitted. ============================================================================== Scenario 7: Preview merges and look for Version. A successful result is not merely that merge previews are empty. A successful result is that ordinary shared files are proposed, while Version is not proposed. Preview merge from parent //stream/main into child //stream/dev. Expected: SharedFromMain.txt should appear; Version should not appear. Executing command: p4 client -s -S //stream/dev Client ttyler-dvcs-1785246949 not changed. Executing command: p4 sync File(s) up-to-date. //stream/dev/SharedFromMain.txt#1 - sync/delete from //stream/main/SharedFromMain.txt#1 ... must resolve branch from //stream/main/SharedFromMain.txt#1 Preview merge from parent //stream/dev into grandchild //stream/dev_rebrand. Expected: SharedFromDev.txt should appear; Version should not appear. Executing command: p4 client -s -S //stream/dev_rebrand Client ttyler-dvcs-1785246949 switched. Executing command: p4 sync //stream/dev/SharedFromDev.txt#1 - deleted as /tmp/repro/SharedFromDev.txt //stream/dev_rebrand/Version#1 - replacing /tmp/repro/Version //stream/dev_rebrand/SharedFromDev.txt#1 - sync/delete from //stream/dev/SharedFromDev.txt#1 ... must resolve branch from //stream/dev/SharedFromDev.txt#1 Preview merge from parent //stream/main into release stream //stream/r26.1. Expected: SharedFromMain.txt should appear; Version should not appear. Executing command: p4 client -s -S //stream/r26.1 Client ttyler-dvcs-1785246949 switched. Executing command: p4 sync //stream/r26.1/Version#1 - replacing /tmp/repro/Version //stream/r26.1/SharedFromMain.txt#1 - branch/sync from //stream/main/SharedFromMain.txt#1 ============================================================================== Scenario 8: Additional inspection commands. These commands are informational. They make the log more useful if this repro is later sent to someone else for review. Executing command: p4 files //stream/... //stream/dev/SharedFromDev.txt#1 - add change 10 (text) //stream/dev/Version#1 - add change 6 (text) //stream/dev_rebrand/Version#1 - add change 7 (text) //stream/main/SharedFromMain.txt#1 - add change 9 (text) //stream/main/Version#1 - add change 5 (text) //stream/r26.1/Version#1 - add change 8 (text) Executing command: p4 interchanges //stream/main //stream/dev //stream/main - all revision(s) already integrated. Executing command: p4 interchanges //stream/dev //stream/dev_rebrand //stream/dev - all revision(s) already integrated. Executing command: p4 interchanges //stream/main //stream/r26.1 //stream/main - all revision(s) already integrated. ============================================================================== The Result: Yay! The observed behavior supports the theory being tested: isolate Version defined only in //stream/main was sufficient for the descendant streams created after that setting was present. The merge previews proposed ordinary shared files, proving the merge previews were meaningful, but did not propose Version. This supports the SDP design assumption that Version can be isolated once in main rather than redundantly isolated in every descendant development stream. For release streams, this repro also checks the practical behavior of a release stream created after main already had the isolated path. Existing noinherit release streams created before the path change should still be reviewed separately.