►
From YouTube: Web IDE Maintainer Onboarding - Aug 2023 4/4
Description
In this session we pair up on an issue around including the current username in the generated branch name.
MR: https://gitlab.com/gitlab-org/gitlab-web-ide/-/merge_requests/232
A
All
right,
thanks
for
hopping
on
this
last
session
of
the
web
ID
project
maintainer
on
boarding,
we're
gonna
dive
into
a
another
issue
than
the
one
we've
been
working
on.
So
let
me
close
some
of
this
stuff.
A
Okay,
so
we've
been
working
on
fix
opening
from
the
commit-
and
we
did
this
for
the
most
part
I'm
going
to
wrap
this
up
on
my
end
and
then
hopefully
sign
it
to
one
of
you
all
to
review
and
merge,
but
I
think
for
us
to
spend
the
most
of
our
get
the
most
usage
out
of
our
time.
A
Let's
dive
into
a
separate
issue,
this
one's
pretty
straightforward,
but
it's
going
to
require
a
different
set
of
changes
for
sure
is
previously
the
old
web
ID
when
you
are
creating
a
branch
after
making
a
change,
it
defaults,
the
default
Branch
name
that
we
kind
of
generate
includes
your
user
ID
right
now
that
doesn't
happen.
Let
me
open
up
the
web
ID
real
fast,
so
we
can
see
what
what
does
happen
all
right,
we're
pulling
all
of
the
files
from
the
main
gitlab
project
boom
great.
A
So
if
I
make
a
change
to
our
philosophy
and
I
go
to
commit
to
New
Branch,
this
leave
empty
to
use
Master
Patch
random
characters.
This
normally
contains
the
username
in
the
default
Branch
name
as
well.
So
that's
what
we
want
to
somehow
pull
from
the
gitlab
context.
What
the
current
username
is
and
throw
it
into
what
the
default
Branch
would
be.
A
C
A
Bit:
okay,
all
right:
it's
building
everything
all
right!
So
right
now,
there's
no
there's
no
concept
of
what
the
current
username
is
at
all
built
into
the
web
ID.
So
we're
going
to
need
to
get
that
from
the
gitlab
session
context
and
the
main
mechanism
for
injecting
things
in
from
the
outer
gitlab
context
into
the
web.
Id
is
through
the
config,
so
I
can
kind
of
assume
we're
going
to
need
to
update
our
config
that
we.
A
Get,
and
so
we
talked
a
little
bit
about
the
difference
between
there's
a
client,
only
version
of
the
web
ID
and
a
remote
version
of
the
web
ID
this
remote
development,
one
vs
code.
When
you
start
it
up
you,
you
can
give
it
you
can
like
connect
it
to
a
vs
code
server
through
like
SSH
and
stuff,
and
when
this
like
remote
config.
A
These
are
like
vs
code
parameters
for
we're
going
to
start
up
vs
code,
but
it's
going
to
run
through
a
we're
looking
for
a
vs
code
backend
so
that
you
can
actually
run
the
terminal
and
have
whatever
kind
of
environment
extensions
you
need
that's
needed
for
our
remote
development
feature
offering
it's
not
to
it's
related
to
the
web
ID,
but
for
the
most
part,
a
lot
of
our
development
lives
here,
because
when
we
don't
have
a
vs
code,
server
we're
connected
to
we
kind
of
have
to
make
everything
on
the
client
and
so
I.
A
Don't
think
I!
Don't
think
that
the
remote
config
thing
is
going
to
need
the
username
information.
I,
don't
often
really
touch
the
remote
config
thing
a
lot,
because
it's
just
meant
for
that.
One
little
bit
that
we
needed
for
remote
development,
and
so
the
question
is,
should
I
add
this
username
property
to
base
config
or
client
or
client
only
config
and
I'm
thinking,
oh
I,
like
that
picture,
that's
a
cool
picture
I
like
that
it
was
like
a
it.
Looked
like
a
monster.
C
A
It
looks
real,
it
looks
really
cool
I,
like
it
I
kind
of
want
to
throw
I,
want
to
throw
my
Pikmin
at
it.
I
like
it
all
right
well,
because
remote
config
is
not
going
to
need
the
username
I,
don't
want
to
add
it
to
base
config
so
base.
Config
should
only
contain
things
that
both
the
configs
need
so
I'm
going
to
opt
to
making
this
more
specific
by
default
and
I'm
going
to
put
username
here.
A
I,
don't
know
if
we
like
username
being
camel
case
or
all
lowercase
I
have
no
idea,
but
I'm
going
to
put
it
here
and
I
am
G
to
say
that
it's
optional,
because
so
far
we've
been
running
without
it,
and
so
I
don't
want
to
introduce
like
a
breaking
change.
So
I'm
going
to
leave
this
as
optional
say
the
current
username
for
the
hit
lab
contexts.
This
is.
A
Like
generating
default,
Branch
names
and
I'll
add
a
link
to
the
issue,
all
about
adding
all
of
that
traceability
to
everything,
because
I'll
forget:
okay,
cool,
let's
see
if
we
have
see
if
we
have
this.
A
Running
I
go
over
to
my
terminal
yeah.
It
looks
like
we
built
everything
successfully.
So
that's
looking
great
right,
I'm
G
to
move
all
your
faces
over
all
right.
Okay
and
I
also
have
the
GDK
running.
So
we
should
be
able
to
start
from
here.
A
Running
yeah
looks
like
I:
don't
have
the
GDK
come
on?
Why
aren't
you
running
all
right?
Let
me
go
ahead
and
start
the
GDK.
So
in
the
meantime,
instead
of
connecting
to
the
GDK
I'll
just
connect
to
gitlab.com-
and
this
should
work,
it's
going
to
throw
the
warning
that
I
don't
have
right
access
because
I
didn't
provide
access
token
to
it.
That's
all
fine.
A
Great
I'll
provide
a
token
to
it
once
the
GDK
actually
starts
up
all
right,
I
want
to
somehow
test
the
username
stuff
in
this
example
app.
So
somehow
in
here,
I'm
going
to
need
to
inject
I
want
to
inject
the
username.
A
So
all
of
this,
like
configuration
parameters
for
setting
up
this
web
package,
that's
decoupled
from
the
main
git
lab
project.
As
you
can
see,
this
kind
of
grew
in
scope
since
it
first
was
developed.
We
got
this
check
box
here
and
we
have
this
thing
here
like
so
I,
don't
want
to
just
keep,
adding
and
there's,
obviously,
probably
better
things
we
can
do.
A
I
don't
want
to
just
keep
adding
fields
to
this
thing,
although
I
could
another
thing
that
we
were
doing
to
inject
values
into
the
example
app-
and
none
of
this
is
super
documented,
but
here's
where
you
can
find
it
is
in
the
example
package
in
the
web
ID
component.
This
is
where
we
like
set
up
the
config,
so
you
can
see
where
these
things
come
from.
A
A
So
you
can
through
the
example
app
you
can
test
what
happens
when
we
have
a
mer
request,
ID
and
we
have
like
file
paths,
and
these
are
the
kind
of
query
parameters
we
get
normally
from
the
in
the
actual
project
itself,
but
I
think
I'm
just
going
to
throw
username
and
I'm
going
to
put
at
the
bottom,
because
I
don't
really
quite
know
where
else.
To
put
it.
A
Get
username
yeah,
so
we
just
do
something
like
this.
This
partial
thing
is
super
cool.
If
you're
not
super
familiar
with
typescript,
if
I
didn't
have
this
correctly,
it
would
start
yelling
at
me.
So
this
is
ensuring
that
I'm
only
returning
part
of
the
keys
in
here,
but
they
have
to
be
keys
in
there.
But
that's
kind
of
cool
typescript
super
smart
partial
is
like
a
built-in
typescript.
What
would
they
call
it?
It's
like
a
utility
type
kind
of.
C
A
Okay
cool,
so
let's,
let's
do
that,
but
let's
also
go
ahead
and
consume
it
so
that
I
can
I
can
get
the
full
feedback
loop,
while
I'm
testing
this
thing
out
so
I'm,
jumping
into
where
a
lot
of
the
runtime
logic
of
the
client
web
ID
lives,
which
is
in
this
vs
code
extension.
This
is
our
built-in
extension,
which
is
the
engine
that
runs
like
getting
the
file
system
and
loading
all
those
vs
code,
specific
stuff.
We
need.
A
A
That
there's
some
other
things
in
Flight
right
now
and
other
mrss
I
know
are
going
to
make
this
easier.
A
A
This
function
only
runs
once
we
call
this
initialize
with
progress
which
calls
initialize.
But
we
have
this
function
then,
like
this
initialize
function,
that
gets
you
see
that
gets
referenced
here
when
we
do
this
register
reload
command,
because
after
I've
made
a
commit
or
after
I've
made
a
change,
we
kind
of
need
to
like
reload
everything
that
we
just
got,
because
sometimes,
when
I
make
a
commit,
a
other
commits
have
already
happened
underneath
me
and
there's
even
like
file
system
changes.
A
So
after
I've
made
a
commit
on
the
web
ID,
we
kind
of
need
to
get
the
latest
of
stuff,
and
so
current
way
of
doing
that
is:
let's
dispose
everything
and
just
start
over,
and
so
all
of
that
lives
in
this
initialized
function.
It's
like
okay,
we're!
We
either
just
made
a
commit,
or
we
just
loaded.
We
are
starting
all
this
stuff
up
and
we
call
our
mediator
commands,
which
is
we
have
this
weird
start,
one
which
makes
all
those
initial
fetch.
A
Requests,
but
what
we
don't
have
in
this
scope
is
reference
to
the
mediator
command
that
just
Returns
the
whole
config
and
in
a
separate
Mr.
That's
in
flight
I've
I
have
added
that
here
and
I'm
thinking.
Maybe
we
want
to
just
do
the
same
thing,
which
probably
be
the
easiest,
or
so
that's
one
option
rather
than
here
we
have
a
start
that
we're
referencing
the
media
commands.
A
A
It's
really
small
too,
like
we
can
even
just
redo
it
here,
because
it's
the
so
let's,
let's
do
that
here.
I,
don't
want
to
add
to
start,
which
was
my
concern.
A
So
that's
that's
an
interesting
question,
so
the
vs
code
extension
runs
in
a
sandbox,
so
it
does
not
get
any
access
to
the
outside
session.
So
but
with
the
exception
of
we
can
write
things
to
like
a
vs
code,
specific
storage
but
I'm
still
not
like
super
familiar
with
that
it
might
be
possible.
But
for
right
now
it's
kind
of
the
config
is
the
thing
that
holds
everything.
A
So
we
already
have
the
meteor
command
for
getting
the
config,
because
the
vs
code
extension
project
needs
to
use
this.
The
only
difference
is
we're
not
calling
this
from
our
web
ID
extension,
and
so
we
just
need
to
add
a
reference
to
this
in
the
our
vs
code.
Extension
web
ID
package,
where
we
have
our
mediator
thing
here:
I
just
need
to
add
one
where
I'm
export
get
config
and
yeah,
let's
just
copy
what
I
had
going
on
in
in
a
separate.
A
A
Okay,
all
right,
yeah,
I,
I,
updated
some
stuff
with
some
types,
because
yeah
yeah
yeah
for
some
reason
this
these
types-
we're
referencing
just
a
very
small
subset
of
the
config,
but
we
actually,
let's
just
use
it-
to
return
the
whole
config,
so
I'm,
going
to
update
we're
going
to
manually
copy
some
of
these
changes
over
I'm
going
to
start
here
with
the
types
one
so
in
mediator,
command
Source
types:
let's
go
there.
Mediator,
commands
Source
types,
so
I'm
adding
a
reference
to
this.
A
This
is
coming
from
that
interop
package,
where
the
what
the
the
desktop
vs
code
extension
is
going
to
expect
in
the
web.
Id,
environment
and
I
am
saying
that
the
this
full
config,
which
contains
this
extra
thing,
which
is
that's
kind
of
a
code
smell,
but
it's
fine
right
now.
It's
going
to
extend
both
client
only
config
and
interop
config
interop
config
is
just
a
subset
of
that
client.
Only
config,
which
we
could
probably
update
our
interupt
to
do
that
as
well.
A
But
typescript
is
smart
enough
to
just
be
able
to
resolve
all
this,
so
we're
so
we're
kind
of
cool
and
if
any
of
these
properties
start
to
get
out
of
sync,
we'll
start
getting
type
errors
and
we'll
be
able
to
resolve
it.
But
now
that
I'm
doing
that,
that
gives
me
the
confidence
to
make
this
change
and
not
feel
any
negative
effects.
A
So
here
where
I'm
doing
get
config,
this
is
an
interop
command
that
the
separate
repository
is
dependent
on,
but
because
I
said
that
that
full
config
extended
the
inop
config
I
can
replace
my
inop
reference
with
this
one
and
feel
confident
that
we're
okay
and
we
are
so
that's
me
kind
of
explaining
some
of
this
pipe
piping,
changing
that
I'm
doing
here.
But
since
everything's,
compiling
I
feel
pretty
good,
then
the
last
thing
we
do
we
want
to
do.
Do
you
see
what
just
happened?
A
Firefox
for
I
mean
never
happened
me
before
I
I
use.
C
A
Maybe
that's
a
good
point.
Okay,
all
right!
Here's
me
adding
reference
to
getting
the
config
in
the
our
web
ID
vs
code
extension.
It
needs
to
call
the
mediator
command,
so
we're
going
to
add
a
reference
to
our
git
config.
A
Command
here,
when
we're
importing
these
different
types,
I
want
to
make
sure
I'm
referencing
the
same
type
that
we
used
to
declare
that
command
and
then
here
I'm
going
to
actually
have
the
function
to
get
the
config
cool
all
right
so
now,
I
can
get
the
whole
config
pull
just
the
username
bit
from
it
and
use
use
that
as
I
want
and
not
worry
about
further
selling.
All
of
the
business
that
start
does
okay.
A
B
A
Hello
yeah,
just
what
do
you
think
you're
doing
username,
okay,
cool
so
now,
I
should
be
able
to
see
that
com
in.
Let
me
go
ahead.
Question.
B
E
A
Oh,
that's
a
good
question,
that's
a
really
good
question
and
in
JavaScript
empty
string
is
falsy,
so
I
can
check.
E
A
So
I'm
I'm
guaranteed
it's
going
to
be
a
string
with
a
length
greater
than
zero.
At
this
point,
but
yeah,
that's
a
good
question
and
you're
right,
I
default
did
it
to
an
empty
string
and
so
I
need
to
be
able
I
need
to
not
just
do
and
for
that
reason,
you'll
see
I.
Think
throughout
the
code
is
like
I'm
not
going
to
just
do
a
specific
baliness
check
because
I'm
concerned
about
it
actually
being
there
so
I'll
I'll
do
more
permiss
of
just
I
want
to
do.
A
The
full
truthy
check
make
sure
this
isn't
actually
string,
yeah,
good
question,
okay,
so
I'm
here,
and
no,
no,
no,
no,
okay,
all
right,
okay
cool!
So
I
should
run
this
I
should
get
no
message
and
everything
loads.
All
right,
I
get
no
message
everything
loads.
Okay,
great!
So
let
me
then
add:
username
equals.
A
Cool
all
right,
so
this
isn't
what
we
wanted
to
do.
We
actually
want
it
to
be
used
elsewhere,
so
when
I
am
generating
that,
why
are
you
still
loading?
Oh,
it's
still
loading
because
I
waited
for
that
message
once
I.
So
that's
an
interesting
thing:
did
you
see
what
just
happened?
The
way
these
vs
code
messages
work
when
I
await
one
of
these
calls?
These
are
asynchronous
calls
and
they
will
respond.
A
It's
possible
for
me
to
provide
like
different
set
of
actions
to
it
and
they'll
respond
with
the
key
of
the
action
that
was
taken
or
something
like
that.
But
if
I
want
to
just
fire
and
forget
a
message,
I
shouldn't
await
it
since
I
awaited
it.
Nothing
else
was
loading
until
I
Clos
this
out.
So
then,
once
I
close
it,
then
everything
else
will
load
some
quirks
with
the
vs
code.
A
Api
of
like
when
you
see
us
sometimes
we'll
need
to
wait
something,
and
sometimes
we
want
to
just
show
a
message
and
don't
wait
for
it.
So
you'll
see
that
that
and
because
we
have
an
eslint
rule
about
hey,
promises
must
be
awaited.
You'll
see
us
saying
this
thing
doesn't
really
work,
I,
don't
know
why
that's
a
suggestion
but
you'll
see
us
just
disabling
for
this
line
and
saying
something
like
we
want
to
fire
and
forget
here
something
like
that:
okay,.
C
B
A
Okay,
let's
see
if
we
can
actually
get
the
okay.
Are
we
actually
running
now?
Are
we
gonna
be
okay?
Gdk
come.
E
A
It
you
know,
sometimes
the
GDK
really
puts
the
GD
in
the
GDK.
A
A
Be
right
now
so
I
wanted
to
do
that,
so
I
can
get
to
the
I
wanted
to
get
to
the
menu
where
I'm
creating
a
new
Branch,
because
that
will
help
me
find
where
it
is
in
the
code,
but
I'm
going
to
go
ahead
and
sheat
and
we'll
open
the
GDK.
Here.
It's
not
cheating.
It's
I
mean
we'll
open
up
the
web
ID
here,
I'm
just
gonna
I'm,
not
g
to
wait
for
the
GDK
to.
B
C
A
All
right
started
making
changes
committing
to
a
new
Branch.
Okay
leave
empty.
To
use.
That's
the
thing:
I'm
want
to
I'm,
going
to
look
for
leave
empty
to
use,
leave
empty
to
use
all
right
cool.
We
got
this
cool
thing
called
prompt,
Branch
name
all
right.
We've
got
this
thing
called
generated,
Branch
name,
okay,
so
I
think.
The
change
here
is
probably
pretty
straightforward,
where
we
can
take
an
optional
parameter
of
a.
A
Username
and
how
do
we
want
to
do
this,
something
like
how
do
we
feel
about
turn
Aries
Maybe,
not
maybe
in
this
case
it's
okay.
A
A
We
have
to
still
comp
the
like,
Hy
and
stuff
yeah
all
right.
The
one
question
I
do
have,
though,
is
I
want
to
make
sure
we're
consistent
with
how
the
old
web
ID
was
doing
this
so
I'm
going
to
look
for
look
for
username
inside
of
IDE
follow
IDE
files
in
the
current
project.
Not
quite
oh
wait
here
we
go
yeah.
Look
at
this
okay,
oh
it
looks
like
it
starts
with
the.
A
Okay,
so
we
will
start
ours
with
the.
A
Username,
oh
man,
a
lot
of
me
is
okay.
Yeah
I'm
gonna
have
to
I.
I
was
like
all
right.
I'm
GNA
do
something
like
this.
We
have
suffix
equals
username,
username
pop
otherwise.
B
B
Suffix
I
spelled
suffix
okay,.
B
A
All
right,
okay,
cool,
generate
Branch
name,
that's
kind
of
doing
the
thing
we
wanted
to
do
now:
prompt
Branch
name
now
that
needs
the.
A
Like
one
option
is
generate
Branch
name,
this
thing
calls
the
mediator
or
like
even
this
one.
This
calls
that
mediator
command
to
get
the
config
and
to
get
the
username
and
like
doing
all
of
that,
but
throughout
all
of
this
you
can
see
there's
some
pretty
poor,
State
Management
of
like
we
want
to
have
a
nice
single
place
where
our
state
lives
and
I
would
love
for
to
not
tie
everything
to
that,
like
state
store
where
our
state
is,
and
that
might
so
I
for
the
meantime.
A
I,
try
to
just
leave
like
the
main
entry
point
that
glue
code
is
the
bit
that
runs
as
separating
like
our
separating
like
our
business
logic
from
the
bit,
that's
actually
integrating
everything.
So
that's
one
of
the
reasons
why
I'm
opting
to
use
parameters
instead
of
just
coupling
this
to
the
config,
although
maybe
that's
a
totally
acceptable
approach,
I
just
without
thinking
about
it.
I'm
like.
Let's
try
to
avoid
that,
if
possible,
if
it
makes
sense,
who
knows
it
might
not
make
sense
all
right.
A
So
now,
let's
see
where
we
use
this
thing,
let
me
go
to
references
of
prompt
Branch
name,
get
Branch.
A
D
C
D
A
Be
we're
going
to
be
another
like
we're.
Gna
have
to
go
another
layer
up
so
like
what
I'm
imagining
is.
The
option
is,
and
so
this
is
a
big
to-do
for
developer
experience
level.
Ability
on
the
project
is.
We
need
a
single
source
of
Truth
for
state
and
this
package,
which
we
don't
have,
and
so
we
just
pass
all
the
parameters
down.
But
we're
going
to
need
to
probably
do
is
something
like:
okay,
we're
initializing,
Source
control,
we're
going
to
have
to
add
to
this
list.
A
Here's
the
current
username
and
like
freckling,
all
of
that
down
when
I
have
another.
You
know
work,
that's
been
sheld
but
I'm
going
to
unshell
it
hopefully
soon
is
we
want
to
create
things
that
are
able
to
reactively.
You
know,
watch
State
kind
of
like
you
would
expect
with
like
view
components,
we
can
do
that
from
this
context.
It's
just
takes
a
small
amount
of
set,
but
yeah
we're
going
to
have
to
like
do
the
props
drilling
down
a
handful
of
levels
and
that's
not
desirable
I
kind
of
thinking.
D
Yeah
I
think
I
think
having
like
view
like
State
Management,
where
you
can
have
like
well
I'm
thinking
of
like
react
and
more
familiar
with
react
where
we
have
like
providers
and
consumers,
though.
So
if
you
have
something
that's
providing
at
the
top
level
and
then
something
much
like
further
down
can
consume
it.
I
that
be
great
down
the
line.
But
for
now,
given
the
way
we're
doing,
States
I
think
it's
probably
okay
to
drill
drill
through.
A
A
A
It
is
Data,
that's
known
to
everything
it
technically
can
contain,
for
instance,
in
the
example
project
when
I'm
giving
it
a
token,
the
config
will
contain
the
token,
but
this
doesn't
happen
in
the
actual
running
instance
of
gitlab,
because
we
don't
use
Focus
like
this.
We
just
use
the
main
browser
session.
Naturally
like
so
there's,
it's
not
going
to
contain
any
secrets,
so
it
should
be
fine.
We
already
have
like
this.
We're
already
have
this
command
for
doing
this.
A
With
that
being
said,
we
do
have
it
in
the
pipeline
to
move
away
from
the
whole
mediator
commands
because
we've,
you
know,
we've
architected
the
vs
code
approach
for
how
we
can
authenticate
requests
seamlessly
without
needing
that
using
they
have
like
their
secret
storage
and
like
authentication
providers
and
stuff.
A
So
the
goal
would
be
a
moving
away
from
mediator
commands
but
like
what
she
said
about
yeah,
we
want
to
have
some
sort
of
store
that
has
state
that
provides
something
and
then
other
things
can
declare
themselves
as
like,
hey
I'm
dependent
on
the
state
I
want
to
like
hook
me
up
with
it.
Maybe
this
kind
of
maybe
this
kind
of
code
makes
that
dependency
clear
of
like
hey.
All
of
this
needs
to
be
hooked
up
with
the
current
username
so
like
when
we
do
that
refactoring.
E
E
C
A
A
So
much
so
much
love
I
want
to
do
this
project
I'm,
so
glad
we're
gonna
have
so
many
maintainers
that
can
reveal
all
the
refactoring
MS
cool
I
like
it.
Let's
do
it.
Hopefully
we
can
abstract
State
into
something
that
can
be
easily
provided
injected.
A
Made
reactive
and
easily
PR
yeah,
so
I
actually
have
I,
actually
have
a
branch
for
this.
It's
just
I
think
I
stopped
because
I
was
in
this
kind
of
elaboration
phase
with
it,
and
so
I
had
touched
a
whole
bunch
of
like
what
what's
the
ideal,
State
and
and
I
really
liked
the
approach.
I
just
haven't.
Okay,
now
that
I
have
some
sort
of
Ideal
I
need
to
find
the
iterative
steps
towards
that.
A
So
we
don't
just
have
one
crazy,
huge,
more
okay,
but
let's
let's
go
and
do
this,
but
it
does
bring
me
to
one
thought:
is
we
get
this
config
every
time
we
call
Prompt
Branch
name,
but
here's
the
deal.
A
D
A
A
Cool
at
least
I'm
at
least
I'm
making
note
of
my
assumptions.
A
All
right
so
yeah,
if
we
go
back
to
where
we're
at
we
added
the
username
there.
This
was
updating
the
mediator
command
so
that
it's
oh
wait.
This
is
our
vs
code
extension
so
that
we
actually
have
this
in
our
list
of
reference
mediator
commands
we
update
generated
Branch
name,
it's
clear.
This
is
like
a.
Let
me
go
back.
Let
me
make
this
wider.
It's
clear.
A
This
is
utility
function
that
should
not
reference
any
kind
of
commands,
or
something
like
that
so
like
hopefully,
that's
clear
how
this
is
a
bit
more
glue
codyy
than
the
generate
Branch
name
function
here
we
reference,
get
config,
that's
great,
and
then
these
are
updating.
Just
those
types
and
I
think
I
think
it's
going
to
be
it
cool
I
just
had
I
just
had
a
crazy
thought,
though.
Oh
no
is
it
possible
for
a
username
to
contain
characters
that
are
not
allowed
in
a
branch
name.
Do
we
even
care
about
that?
C
It
what
what
kind
of
characters
are
not
allowed
in
a
branch
name.
C
C
C
D
B
A
Allow
a
dot,
yeah,
oh
cool,
all
right!
All
right!
Here!
We
go!
Yes,
all
right,
we're
in
all
right,
adding
my
username
G
to
make
a
lowercase
letters
just
for
fun
all
right.
Let
me
add
I'm
G
to
stop
pausing
my
screen,
because
I
need
to
open
up
one
password
where
I
have
my
I
have
my
pokon
in
okay,
we're
back
to
sharing.
A
A
Case
the
no
username
use
case-
oh
I,
got
to
add
the
token
back
all
right.
My
one
password
should
be.
A
B
A
Important
cool
and
I
keep
calling
this
again
so
yeah,
that's
it's!
It's
happening
great
I
love
it.
This
is
it
generating
a
new
yeah,
it's
generating
a
new
little
thing.
Every
time,
cool,
awesome,
all
right,
I
think
that's
about
it.
So
I
think
now
we
can
actually
probably
push
this
up
but,
let's
say
maybe
add
some
tests.
Maybe
before
doing
that,
so
we
could
do
some
test
coverage
and
then
call
it
a
day
and
then
all
become
maintainers
and
hopefully
improve
upon
the
quality
of
the
project.
A
Iteratively
yeah,
there's
not
much
Behavior.
That's
changed!
That's
going
to
need
that's
going
to
need
testing
I,
just
see
it
in
generate
Branch,
name
and
prompt
branch
name.
We
don't
test
the
example
components
because
that's
just
an
example
thing
like
we
could,
but
it's
not
worth
it.
A
Is
not
the
right
answer,
but
it's
kind
of
what
I
mean
I
think
we
have
a
test
for
here.
So.
A
Yeah
I'll
I'll:
let's,
let's
trying
to
copy
the
pattern
of
the
tests
here
and
see
if
we
can
see
if
we
can
add
test
coverage
for
that
file
change,
we
have
pretty
good
test
coverage.
I
forgot
how
to
run
the
just
coverage
example,
but
it's
like
in
the
upper
90%.
So
we
try
to
try
to
keep
everything
pretty
well
unit
tested
because
we're
still
lacking
like
integration
testing,
which
we'd
really
love
to
do
of
like
have
Cyprus
or
something
like
that
running
through
some
of
the
use
cases.
A
We
have
like
end
to
end
coverage
on
the
other
end
of
the
scale
and
we
have
like
feature
spec
coverage
after
everything
gets
run
into
it.
It'd
be
nice
to
have
some
integration
coverage
on
this
project
itself,
so
that
we
have
some
more
immediate
feedback
when
it
looks
like
something
isn't
going
to
work
in
that
regard,
but
that's
fine
all
right.
A
A
Yeah,
so
when
I
call
that
mediator
command,
we
expect
it
to
have
been
called
great.
We
can
add
an
assertion
that
it's
U
mem
wise,
maybe
that's
a
wise
thing
to
do.
A
Get
config
is
minimalized,
so
I'm
going
to
do
something
like
I
expect
to
PS
code
commands
execute
command
not
to
have
been
called.
Oh,
that's,
maybe
kind
of
assumed
by
the
other
test,
but
that's
fine.
A
Mock
resolved.
A
B
A
A
Task
didn't
get
called
at
all
didn't
get
called
because
it
is.
A
One,
that's
fine,
yeah.
C
E
A
I
think
you're
totally
right,
so
there
is
I
forgot
how
low
Dash
does
this.
A
Yes,
I'm
going
to
look
up
mem
wiise
in
our
test
files,
because
I
know
I've
done
this
before.
Oh
no,
don't
tell
me
it
can't
be
that's
the
only
one.
Oh
my
goodness!
That's
disappointing!
Okay!
I
know
I've
done
this
before,
but
yeah
you're
right
there's
this
thing
called
all
right:
I'm
going
to
have
to
open
up
the
the
file
so
we're
here
in
b
code
extension
web
IDE
mediator.
Here
we
go
all
right.
This
thing
returns
a
yes.
A
Right,
yes,
brilliant!
So
if
I
was
smart,
I
could
would
probably
do
this
in
a
after
each
for
each.
You
know
clear.
A
Yeah
I,
don't
know
why
cash
I
don't
know
why
clear
would
be
optionally
not
available,
but
oh
well.
It
looks
like
it's
there
cool
great
nice,
so
we
added
that
test.
Let's
go
to
generate
Branch
name
that
should
be
fun
and.
A
A
Generate
Branch
name
main
username,
lpsum
and
I'll
copy.
This
thing.
C
A
Test
there's
some
cool
like
vs
code,
just
extensions
I,
just
don't
have
them
installed
because
they
don't
work
well
on
the
main
project
which
has
so
many
tests,
so
the
chances
are,
they
would
work
nicely
in
this
project
cool.
We
did
that
one.
Then
this
is
the
last
one.
We
let's
check
this
one
out
all
right.
Let
me
close
our
other
tabs.
Let
me
open
this
one
up.
Okay,
so
something
that's
already
happening.
A
Command
the
the
new
thing
that
we
added
here
so
let's
go
ahead.
Excuse
me:
let's
go
ahead
and
do
that
so
I'm
going
to
mock
this,
and
that
lets
me
that
lets
me
do
something
like
this.
So
when
I
I'm
getting
all
of
my
mediator
commands
in
my
before
each
I
can
do
something
like
get
config
mock
resolved
value.
I
g
do
something
like
this.
B
A
Not
going
to
like
it,
because
it's
expecting
it
to
actually
be.
A
And
so
I
don't
think
I
have
a
full
config
I
can
actually
put
in
there,
so
I'm
actually
going
to
just
cast
it
to
a
config
since
we're
just
in
testing
land.
Sometimes
we'll
just
do
partials
but
then
cast
them
to
the
full
type
so
that
Jess
doesn't
start
complaining
about
it.
A
We
could
do
something
like
this.
This
might
be
smart.
Have
my
test,
conf
and
actually
say
this-
is
partial
of
a
full
fake,
so
I'm
actually
have
some
assurance
that
I'm
doing
fer.
A
Are
you
upset,
oh
just
because
you're
not
used,
you
want
to
be
up
here.
Okay,
so
then
I'll
put
test
config
here
that
way.
I
know
if
I'm
providing
something
that's
not
actually
part
of
it.
I
can
get
some
early
feedback
on
that,
because
I
moved
it
to
its
own
variable
and
gave
it
a
type
I'll
get
early
feedback
if
I'm
doing
something.
That's
not.
A
So
here
we've
hardcoded:
this
is
the
generated
branch
that
we're
doing
so
that's
not
going
to
change,
but
what
I
think
I
want
to
add
is
just
like.
Okay
are
we
calling
generate
Branch
name
with
the
username
that
we
expect?
That's
I,
think
a
little
bit
is
what
I'm
expecting
we
would
do
so
it
passes
username
to
generate
Branch.
B
A
Expect
vs
code
or
no
expect
generary
Branch
name
to
have
been
called
with
I,
don't
know
what
you're
gonna
be
called
with.
What.
A
A
Cool
great
we're
at
all
the
test
coverage.
This
is
ready
to
go
so
I'm
going
to
commit
this
push.
It
up,
create
an
MR
I'm,
going
to
add
thanks
to
you
all,
but
then
I
think
I'm
actually
going
to
sign
it
to
one
of
you
to
merge
pretty
soon
so
that'll
be
fun.
Well,
thanks
for
all
of
your
help
and
participating
in
this
project
and
participating
in
these
sessions,
it
was
awesome
hanging
out
with
you
all
this.
D
A
Yes,
yeah
well
Al.
This
is
all
inspired
from
what
Tomas
kicked
off
with
the
vs
code
extension.
So,
if
you're
looking
for
more
type
script,
projects
to
be
maintainers
to
I,
think
there's
there's
a
ongoing
need
in
the
vs
code.
Extension
for
maintainers
as
well.
So
awesome
thanks
everybody,
and
if
you
have
a
chance
to
play,
Pikman
4
I
highly
recommended
it's
lots
of
fun.
All.