►
From YouTube: GitHub Quick Reviews
Description
Powered by Restream https://restream.io/
A
Good
morning,
api
yeah-
that's
probably
not
going
to
be
anywhere
near
as
cool
as
it
was
in
my
head,
all
right
so
welcome
to
another
special
extra
overflow
session
of
api.
Reviewing
this
week
we
have
a
two
item
agenda
and
we
hope
we
get
to
leave
early
because
some
of
us
would
like
to
do
things
other
than
be
in
meetings
all
day.
B
Okay
yeah:
can
you
just
scroll
all
the
way
to
the
bottom?
I
have
a
div
from
the
last
time
we
met,
so
if
we
want
to
start
with
this
that'll
save
time
assuming
you
know,
we,
we
completed
everything
else,
and
this
is
basically
action
since
last
time,
I'll
just
let
you
read
through
it.
B
I
can
talk
through
it,
so
jason
array-
this
was
not
discussed
last
time,
but
right
in
the
test,
it
became
apparent
that
we
wanted
to
have
a
factory
pattern
here,
because
we
treat
adjacent
element
null
value,
which
is
not
a
null
civilian
type.
So
it's
just
an
element
value
kind
of
null.
We
treat
that
adjacent
node
as
an
actual
clr
null
value,
so
I
think
the
factor
pattern
works
better,
and
that
applies
also
to
json
object
and
json
value
as
well.
B
The
other
one
I
just
mentioned
the
bullet
there
I
didn't,
I
didn't,
do
the
diff
on
it,
but
there
was
just
kind
of
a
typo
array
index
versus
index.
If
you
look
at
I
collection
versus
dictionary,
they
have
different
names
for
properties,
but
you
can
also,
if
you
want,
go
up
to
the
main.
You
don't
want
to
do
this
jeremy,
but
others
can
go
up
to
the
main
link
and
do
a
diff
on
it
as
well.
It
should
show
all
of
these
just
pick
like
the
and
under
edit
edits.
B
Just
pick
the
first
one
and
I'll
do
a
difference
since
the
last
time.
Okay,
I'm
jason
node.
I
did
remove
the
adjacent
serializer
options
from
get
value
because,
as
we
talked
about
last
time,
we're
going
to
do
very
simple
conversions
and
we're
not
going
to
do
any
kind
of
deserialized
work.
We
could
change
that
in
the
future,
but
for
now
like.
B
B
B
And
based
on
some
previous
work
on
a
different
prototype
that
we
had,
I
I
pulled
in
some
sample
code
and
I
found
that
it
was
very
convenient
to
be
able
to
pass
a
key
value
pair
directly
into
the
add
method
on
before
it
was
explicitly
implemented
through
eye
collection.
So
I
removed
that
and
that
comes
in
handy
as
well
as
a
constructor
that
takes
a
bunch
of
key
value
pairs
that
was
also
in
the
previous
prototype
and
after
looking
through
some
of
the
samples,
it
was
very
convenient
in
certain
cases.
B
Okay,
on
json
value,
I
believe
the
only
major
thing
was
I
I
added
a
private
protected
constructor.
B
I
think
I
could
probably
do
I
actually
need
that
anymore.
Since
this
is,
I
do.
Okay
and
the
biggest
thing
was
json
value
of
t
got
removed.
So
we
added
the
you
think
here.
What
did
we
do
here?
We
added.
B
So
yeah
and
that's
all
that's
basically
what
we
talked
about
last
time,
plus
a
couple
additional
things
that
came
up
since.
B
B
Well,
this
is
planning
on
going
into
preview
four,
and
you
know
we
expect
some
feedback
on
it.
If
there's
some
usability
feed
background
adding
additional
overloads,
you
know
we
can
do
that
at
that
point,
but
I
I
do
think
it's
important
to
get
into
preview
four
sooner
than
later,
or
you
know,
get
it
in
preview
form.
F
B
Yeah
jason
document
has
tripars
on
the
reader.
A
Well,
yeah:
I
think
we
have
it
on
on
jason
document
it's
only
for
when
it
takes
a
ref,
utf-8,
jason
reader
right
and
that's
that
the
reader
is
in
an
incomplete
state
is
the
only
case
that
it
returns
false.
A
A
If
it's,
I
couldn't
find
the
end
of
the
current
element,
because
the
the
reader
wasn't
or
was
in
the
in
complete
sequence
mode,
then
that's
the
only
case
that
it
returns
false.
So
I
don't
think
we
need
it
here
unless
we
care
about
that
same
state
for
the
json
reader.
G
G
E
Do
the
the
summary
of
this.
H
Okay
seems
like
david
and
saurabh
are
not
on
the
meeting,
but
I
can
go
ahead
anyways.
H
I
also
have
a
link
to
like
the
latest
design.
H
A
H
But
I
got
it
all
right:
okay,
so
I'll
go
ahead
and
start
so
what
we
chatted
about
last
time
when
we
did
the
api
review,
a
bunch
of
this
document
already
was
covered.
So
we
talked
about
the
background
in
case
that,
like
there
was
already
two
approaches
to
doing
logging
using
a
bunch
of
log
information,
log
learning
apis
that
are
in
the
first
sample
code,
the
second
snippet
you're
looking
at
uses
these
action
define
it
uses
a
another
api
in
login
called
logger
message
defined.
H
How
many
arguments
you
need
to
pass
down,
then
you
would
use
different
defined
apis
over
there
and
the
aim
for
this
feature
that
we're
looking
at
is
to
see
if
we
can
kind
of
use
source
generators
to
maybe
reduce
some
boilerplate
code
and
like
do
other
things
on
the
side
as
well
like
make
sure
that
people
use
the
right
approach
like
make
sure
people
use
the
more
performant
apis
for
logging
and,
like
some
diagnostics
as
well-
and
I
guess
so-
I'm
trying
to
skim
through
the
goal
to
see
if
I
missed
anything
in
terms
of
goals.
H
So
I
think
it's
just.
Basically
it's
just
a
little
bit
further
up
before
the
api
proposal.
Let
me
see.
I
H
So
the
source
generator
would
it
went
in
the
implementation
would
be
able
to
use
this.
These
defined
apis
under
the
hood,
but
it's
not
limited
to
doing
that.
It
could
do
other
things
as
well
and
in
fact
there
are
like
some
limitations
that
the
slogger
message
define
has,
for
example,
I'll
just
point
to
two
that
says:
you
can't
provide
dynamic
logging
with
them
like
directly
or
what's
the
other
one,
a
bunch
of
things
that
the
source
generator
would
be
able
to
do
as
a
like
a
top-up.
H
Okay.
Actually
I
remember
now
like
there's
you
can
do
at
most.
You
can
pass
down
at
most
six
arguments
in
your
message
templates
today
that
can
go
up
to
16
if
we
add
more
overlays,
but
not
more,
but
under
the
hood
with
the
source
generator
we
could,
rather
than
using
logger
message,
define
apis
use.
Some
other
implementation
to
cover
arbitrary
number
of
you
know,
parameters
when
you're
when
we're
doing
logging.
H
Okay,
so
we
talked
about
goals
as
well
and
I'll
go
with
the
api
itself.
So
in
the
the
one
that
you're,
just
showing
here,
logger
message
attribute,
would
basically
be
the
only
thing
that
would
need
to
be
added
for
this
thing
to
work,
and
I
can
go
over
the
two
constructors.
Why
do
you
need
both
and
all
of
that
or
I
can
go
through
that
by
through
samples
first,
that.
H
H
This
one
shows
the
code
gen,
so
the
first
snippet
shows
a
sample
usage
rather
okay,
so
the
first
one
says
logging
sample
3,
you
see
the
usage
of
logger
message
attribute
on
top
of
log
name,
you
put
it
on
top
of
a
partial
method
on
a
partially
implemented
class
that
that's
all
the
user
would
need
to
write
down
and
then
the
rest
would
be
auto
generated
and
this
the
code
snippet
that
was
shown
after
it
shows
what
gets
generated
yeah
right
in
the
middle
shows
what
gets
generated.
H
I
F
H
Now
so
yeah,
so
it
would
be,
it
would
be
covered
yeah,
so
we
could
either
fail
fail,
or
I
mean,
or
if
we
wanted
to
support
it
is
possible
without
needing
to
add
any
extra
apis.
Aside
from
that
log,
our
message
attribute
that
has,
and
we
can
go
over
more
samples.
The
first
sample
is
for
an
instance,
method,
yeah
and
then
the
second
one.
The
third
snippet
yeah
right
here
is
for.
H
Using
static
class,
adding
a
method
on
a
static
class,
not
much
more
added
to
that,
we
can
move
to
the
next
topic
here.
The
next
topic
here
just
mentions
that,
due
to
the
fact
that
ilogger
already
in
our
logging
framework
takes
those
bunch
of
arguments,
it
takes
log
level,
it
takes
event
id
and
all
of
that
it
takes
also
like,
let's
say
exception.
H
Therefore
there
is
this
code
sample.
I
wanted
to
show
that,
like
the
one
that
says
below
works,
the
other
one,
and
then
that
says,
but
this
warns,
I
just
wanted
to
point
out
to
the
fact
that
if
someone
wanted
to
have
exceptions
in
their
message
templates
themselves,
the
first
exception
would
actually
be
what
we
passed
down
to
our
logger
message
to
our
log.
H
Yep
yeah
the
team,
exactly
okay
and
then
moving
on
to
options.
H
The
source
generator
could
allow
us
to
have
half
pascal
casing
of
arguments,
and
I
showcased
the
example
here
where
the
logger
message
attribute
in
the
sample
has
two
arguments:
city
and
province.
And
then,
when
you
see
the
output
console,
the
city
and
profits
are
uppercase.
I
I
H
Maybe
so
the
next
example
also
shows
that,
where
the
order
of
arguments
do
not
matter
in
case
yeah,
eye
locker
even
eye
logger
goes
to
that
last.
In
this
sample,
exception
exception
two
exception
three
and
then
in
the
message
template
you
see
exception
three
and
two
exist
in
the
message
template,
but
obviously
the
first
exception,
as
I
said
earlier,
is
the
one
that
gets
supplied
by
the
ilogger.log
api,
not
by
the
message.
H
And
we
can
move
on
to
the
next
set
of
samples
here.
Another
thing
I
want
to
point
out
so
these
three-
I
don't
know
how
useful
it
the
first
one
is
that
says
log
with
custom
eventing,
but
that
already
is
possible
so
like,
if
that's
not
specified.
I
believe
the
event
name
will
be
the
name
of
the
log
method
itself,
as
opposed
to
you
providing
event
name
directly
as
custom
event.
I
H
And
yeah,
so
that's
that
and
then
the
second
one
showcasing
the
log
with
dynamic
log
level
and
when
we
checked
in
the
in
this
pr
of
this
design
dock,
there
was
a
question
about.
Why
would
we?
Why
would
someone
need
to
do
dynamic
log
level?
H
I
guess
that's
the
answer
to
why
we
would
might
want
to
have
this
and
then
the
third
example
is
using
format
specifier,
just
showing
a
sample
of
a
case
where
we're
using
format,
satisfiers
and
then
the
output
to
the
logging
you'll
see
how
it
shows.
So.
The
last
one
says
logging
example:
20
value
is
1.234
5
whatever.
H
H
I
have
that
just
a
link
to
that,
just
if
you
wanted
to
look
further
at
if
we
like
the
those
diagnostics,
but
before
going
there
I'll
see
it.
Let's
see
if
I
there's
more
to
this
document
event
id
uniqueness
checks,
the
source
generator
also
will
be
able
to
do
that.
H
Uniqueness
of
event
id
checks-
that's
not
today
that,
like
library,
authors
might
reuse
and
not
notice,
and
the
scope
for
this
is
if
some,
if,
if
some
of
these
log
methods
are
defined
in
the
same
class,
the
source
generator
would
be
able
to
kind
of
send
the
diagnostic
message.
That's
like
the
scope
of
it,
because
we
talked
about
this
last
time
when,
in
the
api
review.
H
And
one
q,
a
about
the
source
generator,
is
that
someone
asked
about:
why
are
we
enforcing
to
provide
event
ids
if
the
existing
log
methods,
logging
logging
apis,
allow
some
of
them
allow
the
users
to
just
skip
providing
one?
H
I
So
is
it
is
the
name
required
now,
since
we
are
going
to
generate
an
sorry,
a
message
for
you.
It's
required
now
right.
H
I
H
Right
right,
yeah,
so
then,
if
we
wanted
to
provide
default
messages,
then
the
question
would
be:
how
should
the
default
message
template
look
like
when
it's
not
specified,
then
I
like
earlier
in
the
design.
I
guess
we
wanted
to
have
json
blobs
generated
right.
I
put
that
out
but
like
we
could
instead
decide
to
have
a
comma
separated,
a
set
of
property.
You
know:
what's
it
called
those
parameters
comma
separate,
but
if
there's
actually
no
no
parameters
specified
either,
then
the
message
would
actually
be
empty.
L
H
Okay,
I'll
I'll
I'll
make
sure
to
explain
that
note.
It
and.
C
C
I'm
wondering
in
your
example,
like
log
name,
it's
taking
two
arguments,
it's
taking
string,
name
and
exception
exception,
but
the
message
only
includes
name.
That's
that's
valid.
H
Yeah,
if
you,
if
the
person
who's
sharing
the
screen,
if
they
scroll
up
to
the
ordering
section,
actually
just
right
here,
exactly
right
here
when
it
says
below
works,
but
this
one
warns
and
the
snippet
above
it
shows
our
existing.
I
logger
api,
so
it
says
partial
public
partial
I
so
that
takes
exception,
for
example.
H
So
if
the
logger
message
attributes
doesn't
provide
any
exception
at
all,
then
it's
passed
down
as
null,
but
if
they
do
provide
one,
the
first
one
is
actually
the
the
sentence
there
I
wrote
down
is
therefore
a
general
rule.
The
first
instance
of
I
logger
log
level
exception
are
treated
especially
in
the
log
method,
as
signature
subsequent
instances
are
treated
like
normal
arguments
to
the
message
template.
M
L
C
I
I
C
I
C
B
C
Hello
name
as
my
message
template,
but
I
didn't
have
a
string
name
argument
to
my
method.
Obviously
that
should
error,
because
where
is
name
going
to
come
from
what
about
the
inverse?
If
my
message
template
was
just
too
low,
but
I
had
a
string
name
that
should
also
error
right
that
should
yeah.
It
should.
A
Yeah,
I
don't
know
you
would
want
to
do
placeholder
counting
because
it
seems
like
it
would
be
valid
to
you
know
if
you
had
something
formatted
in
two
different
ways
using
the
the
colon
format
syntax.
So
it
feels
like
you
want
to
target
by
name,
but
maybe
I'm
overthinking
things
and
doing
it
by
count
is
just
easier.
E
H
That's
the
following
of
the
document
yep!
Well,
we
can
go
over
that
and
I
think
this
is,
if
you
scroll
a
bit
up
to
the
start
of
the
document,
to
start
this
section,
I
just
wanted
to
check
okay.
So
let's
just
go
over
it
all
this.
H
All
that
we
looked
at
so
far
was
with
the
usage
of
logger
message
attribute,
and
this
section
just
kind
of
trying
to
it's
trying
to
understand
what
we
would
need
to
do
to
be
able
to
use
the
builder
right
and
you'll
see
that
if,
let's
say,
if
some
rather
than
writing
the
logger
message
attribute,
we
could
be
writing
public
static
void,
log
name
and
then
like
using
that
string,
interpolation,
hello
name
in
the
you
know.
H
L
E
That's
the
conclusion
I
took
away
from
that
as
well.
Basically,
you're
saying
the
attribute
still
adds
a
lot
of
value
because
it's
a
very
concise
form
and
there
might
be
some
gains
we
can
have
by
using
the
builder
but
they're
not
using
experience-wise.
It's
not
equivalent
to
tell
people
to
use
the
new
form
builders,
basically.
C
Yeah,
I
said
another
way:
the
the
conclusion
was
there
are
benefits
there
are.
There
are
essentially
pros
and
cons
to
both,
and
so
you
and
and
some
of
the
cons
for
the
for
the
source
generator
are
things
that
are
deemed.
E
C
They're
not
currently
supported
with
that
approach
are
deemed
as
p
zeros
for
the
what
what
is
trying
to
be
exposed
and
then
some
of
the
things
that
it
enables
that
the
source
generator
approach
doesn't
are
nice
to
haves,
but
not
p0s,
and
so
the
decision
was
made
to
go
with
the
source,
generator
approach.
I
H
E
C
C
That
I've
been
pushing
for
with
the
source
generator
is
sorry
with
the
with
the
the
builder
provides
is,
if
you
weren't
using
it.
Let's
say
that
rather
well
I'll
tell
I'll
use
an
example
that
I've
been
using
from
asp.net.
So
asp.net
has
this
certificate
manager,
event,
source
and
in.net
five,
we
shipped
net
five
with
calls
to
the
to,
like
you
know,
certificates
found
as
the
the
event
that
was
being
called
and
it
was
being
passed.
C
An
argument
describe
certificates
method,
call
passing
in
the
certificate
collection,
which
was
doing
a
crap
ton
of
work,
and
that
call
wasn't
guarded
in
any
way
with.
One
of
these
is
logging,
enabled
things.
C
Okay,
cool
and
the
with
the
the
currently
with
the
source,
generator
approach
like
you
would.
C
You
would
probably
write
your
log
method
to
take
a
string,
certificate's
description,
and
so
the
call
site
would
still
contain
just
like
the
asp.net
example
would
contain,
describe
certificates,
method
call
and
then
the
caller
would
need
to
remember
to
add
the
guard
to
around
the
translation,
to
avoid
doing
all
that
work
if
it
wasn't
enabled
with
the
builder
approach,
that's
kind
of
built
in
so
you
could
still
write
the
code
as
sort
of
your
two-liner
and
you
know
not,
and
you
wouldn't
have
to
add
the
guard,
because
it's
implicit
to
the
bill.
C
The
builder
ends
up
doing
it
for
you,
but
what
this
but
flipping
this
around,
what
the
builder
doesn't
provide?
There
are
a
few
things
one.
The
main
thing,
I
think,
is
the
there
are
a
bunch
of
things
that
you
can,
or
there
are
a
variety
of
things
that
you
can
do
in
message
templates,
even
just
the
message:
template
syntax
and
that
was
kind
of
a
p0
to
support
it.
C
The
the
message
template
syntax
is
not
exactly
the
same
as
the
c
sharp
syntax,
and
it
allows
you
to
specify
things
like
na
the
name
of
the
whole,
which
might
be
different
from
the
thing
that
you
passed
in
at
the
hole
which
we
don't
currently
have
a
way
of
doing.
In
c
sharp
gotcha.
K
C
Sorry
and
I
only
jumped
in
there
mary,
because
I
I
know
I
was
pushing
hard
for
one,
so
I
wanted
to
you
know:
do
both
justice.
H
No
thank
you
thank
you
for
that.
I
just
wanted
to
the
screen
to
show
the
example.
While
we
were
explaining
it.
Thank
you
then
I
think
we
I
it
we
might
have
covered
everything
in
the
document.
We
talked
about
the
the
benefits
of
the
builder
and
then
as
you're.
H
So
let's
just
look
at
that,
so
obviously
shorter
and
simpler
syntax
than
the
current
approach,
current
approach
being
logger,
the
second
sample
in
this
document
guided
developer
experience
is
because
there
are
a
bunch
of
diagnostics
that
come
over
with
it
and
support
for
arbitrary
number
of
logging
parameters,
and
we
mentioned
we
even
if
we
don't
support
that.
H
It's
fine
too,
but
I
mean
as
part
of
this,
I
I
wanted
to
link
the
another
api
review
that
just
tries
to
add
more
overloads,
to
define
up
to
16
rather
than
six,
and
that
will
I'll
link
it
right
after
this,
but
dynamic
log
level
we
already
talked
about
and
then
pascal
casing.
E
H
H
It
is
actually-
and
I
was
I
think
I
don't
know
if
eric
sign
john
is
on
the
meeting,
but
either
to
I
think
he
mentioned.
We
wanted
to
add
this
to
as
a
package.
I
I
either
as
a
package
or
just
add
it
to
the
framework.
N
Right
so
for
the
first
for
the
first
go,
it'll
go
into
the
existing
extensions
logging
package
and
then
we're
determining
where
these
source
generators
which
extend
the
framework
ship,
whether
it
be
in
the
sdk
or
in
targeting
pack.
So
if
it's
the
sdk,
then
it
would
go
into
the
you
know
the
net
sdk
or
potentially
the
web
sdk
it's
in
the
targeting
pack.
N
It
would
go
into
the
asp.net
targeting
pack,
since
that
includes
this
component,
and
even
though
we
did
that
it
would,
it
would
still
it
would
still
sim
ship
in
the
nougat
package,
just
like
okay,
think
of
it,
as
just
like
para,
very
much.
Parallel
to
the
way
we
ship
the
reference
assemblies.
N
So
I
don't
think
we
need
to.
I
mean,
there's
the
option
of
treating
it
as
a
separately.
Addressable
thing
like
the
source.
Generator
itself
is
standalone,
but
I
don't
think
that
that's
very
meaningful
and
it
and
it
creates
other
complications
around
like
having
to
deal
with
the
generator
being
present,
but
not
the
api.
You
need,
and
vice
versa,.
N
Yes,
yes,
and
that's
that's
for
the
most
part,
the
case
with
all
the
things
that,
with
the
the
ones
that
we're
planning
to
ship.
However,
we
still
want
to
iron
out
if
possible,
we'd
love
it
if
we
could
come
up
with
a
a
a
way
to
provide
the
attribute
and
that
it
was
impossible
to
have
this
generator
without
the
type
that
would
that
would
be
nice,
but
it
at
the
moment.
We
don't
really
have
a
good
way
to
do
that.
N
D
N
Yeah
yeah
yeah
you're
right,
so
this
does
so.
This
is
a
case
where,
where,
without
the
yeah,
without
the
generator,
your
your
api
does
nothing
yeah.
A
A
I
I
have
some
spicy
hot.
Thank
you
from
this
whole
thing,
so
a
couple
of
things
that
are
in
the
same
vein
as
what
eric
was
saying.
Shipping
in
the
package,
I
think,
is
a
must,
because
this
thing
is
decoupled
from
any
framework.
Putting
it
in
both
is
fine
as
long
as
we
know
how
that
works.
I
The
other
thing
that
is
a
wrinkle
is
the
whole
idea
of
targeting
down
level
versions
or
frameworks.
This
came
up
discussing
with
ic3
on
teams.
They
want
to
use
this
since
they
built
it.
I
don't
know
what
it
would
mean
or
if
we
even
want
to
support
the
source
generator
working
for
older
levels
of
the.
I
Library,
my
default
answer
is
like
no
like.
You
need
to
have
at
least
a
6-0
package
for
logging,
but
that
leaves
them
in
a
tough
spot
where
they,
they
basically
had
ideas
to
be
able
to
backfill
the
types
that
weren't
there
by
getting
them
at
runtime,
but
it
kind
of
it
kind
of
goes
to
the
point
of
today.
I
If
you're
trying
to
generate
newer
c-sharp
code
that
depended
on
apis
that
weren't
in
the
framework
you
were
targeting,
you
can
define
them
yourself,
so
you
can
use
like
record
syntax
and
see
in
older
libraries
or
net
sign
libraries
by
defining
some
structs.
The
question
is:
do
we
want
to
enable
that
here
as
well.
J
E
N
M
N
Functions
is
a
good
example
where
they
don't
want
to
take
the
new
packages,
the
new
runtime
assemblies,
because
it
puts
them
in
a
different
servicing
band
or
they
need
to
unify
the
types
in
the
case
of
azure
functions.
They
need
to
unify
the
types
with
the
host,
and
so
they
wouldn't
even
take
the
new
package
version.
So
if
we
wanted
to
enable
that
we
would
have
to
provide
a
a
way
to
ship
the
source
generator
on
its
own
to
run
with
an
older
library
right
and.
I
N
Don't
yeah,
I
would
I
don't
wanna.
I
don't
want
to
try
start
going.
That
way.
I
mean,
I
would
say
if
we
needed
to
do
certain
things
inside
the
inside
the
build
of
the
new
libraries
to
make
it
easier
to
have
a
minimal
reference.
N
Yeah,
like
you
know,
maybe
it's
just
extensions
logging
and
extension,
like
maybe
one
single
package
reference
and.
B
I
I
N
I
I
E
I
mean,
I
would
generally
say,
like
fundamental
libraries
like
this
one.
I
think
it's
fun
like
we
already
designed
it
for
immutable,
the
metadata
reader
and
yeah,
exactly
in
cases
where
this
breaks,
but
I
mean,
what's
the
worst
that
can
happen
for
the
customer
to
tell
them.
Oh
you're
running
a
net
crap,
3-1
and
you're
in
a
weird
configuration
get
to.net
6.
I
mean
yeah.
E
Okay,
we
can
probably
ship
a
new
version
of
the
package
if
we
broke
something
spectacular,
but
they
lifted
themselves
in
this
appropriate
combo
yeah,
I
would
say
like.
I
would
rather
not
support
that
because
the
problem
becomes
if
we
start
shipping
the
generators
kind
of
like,
on
top
of
this
yeah,
now
you're,
creating
this
other
multi-dimensional
puzzle
where,
as
long
as
we
don't
need
new
api
surface
to
support
the
generator,
it's
fine.
But
if
you
have
a
method
or
something,
then
it's
just
not
worth
it.
In
my
opinion,
got
it.
I
E
A
A
E
E
E
H
Yeah,
that's
what
I
was
thinking
might
change
this.
This
is
this
is
the
the
the
proposal
is
for
when
messages
optional.
A
C
H
I
haven't
tried
it
out
yet,
but
without
having
tried
it,
I
think
that's
what
I
was
thinking,
but
if
in
the
yeah,
since
this
is
preview,
would
I
be,
would
we
be
able
to
change
it?
Yes,
okay,.
I
C
I
H
Because
the
second
constructor
is
for,
when
it's
not
specified
it
will,
we
will
use
dynamic.
We,
like
the
log
method,
will
take
yes.
L
I
A
One
option
just
talking
things
out
is
you
don't
have
any
constructor
parameters
and
then
the
generator
just
yells
at
people
arbitrarily
of
I'm
sorry,
you
need
to
give
me
an
event
id
until
it
you
know
supports
not
doing
that,
but.
I
M
To
add
to
add
more
new
c-sharp
features
into
this
into
this
discussion
and
to
be
clear,
I'm
not
100
certain
that
this
is
going
to
make
10..
I
really
wanted
to
make
10,
but
I
you
know
I
can't
be
certain.
Is
that
we're
going
to
be
adding
the
ability
to
say
that
properties
are
required
to
be
set,
and
so
at
that
point
I
would
expect
that
you
could
potentially
expose
a
parameter
list.
Constructor
and
mark
a
property
is
required
and
then
the
compiler
just
won't.
C
M
That
but
but
like
I,
I
can't
I
don't
know
if
we
should
be
designing
this,
like
assuming
that
that's
going
to
happen,
because
I
can't
guarantee
it.
A
C
E
E
A
One
position
instead
of
two
and
and
I
can
definitely
see
people
saying
that,
like
the
event
name
and
event
id
should
be
the
things
on
the
left,
so
they're
what
you
quickly
see
in
the
code
and
the
message
is
like
yeah,
that's
that's
a
detail
and
so
that
they
want
the
more
like
left,
compact
information,
and
if
it's
all
just
set
the
properties,
you
can
order
them
any
way.
You
want.
E
I
mean
but
write
that
syntax
right,
because
once
you
put
in
the
yeah
like
property
names,
it's
getting
it's
getting
quite
verbose
right.
So
like
it's
like
your
argument
of
making
it
more
left
like
is
not
sure
that
holds
necessarily.
A
I
mean,
I
think
it's
the
most
given
that
you're
a
generator
yeah
and
you
may
end
up
with
in
the
things
of
like
the
level,
is
required
if
it
wasn't
specified
in
the
signature,
it's
probably
the
most
flexible.
If
you
come
up
with
some
complicated
way
of
doing
default
messages
in
the
future,
even
that
would
go
back
to
being
optional
and
yeah.
I
would
probably
just
do
everything
as
get
set
and
then
have
the
generator
fail.
D
I
E
F
A
A
E
A
D
D
C
D
A
The
setter,
then,
technically,
the
description
of
the
thing
is
after
the
constructor,
this
message,
property
is
null,
so
that's
fair,
really
no
one's
gonna
in
we
don't
expect
people
to
really
instantiate
the
attribute
and
look
at
it.
I
at
least
I
assume
that
the
generator
is
going
to
use
the
the
compiler
attribute,
dom
view
instead
of
the
like
evaluate
code
and
see
what
happens
so.
The.
C
M
M
Sure,
but
I
don't
know
the
I
guess,
the
other
thing
is
the
you
know
again.
Theoretically,
we
could
make
this
message
not
null
and
not
have
any
warnings.
If
we
have,
I
mean
we
can.
A
Well,
all
right,
so
I
there
something
somewhere
said
something
something
option
pascal
case,
something
something
is
that
a
global
setting
for
the
generator
is
that
supposed
to
be
on
the
per
message.
A
A
I
mean
we
can
always
add
the
support
later,
but
I'm
just
the
nullable
boolean
of
pascal
case
identifiers
or
whatever.
We
want
to
call
it.
If
you
didn't
specify
it
it'd
be
use
the
global
setting
and
if
you
did,
then
it
would
be
use
the
local
setting.
But
if
you
don't
have
a
use
case,
then
maybe
it's
not
important.
H
I
H
A
A
H
L
H
A
Remember
I
did
have
a
a
question
so
being
the
person
who
wrote
the
appendix
that
talks
about
naming
styles
and
that
you
should
use
an
underscore,
for
instance,
fields
we're
assuming
both
a
name
and
a
style
for
this
and
I'm
or
of
the
logger
field
for
discovery.
I'm
fine
with
that,
but
should
the
attribute
support?
What
is
the
name
of
my
logger,
or
do
you
want
to
type
level?
H
A
H
It's
define,
okay,
I
think
I
forgot
to
mention
that
it's.
It
was
one
of
the
feedbacks
last
time
it's
not
discovered
by
name
it's
discovered
by
there
has
to
be
one
field.
If
there's
two,
it
will
not
like
it.
If
there's
zero,
it
will
not
like
it.
So,
okay.
H
D
H
Yeah,
that's
not
that's!
That's.
A
D
A
A
H
I
think
maybe
one
thing
would
be
if
the
bass
like,
if
were
we
talking
about
across
assembly
references
as
well
last
week
and
decided
to
make
it
simpler,
so
that
the
eye
locker
field
would
be
only
discoverable.
That's
that
would
be
one
of
the
reasons
why
we
want
it
to
be
discoverable
only
as
a
field
for
this
classes
itself.
A
A
A
H
H
A
H
H
Yeah,
okay,
the
fourth
one
you
can
skip
it's
very
and
just
let's
get
the
fourth
one.
H
A
D
A
H
A
A
H
M
A
Right,
yeah
yeah,
so
this
is
the
I
found
a
body
before
I
generated
it,
yes,
which
is
probably
better
than
you
just
generated,
then
the
compile
fails
because
it
found
two
bodies
so
because
it
points
out
where
the
error
like
what
you
did
wrong,
instead
of
what
bad
state
you're
in
so
yeah,
it's
reasonable.
H
It's
already
like
you
can
already
provide
different
types.
I
I
don't
know
like,
maybe
maybe
there's
a
restriction.
A
C
A
Yeah
and
I
mean
I
guess
you
could
just
make
it
object
in
that
case,
but
but
then
you
can't
call
members
off
of
it.
C
M
C
Right
but
again,
I
think
the
reason
oh
you're
saying
that
one
also
needs
to
be
an
error.
M
C
A
Yeah
I
mean
so
I
don't
know
what
the
you
know.
I
am
totally
a
number
static
interface
for
math
is
going
to
look
like,
but
without
with
the
current
definition,
where
we
don't
have
those.
I
can
certainly
see
somebody
wanting
to
use
the
same
id
for
I
received
an
invalid
value,
whether
it
be
an
end
or
a
long
or
a
unit
or
a
double
or
a
float
of
like
well,
especially
if
I'm
using
json
they're
all
number
in
the
end.
So
I
just
I
want
them
all
to
be
the
same.
A
H
So
this
is
this
is,
what's
the
word
opinionated,
so
if
someone
actually
is
logging
with
info
level,
would
it
make
sense
for
them
to
actually
have
the
name
info
in
their
message
template
as
well?
Maybe
they
made
a
mistake.
So
that's
why
the
warning
is
popping
up,
but
it
we
it's
not
that
important
either.
A
A
You
could
turn
it
off
it
to
me.
It
feels
unnecessary
if
it's,
if
it's
a
thing
that
you
think
people
have
gotten
wrong
before
and
they
seem
confused
as
to
how
to
fix
it,
then
maybe
it's
worthwhile,
but
I
think.
L
A
A
A
Yeah,
so
12
definitely
feels
weird
to
me
because,
if
you're
doing
something
like
logging,
while
you're
rejecting
a
certificate
and
you're
rejecting
because
and
here's
the
the
validity
date
that
I'm
rejecting
it
because
of
you're
going
to
get
the
warning
of
you
put
in
a
date
time,
that's
probably
not
right.
H
Q
A
A
A
So
again,
I
can
see
where
it's
useful,
but
somebody
looking
at
their
log
if
they
were
logging
now-
and
you
didn't-
have
an
analyzer
specifically
looking
for
that
call
pattern,
because
it's
about
the
caller,
not
the
not
the
message
they'd
be
like.
Oh,
I
see
that
it.
You
know
1002
21,
we
logged
the
time
is
1002
20..
Why
do
we
have
this
timestamp
twice?
Oh
because
we
put
it
as
part
of
the
message
and
it's
part
of
the
infrastructure.
A
M
Yeah,
I
was
just
going
to
say
a
lot
of
the
same
thing
of
that.
This
feels
like
a
particularly
noisy,
noisy
warning.
That
is
very
likely
to
be
wrong,
and
what's
the
worst
that
happens,
if
you
have
the
date
twice
in
the
log,
no.
A
D
H
H
Q
H
D
D
A
H
Yes,
but
potentially
this
could
be
supported,
I
don't
like.
Is
it
ex?
Do
we
want
this
to
be
so?
What
if
we
have
a
message
template,
but
we
want
to
still
add
like
attach
some
key
value
pairs
to
the
log
itself
as
a
state.
A
I
mean
it
really
comes
down
to
if
you
think
it's
going
to
be
rare,
but
it's
a
useful
diagnostic,
then
to
me
a
warning
makes
perfect
sense
and
you'll
suppress
it
in
the
like
three
cases
in
your
lifetime
that
you
run
or
that
you
wanted
to
do
that.
It's
not
part
of
the
message,
but
it
is
part
of
the
payload.
H
Maybe
it
will
attach
it
as
key
value
pairs
to
the
downwards
structure
of
log
messages.
So
if
you
do
json
console
output,
look
at
the
json
console
output
yeah.
Thank
you.
One
of
those
examples
is
lower
down
that
had
json.
Maybe
it
will
have
city
province
and
then
country
as
well,
even
though
it's
not
in
the
message
template
I'll
confirm,
but
that's.
L
H
H
L
H
D
D
A
Yeah,
if
you
don't
currently
do
anything
with
it,
then
my
guess
is:
you
would
want
in
the
future
a
parameter
attribute.
That
says
please
shove
this
in
the
context
bucket,
even
though
it's
not
in
the
message
and
then
if
they
had
that
on
a
parameter,
you
would
consider
it
used
and
then
wouldn't
issue
the
warning.
So
I
think
the
warning.
L
A
You
have
the
this
shows
up
in
the
structured
payload,
but
not
in
the
message.
If
that's
not
a
feature
you
already
have,
then
presumably
you
want
someone
you
would.
I
would
expect
an
attribute
that
you
would
have
to
put
on
the
parameter
that
says
do
that
thing
and
it
would
basically
be
like
in
c
just
putting
it
in
like
void
the
thing
of
yes,
I
had
a
parameter.
You
thought
I
was
unused,
but
it's
it's.
I
still
need
it
in
the
signature.
Please
leave
it
there.
So
I
think
that
warning.
A
D
A
R
A
Okay
right
so
yeah,
it's
the!
If
you
change
that
after
six,
then
you
have
to
decide.
Does
somebody
need
to
opt
into
it
or
do
you
just
assume,
that's
what
they
meant
or
whatever
and
but
right
now
your
your
current
suggestion
is.
It
will
just
ignore
it
because
it
wasn't
part
of
the
template
which
is
totally
legit.
A
H
Understood
16,
we
already
seen
it
was
the
method
body
it's
just.
It
was
next
to.
H
A
Right
this
is
the
you
didn't,
tell
me
the
log
level
and
you
didn't
take
it
as
a
parameter.
So
I
don't
know
how
I'm
supposed
to
make
that
up.
So
tell
me
yes,
yep.
H
H
D
A
template
for
logger
people
do
this.
H
A
I
have
support
for
three
magic,
the
first
one
of
these
that
I
see
is
magic,
and
so
it
it
makes
sense
with
the
other
one.
If
you
took
two
loggers
it's
either
that
is
going
to
be
an
error.
It'll
just
call
to
string
on
the
second
one,
but
I
think
this
one
is
the.
I
was
already
a
special
parameter.
You
probably
didn't
mean
to
do
what
you
did,
but
I
don't
think
it
should
be
an
error.
It
should
be
a
warning.
A
D
H
H
I
wonder
if
that's
why
the
number
18
is
also
error,
because
we
couldn't
continue,
but.
H
A
H
H
I
think
that
the
feedback
from
the
messages-
what
I
have
so
far
is
add
one
for
log
level
and
then
also
for
18,
make
a
warning
rather
than
error,
and
we
talked
about
15.
We
said
that's
okay,
but
like
there
were
the
info
ones
that
the
date
time
you
guys
said,
drop
it
yep.
H
A
I
mean
emo
you're,
the
one
in
charge
of
names.
I
thought
I
thought
cislib
meant
in
the
shared.
E
D
M
E
It's
basically
like
logically,
the
way
to
think
about
this
is
that
this
is
basically
platform
level
stuff.
So
whether
it's
in
the
runtime
report
not
doesn't
really
matter,
it's
more
like
our
team
versus
anybody
else
who
happens
to
work
at
microsoft
right.
So
we
don't
want
the
azure
team
to
do
it,
for
example,
because
the
whole
point
is
to
have
one
namespace,
you
know,
which
is
the
prefix
and
basically
say
only
we
get
to
add
entries
here,
because
we
are
the
ones
who
make
sure
that
the
numbers
are
unique.
E
A
Personally,
I
think
the
more
sane
approach,
just
because
it's
easier
to
reconcile
things
is
because
we
have
the
constants
file
in
our
repo
is
if
it's
in
a
different
repo,
you
want
a
different
prefix,
so
we
don't
end
up
with
non-atomic
commits.
A
E
Yeah
so
like
the
reason
I
care
less
about
us,
is
that
because
we
all
ship
as
part
of
the
product
so
like
I,
I
have
confidence
that
we
will
find
duplicates
it's
more
about
third
parties.
Realistically,
that's
really
the
thing
I
try
to
avoid,
and
so
with
like.
Originally,
that
was
like
a
name
that
was
like
libraries
or
libs
or
or
or
net
library,
or
something
that
you
know
a
third
party
might
realistically
say.
E
Oh
I'm
supposed
to
use
that
and
that's
how
we
ended
up
with
syslip,
which
kind
of
indicates
that
okay,
I'm
not
a
system
library,
so
I'm
not
getting
to
use
that,
but
so
yeah,
if
you
want
to
say
wpf,
has
to
invent
their
own
prefix.
That's
also
fine,
but
they
would
have
to
do
something
similar
to
us
and
make
it
very
clear
that
it's
their
prefix,
so
wpf
as
a
prefix,
for
example,
would
be
pretty
clear.
A
A
H
Why
is
there
two
of
them?
There
is
a
skip,
enable
check
which
in
it,
when
it,
by
default
at
first,
it
didn't
exist,
like
the
the
reason
for
having
the
skip.
Enable
check
is,
if
basically,
it
just
drops
one
enable
check
in
the
implementation.
L
L
I
believe
the
optics
generics
doesn't
have
it
as
a
default
parameter.
So.
H
A
H
A
C
I
have
a
more
general
question,
which
is
this
exists
to
eliminate,
and
if
that
that,
if
shows
up
in
profiles
like
it,
that's
a
visible
amount
of
work
that
we
end
up.
Doing
that's
enough
to
add
checks
for
it
to
eliminate
it.
H
C
A
A
A
C
Honestly,
I'm
less
concerned
with
the
il
and
more
concerned
with
the
assembly
code.
That's
going
to
be
generated
for
all
of
these
things
when
you
use
them
every
every
combination
of
generic
arguments.
If
any
one
of
them
is
a
value
type,
is
going
to
result
in
generic
specialization
for
not
only
these,
but
all
of
the
methods
that
take
this
as
a
t.
C
A
Will
take
the
class
that
represents
system.action
and
it
will
see,
oh
because
you
now
have
an
int
in
the
fourth
argument
and
you've
never
had
an
int
in
the
fourth
argument.
I
have
to
go
take
this
this
15
argument
version
of
action
and
make
a
copy
because,
because
in
means,
there's
a
different
register
size
that
happens
now.
C
And
I
think
the
15
argument
version
of
this
is
also
instantiating.
The
15
argument,
version
of
log
values
and
then
that
15
argument
version
of
log
values
is
being
passed
as
a
t
state
to
some
other
method,
and
so
all
of
those
code
paths
end
up
being
generic
specialization
for
the
jit
to
go
and
generate.
E
C
O
The
the
boxing
is
likely
also
not
going
to
be
a
concern
when
you
compare
it
to
anything.
Over
four
arguments
is
going
to
have
to
be
passed
by
shadow
copy,
anyways,
and
so
most
of
your
arguments,
once
you
get
over,
four,
are
going
to
start
be
like
being
really
inefficient.
Just
because
you
you've
got
to
shadow
copy
them
and
then
access
them
via
in
direction
anytime.
You
want
to
deal
with
them,
so
there's
going
to
be
more
stack,
spilling
and
other
things
and.
E
To
prove
it
for
some
reasonable
number
for
now
only
that's
like
six,
some
number.
That
is
more
than
three
let's
say,
because
three
seems
you
know
three,
four
five
I
can
see
and
let
me
just
say
we
have
maybe
one
that
just
takes
object
array
and
the
generator
just
says.
If
you
have
more
than
that,
I
just
call
that
that.
H
Then
I
mean
obviously
with
someone
without
the
generator:
it's
not
possible,
they
can't
use
obviously
any
of
the
defining
case,
but
then
they
would
have
to
define
okay,
the
the
alternative
would
be
to
define
a
bunch
of
let's
say,
structs
that
implement.
I
key
value
pair
of
well,
like
I
read
only
list
of
key
value
pair
from
string
to
objects
and,
let's
say
for
7
8
9
10
all
of
these
and
yeah.
A
Because
because
maybe
it's
the
the
final
one
should
just
be
action
of
logger,
I
innumerable
of
key
value
pair
of
string
to
object
and
then
whatever
stuff
comes
after
it.
M
H
H
Then
because
the
code
generator-
if,
if
we
don't
add
these
bunch,
we'd
have
to
generate
different
structs
every
time
for
different.
L
O
It
almost
seems
to
me
like
if
there
was
a
way
to
basically
build
the
log
structure
message
iteratively
like
like
with
console.writeline
or
con
versus
console.right.
You
have
the
option
to
iteratively,
build
up
your
line
and
several
other
loggers
support
that
as
well.
In
which
case
you
wouldn't
need
16,
you
could
just
break
it
up
into
several
efficient
calls.
A
H
A
L
Sure,
for
the
sake
of
completeness,
I
should
mention
that
there's
something
called
logging
scopes,
which
is
another
way
to
like
add
key
value
pairs
to
a
login
call
site.
It's
just
that
they
won't
be
part
of
the
reference
message
template.
So
there
does
exist,
a
mechanism
to
add
more
key
value
pairs,
fair
enough.
A
Steve
emo
somebody
want
to
second
that,
for
me
sounds
fun
cool,
I'm
just
making
sure
I'm
not
making
unilateral
decisions
here.
Yeah
your
unilateral
decisions
are
pretty
good
all
right.
Let's.
C
A
F
C
A
A
A
A
A
In
my
head
and
wrong
in
my
mouth
yeah
so
but
anyway,
the
predicate
predicate
of
bull
and
funk
of
bull
bull
are
not
interchangeable.
A
E
Yeah,
like
let's
do
that,
I
mean
like
I,
I
read
the
first
one
partially,
because
it's
quite
a
quite
an
essay
that
you
put
together
there.
Do
you
think
we
can
do
both
of
them
in
one
meeting
like
or
there
or
the
second
part
as
big
as
the
first
one.
C
The
second
part
is
requires
the
context
of
the
first
and
is
largely
than
just
looking
at.
Do
we
care
about
this
scenario
and
if
so,
the
apis
are
pretty
much
dictated
for
us
other
than
names.
A
C
E
A
Yeah,
I
think
emo
said
after
emo,
your
microphone
has
jumped
into
a
cave
again.
So
I'm
so
sorry.
E
A
C
E
C
E
Okay,
all
right,
then
good
night,
everybody
have
a
good
weekend.