diff --git a/LevelsCompare.md b/LevelsCompare.md index cfc5009..6a8d3f8 100644 --- a/LevelsCompare.md +++ b/LevelsCompare.md @@ -58,7 +58,7 @@ This file records the upstream Ruby setup and validation intent beside the Andro | `squash` | Creates initial hidden commit plus README and three squash-target README updates. | Same commit sequence. | Equivalent. | | `merge_squash` | Creates master and `long-feature-branch` with multiple feature changes. | Native setup creates the same branch and `file3` feature effect. | Mostly equivalent; Android currently validates less detail. | | `reorder` | Creates commits `Initial Setup`, `First commit`, `Third commit`, `Second commit`. | Same order. | Equivalent. | -| `bisect` | Copies upstream bisect fixture. | Initializes modeled bad hash `18ed2ac`. | Simplified setup; Android validates the intended answer directly. | +| `bisect` | Copies upstream Ruby fixture where `ruby prog.rb 5` or `make test` identifies bad hash `18ed2ac`. | Creates a native Git history with `balance.txt`, `test-balance.sh`, and `known-good` tag. | Intentional Android adaptation: no Ruby or make dependency, but real `git bisect` remains playable. | | `stage_lines` | Commits initial `feature.rb`, then leaves two unstaged feature lines. | Initializes tracked `feature.rb` containing both feature lines. | Setup is close, but Android does not yet model partial staged vs unstaged hunks. | | `find_old_branch` | Copies fixture with recoverable `solve_world_hunger` branch. | Initializes branch map with `solve_world_hunger`. | Equivalent for visible exercise state. | | `revert` | Creates commits `First commit`, `Bad commit`, `Second commit`. | Same commit messages. | Equivalent. | @@ -90,7 +90,7 @@ This file records the upstream Ruby setup and validation intent beside the Andro | `tag` | First tag is `new_tag`. | `new_tag` exists. | Equivalent. | | `push_tags` | Remote tag list contains `tag_to_be_pushed`. | `tag_to_be_pushed` is in `pushedTags`. | Equivalent state projection. | | `commit_amend` | One commit and amended commit contains two files. | One commit and `forgotten_file.rb` is tracked. | Equivalent. | -| `commit_in_future` | Commit authored date is in the future. | Any commit exists. | Known gap: Android does not currently expose commit authored timestamps in `RepoState`. | +| `commit_in_future` | Commit authored date is in the future. | At least one commit has an author timestamp later than the current system clock. | Equivalent. | | `reset` | `to_commit_second.rb` exists but is unstaged; `to_commit_first.rb` remains staged. | Same staged/unstaged split with one commit. | Equivalent. | | `reset_soft` | `newfile.rb` exists, is staged, and commit count is one. | Same. | Equivalent. | | `checkout_file` | `config.rb` no longer modified and commit count remains one. | `config.rb` content equals initial content. | Equivalent. | @@ -119,7 +119,7 @@ This file records the upstream Ruby setup and validation intent beside the Andro | `squash` | Commit count is two. | Commit count at most two and "Adding README" remains. | Slightly stricter on preserving the base README commit. | | `merge_squash` | Commit count is three and all long-feature changes are included. | Squash action recorded and a commit exists. | Known gap: Android does not yet verify all squash file/content effects. | | `reorder` | `git log` subject order matches `Third.*Second.*First.*Initial`. | Modeled commit order becomes First, Second, Third. | Equivalent relative to Android's oldest-first commit list. | -| `bisect` | Answer is hash prefix `18ed2ac`. | Answer is `18ed2ac`. | Equivalent. | +| `bisect` | Answer is hash prefix `18ed2ac` after using Ruby/make fixture. | Learner can run `git bisect start HEAD known-good` and `git bisect run ./test-balance.sh`; Android accepts the discovered bad hash or the final bisect state. | Same lesson, different fixture to keep it playable without Ruby/make. | | `stage_lines` | Staged diff contains first feature line; unstaged diff contains second feature line. | `feature.rb` is staged. | Known gap: Android does not yet model partial hunk staging. | | `find_old_branch` | Current branch is `solve_world_hunger`. | Same. | Equivalent. | | `revert` | More than three commits and a revert of "Bad commit" exists. | A commit message starts with `Revert`. | Slightly looser; sufficient for current fixture. | @@ -157,7 +157,6 @@ This file records the upstream Ruby setup and validation intent beside the Andro These are the remaining known non-parity items that need additional model support if exact upstream validation is required: -- `commit_in_future`: add authored timestamp inspection to `CommitNode`/`RepoState`. - `stage_lines`: model partial staged vs unstaged hunks. - `merge_squash`: verify the exact squashed file/content effects. - `conflict`: model merge parent count or inspect merge commit parents. diff --git a/README.md b/README.md index eb92b28..4e94add 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,20 @@ The command engine has one app-facing runtime: The runtime exposes a `RepoState` surface to validators. In addition to files, commits, branches, tags, remotes, and config, the model tracks learning-relevant effects such as stashes, fetched remote refs, pushed branches/tags, submodules, and repository maintenance actions. -Helper shell-like commands (`ls`, `pwd`, `cat`, `touch`, `mkdir`, `rm`, `echo`, `cd`) remain implemented in Kotlin so the mobile terminal behaves consistently across devices. +Helper shell-like commands (`ls`, `pwd`, `cat`, `sh