<commit_before># Release Notes 0.0.3

- [Bug Fixes](#bug-fixes)
- [Pull Requests](#pull-requests)
- [Project Loading with tODE](#project-loading-with-tode)
  - [Project Entries](#project-entries)
  - [Project Entry and Script Sharing](#project-entry-and-script-sharing)
    - [/home](#home)
    - [/project](#projects)
    - [/sys](#sys)
    - [/sys/default](#sysdefault)
    - [/sys/local](#syslocal)
    - [/sys/stone](#sysstone)
    - [/sys/stones/stones/\<stone-name\>](#sysstonesstonesstone-name)
- [Converting v0.0.2 project structure to v0.0.3](#converting-v002-project-structure-to-v003)
  - [Project Entry registration and sharing for tODE v0.0.2](#project-entry-registration-and-sharing-for-tode-v002)

##Bug Fixes
1. [Issue #5: Add command / file completion][12]
2. [Issue #100: TDProjectEntryDefinition class>>defaultGitRootPath should be in session temps][17]
1. [Issue #106: projects dir with projectEntries?][7]
1. [Issue #110: probably should have stone specific home dir in gsdevkit][6]
2. [Issue #123: adapt tode client to new tode/sys structure][8]
3. [Issue #124: `project load` may not use proper version of project entry][10]
3. [Issue #125: potential difficulty when updating live tode in 3.1.0.6 and earlier: `a OffsetError occurred (error 2003), reason:objErrBadOffsetIncomplete, max:0 actual:1`][9]
4. [Issue #129: add `\` escape to tODE command-line processing (mainly to escape newlines)][11]
5. [Issue #130: implement TDTopezServer>>evaluateCommandStream: for multi-line scripts and `tode its`][13]
6. [Issue #135: cheat sheet for GemTools users][15]
6. [Issue #143: add `/sys` structure to tODE checkout][14]
7. [Issue #147: finish `gs` command docs][16]
8. [Issue #148: write `project` command man pages #148][18]
9. [Issue #149: v0.0.3 release notes][19]

##Pull Requests
1. [Pull Request #140: Greatly Improved Git merge tool][21]
1. [Pull Request #150: v0.0.3][20]

##Project Loading with tODE
One of the basic principles for tODE is that the same code should be run whether you are executing an operation from a menu pick, the tODE shell, or a  [topaz][26] job.
This priniciple is especially important when it comes to project load scripts.
Developers must be able to count of the fact that whether or not they build a stone from scratch or update a stone from a menu pick, that they end up with the same code in their image.

For the loading projects, the class **TDMetacelloTool** is the workhorse.
**TDMetacelloTool** implements a comprehensive Smalltalk API for managing most phases of project management.
**TDMetacelloTool** also implements the `project` command which provides tODE shell access to the project management API:

```
NAME
  project - Metacello project management support.

SYNOPSIS
  project [--help] <command> [<args>]

DESCRIPTION
  Commands:
    clone    Clone repository (github only)
    commit   Commit the Metacello project
    compare  View differences between repository versions (git only)
    diff     View code differences between image and repository
    entry    Create a new project entry
    list     List Metacello projects
    load     Load a Metacello project
    lock     Lock project registration
    log      Browse commit log for the Metacello project (git only)
    prime    Prime the project registry
    registry Inspect the project registry
    rehome   Point package repository groups for project to new repository
    summary  View report of changed packages and methods
    validate Validate the project registrations

  Use `project --help <command>` to read about a specific subcommand.
```

For example, to load the `Seaside3` project one can use the following Smalltalk expression:

```Smalltalk
  (TDTopezServer batchInstance toolInstanceFor: 'project')
    projectLoad: 'Seaside3'
```

tODE shell command:

```
project load Seaside3
```

or `project list` menu item:

![project list menu][27]



###Project Entries

The *project entry* is used by tODE to specify how a project is to by handled by the `project` family of commands (use the tODE command `man project` for more information about the `project` family of commands).

A *project entry* has attributes that match up with arguments you would use in a [**Metacello** load command][3].
For example the following [*project entry* for Seaside31][5]:

```Smalltalk
^ TDProjectSpecEntryDefinition new
    baseline: 'Seaside3'
      repository: 'github://GsDevKit/Seaside31:3.1.?/repository'
      loads: #('Development' 'Zinc' 'FastCGI' 'Examples' 'Tests');
    status: #(#'inactive');
    locked: false;
    yourself
```

uses this **Metacello** expression for loading:

```Smalltalk
Metacello new
  baseline: 'Seaside3';
  repository: 'github://GsDevKit/Seaside31:3.1.?/repository'
  load: #('Development' 'Zinc' 'FastCGI' 'Examples' 'Tests')
```
<commit_msg>[ci skip] Issue #149: checkpoint<commit_after># Release Notes 0.0.3

- [Bug Fixes](#bug-fixes)
- [Pull Requests](#pull-requests)
- [Project Loading with tODE](#project-loading-with-tode)
  - [Project Entries](#project-entries)
  - [Project Entry and Script Sharing](#project-entry-and-script-sharing)
    - [/home](#home)
    - [/project](#projects)
    - [/sys](#sys)
    - [/sys/default](#sysdefault)
    - [/sys/local](#syslocal)
    - [/sys/stone](#sysstone)
    - [/sys/stones/stones/\<stone-name\>](#sysstonesstonesstone-name)
- [Converting v0.0.2 project structure to v0.0.3](#converting-v002-project-structure-to-v003)
  - [Project Entry registration and sharing for tODE v0.0.2](#project-entry-registration-and-sharing-for-tode-v002)

##Bug Fixes
1. [Issue #5: Add command / file completion][12]
2. [Issue #100: TDProjectEntryDefinition class>>defaultGitRootPath should be in session temps][17]
1. [Issue #106: projects dir with projectEntries?][7]
1. [Issue #110: probably should have stone specific home dir in gsdevkit][6]
2. [Issue #123: adapt tode client to new tode/sys structure][8]
3. [Issue #124: `project load` may not use proper version of project entry][10]
3. [Issue #125: potential difficulty when updating live tode in 3.1.0.6 and earlier: `a OffsetError occurred (error 2003), reason:objErrBadOffsetIncomplete, max:0 actual:1`][9]
4. [Issue #129: add `\` escape to tODE command-line processing (mainly to escape newlines)][11]
5. [Issue #130: implement TDTopezServer>>evaluateCommandStream: for multi-line scripts and `tode its`][13]
6. [Issue #135: cheat sheet for GemTools users][15]
6. [Issue #143: add `/sys` structure to tODE checkout][14]
7. [Issue #147: finish `gs` command docs][16]
8. [Issue #148: write `project` command man pages #148][18]
9. [Issue #149: v0.0.3 release notes][19]

##Pull Requests
1. [Pull Request #140: Greatly Improved Git merge tool][21]
1. [Pull Request #150: v0.0.3][20]

##Project Loading with tODE
One of the basic principles for tODE is that the same code should be run whether you are executing an operation from a menu pick, the tODE shell, or a  [topaz][26] job.
This priniciple is especially important when it comes to project load scripts.
Developers must be able to count of the fact that whether or not they build a stone from scratch or update a stone from a menu pick, that they end up with the same code loaded into their image.

For the loading projects, the class **TDMetacelloTool** is the workhorse.
**TDMetacelloTool** implements a comprehensive Smalltalk API for managing most phases of project management.
**TDMetacelloTool** also implements the `project` command which provides tODE shell access to the project management API:

```
NAME
  project - Metacello project management support.

SYNOPSIS
  project [--help] <command> [<args>]

DESCRIPTION
  Commands:
    clone    Clone repository (github only)
    commit   Commit the Metacello project
    compare  View differences between repository versions (git only)
    diff     View code differences between image and repository
    entry    Create a new project entry
    list     List Metacello projects
    load     Load a Metacello project
    lock     Lock project registration
    log      Browse commit log for the Metacello project (git only)
    prime    Prime the project registry
    registry Inspect the project registry
    rehome   Point package repository groups for project to new repository
    summary  View report of changed packages and methods
    validate Validate the project registrations

  Use `project --help <command>` to read about a specific subcommand.
```

For example, to load the `Seaside3` project one can use 

1. The `project list` menu item for loading:
    ![project list menu][27]
2. The 'project load` tODE shell command:

   ```
   project load Seaside3
   ```

3. A Smalltalk expression that first looks up the tool instance that implements the `project` command and then invokes the project load proper:

```Smalltalk
  (TDTopezServer batchInstance toolInstanceFor: 'project')
    projectLoad: 'Seaside3'
```

All three techniques are based on using `toolInstanceFor:` for look up.
Ensuring that even if you happen to implement your own version of the `project` command, the same code will be executed in all three scenarios.




###Project Entries

The *project entry* is used by tODE to specify how a project is to by handled by the `project` family of commands (use the tODE command `man project` for more information about the `project` family of commands).

A *project entry* has attributes that match up with arguments you would use in a [**Metacello** load command][3].
For example the following [*project entry* for Seaside31][5]:

```Smalltalk
^ TDProjectSpecEntryDefinition new
    baseline: 'Seaside3'
      repository: 'github://GsDevKit/Seaside31:3.1.?/repository'
      loads: #('Development' 'Zinc' 'FastCGI' 'Examples' 'Tests');
    status: #(#'inactive');
    locked: false;
    yourself
```

uses this **Metacello** expression for loading:

```Smalltalk
Metacello new
  baseline: 'Seaside3';
  repository: 'github://GsDevKit/Seaside31:3.1.?/repository'
  load: #('Development' 'Zinc' 'FastCGI' 'Examples' 'Tests')
```

{'fraction_non_alphanumeric': 0.10414378432351473, 'fraction_numerical': 0.03075386919620569, 'mean_word_length': 4.233019853709509, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 6, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1442808', 'n_tokens_mistral': 3220, 'n_tokens_neox': 2917, 'n_words': 1215}