Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions session-notes/cleanup-notes/cleanup_session_notes.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
use strict;
use warnings;

# Sub-task: Create subroutine 'get_date_from_filename'
sub get_date_from_filename {
my ($filename) = @_;
$filename =~ /(\d{4}-\d{2}-\d{2})/;
return $1;
}

# Sub-task: Create subroutine 'slurp_file'
sub slurp_file {
my ($filename) = @_;
local $/;
open my $fh, '<', $filename or die "Could not open file '$filename': $!";
my $contents = <$fh>;
close $fh;
return $contents;
}

# Sub-task: Create subroutine 'contains_inactive_coauthors'
sub contains_inactive_coauthors {
my ($contents) = @_;
return $contents =~ /#+\s*Inactive Co-Authors/i;
}

# Sub-task: Create subroutine 'contains_active_coauthors'
sub contains_active_coauthors {
my ($contents) = @_;
return $contents =~ /#+\s*Active Co-Authors/i;
}

# Sub-task: Create subroutine 'contains_session_date'
sub contains_session_date {
my ($contents) = @_;
return $contents =~ /#+\s*Session Date/i;
}

# Sub-task: Create subroutine 'delete_inactive_coauthors'
sub delete_inactive_coauthors {
$_[0] =~ s/(#+\s*Inactive Co-Authors.*?)(?=#+\s*\w)/\n/si;
}

# Sub-task: Create subroutine 'normalize_coauthor_heading'
sub normalize_coauthor_heading {
$_[0] =~ s/#+\s*.*?Co-Author.*/## Co-Authors/gi;
}

# Sub-task: Create subroutine 'cleanup_file'
sub cleanup_file {
my ($filename) = @_;
my $original_contents = slurp_file($filename);
my $contents = $original_contents;
my $date_as_string = get_date_from_filename($filename);

# Add session date if not present
$contents = "## Session Date: $date_as_string\n\n$contents" unless contains_session_date($contents);

# Delete inactive coauthors if necessary
delete_inactive_coauthors($contents) if contains_active_coauthors($contents) && contains_inactive_coauthors($contents);

# Normalize coauthor headings
normalize_coauthor_heading($contents);

if ($contents eq $original_contents) {
print "No changes were needed for $filename\n";
} else {
print "Changes were made to $filename\n";
my ($mode, $atime, $mtime) = (stat $filename)[2, 8, 9];
my $new_filename = $filename . '.new';
open my $fh, '>', $new_filename or die "Could not open file '$new_filename': $!";
print $fh $contents;
close $fh;
chmod $mode & 07777, $new_filename;
utime $atime, $mtime, $new_filename;

# File manipulation
rename $filename, $filename . '.original';
rename $new_filename, $filename;

print "You can view changes by issuing this command:\n";
print "diff -u " . $filename . ".original " . $filename . "\n";
}
}

# Sub-task: Create subroutine 'main'
sub main {
foreach my $filename (@ARGV) {
cleanup_file($filename);
}
}

# Call main
main() if @ARGV;
82 changes: 82 additions & 0 deletions session-notes/cleanup-notes/cleanup_session_notes.prompt
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
Ignore previous instructions.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why?


# Task: perform cleanup on files
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Task: perform cleanup on files
# Task: write a script that'll perform cleanup on files


## Input

The files have names like
session-notes-2022-10-20.md
session-notes-2022-11-03.md
session-notes-2022-11-10.md
session-notes-2022-11-24.md
session-notes-2022-12-01.md

The files are in markdown format.

Specifically, 1st-level headers have 1 "#" at beginning of line and 2nd-level headers have "##"... likewise for 3rd-level

## Cleanup

All regular expresssion 'match' and 'substitute' operations should do case-insensitive matching.

Create code to accomplish each sub-task in Python


### Sub-task: Create subroutine 'get_date_from_filename'
- parameter: filename
- return: date portion of the filename

### Sub-task: Create subroutine 'slurp_file'
- parameter: filename
- return: entire contents of file as a string

### Sub-task: Create subroutine 'contains_inactive_coauthors'
- argument: contents
- return: boolean. true iff 'contents' matches (case-insensitive) a 1st or 2nd level header with "Inactive Co-Authors"

### Sub-task: Create subroutine 'contains_active_coauthors'
- argument: contents
- return: boolean. true iff 'contents' matches (case-insensitive) a 1st or 2nd level header with "Active Co-Authors"

### Sub-task: Create subroutine 'contains_session_date'
- argument: contents
- return: boolean. true iff 'contents' matches (case-insensitive) a 1st or 2nd level header with "Session Date"

### Sub-task: Create subroutine: 'delete_inactive_coauthors'
- argument: contents
- action: if there is a 1st or 2nd level header that matches "Inactive Co-Authors", delete the whole section (i.e. the header through, but not including, the next header)
- return: none. But assure that the argument has changes if they were made

### Sub-task: Create subroutine 'normalize_coauthor_heading'
- argument: contents
- action: Any header that contains "Co-Author", whether or not it contains other text, should be rewritten to be a 2nd-level header with only "Co-Authors"
- return: none. But assure that the argument has changes if they were made

### Sub-task: Create subroutine 'cleanup_file'
- argument: filename
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

English as a programming language 👏
I wonder how much less specific can you go, letting the LLM infer and be creative, and still reliably generate a valuable working script

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact, can we get the script generation to be so reliable that we don't need to commit the artifact, only the prompt? Similar to the way we treat compiled / transpiled artifacts.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the way you're thinking.

Let's explore it.

- actions
1. slurp file contents into variable 'original_contents' and also 'contents'.
2. set 'date_as_string' from 'filename'
3. if 'contents' does not contain session date, add a 1st-level header to the beginning with "Session Date" followed by value of 'date_as_string'
4. if 'contents' contains active coauthors AND 'contents' contains inactive coauthors, delete inactive coauthors
5. if 'contents' and 'original_contents' are identical
Notify user "No changes were needed"
else
a. Notify user that "Changes were made"
b. create a new file to contain changed text
- name based on oiginal name with .new appended
- same mode as original file
- same modification times as original file
c. write 'contents' to the *.new file
d. rename original file to have ".original" appended to filename
e. rename file with new text (and .new appended) to original filename
f. Notify user "You can view changes by issuing this command"...
... then, on a new line, output command "diff -u original_backup_file new_file"
Note: Surround file manipulation commands with ex

### Sub-task: Create subroutine 'main'
- foreach filename given on the command line, pass the filename to "cleanup_file"

### Sub-task: Consolidate code
- Display all sub-task code in python code block

69 changes: 69 additions & 0 deletions session-notes/cleanup-notes/cleanup_session_notes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Python code for the specified tasks

import re
import os
import shutil
import sys

def get_date_from_filename(filename):
match = re.search(r'(\d{4}-\d{2}-\d{2})', filename, re.IGNORECASE)
return match.group(1) if match else None

def slurp_file(filename):
try:
with open(filename, 'r') as file:
return file.read()
except FileNotFoundError:
return None

def contains_inactive_coauthors(contents):
return bool(re.search(r'^#+\s*Inactive Co-Authors', contents, re.IGNORECASE | re.MULTILINE))

def contains_active_coauthors(contents):
return bool(re.search(r'^#+\s*Active Co-Authors', contents, re.IGNORECASE | re.MULTILINE))

def contains_session_date(contents):
return bool(re.search(r'^#+\s*Session Date', contents, re.IGNORECASE | re.MULTILINE))

def delete_inactive_coauthors(contents):
return re.sub(r'^#+\s*Inactive Co-Authors.*?(?=^#|\Z)', '', contents, flags=re.IGNORECASE | re.MULTILINE | re.DOTALL)

def normalize_coauthor_heading(contents):
return re.sub(r'^#+\s*.*Co-Author.*', '## Co-Authors', contents, flags=re.IGNORECASE | re.MULTILINE)

def cleanup_file(filename):
original_contents = slurp_file(filename)
if original_contents is None:
print(f"File not found: {filename}")
return

contents = original_contents
date_as_string = get_date_from_filename(filename)

if not contains_session_date(contents):
contents = f"# Session Date: {date_as_string}\n" + contents

if contains_active_coauthors(contents) and contains_inactive_coauthors(contents):
contents = delete_inactive_coauthors(contents)

contents = normalize_coauthor_heading(contents)

if contents == original_contents:
print(f"No changes were needed for the file: {filename}")
else:
print(f"Changes were made to the file: {filename}")
new_filename = filename + ".new"
with open(new_filename, 'w') as new_file:
new_file.write(contents)
shutil.copystat(filename, new_filename)
original_backup_filename = filename + ".original"
os.rename(filename, original_backup_filename)
os.rename(new_filename, filename)
print(f"You can view changes by issuing this command: diff -u {original_backup_filename} {filename}")

def main():
for filename in sys.argv[1:]:
cleanup_file(filename)

if __name__ == "__main__":
main()
25 changes: 25 additions & 0 deletions session-notes/cleanup-notes/doit
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#! /bin/bash

git_toplevel="$(git rev-parse --show-toplevel)"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Learn something new every day

note_directory="${git_toplevel}/session-notes"
script_directory="${note_directory}/cleanup-notes"
script_path="${script_directory}/cleanup_session_notes.py"

cd "${note_directory}" || exit 2



for arg in "$@"
do
if [[ ! -f "$arg" ]]; then
date="$arg"
filename="session-notes-${date}.md"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could've done this inside the perl/python script

else
filename="$arg"
fi

. "${script_directory}/venv/bin/activate" || exit 3

python "${script_path}" "${filename}"
done

21 changes: 21 additions & 0 deletions session-notes/session-note-checklist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Updating this file for a new session

The point of this is to list all manual steps that we have to do in a session as a reminder, and get rid of them by automating them later.

Start of Session
- If new participants, add them both to (1) daily file and (2) template file
(While template is open, float active participants up in the list)

During Session
As work proceeds
- Update backlog and WIP
- Copy Co-authors from here to commit message

Close of Session
- Remove "Inactive Co-Authors" section completely (to prevent spurious github changes)
- Remove this whole "Updating..." section, leaving "Session Date" at top of file
- Add notes for retro
- Add ideas for next time
- Commit final change
- confirm that the automation worked (cleanup script of session notes which should be a commit hook)
- (Maybe) delete Gitpod.io work space
1 change: 1 addition & 0 deletions session-notes/session-notes-2022-10-13.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2022-10-13
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏵️

# How did that feel?
- Liked the Game, is cool. Works well as a timer (has bugs). Like a mini retro all the time.
- Great Time
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2022-10-20.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2022-10-20
# How did that feel?
- Nice +1
- Interesting
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2022-11-03.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2022-11-03
# How did that feel?
- Enjoyed it, a bit of small talk in the beggining
- Felt productive, made good progress
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2022-11-10.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2022-11-10
# How did that feel?
- I like working on Testinfrastructure
- Nice engineering challenge
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2022-11-24.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2022-11-24
# How did that feel?
- frustrating +1
- happy that we found the cause in the end +1
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2022-12-01.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2022-12-01
# How did that feel?
- Challenging +100
- Not Stable, constantly port in use
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2022-12-08.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2022-12-08
# Goal

- Fix inconsistent test failures around the wsserver
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2022-12-15.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2022-12-15
# Goal

- curios to test the rotation issue again manually
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2022-12-22.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2022-12-22
# Goal

- [X] !! potential bug: rotate button should not use rotateToTarget
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-01-05.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-01-05
# Goal

- [x] For next time we could take a look at this one:
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-01-12.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-01-12
# Goal
- Bug: Game ID should be in the URL
- Exploratory testing
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-01-19.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-01-19
# Goal
- Limit number of points to 3 per role
- Exploratory testing
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-01-26.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-01-26
# Goal
- Exploratory testing
- A: which part? Q: all the app
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-02-02.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-02-02
Co-Authored-By: Nitsan Avni <[email protected]>
Co-Authored-By: Eddie Bush <[email protected]>
Co-Authored-By: Michael R. Wolf <[email protected]>
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-02-09.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-02-09
Co-Authored-By: Nitsan Avni <[email protected]>
Co-Authored-By: Eddie Bush <[email protected]>
Co-Authored-By: Rea <[email protected]>
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-02-16.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-02-16
Co-Authored-By: Nitsan Avni <[email protected]>
Co-Authored-By: Michael R. Wolf <[email protected]>

Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-02-23.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-02-23
Co-Authored-By: Rea <[email protected]>
Co-Authored-By: Tsvetan Tsvetanov <[email protected]>
Co-Authored-By: Michael R. Wolf <[email protected]>
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-03-02.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-03-02
Co-Authored-By: arrockt <[email protected]>
Co-Authored-By: Austin Chadwick <[email protected]>
Co-Authored-By: Blessed538 <[email protected]>
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-03-09.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-03-09
Co-Authored-By: Gregor Riegler <[email protected]>
Co-Authored-By: Joel Silberman <[email protected]>
Co-Authored-By: Michael R. Wolf <[email protected]>
Expand Down
1 change: 1 addition & 0 deletions session-notes/session-notes-2023-03-16.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Session Date: 2023-03-16
Co-Authored-By: Eddie Bush <[email protected]>
Co-Authored-By: Joel Silberman <[email protected]>
Co-Authored-By: Nitsan Avni <[email protected]>
Expand Down
Loading